Leo Dion (Host): welcome to another episode of empower apps. I'm your host, Leo Dion. Today I'm joined by Casey Liss. Casey, thank you so much for coming on the show. Casey Liss (Guest): Thank you for having me. I'm very excited. Leo Dion (Host): I'll let you go ahead and start by introducing yourself. Casey Liss (Guest): Yeah. So like, like you said, my name is Casey Liss. I'm a podcaster, an app developer, occasionally a writer.
You might know me most recently from my new app Callsheet, which is, I think, kind of what we're going to be talking about here today. Think about it as a movie lookup app that actually respects you as a user. You might know me from My podcast with my good friends Mark Arment and John Syracusa, the Accidental Tech Podcast, or perhaps my other podcast with Mike Hurley Analog over at RelayFM. That's kind of my shtick, but I think we're here probably to talk about Callsheet, huh?
Leo Dion (Host): Yeah. So I want to, well, hopefully we won't get into reviews of products because I got all my new stuff this week. So I'll try to avoid gloating. I'll try to avoid gloating that that's for your other show. But today we'll talk about Callsheet. So I, I kind of had thought about having you on when you had peak of you and masquerade. But then I, When I heard about Callsheet, I was like, okay, this looks awesome. I tried it out. It's fantastic.
What, what do you think are some like lessons you learned from the other two apps? That you were able to build upon when it comes to Callsheet? Casey Liss (Guest): Yeah, I think that's a great question. So the other apps the first one that, that I had released was an app called Peek A View, and the very, very brief nickel tour of that is my, at the time my daughter was two, she's now five, and we had just been to Disney World, and she really liked flipping through pictures on our phones.
Which in and of itself is fine, but I was deeply worried that she was going to find the delete button and then start deleting all the pictures on our phones. And so it occurred to me, well, I'm a developer, I know how to fix this problem. So Peek A View is basically a read only photo gallery and you can limit what photos you're looking at.
So maybe if you had an album of like comps you wanted to show to a client, you could hand the client your phone, you know, engage guided access, which is an Apple thing. And then the only thing they can do is look at these, you know, five or ten pictures or what have you. And then Masquerade.
Kind of similar thing once my kids got to be about three or four years old and they were no longer squishes and actual people I got more reluctant about putting their faces, particularly on the internet, like it's one thing to see a random toddler body, but you know, it's, it's a little different to see their faces and I didn't want to be in a situation where they're looking back on pictures I posted 10 years ago. It's like, you know, early teenagers and they're saying, why did you do that dad?
Like, what's wrong with you? Now, maybe that'll still happen, and they'll ask, why did you put emoji over our faces? But anyway, so the point of, the point of Masquerade is it uses Apple's, you know, machine learning APIs to just quickly let you drop an emoji on all the faces in a photograph. And, and you can change which emoji it is, and so on and so forth. So that's the nickel tour of those two apps. And to answer your question, You know, what did I learn from them?
Some of the code actually was pulled directly from each of them. Like a lot of my app store related implementation was it was at least heavily ripped from and then built upon from Masquerade. The settings in app settings, you know, has evolved over my apps and gotten a little less ugly and a little more robust with each time. But generally, I think just more experience with Swift UI. Not as much Swift particularly, but Swift UI specifically.
I wouldn't say I'm the world's best Swift UI developer, but I've gotten to the point that I'm, I can get most things done with only mild amounts of hair pulling and googling and so on and so forth. So, I I, you gotta walk before you can run, and, and, I don't know if you would consider Callsheet me running or not in this already abused metaphor, but I like to think Callsheet looks pretty decent.
And, you know, I didn't get too out of, Out of bounds on, you know, doing weird SwiftUI things in Callsheet and, and if it wasn't for those other two apps, I think I would have been in the deep end and it wouldn't look near as good as, as it has ended up looking. Leo Dion (Host): Were the other two apps SwiftUI? Casey Liss (Guest): Mm hmm. Yeah. Oh, my, well, peak of view was most, I know it was like half and half. It was story. God, I haven't looked at that code in a while.
I think it was like half storyboards, half SwiftUI, if memory serves, because this was, this was roughly 20, 19 that I had written in 2019, 2020, I think, something like that. And so it was a bit of, a bit of UIKit and a bit of SwiftUI. Masquerade is almost entirely SwiftUI. And Callsheet, I don't think there's any UIKit. There was briefly during the beta period, and I don't think there's any UIKit left in it. Or if there is, it's so little, it's effectively none.
Leo Dion (Host): Are you, are you still actively developing those apps? Casey Liss (Guest): I'm telling myself I am. Whether or not I actually am is up for grabs. So there's a couple of like minor bugs in each app that I, that I need to look at and should fix. And probably, if I'm honest with myself, should have fixed already. But candidly, you know, as a single app developer, as an indie app developer, I got to allocate my time the most appropriate way and the most appropriate way.
And I would think generally to advocate to allocate my time is to put it where the money is and the money is not in masquerade and it is not in peak of view. It's currently in Callsheet. And so. If I'm going to spend some time, I'm probably going to be spending it on Callsheet, especially since I feel like, and I don't know, it makes me feel really gross to kind of pat myself on the back, but I feel like I have a kind of good thing going.
Like, Callsheet is not perfect, but I think it's pretty good, and it's, I think, far and away the best of my three apps, and so I want to keep that momentum going both for me and for my users and for, you know, them. Any press that might have an eye on it or something like that. And so I want to keep that ball rolling.
And it's hard to do that if I'm context switching all the time to these other apps that, while I've certainly made money from them, it, it, it, it's not an, it, it wasn't a ton of money. And, I mean, I haven't made a ton of money from CallShe, but I've made orders of magnitude more than I have from the other two. So, you know, you got to do what you got to do when there's only one of you.
Leo Dion (Host): Why, why do you think it's your best app and I, I mean, both Best app as far as like the craft of it, but also Best app as far as the money coming in and press attention and everything else. What do you think is, I mean, I can think of a few reasons why Callsheet would but like, what do you think is the secret to making call Sheep more successful than the other ones? Casey Liss (Guest): Yeah, it's a great question. I think it's a few things. Peak of view.
I think while a good app is an extremely niche user base, like someone who is often handing their phone to another person that they don't trust either implicitly or explicitly that that is something that happens fairly frequently, but maybe not enough that you're really going to find an app to, to solve that problem. With, with masquerade, I think that actually. Maybe it's because I'm an old, but I think that could have a lot more legs than it ended up having.
If you're someone who is concerned about privacy and that sort of thing, and I'm 41, I, my early years are pre internet, and you know, the high school ish time was when the internet was really starting to become a real and proper thing, and by the time I went to college in the early 2000s, you know, the internet was for real but that being said You know, photographs on the Internet.
That was still not as much of a thing that that makes me sound older than I mean, but like social media, the way we think of it today wasn't a thing like Facebook came out right after I graduated college. And so sharing pictures on the Internet wasn't as common. And and so for me, having not grown up with my with my likeness across the Internet. Always. It still feels a little like skeevy and weird to have photos.
Everywhere, and to put somebody else's likeness on the internet without their permission, that seems a little weird, but I think that I'm part of a dying breed, and so I wonder if Masquerade is a relic of a lost time. Like, I do think it's a good app, but I don't know if it's a necessary app. Now, contrast that with Callsheet. So, Callsheet...
The, the guiding idea behind it was, I am So sick and tired of the Internet Movie Database app, the IMDB app, that's constantly nagging you to log in, it's constantly trying to send you advertisements, or show you advertisements, it's constantly auto playing videos, like, everything about that experience is just trash, in my personal opinion, and I'm sure the people who work on it are very bright and very good, but when you have this massive corporate
overlord of Amazon, you have to, you know, do what they tell you to do, and so, Go Leo Dion (Host): own owns Casey Liss (Guest): Mm hmm. Mm hmm. Yeah, as far as I know. Yeah, I'm pretty Leo Dion (Host): Oh, wow. Okay, Casey Liss (Guest): yep. And so, you know, when Amazon wants to make money off of it, you got to do what Amazon wants you to do. And so, you know, when I sat down to write what became Callsheet, I just wanted something like IMDB that wasn't Awful to use.
And I think there's a lot of other people that use IMDb begrudgingly. And now that there is any alternative, that's like a cold glass of water in a very hot place. You know what I mean? And so I think that there's a pretty big audience of people who have also found this pain and would love to fix it. Now the things become a little squishy though when you have, there's people who have this pain. But they may not want to spend money on fixing it, and that's where it becomes a little tough, right?
And that's where if I'm doing my job right, then I need to do everything in my power to make sure that I am ha I have enough features and enough good things to justify the cost. And, and I think I do. I, I really think the app is competitively priced, even when competing with free. But it's a tough sell. I mean, anyth from free to anything is hard. And that, that's the that's the big task for Callsheet.
Leo Dion (Host): Yeah, I'm about, I'm about the same age as you and I have six kids Casey Liss (Guest): Six! Oh my word, oh my word. My wife is one of five and I find that to be utterly bananas. I can't imagine six. Leo Dion (Host): But like, yeah, four of them are adopted. So privacy is definitely a concern. Yeah. So like with, with maker or Casey Liss (Guest): Yeah, yeah. Leo Dion (Host): yeah. masquerade. It's like, Yeah, that makes total sense.
And yeah, we had Josh Holtz on to talk about privacy. Peekaboo? What was it? Playpen. Playpen was his app. Yeah, yeah, yeah. And it's the same idea where you use guided access. So like Peekaboo is like, yeah, I love that idea of... I wish there were more apps that took advantage of guided access. But... Yeah, I mean, there's a lot of reasons why I could see why call she is successful app. And like, certainly IMDb makes it as, as easy as possible for you to, to build an app that's useful.
Do you want to like explain like, what were some of the like issues with IMDb and what you were trying, why you were trying to make an app that like, I think you, you put it as like, that's actually nice to the user and like a convenient, Yeah, Casey Liss (Guest): Yeah, so for me it was both, it started in a kind of negative way, I guess, which is just, I don't want to see a prompt to log in, I don't want to be shown ads, I don't want to
be shown autoplaying video, I just want to be able to get in and get out and look up what I want to look up.
But then once I started building Callsheet, it occurred to me, You know, there's ways I can actually make this kind of delightful, and some of the things that I, that I started working on were things like, you know, being able to hide spoilers and, you know, I've told the story a couple of times, but it's, it's such a pivotal moment for me years ago, I think it was late 2019, I was watching the, watching the HBO miniseries Watchmen, which is phenomenal
if you haven't seen it, couldn't, couldn't recommend it enough and no spoilers, but one of the characters, well, a couple of the characters really, but one of the characters in particular had a dual role and you don't find about, find out about the characters Other role or I guess I can it's kind of the actor's other role.
You don't find out about that until about halfway through the series and so Early on in the series I was looking up this particular individual because I was not familiar with their work at all or who they were at all And i'm scrolling through imdb and I see and again no spoilers, but I see you know, mr. Smith slash, you know Super agent man or whatever and I was like, whoa, whoa, whoa, whoa I was not prepared for that. I didn't want to know that. No!
And so, so as I'm building Callsheet, it occurred to me. I can fix this. And so, one of my favorite features of Callsheet is, at least for TV shows, as we sit right now, for TV shows, you can optionally hide spoilers. Things like character names, episode counts, you know, what if your favorite character on the show, what if they're only in one episode? Well, I guess that character's about to get killed off, you know, or whatever the case may be, or written off the show.
You can hide episode titles, episode thumbnails, I forget what else there is, I feel like there's one or two other things. But, the idea being you can hide all of this stuff, so that as you're just casually browsing, you're not putting yourself in a position where you're ruining a show for yourself. And, like, you know, Watchmen wasn't ruined by this revelation that I had, or this discovery that I had, but it definitely...
The reveal was worse because I already knew what was coming and I didn't want to have that happen again. And so the more I work with Callsheet, now that I've got like the standard, the base level done, the more I work with it, the more I realize there are little bits of surprise and delight that I can do that really can be fun. And I'm working on currently.
Some of this is already out in the app store, some of it is not, but one of, one of the things I'm working on is, I know I and a lot of other people always want to know, well, how old was that person when this was recorded or when, you know, when, when it was released or whatever the case may be. And so, as you scroll through movies or, or through a, or a person's, you know, filmography, it'll show, well, you know, for the year 2022, they were 40 or 41 years old.
For the year 2021, they were 39 or 40 years old, or whatever the case may be. And, and that's already in the App Store. And then what's coming in the App Store is, if you're looking at a movie, you can see, you know, this actor plays, you know, Margot Robbie played Barbie, and she's, I think, like, 33 years old at the time this movie was released, or something like that. And that's silly, and...
Maybe some people don't care, but a lot of people I know just find that interesting information, and it's also kind of Leo Dion (Host): Yeah, totally.
Casey Liss (Guest): you know, how all the men in the movies are like 10 15 years older than all the women, but that's neither here nor there, and so, you know, and so this is stuff that I can do to surprise and delight my users, and now that Callsheet is out, and I'm, you know, Started and I think I've got that base level done Like I said I can do a lot more than that more with that and that I find to be incredibly riveting and incredibly fun for me too
Because it's so fun to have somebody, you know get on mastodon and toot at me, you know Oh, I just saw such and such, you know, this I just saw this feature and it oh my gosh I love it so much. I can't believe I I I I you you did what I wanted and I didn't even know I wanted it, which is a very apple thing And I haven't been I haven't gotten a lot of those but the fact that i've gotten any I consider, you know Personal victory i'm just pat myself in the back real quick.
So Leo Dion (Host): Yeah, I love like the rabbit hole aspect of it, where it's like, okay, okay, now I go here and then I find out, oh, this person was in this movie, this movie has this actor, this had, oh, and just keep going and going. That's what I love about it. It has that like rabbit hole feel to it. What were like the first initial challenges you ran into when you started developing the app? Casey Liss (Guest): You know, that's a good question. There wasn't, there wasn't that much.
There's, that's not a very satisfying answer, but I didn't have that many like specific challenges. I think the biggest thing was the, the information architecture. Like, how do you represent.
An extremely wide and extremely deep bit of information, and that's a hard thing to do, and I had a lot of help from my friend Ben McCarthy between themselves and me, I think we landed in a pretty good spot, but it took a while to figure out how do I want this app to look, and Ben has suggested to me some very, very, just truly gorgeous reimplementations of what I've got, but It's hard because I want to make sure that I'm not losing.
Speed in favor of pretty and not to say that Ben's designs are bad. I'm not trying to say that at all.
In fact, I can't say enough how amazing Ben's designs are, Leo Dion (Host): When you're saying design, are you talking architecture design or Casey Liss (Guest): like visual design So, so, you know, Ben, Ben, what if you read Jigger, you know, instead of a poster on one side and information on the, on the beside it, what if you do this, you know, and spin this around and, you know, move the Jenga, move the Puzzle pieces around and so on and so forth and Ben's
designs are unquestionably gorgeous quite a bit better Looking than what I have today and and Ben deeply influenced what's already there But the but the thing the engineering trade off even in a design context is how much do I favor? beautiful over functional and I think where Ben and I landed, the way it is now, is riding the line in a good way between beautiful and functional. It's not, like, astonishingly gorgeous, but I think it's a pretty decent looking app.
But it's also a fast app, and it's not, not only in terms of actual performance, but in terms of, you know, I, I can find what I need quickly, and I think that's, Incredibly important for an app like Callsheet, which is all about looking things up and then getting out of your way. And so I don't know if I made the best trade offs there, but that's something that I'm always trying to tweak and make sure I'm doing the best job I possibly can.
Leo Dion (Host): So we had talked about where you are pulling the info from and you're using the movie database. Is that, is that the one that Plex uses for its info? Okay. How, I guess, how was it working with that API and pulling data and stuff like Casey Liss (Guest): so extremely great. Asterisk. The API is very, very good. It's very well thought out.
I, I don't know if I, it's one of those things like as a developer, I think the biggest compliment I can give another developer because most developers are selfish jerks. Hello. But the biggest compliment I can give another developer is, wow, I would have written it just like that, which Leo Dion (Host): Okay. Casey Liss (Guest): Which obviously is, you know, there's, there's some, Leo Dion (Host): It makes sense. It's like what you think it does.
Yeah. Casey Liss (Guest): There's some negative reads of it. You gave me the positive read. It's like, exactly. It's intuitive. Makes sense. That's the, that things are where I would expect them to be. So on and so forth. And, and the movie database API is mostly that where it becomes a little tough though, is that the movie database has very strong opinions about a handful of things. And sometimes that runs in contrast with what either I want or my users want, so a couple of quick examples.
When I was working on just yesterday, in a movie, when you're looking at a movie and scrolling through the cast or crew of a movie, I wanted to show the ages of all the actors or all the crew members or whatever. And there's no real easy way to do that. There's no... It's not like GraphQL, where you can just pluck things out of a schema and say, I want this, and I want this, and I want that, and I want that, you know, the schema is the schema.
And so in order to make that work, what I have to do is, as one of these cells is coming up on screen, I have to fire off a network request and get that that.
Cast member or crew member's birthday, which is pulling in a crud load of other data I don't care about, but I need to get that whole object, and then if it scrolls off the screen before I get that response back, then I need to throw away that request and not care, and you know that gets to be a fair bit of management that I have to do on my end, and there's no mechanism for me to just say, I'm Hey, when you give me the cast or give me the crew, can you throw in that birthday as well?
Like there's no mechanism. There's no affordance for that, which is tough. But the good news is, is that. The Movie Database API is so flippin fast that it actually mostly doesn't matter. It is phenomenally fast.
My, I've heard rumblings, this is not confirmed by anyone at the Movie Database, but I've heard some rumblings that they're, and this is outside of my comfort zone, but they're sitting, like, all of their stuff is sitting, like, at CDNs, you know, and like, I guess, it, it, not only are the, the, The assets there, but like, I guess a lot of the data is there.
And so my limited understanding is this stuff can just happen like darn Leo Dion (Host): right, right, right, Casey Liss (Guest): And I cannot say enough good things about how fast this API is. And generally speaking, it's well designed, you know, things do make sense. I wish it was a little bit more tweakable in certain ways here or there. Another great example of this. And it's a community driven database, right? So the data isn't always perfect, but it's usually pretty darn good.
But another thing is they take a hard line stance. Like I'm not an anime person, but they take a hard line stance that the original voice cast is the only cast that exists. There are no other casts. Leo Dion (Host): you can't find the American dub for that Miyazaki Casey Liss (Guest): Exactly right. There will be no others. That is all you get. Good day, sir. And that's fine, and I understand it, especially because that data can spider out and make their schema look awful real quick.
But that, that does not delight my users, right? And it's, it's, selfishly it's nice to be able to say, Ah, my hands are tied. Unselfishly, that's a really crummy response that I have to give my users that look, I just I can't get to that data because the data doesn't exist. And that's that's tough. And there's only a couple of occasions. I can't even think of any others off top my head. But there's a couple of occasions where they take very hard line stances on stuff like that.
And that's frustrating. But ultimately, the there they provide it. An incredibly robust API that has incredibly fast performance and is really, really good, and their pricing is phenomenally good for me, so I can't complain, but so much right and and as far as I can tell, it seems like it's reasonably cheap. To run, I guess this is, this is me, you know, making some assumptions here.
So I might be dead wrong, but from what I've gathered from talking to other people in the community who are using this API, like they've gotten kind of sniffs and hints that it doesn't cost them a lot to run it. So everyone seems to be aligned, you know, for the most part, it's just, there's a couple of things here and there that I, that I wish were a little bit different.
Leo Dion (Host): When you say aligned, I had flashbacks to the recording I did with Christian so, Did you look at I guess, did you look at IMDB, does IMDB even have an Casey Liss (Guest): I didn't think they did, to be honest with you, and then I found out just like a month ago that they actually do, but if memory serves, the pricing is hilarious, and not, you know, speaking of Christian, not dissimilar from Reddit's style pricing, I
think it was Reddit's much worse, because who isn't better, I'm sorry, who's better, but, you know what I mean, I got that all backwards, you know what I'm saying Reddit is the worst, is what I'm trying to say, but anyways the pricing is not great, but I think it is potentially workable, but honestly, The point of this app originally was to thumb my nose at IMDb, and I'm past that at this point.
Like, at this point, I'm actually really enjoying the, the, the experience of using the movie database. And while I, I was, I'm struggling because I don't want to say that I'm collaborating with them because that's not really accurate. But there's a developer forum where I've posted questions and things like that. And, like, the, and the CEO has gotten on because I think they have a very small team.
I think the team is, you know, under 10 people, possibly under five, and their CEO is come on and been like, Oh, yeah, I see what you're saying. You know, can you go and upvote this Trello ticket, you know, or whatever, to show me that you're interested in this and so on and so forth. And, and so it's, it's been nice. And it's delightful. And it's, it's the antithesis, you know, I listened to and watched your episode with Christian, which was great.
And it's the antithesis of poor Christians experience, which is Too bad, because Christian's like 10 times nicer than I'll ever be, but I guess Canadian, am I right? But but no, it's, it's, it's been delightful working with the Movie Database, and I hope that they're around forever. Not only for selfish reasons, but like so much of the stuff that I use, you, you had mentioned Plex earlier. Like, I'm a, I'm a Plex superfan. In fact, I'm a little surprised I wasn't wearing a Plex shirt today.
That would have been my style. But but I'm a Plex superfan, and if The movie database goes away that like that hurts plaques among many, many other people. I really love this app channels which is like a TV DVR sort of app. They use the movie database. You know, the movie database powers. A lot more of the media related internet than you would expect. And so if they were to go under, there would be much bigger problems than Callsheet.
And that gives me some amount of solace, but it's still worrisome, especially after Twitter and then Reddit. Leo Dion (Host): Well, Movie Database sounds more like a Wikipedia situation as opposed to like IMDb being more of a corporate entity, right?
So, I would think it would be around until hopefully, God willing, somebody doesn't buy them and screw them over, Casey Liss (Guest): well, and coincidentally, I found out about three quarters of the way through the development of Callsheet that they do have a corporate overlord, but you will never in a million years guess who it is. Leo Dion (Host): Should I, you want me to guess Casey Liss (Guest): Please feel free. Think about a, no, a washed up media company that somehow still exists.
Leo Dion (Host): AOL? Casey Liss (Guest): A better hardware company. Leo Dion (Host): Gateway? Casey Liss (Guest): Getting better still, media hardware. I'll give you one last shot. Media hardware company, mostly washed up, nobody cares about it except John Syracuse. Leo Dion (Host): It's like Magnavox Casey Liss (Guest): No, you're getting warmer still.
TiVo TiVo owns the movie Leo Dion (Host): Oh, Casey Liss (Guest): I found that Leo Dion (Host): said Syracuse, I should have thought of Casey Liss (Guest): exactly. So Leo Dion (Host): nobody owns TiVo? TiVo? owns TiVo? I Casey Liss (Guest): as far as I know, I might have that wrong, but as far as I know, that is correct. So yeah, So TiVo owns the movie database, which gives me even more worry.
But, that being said, I would think, I would think and hope, I'm knocking on wood, you can't really see it, but I would think and hope that if If TiVo went under, that the movie database would spin itself out and, you know, even if pricing had to change or something like that, Leo Dion (Host): Is it. open source?
Are any parts of it open source, Casey Liss (Guest): not to my knowledge, no, I believe it's all closed source, but I think that, you know, the two to ten people that work there hopefully could reach an agreement with TiVo that they could spin it out, you know, do their own thing, But yeah.
I, I heard that and I was both somewhat relieved and deeply alarmed all at the same time, we shall see, Leo Dion (Host): So, did you look at other alternatives like Rotten Tomatoes or you've Common Sense Media on here and Metacritic? What did you end up finding out about those? So Rotten Tomatoes obviously has its own problems as we've Casey Liss (Guest): yeah, yeah, we, that, yeah, exactly. So that, that, yeah, exactly right. It's funny because I don't really care for these ratings websites.
Like, I don't really want to see anyone else's ratings. I find it to be actually a net negative in my personal opinion. And the only Leo Dion (Host): I would say that about IMDB as well. Like the ratings on there are kind of like garbage. So Yeah. Casey Liss (Guest): Yeah. And so for me, like I didn't even have ratings in the first half of the Callsheet beta, but I expanded the beta test to members of my other podcast, the accidental tech podcast.
So if you are a paid member of ATP, I would give you a link so you could sign up for the test flight. And then now that the test flight is, or that, that stretch, the test flight is done. So they have now all lost their access. That was part of the deal. So on and so forth. Well, anyways, I bring all this up to say, I had a lot more testers on this than I had any other app. By an order of. by several orders of magnitude.
And after hearing incessant complaining and moaning about the fact that I didn't have ratings well, I call them, I call it a score in app because rating to an American, you know, is PG, rated R, whatever the Leo Dion (Host): Yeah, yeah, right, right, Casey Liss (Guest): we're saying the same thing. Anyway, so I eventually added it to Callsheet because I was just, the support burden alone was enough to say, you gotta add this. And I did. But I hate it, Leo. I hate it so much.
And so, so anyway, so to answer your question, I've asked for Rotten Tomatoes API access. You know, it's one of those like, Oh, our people will call your people. But if you want, you can put your name in the hat. I did that like two months ago when they ghosted me since common sense media. I'm going to get these details wrong, but I think it was common sense media that you can get API access, but your API tokens is limited to something like five requests a minute. or something like that.
So, in other words, it seems to be designed for you to grab data and then cache it on your end, but that is not at all the way Callsheet is designed, and I am not interested in joining the server business, and so that's a Leo Dion (Host): yeah. I was about to say that, yeah. now you end up having to be running your own server, which, yeah.
Casey Liss (Guest): No, no thank you and then Metacritic, or maybe it was Metacritic that's, that's this way, and it was Common Sense Media that's, yeah, I forget who is who, but I've, I've asked, I think it was Metacritic IS for APIX, or no, they didn't, that's what it was. Metacritic doesn't provide an API. Common Sense Media's API usage limits are hilarious. And Rotten Tomatoes, just, it goes into dev null. And so, I don't think anyone has ever seen it.
So, so yes, I've looked into these things, and in a perfect world, as much as I hate what I call score, but most people would call rating As much as I hate it, I would prefer to have what is generally considered to be the best, you know, available score. Which, for most people, you know, recent news notwithstanding, that would be Rotten Tomatoes, or if not Rotten Tomatoes, then Metacritic. But Metacritic doesn't offer it, and Rotten Tomatoes effectively doesn't offer it. So, what's a guy to do?
And it's just, it's tough. Well, and that thought crossed my mind. That thought Leo Dion (Host): I feel like I've done that, I did that like 20 years ago in college, just was like playing around with Rotten Tomatoes when it was actually cool, And like, Casey Liss (Guest): And I Leo Dion (Host): up like, web scraping.
Casey Liss (Guest): I really thought about it and part of the, a large part of the reason why I didn't do it was that their URLs are not reliable, you know, it's not where it's like, you know, such and such, you know, rottentomatoes. com slash some identifier or rottentomatoes. com slash the exact movie title. It was very, very, not literally random, but seemingly random. And so because of that, I just didn't even want to go down that road because I didn't think it would be reliable.
And if it's not reliable, then what's the point? Leo Dion (Host): we brought up Wikipedia. Did you look if, well, you have mentioned in a few releases pulling info from Wikipedia. Casey Liss (Guest): Yeah, well, I don't pull it in from Wikipedia, but one of the things, one of the affordances in Callsheet is this idea of a quick access link or button, if you will, and so what I have it set up for is to jump to trivia coincidentally on IMDb in a web view, because I just am a sucker for trivia.
I think that's fascinating, but that's not everyone. And so you can choose to have a quick link to Wikipedia, for example And there's several others. I forget what else parental guidance on IMDB. What else do I have on there? Forget what else there is. But anyways all of them are always available whenever possible, but there's one that's like kind of prominent and Wikipedia, the Wikipedia entry for any given property is one of those things.
And that was, that was actually a perfect example of what we were just talking about. My initial very ignorant implementation of this was just go to, you know, wikipedia. org slash whatever whatever slash the title. And that was all well and good. But what happens with the little mermaid when there's a 1990, whatever version and a 2023 version.
And it was because of somebody reached out to me on Mastodon and said, Hey, if you go to wiki data, which is, you know, a sister project, if you will, of Wikipedia, you can actually make an API request and get the exact correct URL for the, for a particular property. And I believe, I believe it was the movie database.
Also offers a Wikidata ID, so I go to the movie database, and I say, okay, what's the Wikidata ID, then I go to Wikidata, and I say, okay, for this given ID, what's the Wikipedia ID, and then I can go to Wikipedia, and say, alright, load the Little Mermaid, you know, parenthesis, 1990, whatever, parenthesis, rather than the Little Mermaid, and just cross my fingers, and hope I got the right one so, so that stuff like that, you
know, again, surprise and delight, you know, both me and my users, you know, now, now I Leo Dion (Host): going to say like, that's the fun stuff of being a developer is being able to plug all that information and like connect stuff. Yeah, yeah, exactly. I was going to ask so we talked about you. This is all SwiftUI. Is it using the SwiftUI app lifecycle or are you using app delegates? Okay. Casey Liss (Guest): No, well, there is an app delegate, but it's It's implemented using the Swift UI.
Yeah, exactly. And and that actually didn't even happen. I don't recall what, what made me even add an app delegate. Maybe it was URL opening Callsheet by URL. That might've been what did it, but I didn't even have it for the longest time because I didn't need it. But yeah, it's Swift. It's all Swift UI, Swift lifecycle, Swift UI lifecycle. And that's been fine, to be honest with you. There's been a couple of places where, because of my. Internal architecture.
This just happened to me a couple weeks ago. I forget what I was working on. I think it was something making more robust URL loading, but there were some places where I need. Oh, no, you know, or maybe it was the quick actions on the home screen icon one way or another.
I needed a piece of data that was over here, but, you know, the app delegate's over here, and like, never the two shall meet, and so on and so forth, and, you know, this is when any, any Swift or iOS developer would normally reach for like Notification Center, but I'm trying to be a good boy and not just, you know, punt to Notification Center and I forget what I ended up doing, I think I ended up having a singleton for other reasons that I could glom off of, and it didn't
make me feel like I needed to shower immediately, so um, so I consider that a Leo Dion (Host): created your own singleton. because you didn't want to use the notification center singleton. That's fine. Casey Liss (Guest): Okay, hush! Nobody asked you! No, it's very true, it's very true. But no, generally speaking, SwiftUI has been fine. I mean, I think the early party line that you can't use it in production, I think at that point that was true.
I think that's long since been proven not accurate at all. I think it's perfectly fine for production. Leo Dion (Host): Do you, do you feel like do you feel happy with targeting 16? I guess for like test flight would make sense if you want people to actually test it. But, like, was there anything where, when, after dub dub, you were just like, Oh, crap, I wish we could do this, or I could have done that if I targeted 17.
Casey Liss (Guest): 100 percent it ended up being irrelevant because I changed the information or the design. I was gonna say information architecture, but the design Callsheet. But early on in call for most of Callsheet, the search box was at the top in a standard, you know, system search box. It was completely out of the box, nothing interesting about it, but it was at the top of the screen and similar to score slash ratings. I was getting browbeat constantly. Oh, what can it be at the bottom?
Can we please have it at the bottom? Can we please have it at the bottom? And. Eventually, I did move it to the bottom, but now the downside of that is it's all custom. It's not the system search box, which is a little bit of a bummer. But, you know, it is what it is.
That being said when it was still at the top, I needed to know, because of the way I architected the app, the visual architecture of the app, I needed to know when the user tapped on and activated the search field, you know, so I could change to show recent searches and so on and so forth. And in SwiftUI, prior to iOS 17, It was a mountain of really ugly, really gross UI kit code to figure that out, like truly awful code, the sort of code that you you really wish you never wrote.
And I got a lot of help from my friend Guy Rambo and writing it. And then when once you write it, it's giving you nightmares and night, right? Well, In SwiftUI and iOS 17, there is a property where you can do, you know, searchable and then blah, blah, blah, and you can provide it a a binding that it will tell you whether or not it's activated. So, it's like, all of this goes away immediately.
As it turns out, like I said, it all went away because I changed the way I was doing things, but that alone was enough reason for me to almost immediately go to iOS 17 just to get rid of all that gross, gross, gross code that I hated writing. And if I still had that code. I haven't looked at my numbers recently in terms of 16 versus 17, but I would probably be moving sooner rather than later to, to iOS 17 just to get rid of all that. I don't know.
Leo Dion (Host): I can't imagine your numbers have had to be pretty high Casey Liss (Guest): Let's see. So I'm trying to look right now. I don't have, it's not showing me percentages, but it looks like just. off the eye, roughly a third on 16 and a third on 17, and then a third of other stuff. And so that's just looking quick off the cuff. I might have that wrong, but based on the small amount of analytics I have, that's about what it looks like. Leo Dion (Host): Yeah, yeah, yeah.
What made you decide, well, I have to ask, so Casey Liss (Guest): Mm hmm. Leo Dion (Host): you already did, well it sounds like you already did Storkit, so. that's probably why you stuck with that as opposed to going through like a revenue cat or something. Casey Liss (Guest): Oh, so the bald spot that's been brewing because I'm 41 years old was probably made worse during the Storkit implementation stuff. Storkit 2, Storkit 2 is what I'm using. I was using it for Masquerade as well.
In general, Storkit 2 is pretty good. The problem I have with Storkit 2 is that, and I understand why, but It's, it's frustratingly can't think of the word I'm looking for, but it's very minute in the way it surfaces data. There's no, or at least not that I'm aware of, there's no real good, here's one method to call that gets you the holistic view of the world. And I get why that is, but I wish Leo Dion (Host): It sounds like the opposite of the movie database Casey Liss (Guest): Kind of, yeah.
yeah. Leo Dion (Host): gives you everything, but now Apple gives you bits and pieces Casey Liss (Guest): Well, that's the thing, right. And it's, and I get it because, you know, what if, what if you have a. A active subscription in a family plan, but somehow you also have an active subscription in an individual plan. Plus, you have a free trial that hasn't quite expired. Like, the permutations that Apple has to deal with are kind of bananas, bananas bananas.
And and so I get why it's so granular is the word I was looking for. I get why it's so granular, but from a, from a, from a user of that API's perspective, so as from a developer's perspective, that's, that's leveraging these APIs. Kind of stinks. Like I just tell me what's the state of the world like do they or do they not have paid access to the app?
That's all I care about and that doesn't really exist and my understanding is that and I haven't really looked into revenue cat much But my understanding of revenue cat is that it does a much better job of giving you that holistic state of the world and there was a time not too long before launch That I was like this far away from saying I'm going to rip this all out and go to RevenueCat because I just can't with this anymore.
I didn't end up going with RevenueCat partially because I'm cheap and I didn't want to give them any of my money, which isn't to say that it's not deserved. They deserve my money if I were to use it. I just didn't want to give it to them. And so, that, that, that's, and, and their pricing, as much as I'm joking about, their pricing is actually extremely generous for someone like me. It's not, I don't know if it's quite as generous for like an Amazon, if you will.
But for somebody at my level, it's very, very generous. I'm not even sure that I would have needed to pay them money. But again, like I think I've spent too much time with Marco Arment and, and, and, and Apple ecosystem in general. And if I can own the whole widget, I'll own the whole damn widget. And so I wrote it all for myself and in the grand scheme of things, like I'm glad I did. I think, from what I can tell, it works pretty well.
Ask me again in a year when renewals start happening, but it's, as far as I can tell, it's working well. But it was a slog. And I think it was a slog because I didn't, in no small part, because I didn't have my own expectations set appropriately, in that it's up to me to micromanage all of these different moving parts. And I can't just go to Apple, like I keep saying, and say, Are they, are they registered? Are they paid? Or are they not? That doesn't really exist.
Leo Dion (Host): Did you did you try using any of the user testing stuff for subscriptions at all? Or, Casey Liss (Guest): I did I tried using the unit testing stuff, which is not exactly what you asked. I tried using the unit testing stuff, and that went okay. I forget what it was that caused problems, but it seemed like it was only half baked. Very well could be a user issue on my end. Very, very well could be.
That being said, the StoreKit 2 testing where you can create a set of products in your Xcode project and tweak those and, and so on and so forth, that is just chef's kiss, like, wonderful. Leo Dion (Host): Okay. I, I'm jumping into Storkit 2 with my Mac app, and like, so I'm just kind of curious how that experience is, and like, yeah, I'm worried about, you said all the edge cases of like, trials and family subscriptions and all that Casey Liss (Guest): It gets, it gets gross quick.
I mean, it's, it is surmountable, but it gets gross. And actually like a super top secret, just the two of us, nobody else is listening. Right. If you go, if you Leo Dion (Host): I'll cut this out. Casey Liss (Guest): no, it's, I'm just kidding. I'm just kidding. If you go to, if go to Callsheet or if you, excuse me, if you go to Safari and do Callsheet colon slash slash subs, S U B S, it will open up a read only view that shows my view of the world. So like, if I ever have.
An issue where someone's like, dude, I've paid for this. Why is it not registering, you know, that I've paid for it? Then you can go to Callsheet colon slash slash subs, and it'll show, you know, for all of the different products I have, here's what store kit two is telling me. Like, you know, you're registered, you're not registered, you'd never purchased, and so on and so forth.
And, Leo Dion (Host): for the person, it's the person who's logged into that Casey Liss (Guest): right, it's, right, right. right. On their, on your own phone. So if you're a Callsheet, know, user, you can try this out just for grins and giggles, and see, see what, see what. store kid is telling Leo Dion (Host): view. I love that. Casey Liss (Guest): And this was an idea of my dear friend Jelly, who writes the wonderful app, GifWrapped. Jelly did something similar.
I forget where you find it in his app. I don't think it's a secret, but it's hidden somewhere. Well anyways, but he he had suggested to me you should do this and I was like, no, I don't Okay, fine, I think I should.
And so, I haven't actually needed it yet, knock on wood, once again, but I'm really, really glad it's there, so if there's a problem, at least I have some amount of view, you know, because I could have a person screenshot it, and I believe, actually, if memory serves, you can also, like, copy a really crummy text based view, or maybe it's an image, view of what everything is, so that they could send that to me in, like, an email or whatever. It's, it's hideous. But it doesn't matter.
It's just something to give me a tool to help my users if they need that help. Leo Dion (Host): Makes total sense. Alright, so we talked about giving RevenueCat a cut and AppStore a little bit. Let's talk about the fun you had with getting this Casey Liss (Guest): Too soon! No, it's, it was, it was, it was an adventure for sure.
Leo Dion (Host): you wanna kinda, I mean, I heard the story on ATP, but I'll let you go ahead and explain Casey Liss (Guest): Yeah, so, so I sent the app to AppReview shortly before I was going on a week long vacation. And I did that, the app was ready, but I was a couple of weeks before when I wanted to launch. But my theory was... You know, I'm coming up on vacation, knowing me, all I'm going to think about is work during this entire vacation.
Unless I can get this through AppReview, if I can get it through AppReview once, generally speaking, knock on wood, generally speaking, once you get it through once, you know, short of something very unusual, it'll continue to get approved, maybe you'll have an issue here or there, but generally speaking, once you get over that first big hurdle, then you're okay. So I thought, okay, the week before I go, I'm going to send it to AppReview.
They'll approve it and then I'll be on vacation and know that even if nothing else happens, I have a version that I could release to the App Store when I'm back home. I released it to the App Store and they, they looked at it overnight Eastern time and they sent me a screenshot. I'm, gosh, I should call up App Store Connect to make sure I'm telling the story right, but the general gist of it was they sent a screenshot saying, well, you have media playback in this app.
And that's not allowed because you don't have rights to the things you're playing. Okay? And they sent me a screenshot of some anime show where, I don't think there was even a play button on screen, but it was showing a list of, like, episodes. And that was their justification for the fact that they could play media on this app. And I'm like, mm, no? You can't even play a freakin trailer in the app. What are you talking about?
Of course, I said this in a very polite and kind way but, you know, I was like, What, what are you talking about? That's not, that's not a thing. And so, I feel like there was one other thing that they complained about, and then they said, well, okay. You can't use any Disney or Marvel or any, you know, media in any of this app, especially your App Store screenshots. Like, they sent me my own App Store screenshots as justification for this. And I'm like... What the hell do I do with this?
There's so many apps in the app store that are clearly using Disney, Marvel, Pixar, all these different pieces of media, you know, posters and images and whatnot. Like, what am I supposed to do with this? And so I sent them a response via app store connect. And I was like, look what again, on a very polite way. What? Like, How is this a thing?
You know, I, I can't, this app isn't possible without, I mean, I guess strictly speaking it is, but it effectively is impossible without using the media from, or without using the images from all these things. What do you expect me to do? And like, look, like Letterboxd, which is, you know, I've spoken with their developers a couple times, they seem like incredibly kind and wonderful people.
Letterboxd, the very first screenshot on your app store for the Letterboxd app was like Infinity War or something like that, I forget what it was. Like, are you serious with this? And so, we go back and forth a couple times, and I'm getting nowhere, and again, I'm being polite, although I'm getting... Clearly, my fuse is running out of fuse. And so I said, you know, these interactions were happening in near real time as close as App Store Connect can get real time.
So I think to myself, all right, here's what you do. I sent them a message and said, hey, why don't you give me a call? Let's just hash this out verbally. We'll take care of it. I'm sure it'll be fine. You know, here, my number is, you know, 1 2 and just give me a call and we'll talk about it. And I thought, since we're going back and forth constantly about this, I'll get a call in the next 10 minutes. This was like the Wednesday or Thursday before I leave for the beach.
They send a response back fairly quickly that says, Sure, we would love to call you. We'll talk to you sometime in the next three to five business days. No! We were just talking! Like, no! Call me now! So, we go to the beach. I think it was Monday or Tuesday. I want to say it was Monday. And I get a call. Actually, I missed a call from Apple. And this very kind gentleman, I believe his name was Richard, leaves me a message and says, Hey, why don't you call me back?
A phone number, which was critical. Because you don't get, that's worth, that's worth its weight in gold. But so Richard calls me and leaves a message saying to call me back. I miss the call, and then as I'm like figuring out, I'm saying to my wife Erin, I'm like oh my god, oh my god, ah, ah, ah, ah, what do I do? And then my phone rings, and it's him again.
We get on the phone, I'm like, look, I, I, I, I, I, I, I was like panting, and I'm not just because I walked a few yards away from everything else and all the noise and the beach, but I'm panting because I'm like my heart is racing. I should have in retrospect looked at my watch to see if it read a heart rate, because my heart must have been going like 160 beats a minute or something. I'm like, I'm standing still, and I'm like, well, well, here's the, and I was.
just a lunatic on the phone, and not in a nasty way, in a like, I just, I don't know what to do way. It's so nervous, beyond nervous, I mean, it's like asking a girl out for the first time kind of nervous. And so anyway and so this, this very calm, very level headed guy, Richard, says in so many words, we've taken a look, you're absolutely right. There's no problems. I'm gonna hit go. You're good to go. At which point I basically fainted onto the sand and said, Thank you so much!
Oh my god, I love you! You know? And so, it ended up that once I got to someone with some amount of authority, It seemed like it all went away, lickety split, and I haven't yet had an issue since. Meanwhile, well, so, but, meanwhile, I'd heard reports from ATP listeners and from other developers who, you know, who watched what I say on Mastodon or whatever, and a lot of other people have said, look, I've gotten similar rejections, what you've got to do is...
If you put a little blurb, you know, in, in App Store Connect, there's a little section where you can write like notes to the reviewers and you can put in a little blurb that says, look, I have rights to this stuff because of the movie databases, APIs, terms of use in terms of service and so on and so forth. Because basically the movie database says, look, if you're uploading something, you have to have the rights to upload it because we are not claiming those rights, so on and so forth.
And so I think it's one of those things where Apple just wants to be able to point to somebody else. If, if Disney comes to Apple and says, this is BS, Apple wants to be able to say, that's not us. It's them. It's them. And for at first that was me. And now I can say, no, no, no, don't worry about it. It's not me. It's over there. I can say. Oh, it's them. And so that seems to be enough from what I can tell to keep apple satisfied.
But it was a stressful week or so, or, you know, handful of days because here it is. I've worked, you know, something like six months on this app, which maybe that was too much. Maybe I'm just not a fast developer. I don't know. But I worked hard on it one way or another. I worked hard on it. And this is six months of my life.
And Now it's hanging in the balance as to whether or not, you know, Mickey Mouse is going to be upset about what I've put in this app and, and it worked out okay, but oh, I, I I have, I, there was, it was some trauma while it was going on, I tell you what Leo Dion (Host): yeah, and it's also like, I mean, I think it's a little microcosm of what other developers have run into of just like, Oh, we had the wrong reviewer who didn't know what was going on.
Like the stuff about playing, like the fact that you don't support streaming or do Casey Liss (Guest): yeah, right, Leo Dion (Host): like they were confused about that. And it's just like, that I felt like it was a perfect little like anecdote that every developer has gone through where it's just like luckily you ran into Richard and I think we've all Ran into our Richards once in a while when we've had calls from app store. But like, Yeah, I can imagine how stressful that is.
Casey Liss (Guest): it was, it was awful, and I mean, in the grand scheme of things, if this was my stress for the year, I'm sitting pretty, but in the heat of the moment, man, it was, it was rough and, and it, again, it ended up fine, and once I got, once I got through to Richard, it, it was fine, and actually, to, to Richard's credit, you know, he said, you have my number, if you run into issues in the future, you know, feel free to call, and we'll
work it out, which, at this point, I was ready to marry him but but anyway, so, it, it, I think it will be fine in the future, but it's just tough, because this isn't my entire livelihood, But it's a large portion of it and it was hanging in the balance because one or two people who didn't really understand Or maybe maybe it was me that didn't understand one way or another a couple of people didn't understand what the state of the world was what was is or
should be and Maybe the six months of my life would have been down the drain and I and I would have had nothing for to show For it and that's that's tough And well, I don't know that I'm necessarily on team side loading when it comes to iPhones and stuff like that It's hard. It's hard to Simultaneously accept that there is one gatekeeper to get your work onto these devices. That's a tough pill to swallow. And I don't know what the right answer is.
Leo Dion (Host): Yeah. And just like, I don't have a problem with the cuts. I don't have a problem with the 30 percent cut. I don't have a problem with a lot of things, but like the whole flakiness of app review, I feel like as a, as a system that's supposed to set up to protect users, like sometimes it doesn't even do a good job with that. We're.
Allows crappy scammy apps in it's just, yeah, I feel like there needs to be more done on, on that front, like, unless, unless you're just going to go to sideloading, It's just a crappy experience for developers and users Casey Liss (Guest): Yep. 100 percent agree.
Leo Dion (Host): Anything else you want to talk about that specifically Casey Liss (Guest): With regard to AppReview, no. I mean, it did work out, and I mean, I feel like this is one of those things that within a few days of it being over, I was able to laugh about it, but, phew, heat of the moment, it was not fun. Leo Dion (Host): It's a, it's a good lesson learned, I Casey Liss (Guest): It is, it Leo Dion (Host): now, you know, if you ever run into this again, you won't have a heart attack.
Casey Liss (Guest): well, I will still have a heart attack, but hopefully it will be, I will recover from it quicker. Leo Dion (Host): So let's talk about some of the features you're really proud of.
Launch time. Casey Liss (Guest): I mean, Leo Dion (Host): you want to explain Casey Liss (Guest): yeah, so in the show notes, I had put in two different sections like launch time and since and what I mean by that is, you know, at the time at which I Leo Dion (Host): when you launch the Casey Liss (Guest): yeah, I mean, I think the launch time is also that was ambiguous of me. I think the launch time is pretty good. But what I meant by that is, you know, what did I have at launch time?
And you had put in and I'm very happy that you did, you know, accessibility. You know, I took a spin with voiceover and tried to make it as good as I could. And then right around the time that I was getting to polish on the app, that's when WWDC was in early June. And so I spent some time with some accessibility engineers and they're happy to go through your app and tell you, you know, here's some things you can fix. Here's some quick wins you can have and so on and so forth.
And that there wasn't that many action items that came from those discussions. I mean, they're only like half an hour long. But the action items that came from them made the voiceover experience so much better. So a silly example of this, Leo Dion (Host): Those sessions are awesome. Casey Liss (Guest): they're incredible, I cannot recommend them enough. A silly example of this is, I'll show like, you know, score and then a percentage on screen.
And I didn't realize that in voiceover, there are two different SwiftUI elements, and so it would read like, score, and then just sit there, and then you'd have to swipe. You know, 73%. And they said, and I forget the property or the thing you have to flip off the top of my head, but they said, basically, you can treat this as one item. And so when voiceover hits it, it'll say score 73%. And something silly like that makes a world of difference for voiceover users.
And so I was really happy with that. And I've had some voiceover users say, you know, look, it's not perfect, but this is, especially for version one. It's really, really good. And you did a really good job.
And that makes me incredibly happy because, you know, as, as has been often said, and there's a really good Microsoft graphic about this that I was reminded of in the last couple of days, everyone either does or will use accessibility at some point, and maybe it's something like you have a broken arm. So you have a temporary accessibility problem, or maybe it's something that. You know, you, your eyes have just been dilated.
So you need to crank your font up to a thousand percent just for a little while. Like, even if you don't have a permanent need for accessibility affordances, almost everyone will use them from time to time. And so for it to be good, it makes me very happy. We talked about spoiler avoidance that, that launched or that was at launch time. I'm, I still remain really, really proud of that. I think it's a really clever thing.
And. It wouldn't surprise me entirely if like IMDB or something like that, or someone like that apes it, which in the grand scheme of things, that's, that's a, compliment, right? Like if they ape it, then that, that's okay, I guess. And I'm really proud of that. And the speed of the app, you know, we talked about that a little bit with regard to my ambiguous launch time, but, and also with the API. The app is fast. As long as your internet connection is at least decent, the app is real fast.
I'm really, really happy about that. And then for stuff that's happened since, My first big project since launching was getting integration with the aforementioned Channels and Plex. Channels, again, is like a software based DVR that you can run on your network. And I actually know one of the guys that's one of the founders. He's local here in Richmond. Even leaving that aside, it's a phenomenal app if you're a weirdo that still wants cable, but doesn't want a cable box. Hello, it's me.
And there's other uses for it as well. Don't get me wrong, but that's what I use it for. And Channels is phenomenal. And it was really fun working with the guy's name is John Maddox, working with John in getting integration between the two apps. And especially as an indie developer, it's very unusual to have that kind of collaboration with anyone. And between the stuff with Ben that we talked about earlier and the stuff with John.
It was incredibly fun to get the channels integration squared away, and that is pretty robust and works pretty well, and I'm pretty darn proud of that. The Plex integration, I use Plex even more than I use channels. I adore Plex, it's my jam.
The Plex integration is very rickety, and for very complicated reasons that if you have 40 hours, I'm happy to talk you through, but suffice it to say, it's just a very old technology that Plex uses to do these sorts of things, and it, and it's just, it's very rickety, and so the Plex integration, when it works, is just magic, it's incredible, same with channels, is magic, and it makes me incredibly happy, because what happens is, on screen,
it'll say, now playing, you know, Plex Letterkenny, or whatever the case may be, and if possible, it'll even jump you to, like, you know, Letterkenny, Daybears Day, and it'll jump you to the exact episode that you're, that you're watching, and it's just incredible surprise and delight, but Leo Dion (Host): this is you can play the show you're you want to watch through Callsheet, is Casey Liss (Guest): No, no, no, I'm sorry. No, no, no, thank you for asking.
So, what I mean is, you're sitting on the couch, the Apple TV is playing Letterkenny, or whatever the case may be, on Plex, or on channels, and Callsheet will reach out to channels, or Plex, or whatever, and say, Hey, what are you playing right now? And the Apple TV will report back, Oh, I'm playing Letterkenny Daybearsday. And so, you know, it's the perfect couch moment, you know, or couch instant, as John calls it. Again, channels integration is pretty robust, works pretty well.
Plex integration I've called experimental, because honestly... There's not a lot more I can do with it that I'm aware of, but it's very, very rickety, and so I Leo Dion (Host): I've always been Like interested in playing around with Plex and the Plex API.
I use Plex as well So it's it's unfortunate that it is rickety Casey Liss (Guest): In the defense of Plex, it's, I mean, Plex started in like the late 90s as Xbox Media Center, you know, so it's got a long lineage and basically what, what Plex did is they created their own zero config, zero conf, you know, zero configuration, like Bonjour, basically they made their own like version of Bonjour before Bonjour was the thing, whereas channels
having been made in the last five or 10 years has the advantage of just Using Bonjour, and so who to thunk it, but this Apple created technology called Bonjour has incredibly good support in Swift APIs, whereas, you know, doing raw BSD socket work in, which is what I, you know, well, I used a third party library, but effectively, you know, you need to do raw sockets to do the same thing with Plex, that's less robust and a lot less fun, but in the defense of Plex, I mean, it's because
this stuff was written 20 years, literally 20 years ago, and they haven't had to mess with it since. So what are you going to Leo Dion (Host): Yeah Yeah makes total sense total sense. Yeah Go back you were talking about spoiler avoidance. Are you do are you good on time? Casey Liss (Guest): Oh, yeah, yeah. Mm hmm. Mm Leo Dion (Host): Okay, cool. On spoiler avoidance, I wanted to jump in and talk about using the redacted, that's a, the redacted view modifier. How was that?
Casey Liss (Guest): It was, it was fine. Basically, I wrote a, a custom, I think it was a view modifier, right, a custom view modifier that, that lets me, that I call conditionally redacted, and so basically it's, you know, dot conditionally redacted if, and then you provide a Boolean that says, you know, either you need to redact it or you don't, or, you know, or, or a, or an inline function that, that figures it out.
It'll, I think it's auto closure there if memory serves that it'll evaluate it and so on and so forth. Leo Dion (Host): You can pass in a Boolean and then it does it or doesn't do it based on whether the user wants it. Yeah. Okay. Casey Liss (Guest): But under the hood, all it's doing is it's dropping a dot redacted, you know, reason placeholder or whatever the case may be. And yeah, that's all the, the outta the box with Do I redaction stuff? Leo Dion (Host): Okay, cool.
What, so what do you have planned in the future? Casey Liss (Guest): I can't tell. No. So I, I have some new stuff, some old stuff. Like I should actually look how many GitHub issues I have. There's a zillion, but Leo Dion (Host): let's let's talk about like just iPad support. Did you start looking into Casey Liss (Guest): Yeah. that's going to happen sooner rather than later, so I, for what it's worth, I have 45 open GitHub issues.
Now, when I say issues, I don't necessarily mean, like, problems. A lot of these are, like, enhancements and so on and so forth. Features. 163 closed, so I got that going for me. But anyways but yeah, so I have a lot that I'm noodling with. It's, it's tough to figure out what the right answer is.
Like, clearly the rightest thing to do, and I've been kicking the can down the road because I don't, I don't, I don't know the best way to go about it, but as you said, better iPad support, like Callsheet works on the iPad, but it's not well laid out, there's a really inefficient use of space, and I need to do better about it.
Making iPad a first class citizen and a great example of this is, as we talked about earlier, this quick access link thing where you can jump to Trivia or jump to Wikipedia, whatever. The way that works on iPhone is there's the one icon that's your like favorite and then a button that says like more links, I forget what I have it say now.
And if you hit that more button or whatever the case may be, links button, it'll drop down or pop up a menu that says, okay, well, you know, here's Trivia, but you can do Wikipedia, parental guidance, you know, technical information, so on and so forth. Well. On iPad, I have the width that I can just split out all of those, you know, that line of icons and just have them all immediately available. That's a silly example of something that I need to do that I just haven't done yet.
But broadly, you know, better iPad support so that it works a lot better on iPad. And then I've promised a bunch of people who have asked me once iPad support is better, I'll flip the switch on. What is it? Continuity? No, not continuity. What am I'm thinking of? Catalyst. Thank you. I'll, I'll flip the switch on Catalyst so that you can use it on the Mac as well. It's just right now, I don't love the way it is on iPad and I don't love, thus, I don't love the way it is on the Mac.
And once the iPad isn't embarrassing, then I'll, I'll, I'll flip the switch for Catalyst and so you Leo Dion (Host): Yeah, that makes Casey Liss (Guest): it'll, so it'll work on the Mac. Leo Dion (Host): like rotations and stuff for like, if you want to do split view on an eye, like not Casey Liss (Guest): you know, I don't know if I, yeah, yeah. Yeah. Leo Dion (Host): side by, Casey Liss (Guest): I think that does work if memory serves. You can tell how often I run the iPad app.
If memory serves, you can do slide over and all that jazz. But I haven't looked at that in a while, to be honest. And I do need to get on that. I'm trying to grab all the things that users are complaining about, which isn't that much. And I say that as though it's a bad thing. Like, the fact that your users are telling you, Can you fix this? I don't like that, or whatever. That's a compliment. Like, even if it's a complaint, it's still a compliment.
So... Leo Dion (Host): love it enough to tell Casey Liss (Guest): Exactly. So I'm trying to get through some of that stuff, and I think I've got most of it at this point. So I just gotta, I gotta go through my GitHub issues list. I just shipped a test flight up beta yesterday. I got a couple other things in flight with regard to URL handling. So, we were talking about channels earlier, and channels, if it detects that you have Callsheet installed, will offer to open things in Callsheet.
But, because of some oddities with the way channels, well I shouldn't say oddities, because of some choices that channels makes which are perfectly reasonable for them, they don't always have a movie database ID to give me, especially for like a particular episode of a TV show. So, so when they kick over to Callsheet, they might say, Hey, this user is watching Letterkenny Season 8, Episode 7. But they don't give me any identifiers that I can use to make an API call.
Well, so what I need to do, one of the things I want to do is start caching the fact that the user was watching, what did I say, Season 8, Episode 7, and kind of put that aside for a minute and go and figure out, the user search for Letterkenny, figure out, you know, which is the correct episode or which is the correct show. And then once they do, I can bring that data back and jump them directly to the right, the right episode of Letterkenny or, you know, whatever the case may be.
Once, once they've established, this is the thing I'm looking for. So I need to work on that. But other than that, there's, there's a couple of other things that I'm contemplating that I think could be really fun. I do have a dog. I, I don't think I've lost sight of reality, like an average dog owner. You know, the dog, the dog is a dog, and, and I love her very much, but, you know, she's, she's just a dog.
But I know a lot of people are very sensitive about their dogs, and there's a website, Does the Dog Die?
I think it's com and and they do have an API, and so one of my tasks that I want to look into is, is it easy enough that I could integrate with does the dog die, and maybe it would be opt in, but you could tell, you know, oh, if you're sensitive to these sorts of things, maybe steer clear of, you know, this particular movie, you know, or whatever the case may be, so that's a silly example of something that I think could be fun both for me and for my users, but, No promises.
We'll see what happens. Leo Dion (Host): yeah. yeah. Do you ever think, this is one of the things we have in the notes, but like, do you think Apple could, ever support something to where an app could integrate as you watch a video or a movie app where you could do something like Amazon X ray or Amazon prime X Casey Liss (Guest): they could, but they Leo Dion (Host): like, that would. be awesome. Casey Liss (Guest): would.
And you know, a lot of people have asked me, well, wait, you know, I see that you've got this Plex and Channels integration, but I don't always, or maybe ever, use Plex or Channels. I use the Apple TV app, or whatever the case may be. You know, I only ever watch Apple TV stuff, or maybe I only ever watch YouTube. And, Shouldn't there be an API where Apple just tells you this is what the person's watching. It doesn't matter what freaking app they're using. And my selfish answer is yes.
Yes, there should be that API. And I guess like, you know, the home automation people have reached out and Home Assistant is this like very, very nerdy home automation app that allegedly will let you do this sort of thing. And I started spelunking through their source code. And first of all, I think most of it's Python, which I'm okay at, but I'm not great at. Second of all. Like, the way they go about discovering this is extremely convoluted.
Third of all, I think you need to, like, pair Home Assistant with your Apple TV. And, like, that is not the way it works with channels and Plex integration right now. Like, it just, it works. If it's there, it works. And so, like, in a lot of ways, this is, like, the holy grail for Callsheet, but it would also be kind of ugly, too. So, I don't know if it's the right answer.
But... Leo Dion (Host): be a lot of maintenance too, and Casey Liss (Guest): Yeah, it's so much support burden, like it's just, I don't know if that juice is worth the squeeze, but you know, why, why doesn't Apple just provide an API for this? And then I was talking to somebody, I can't remember who it was, and they pointed out, well, because that's that's deeply privacy invasive. And I'm like, wait, wait, wait, what are you talking about? And they said, well, what if Facebook knew?
All the things you watched on your television. Does that seem good? And then it was like, okay, light bulb. Yep. The Apple will never provide this information. Never in a million years, because the, the tools of the world, the jerks of the world will use this to do terrible and gross things. And I just don't see Apple allowing it. Now, of course, the for me, what I would say is, well, can we opt into it? Could a user opt in to sharing their data with Callsheet or whatever the case may be?
And maybe, yeah, or whatever, or what exactly, like your location or what have you. Callsheet doesn't care about your location, but you know, you know what I mean? So it's like you said, things along those lines, same idea. And and maybe I still don't think they would do it, but maybe Leo Dion (Host): how about the other way where, like, we've had a few guests on who do music apps, right?
Where it's like, oh, you can tap into Music Kit and show album art or show metadata attached to the music you're listening to, so. Like, basically you have a video player that has access to it. Apple TV plus or Casey Liss (Guest): Yeah, I mean, one could dream and I, I hope Leo Dion (Host): one good dream.
Casey Liss (Guest): I don't, I don't expect it to happen in a million years, but but no, I, I think, I think there are ways in which I can do everything in my power to try to put that information front and center for my users. You know, I haven't looked into YouTube integration as an example, but it may be possible to do that sort of thing. Of course, at that point, I'm probably adopting the Chromecast APIs, which make me feel super gross.
And so again, that juice may not be worth the squeeze, but it's worth looking into. Leo Dion (Host): Was there anything else from dub dub this year as far as like behind the scenes things like Swift data or Observation or any of that stuff that you're like, oh, I wish we could do well Swift data. Maybe Casey Liss (Guest): not for me because I don't really store that much. But little I do store, I store in CloudKit.
And, I have a fairly, I have a fairly thin wrapper API that I put in front of CloudKit that I'm actually really proud of that makes it pretty darn straightforward to drop data into or pull data out of CloudKit. So I don't really need Swift data because there's just not that much. You know, it's your Leo Dion (Host): Yeah, yeah, Casey Liss (Guest): it's your, your, pins, your spoiler settings and stuff like that.
With regard to observation... I like the API in principle, but I've heard that there's a lot of gotchas that if you're not following, this is very, very much in the spirit of SwiftUI, if you're not following the happy path, I understand that it gets pretty ugly pretty quick. And since what I have is already working and doesn't really cause me any problems, I'm extremely reluctant to switch it up to the new hotness just for funsies. That being said, one of my near term goals.
Probably in the next week or so is I really, really want to investigate and probably use tip kit tip kit is this new thing where, you know, you can pop up, pop up overlays at convenient times for the user and say, Hey, you know, if you tap here, it'll do such and such.
So coming back to my conversation, you know, I keep wanting to surprise and delight, if you're looking at a movie and it shows the run time and say it's an hour and 30 minutes or whatever, if you tap the text that says an hour and 30 minutes, it'll show a popover that says ends at, you know, 90 minutes from now. So if it's, if it's noon and you tap that popover for a movie that's 90 minutes long, it says ends at 1 30.
And so the idea here is if you're looking at this movie and saying, Oh, do I have the time to watch this before bed or before I have to pick up my kid from school or whatever the case may be, you can just tap that button and it'll say, Oh, it ends at 1 30. And you know whether or not you have the time to watch it. Well, that's not particularly discoverable, right? Like, you have to know that this thing that doesn't even look like a button is tappable.
And so, TipKit, in theory, having not actually used it yet, would be a really great way to have a little popover that says, Hey, if you want, you can tap on this and it'll show you some extra data, you know, or whatever the case may be. And so, I'm really, really looking forward to digging into that and hopefully playing with it and seeing if I can get some good, good mileage out of it. Leo Dion (Host): Yeah. That makes total sense. Any plans for offline? Some sort of offline access?
What does the app do when you're offline? Sorry, I had Casey Liss (Guest): tough. No, it's, it's a fair question. It basically says tough noogies. Try again. I, I feel like it's, it's a completely fair question. I don't know that there's a need for it. like, if you're, if you're watching something on a plane and you can't access Callsheet, like I don't think that's that critical. Like the advantage of Callsheet is it's not flighty. You know, if you don't have an update on who that actor is.
It'll be okay. You know what I mean? It's not a, it's not a time critical mission critical sort of thing. I could be convinced I'm wrong about that, but I don't, I'm not too worked up about it or too worried about it. So I think it'd be, it would be a fascinating engineering challenge. Like what is the right way to figure? Well, how do you figure out what data to capture? What's the right way to capture it? How do you store it? How do you keep it efficient? How do you not explode the app?
to be, you know, 700 megs worth of random photos that you never look at again. Like again, from an engineering perspective, it's a fascinating challenge, but I just don't think that that's a challenge I necessarily have at this time. Leo Dion (Host): Yep. Makes total sense. Before we close out, we had one question on Mastodon that I wanted to answer. And I think we both have a C sharp background from a hundred years ago.
Casey Liss (Guest): Yeah, Leo Dion (Host): Did you, Did you, ever look at Xamarin, or whatever the heck they Casey Liss (Guest): yeah. I did, what was it called? It was mono something at the time. I forget what it was called at the time, Leo Dion (Host): It was called Mono, and then it was called Xamarin, and then they renamed it again Casey Liss (Guest): Oh, did they? I did not know that. When I looked at. Leo Dion (Host): I'm so out of the loop, Casey Liss (Guest): Yeah, same.
So I haven't been a NET developer since 2016. Is that right? I think that's right. And so anyways, I, I love dot net. I really did a C sharp at the time anyway. And as far as I know, it's still the case. C sharp was a phenomenal language. You had brief mentioned in the show notes about combine. Combine is if you, if you ask me, is apples take on Rx and Rx I believe was born or was at least popularly popularized in C sharp as far as I'm aware. So, Thank you. So anyways, I love C sharp.
I loved dot net. I didn't love windows and I didn't love a lot of the Microsoft other things. Visual Studio was also great. But at the time when Xamarin was new, I had looked at it and thought. It's similarly as we spoke about before. If I were to do it, this is how it would look. And then when they did, I think when they first offered mobile support, I had also looked at it.
and again thought, Okay, like this isn't necessarily what I would want in terms of I'd rather use, you know, the Objective C APIs and whatnot. But if you're going to suck Objective C, which is very different than, you know, C sharp, if you're going to suck that into C sharp, it's a pretty good way to do it. It makes a lot of sense, so on and so forth. I haven't looked at it since then, and this would have been, you know, like iOS 3 or 4 or something like that.
So, it's just not, leaving aside the fact that I, I don't really know C sharp anymore. Like that, that muscle is long since atrophied. Even, even leaving that aside. I find that having that middle layer between you and the platform vendor, I find that to be fairly distasteful. And, and, and it, it makes you beholden to even more people. In the same way I didn't want to be beholden to Revenue Cat. for stuff that would actually arguably make my life way better.
I don't want to be beholden to Microsoft or whoever owns Xamarin this minute to, to have to do their updates before I can accept, like before I can embrace Tipkit as an example. And maybe they're super fast. Like, I, I, I am casually acquainted with a guy who, last I heard, was working on Xamarin. I think more on the Android side than iOS. But, and he's incredibly bright, incredibly nice. Some, he lives somewhere around Richmond. It's not that the people are bad.
It's not that the project is necessarily bad. It's just it doesn't solve a need that I have in my life. And so I haven't really looked at it now. Leo Dion (Host): Yeah, so it's funny because when I started doing iOS development, it was back during Objective C and like, I had to do retain and Casey Liss (Guest): Oh, yeah. Same. Yeah, yeah. Leo Dion (Host): It felt.
so backwards, like, other than the fact that the iPad is an awesome device, I felt like, and I had been doing Silverlight, so I was doing Casey Liss (Guest): wow. You're one of those.
Wow. Leo Dion (Host): yes, yes and it felt so backwards now, in like 2023 with Swift, and I mean, I still think, like, there's, there's nothing you gain from, from going to Xamarin unless you're like, what ends up being is you're some massive company where you have a ton of NET developers and you need an internal app. Otherwise, like, there really is no, no real need to go to Xamarin. I, I just don't see the reason Casey Liss (Guest): I, I completely agree.
And I mean, obviously everything is an engineering trade off, right? We've talked about that a few times this, this episode. And, and I think there are engineering scenarios or situations where it does make sense. But I think generally speaking. Even if you're an Indie, like even if you're an Indie who knows C sharp up, down, inside, out, so on and so forth, you're, you've still got this entire API surface that is Cocoa Touch that you need to learn and potentially SwiftUI or UIKit or whatever.
Like those are incredibly broad and deep API surfaces that you're going to need to conquer one way or the other. So why not just conquer it in a first class language that one of the things I love about Swift is when, Swift is kind of like a Rorschach test where It looks like whatever you want it to look like, like as a C sharp person, it looked like C sharp. Objective C developers, well, a lot of them are very, well, were very cranky. Most of them have come around at this point.
But, but yeah, if you're an Objective C developer and you're not too cranky, you will look at it and say, Oh, I see the Objective C here. And I've understood that like Rust and Python people and Scala people can look at it and be like, Oh, yep, I see that. And, and so Swift has its problems for sure and has gotten extremely complicated over the last couple of years. I think. Almost woefully so, but that being said, it is still a great language.
It still does at least try to have progressive disclosure. so you don't need to be in a language expert in order to get things done. Again, I think that's getting tougher now, but generally speaking, it's true. So it's, it's a really great language. That's fun to work with. And there's not that much boilerplate that gets in the way. In fact, one of the things I love most about Swift is that they're always trying to remove boilerplate, you know, the observation stuff. I'm like hat, what is it?
Hash preview, you know. Yeah, that's Leo Dion (Host): about removing boilerplate. That's like, that's it. Casey Liss (Guest): Exactly right. So there, even though Swift can be daunting. It doesn't often feel like busy work, whereas so much of like raw UI kit felt like busy work. A lot of Objective C, although I did like Objective C quite a bit, a lot of it felt like busy work. And it's uncommon for me anyway. to find Swift feeling like busywork. I can fight Swift.
I certainly do fight Swift somewhat often, but it never, it's almost never that it feels like I'm just doing something because I have to, not because I want to. You know what I mean? That's, it's a thin distinction, but it's an important one. Leo Dion (Host): It's by the way, it's called NET MAUI, is Casey Liss (Guest): Are you serious? Leo Dion (Host): Yeah, yeah, Bad timing. Casey Liss (Guest): Oh, true.
Very true. Leo Dion (Host): I was gonna say like one of my first contracts was as I iOS developer was working with a company that they wanted to build their business layer in Xamarin so that they can share it with Android and. Casey Liss (Guest): I mean, that makes Leo Dion (Host): And then they brought me, they brought me on as the storyboard objective C expert and it worked. It worked Casey Liss (Guest): Fair enough.
Leo Dion (Host): Yeah, but they're, they're a massive company with, it was like an internal app. So it makes total Casey Liss (Guest): I agree. I agree. Leo Dion (Host): Anything else, Casey? I think we covered Casey Liss (Guest): No, I appreciate all your time. You know, we had talked before the show that you wanted to keep it to like somewhere around 45 minutes and here we are like double that. So I appreciate, I appreciate the time you've given me. But no, I, I, I'm very happy to be on.
And certainly if you ever have the occasion that you would like me to come back, you tell me when. Leo Dion (Host): Awesome. Awesome. Where can people find you, Casey Liss (Guest): Yeah, so my website is caseyliss. com C A S E Y L I S S but you can find my podcast at http. fm and relay. fm slash analog, spelled the correct way or with the U E on the end, take your pick. So, you can, you can check all those out and I'm on Mastodon. I'm on mastodon.
social as Casey Liss, Instagram as Casey Liss, and that's basically any of the places that I actually frequent. I'm on threads, but I almost never look at it. Are you doing anything with threads? I, I never pay attention. Leo Dion (Host): Well, did They just add the web interface Casey Liss (Guest): I don't think I've even loaded it yet. Leo Dion (Host): Yeah, not now. Not really. You gotta, when are you going to change the theme song? So it Casey Liss (Guest): Ah, I know, I know.
We've talked to Jonathan Mann. This is the ATP theme song. I think it goes, I can't sing, but it goes, If you're into Twitter, you can follow them. We're using, we're hanging our hat on the fact that it says, If you're into Twitter, which yes, I know it's strictly speaking X right now, but whatever. So we're hanging our hat on that, that, that.
We're, we've talked to Jonathan about slotting something in there, but none of the four of us, three, three hosts and Jonathan, man none of the four of us are quite sure what we should try to slot in instead, so we're just keep kicking that can down the road forever is probably what's going to end up happening. It's a relic of a bygone era when Twitter was not as actively evil. Well, slash a thing at all. Fair point. Leo Dion (Host): Thank you so much, Casey.
It was great Casey Liss (Guest): No, you as well. Thank you. I appreciate It Leo Dion (Host): People can find me on. X at Leo G Dion. I'm a Macedon at Leo G Dion at C dot M. They, my company is bright digit break, go to bright digit. com for all the other episodes and articles we have. If you're listening to this on a podcast player, I'd love a review. And if you're watching this on YouTube, like, and subscribe, please. Thank you so much. And I look forward to talking to you again. Bye everyone.