本集简介
双语字幕
仅展示文本字幕,不包含中文音频;想边听边看,请使用 Bayt 播客 App。
欢迎收听《Swift Over Coffee》第四季第八集。我是Mikaela Karan。
Welcome to season four, episode eight of Swift Over Coffee. I'm Mikaela Karan.
我是Paul Hudson。
And I'm Paul Hudson.
在这一集中,我们讨论了对于新Swift开发者的建议。
In this episode, we discuss what's our advice for new Swift developers.
当你学习的时候,你会经常感觉自己一会儿是世界上最蠢的人,一会儿又是最聪明的人。我们分享一下你对应用变现方式的看法。
As you're learning, you're gonna regularly feel like you are the stupidest person in the world and then the smartest person in the world. We share your thoughts on what's your approach is to monetizing apps.
我总是喜欢这样想:你希望别人能做的最重要的事情是什么?让那一件事免费。另外
I always like to think of it as what's the one most essential thing you want somebody to be able to do? Make that one thing free. Plus
但没人听我的。我已经非常努力了。所以我不清楚你怎么样,Mikaela,不过WWDC现在已经越来越近了。不到一周后我就要飞往西海岸。现在我正惊慌失措地试图在去库比蒂诺之前完成积压的工作。
But no one listens to me. I try so hard. So I don't know about you, Mikaela, but Dub Dub is getting very, very close now. I'm flying out to the West Coast in less than a week. And so I'm just panicking right now trying to get my backlog of work cleared ahead of going to Cupertino.
我现在的心情几乎和你一模一样。我会称之为“迫近的厄运”,但与其说是厄运,不如说是兴奋。我看了一下日历,甚至不确定是否已经把所有关于WWDC的事情都添加进去了,但日程已经排得满满的。
That is basically the exact same mood I am in right now. I would call it like impending doom, but instead of impending doom, it's like impending excitement because I was looking at my calendar and I don't even think I have everything in my calendar for Dub Dub and it is packed.
情况很糟糕,对吧?至少对我来说,通常我住在苹果园区和市中心库比蒂诺主街之间的热点区域,步行大概十五分钟的范围。我一般住在那里,所以情况还不算太糟。
It's bad. Right? Well, at least normally for me, I'm I'm in a sort of like hotspot area between Apple Park and the Downtown Main Street Cupertino area. There's a sort fifteen minute walking area. I'm normally somewhere in there, so it isn't too bad.
这是我第一年真正持有门票参加活动。所以我还不确定具体流程是怎样的,在苹果园区会待多久,以及有哪些活动。我也很爱讲话,所以估计我在那里的时间会比我预期的更长。而且还有各种社区活动。我在想,是不是应该再带上我的滑板,这样可以更快地穿梭于各个地点?
This is the first year I'm actually going with a ticket. So I'm not sure how it works, how long we'll be at Apple, and what all events are happening. I also talk a lot, so I imagine I'll be there longer than I expect. And then there's all the community events that are happening. And I'm like, should I just bring my longboard again so I can like travel between places faster?
它是电动的吗?还是只能靠脚蹬?
Is it like electric as well? Or just push
它不是电动的,但你到达的速度仍然比走路快。
It's not electric, but you still get there faster than walking.
是的,有道理。我也不清楚苹果发布会会是什么样,因为自从搬到Apple Park以来每年都有变化。去年他们举办了一场深夜活动,持续到很晚,还有晚餐之类的。所以今年可能又会不一样。
Yeah. Fair enough. So I don't know what to expect Apple's event either because it's changed every year since it's been Apple Park. Last year, they had a late night evening event going quite late with dinner and stuff. So it'll be different again this year potentially for all I know.
因此,是的,我其实也不知道会发生什么,但一定会排得很满。肯定是一个繁忙的周日,漫长的周一,漫长的周二,然后在这一周的其他时间还有别的事情,比如通勤活动等等。所以到时候会有点慌乱,到处奔波,在早上9点之前赶紧走点路。会有很多这样的情况。
And so, yeah, I don't really know what will happen either, but it's gonna be packed. Definitely a Sunday event, definitely a long Monday event, definitely a long Tuesday event, and then other things elsewhere in the week, you can say, commute events and more. So it's gonna be panicky, running around, getting my steps in before 9AM probably. A lot of that going on.
这将会非常精彩,而且可能没多少时间睡觉。不过你应该优先考虑睡眠,但我不会。
It is going to be amazing and probably not much sleep. But you should pro prioritize sleep, but I don't.
我也是。我总是说,我会在回家的航班上补觉。对吧?所以我一直这么说,也挺真实的,但确实很累。我想说的是,对我来说是这样,对你可能也有点如此,但对于像我这样的外国人来说,飞过去的费用、酒店住宿等开销都不小。
So I don't either. I I was like, I'll sleep on the flight home. Right? That's why I always say, and it's kinda true, but it's it's a lot. I'll just say for me, look, for you too a little bit, but mainly for foreigners like me, the cost of flying there, the cost of the hotel and stuff.
比如,我会提前出发以尽量克服时差带来的影响。这挺贵的,所以我告诉自己,既然来了这里,就要每分每秒都充分利用,才能让这笔花费值得。
Like, I fly out early to try and beat the jet lag. It's it's expensive and so I'm like, I've gotta make every minute count while I'm here to try and justify the cost.
是的,我也有同样的感觉。另外,我的时差问题没有那么严重。
Yep. That that's how I feel too. Plus but I don't have the issue of as much jet lag.
没错,你只有三个小时的时差,对吧?
Correct. You've got like three hours. Right?
是啊,三个小时?我只是变成一个早上太平洋时间的人而已。然后到了下午和晚上就成了东部时间的人。所以总的来说,一切都刚刚好。
Yeah. At threes? It's a I just become a morning Pacific time person Right. And then I'm an afternoon evening, like, Eastern time person. So it just it ends up, like, completely working out.
嗯,这次会很忙,因为我们会在那里举办活动。对吧?你知道的,我会现场举办Hacking with Swift活动,会有超过140人参加。我们会做很多关于iOS新功能的分享。下一个iOS系统,应该很快就会发布了。
Well, it's gonna be busy because we're running events there. Right? You know, I'm running Hacking with Swift in real life, which has got a 140 plus people coming along. We're doing a whole bunch of what's new in, iOS. The next iOS, one of that ships, soon.
我会在活动期间宣布一本新书。到时候会有一个小测验,还有很多赠品发放。哦,那会非常、非常忙碌。我知道大家都喜欢赠品。
I'll be doing a new book announcement during that event. There'll be a little quiz, bunch of swag going on. Oh. It's been very, very busy. I know swag.
他们不会喜欢这些赠品的。
They won't like swag.
不过是一本新书。
New book though.
我知道,一本新书。这是一本大部头,所以我真的非常期待这次发布,我觉得现在正是推出它的最佳时机。
I know. New book. I'm it's a big one. That's why I'm I'm really looking forward to it. I think it's exactly the right time to be launching it.
因此我对此感到相当高兴。说到书籍,朋友们,我现在正在举办我的Dub Dub D C二十五周年促销活动,所有书籍和套装都半价优惠。我会在节目备注里放一个链接。
So I'm quite pleased about that. Speaking of books, you know, folks, I am running my dub dub d c twenty five sale right now. It's half price in all my books and bundles. I'll put a link in the show notes somewhere.
太棒了。另外我们还在举办iOS开发者欢乐时光活动,届时也会进行线下聚会。这是一年中我们唯一一次真正聚在一起轻松聊天的机会,就是随便聊聊而已。
That's amazing. And then I also have iOS dev happy hour that we are running where we are putting our IRL of it as well. It's like the one time in the year that we actually get together and just have a good time. You just chat. That's all it is.
很棒的活动。
It's great.
你能透露一下吗?入场时会有小礼物吗,还是说这个要等到当天才能揭晓?
And can you say, is there a little gift as you walk in or is that gonna be top secret until that actually happens?
哦,这个要等到你入场的时候才会揭晓。但我们确实准备了礼物。这次礼物比上次的小一些,因为上一次我们给每个人发的是品脱杯,有些人不方便带走。所以这次我们准备了更小一点的礼物。
Oh, it'll be top secret until you actually walk in. But we do have a gift. And it's smaller this time because last time we did pint glasses for everybody and some people couldn't bring that. So now we have a gift that is smaller.
半品脱杯。
Half pint glasses.
是的,会很棒的。然后我们还有一个小惊喜,我也很期待。我们已经下单了,现在所有东西都已经发货,一路运送到库比蒂诺附近。我们要做的就是去取回来。
Yeah. It'll be great. And we then we have a little surprise that I'm also excited about that we ordered and we already have everything shipping all the way to, like, around Cupertino. All we have to do is go pick it up.
太好了。
Nice.
那将会非常有趣。
It's gonna be super fun.
是的。在这期间,从现在到那时之间,我发布了一个新的开源项目。它起源于一次与 Swift Plus 的直播编程活动。我想向大家展示一下,我们一起来为 macOS 构建一个小型的 App Store Connect 阅读 API 应用。我把这个项目放到了 GitHub 上开源,之后很多开发者都添加了更多的功能进去。
Yeah. Well, in the meantime, between now and then, I've released a new open source project. It came from a hacking with Swift plus livestream. I wanted to show folks, hey, let's build a little App Store Connect reading API app for macOS. And I put on on on GitHub open source, and a whole bunch of folks have added more things to it now.
现在这个项目实际上已经很不错了。你可以从那里阅读客户评论,并直接回复客户评论。它正在获得越来越多的关注。这个项目叫做 Ship Shape,是我很喜欢的一个双关语,而且它是开源的。
And it's actually quite good now. You can sort of read customer reviews, reply to customer reviews right from there. And so it's getting a lot of traction. It's called Ship Shape, which is a pun I quite like. And it's open source.
你可以去参与开发、贡献代码、试用,或者如果你想的话,还可以从中学习曲线知识。我希望今天能完成它,如果我能及时完成的话——今天,因为我在做这个,那么今天我们就来听听看,在我的网站上发布一个新功能。这是相当长一段时间以来的第一个新功能。哦,我知道。
You can go and hack on it, contribute to it, try it out, learn from the curve if you want to. And I'm about to, hopefully, today, if I get it finished in time well, today, because I'm making this, then my today we listen to it, ship a new feature on my site. The first one in quite a while. Oh. I know.
知道吗,天哪,这么多的新东西。我一直在做这些事情。'What's new in Swift' 这个项目我已经做了很久了。你现在可以选择当前版本,也可以选择下一个版本,它会告诉你发生了哪些变化。
Know. Man, so many new things. I've been doing these things. What's new in Swift for quite a while now. You can go ahead and choose your current version, choose the next version that tells you what's changed.
我现在也在为 SwiftUI 做同样的事情。比如你可以说,我现在使用的是 iOS 16,但我想以 iOS 18 为目标。那我到底能用些什么?它就会显示那些版本中发生变化的部分。
I'm doing that for SwiftUI. To be able to say, you know, I'm on iOS 16 right now. I wanna target iOS 18. What can I actually use? They'll just show you the bits that have changed in those versions.
哦,我喜欢这个功能。
Oh, I like that.
如果它能正常工作的话。
If it works.
我想可能会这样,但也有可能会出大问题。你永远不知道。
I imagine it probably will, But it could go horribly wrong. You never know.
还有时间。我随时都可以做个Fruitful(注:英文原词保留,为专有名词)。说到Fruitful
There's still time. I can always do a fruitful. Speaking of fruitful
那是一个很棒的过渡。我已经设定了一个预购。所以它会在预购时选择第七个选项。然后我跟克莱门斯聊天的时候,我们当时应该是在马其顿,我觉得我当时很有信心。
That was a great segue. I have set it to do a preorder. So it's gonna do preorder choose seven. So then I was talking to Clemens when we're at I think I was confident Macedonia.
克莱姆,克莱姆。是的,我们最好的伙伴,节目的朋友。
Clem, Clem. Yeah. Our best buddy. Friend of the show.
黑客或者南极。是的。但我们看到人们去过的所有地方,比如今年年初,天哪,已经五月份了,实际上快到六月了,我们要为Fruitful做一个预购。我们,我是说我自己。因为当你预购之后,那天这个应用就会下载到每个人的手机上。
Hacking or Antarctic. Yeah. But all the all the places that we've seen people, like, the beginning of this year because it's, oh my gosh, already May and almost actually already June, we are gonna do a preorder for Fruitful. And we, I mean, myself. Because when you do a preorder, it'll download on everybody's phone that day.
所以,你可以宣布预购,每个人都会说,哦,我也想下载这个应用。等发布日期一到,它就会立刻下载到人们的手机上。他说这是一个非常好的主意,我也同意,对于这种类型的应用来说是个好主意。因此到了星期六,它就会自动出现。
So, like, you can announce the preorder, everybody can say, oh, I wanna get this app. And then once the date comes, it'll just immediately download to people's phones. So he said that that's a really good idea and I agree that it's a good idea for this kind of app. So then on Saturday, it would just appear.
是的。如果你想在排行榜上获得一些关注,那么确保你的预购工作做好是很重要的,因为突然之间你可能在第一天就有500或1000次下载,这将大大提升你的排名,并引起注意,希望如此。
Yeah. And if you wanna try and get some traction in the charts, getting your pre order right is important because suddenly you'd have maybe 500 or a thousand downloads on day one, and that's gonna really push you up and get you noticed, hopefully.
没错。这就是我们的计划,你知道吗,因为我们一直在等待它的发生。我认为上一集的名字还叫“悲伤的Fruitful长号之悲”。总有一天,它不会再让人感到悲伤。
Yes. And that that's the plan, you know, because we've all been waiting for it to happen. I think even the last episode name was the sad the fruitful trombone sadness. And one day it won't be sad.
现在它几乎成了一个长期笑话,就是它永远不会发布,但也许这次真的要发布了。我们需要一个新的长期笑话,米凯拉。
It is almost now a running joke that it will never ship and it may actually ship now. We'll need a new running joke, Mikaela.
我知道,因为在愚人节那天我还开玩笑说,这个时候它到底发布还是不发布,都已经分不清是不是玩笑话了?
I know because it was funny on April Fools, I was like, is it a joke if it does or doesn't ship at this point?
好了,玩笑话说到这儿。米凯拉最近确实有一些新的重要进展,对吧?
So all all comedy banter aside, there has actually been a serious Mikayla development recently. Is that right?
等等,是的,确实有。我当时心想,你在说什么?天哪。
Wait. Yes, there has. I was like, what are you talking about? Oh my god.
米凯拉,我想说点什么。稍等一下。
I'm trying to say something Mikayla. Hold on.
你说过了。我们继续吧,你可以把我不知情的那一部分剪掉。我对这个不太在行。
You said it. We'll just pick it up because you could cut that part of me not knowing. I'm not good at this.
不管我们给这个播客付了多少钱,米凯拉,你都没拿到应得的报酬。你的喜剧目标就是你自己。
Whatever we're paying this podcast for you is you're you're not getting paid enough, Mikaela. You're your comedy goal, just yourself.
是的,确实有了新进展。我现在成为了苹果公司Swift生态系统指导小组的新成员。
Yes. There is a new development. I am now a new member of the Swift Ecosystem Steering Group at Apple.
米凯拉,这意味着什么?
What does that mean, Mikaela?
这意味着,正如我从网站上看到的那样,生态系统指导小组的主要目标是鼓励新软件包的简化开发以及现有软件包的持续演进。随着工作的推进,我会进一步了解它的具体含义。
It means, as I read from the website, the Ecosystem Steering Group. Its primary goal is to encourage its streamlined development of new packages and evolution of existing packages. And I will learn more about what that means as we keep going.
但这也意味着我们现在可以把反馈报告直接发送到米凯拉的收件箱了。她喜欢这些报告,并且会亲自帮我们解决问题,对吧?
But it means we can all now send our feedback reports straight to Mikaela's inbox. She likes those, and she'll get them fixed for us personally, won't you?
没错,当然了。这正是会发生的事情。
Yep. Definitely. That's exactly what will happen.
现在是新闻时间。再一次,我们有很多关于Swift的新闻要讨论,首先就是Swift的新版本,Swift 6.2。基本上可以确定它会在两周内发布,我们此时正在WWDC上进行制作。而且这一次又有大量的变化。我都不知道怎么保持这样的节奏了。
And now it's time for the news. And once again, there's a whole barrage of Swifty news for us to talk about, starting with another new version of Swift, Swift 6.2. It's almost certainly gonna be landing in just about two weeks as we're making this at WWDC. And there's a huge range of changes once again. I don't how to keep this kind of pace up.
这真的很了不起。但说实话,有时候Swift的发展真的是永不停歇。
It's quite remarkable really. But, yeah, it's nonstop with Swift sometimes.
这很令人兴奋。听起来我们现在肯定在经历所有的6.x点版本更新,然后希望我们不知道什么时候,7会是一个全新的东西,或者我们会继续停留在Swift 6一段时间。
That's exciting. And I sounds like then we're definitely going now through all the six point point releases, and then hopefully, we don't know when, like, seven will be a new thing or if we're gonna stay in Swift six for a while then.
嗯,Mikaela,Swift 5已经持续了五年,所以也许Swift 6也会持续五年。并发方面又有一系列新的变化。我知道大家可能现在已经对这些感到有些厌倦了。但这次最大的一个新特性是,在Swift中新增了一个选项,允许你实际上不使用并发功能。
Well, Swift five lasts us five years, Mikaela. And so maybe Swift six will last five years as well. There's a whole bunch of concurrency changes once again. I know folks are probably getting quite tired of these now. But but the big one is there is a new option in Swift to say, actually, please just let me not use concurrency effectively.
它直接将你的所有代码都放到主actor上运行。因此,所有那些Sendable警告之类的问题都会消失。当然,一些事情比如外部框架访问网络,或者使用苹果自己的异步等待功能,仍然会使用它们自己的任务等机制。但我们自己的代码或应用程序代码将在主actor上运行。
It just shunts all your code onto the main actor directly. And so all those sendable warnings and similar are just gonna go away. Now, obviously, some things like external frameworks hitting like the network, for example, or using Apple's own async await stuff. That's still gonna be using their own tasks and similar. But our code or our app code will run on the main actor.
我现在还不知道的是,这个功能是否会在新的Xcode项目中默认启用。我非常希望如此,因为它将为绝大多数用户解决并发问题。当你准备好的时候,你会说,好吧,我准备好了。现在为这个项目启用并发功能吧。
What I don't know yet is whether this will be enabled by default in new Xcode projects. I desperately hope so because it will solve concurrency for the vast majority of folks. And when you're ready, you'll say, okay, fine. I'm ready for concurrency. Enable it for this project now.
你必须着手修复actors发送的各种并发警告,这是我们目前所习惯的。但你可以等到自己准备好的时候再处理,而不是从第一天起就必须面对。因此,这确实能帮助学习者更顺利地接受和使用Swift中的并发功能。所以我真心希望,真心希望,真心希望它默认启用。
You'll have to go ahead and fix actors sending who knows what kind of concurrency warnings that we're used to at this point. But you do it when you're ready, not from day one. And so really, I hope smooth out the adoption of concurrency and Swift for learners. So I'm I hope I hope I hope that's enabled by default.
是的,我喜欢这一点。这也自然过渡到下一个有关可访问性的话题。
Yeah. I like that. And that moves into the next one about accessibility too.
等等,还有更多关于Swift 6.2的功能我很在意呢。
Wait. Hold hold up. There's stacks more Swift 6.2 features that I care about.
哦,我们要不要全都谈一遍?
Oh, do we do we wanna talk about them all?
哪一个引起了你的注意?我说的是它们中的哪一个?哪一个引起了你的注意?
Which one caught your eye? What am I talking about them all? Which one which one caught your eye?
我正在读它们,但不像你那样深入地研究过。我的意思是,我只是粗略看过你的博客文章而已。
I am reading them because I have not looked at it as in-depthly as you have. Meaning, I have glanced at your blog posts and that's it.
我在博客文章上付出了很多努力。
I work so hard with blog posts.
其他人很欣赏并阅读了它们,而我还没有。
And other people appreciate it and read it. I just haven't.
你就是没有。
You you just don't.
我只是
I just
我只是不想改变大家目前的习惯。因为有很多变化。其中一项在网络上可能引起较大争议的功能叫做原始标识符(raw identifiers)。现在你可以在函数名等地方使用反引号。例如,你可以用反引号包裹一个包含空格和标点的长字符串作为名字。
I just don't to change folks what's changing. Because there are a bunch of changes. One of them that I can actually cause quite a mixed response online is called raw identifiers. So you can now use backticks in things like function names, for example. So back so func backtick, a long string with spaces and punctuation where you want to, and then close a backtick.
现在,函数名、方法名甚至枚举情况都可以使用反引号来命名,这些名称在之前是无法使用的。一开始看起来会有点可怕。比如 func `请 空格 做 空格 这个 空格 事情`,不管是什么名字,这都是有效的。他们这样做的原因之一,当然也是为了支持Swift测试,在测试中通常会使用@test宏来为测试提供一个人性化的名称。
And that's perfectly bad for a function name now or a method name and similar or a enum case, for example. Things you could not currently make names right now become valid inside backticks. And it it looks horrific at first. It's like func, please space do space this space thing, whatever is your name, and that's valid. But the reason they're doing it, one of the reasons they're telling us they're doing it, of course, is that it supports Swift testing, where it's very, very common to use the at test macro to give your tests a reasonable human name.
测试用户可以登录。在这下面,它可能会有类似user_can_log_in之类的写法。对吧?通过将这两者统一起来,测试函数名就直接变成了英文描述,使得测试宏部分的命名变得多余,从而减少了重复。这是非常棒的改进。
Test user can log in. And below that, it has something like user underscore can underscore log underscore in or something like that. Right? So by unifying those two together, your test function name becomes effectively English directly, making the test macro part of naming kinda go away, thus reducing duplication. That's very nice.
他们还为enumerated增加了集合性能优化。理论上来说,在SwiftUI中,你可以直接使用for each summary.enumerated,而不需要再做那种奇怪的转换成数组然后ID随便什么的操作了。直接使用即可。
They've added collection performances for enumerated. So you could, in theory, with SwiftUI, do for each summary dot enumerated. And now I'm to try and do that weird cast to, like, make it an array and then ID of whatever. No. Just use it directly.
那将会非常、非常好。我个人特别激动的是,我知道大多数人可能兴趣不大,但我认为这并不会带来太多新的机会,那就是关于正则表达式的支持。我非常感谢开发人员实现了这个功能,因为它开启了一系列强大的正则表达式功能。我也希望以后可能会有基于正则表达式的语法高亮等功能。我们拭目以待吧。
It'd be very, very nice. And what I'm personally excited about, and I know most folks couldn't get less, but I don't think this is opening a lot of chances and opportunities here, is look behind for regular expressions. I'm so grateful to the developer who put that in place, because it unlocks a whole range of powerful regular expressions. And I'm hoping, maybe, things like regex based syntax highlighting too. We'll see.
所有这些听起来都很棒。听起来很好。
All of those sound amazing. They sound great.
而且这些只是我感到
And those are only I'm so
很高兴你为我们整理了这些内容。
glad you compiled them for us.
嗯,写那篇文章大概需要一周的时间,你知道的,因为我得
Takes a it takes about a week to do that article, you know, because I've got
哦,是的。
a Oh, yeah.
你得阅读那些演进提案,对吧?然后理解它们,当然,它们的例子中经常使用 foo bar 和 baz,你根本不知道其中真正实用的部分是什么。通常里面包含了很多信息。
You gotta read the evolution proposals. Right? And understand them, and of course, they use a lot of foo bar and baz in their examples. You don't know what's really practical about it. There's often a lot of lot of information in there.
每个演进提案通常都有好几千个单词。弄清楚它是干什么的,然后这个问题重要吗?它对开发者有用吗?我要怎么解释才能让读我文章的人明白呢,显然不是你这样的人?这确实很难。
It's often like several thousand words per evolution proposal. So figuring out what it does and then does this matter? Will it be useful to developers? And how can I explain in a way that makes sense to folks who actually read my articles, which apparently is not you? And and and then that's hard.
这很花时间。而且我觉得最终会有很多真正的自我怀疑,我会想,我是不是搞错了?这样对吗?我是不是误解了什么?我自己也不确定。
It's a a lot of time. And and there's a lot, I think, ultimately of, truly impostor syndrome in there because I'm like, did I get this wrong? Is that right? Am I misunderstanding this? I don't know.
这是份辛苦的工作。
It's hard work.
我们非常感激。
We appreciate it.
是的。你没有,但这很
Yeah. You don't, but it's nice to
看到这一点。
see that.
无论如何,继续吧。
Anyway, carry on.
苹果公司在全球无障碍意识日之际刚刚宣布了即将推出的无障碍功能。他们宣布现在将拥有无障碍营养标签。类似于隐私营养标签,我们现在有了无障碍营养标签。
The upcoming accessibility features have just been announced at Apple during the Global Accessibility and Awareness Day. They announced that we will now have accessibility nutrition labels. So similar to the privacy nutrition label, we now have an accessibility nutrition label.
就在上个月我们的播客和北极会议之后,我也在思考这个问题。我当时想,他们怎么可能做到呢?因为实际上你得用减少动态效果或色盲模式来测试它。但答案基本上是开发者自己说明他们做了什么,应用审核几乎默认他们不会撒谎。而实际上这种方法确实有效。
I was thinking of this just last month after our podcast, Arctic Conference. I thought, how could they possibly do it? Because it you've got to actually test it out with, you know, reduced motion or color blindness mode enabled. But the answer is it's basically developers say what they've done and app review more or less take it for granted that they're not lying. And actually, that kind of works out.
我能看到这实际上会运作得很好。比我们现在什么都还没有要好。所以我很高兴有了一些东西。我非常喜欢这个想法。此外我还添加了一些非常酷的功能。
I I I can see that actually working quite well. It's better than nothing we have right now. And so I'm glad that there's something. I like the idea very much. Plus I've added some very cool things.
我的意思是,他们表示Vision Pro将新增一个缩放功能。这样你就可以按下按钮放大屏幕上的特定区域,以便更清楚地查看内容。这真的让我感到惊讶。我知道从技术上讲这很容易实现,但这确实是改变生活的东西。对吧?
I mean, they're saying that Vision Pro will gain a zoom feature. So you can, you know, press a button and zoom in a particular area of the screen to see things more closely. And that genuinely amazes me. I know I know, technically, it's quite easy to do, but it's actually life changing stuff. Right?
这可能会真正改变某人的生活,让他们做以前做不到的事情,看到苹果能做到这点真是太好了。
That can actually make someone's life they could do things they could now could not do previously, and that's wonderful to see from Apple.
我也喜欢Vision Pro外部摄像头表现得很出色这一点,即使到目前为止作为开发者我们还无法真正使用它。这一步让我们离获得Vision Pro的摄像头访问权限又近了一步,比如可以扫描周围环境之类的功能。而且这也让人感觉有点像‘找不到眼镜’,但需要戴上眼镜才能找到眼镜的那种情况。
I like also that really tells us that the camera on the Vision Pro on the outside is pretty good even if we so far do not really have access to it as, like, developers. So it's like one step closer to unlocking us having camera access on the Vision Pro to, like, be able to scan your environment sort of thing. And that also feels like the I can't find my glasses, but I need my glasses to find my glasses kind of thing.
是的。我有点想知道Vision Pro是否达到了苹果持续的开发者销售预期,因为我知道他们最初的销售目标相当低。我想大概是二十五万台左右吧。但那是去年或发布前一年的事了,现在呢?它还在以合适的水平继续销售吗?
Yeah. I I kinda wonder a little bit whether Vision Pro is hitting Apple's continued developer sales expectations, because I know they had quite a low initial target. I think it was like maybe a quarter million perhaps. But that was last year or year before when it launched, and and now what? Has it carried on selling about the right level?
我不确定,但我有点好奇,我们是否会看到他们说,好吧,Vision OS 3发布了,给你该死的相机访问权限。这可能意味着,实际上销量有点不稳定。我们需要找到方法让更多应用推出杀手级功能。
I'm not sure, but I kind of wonder if we see them say, okay, fine. Vision OS three is out. Have your damn camera access. That's them saying, actually, sales are pretty wonky here. We need we need to find ways to get more apps out there doing killer stuff.
基本上,我们等着看他们宣布什么吧。是的。在其他新闻方面,苹果又发布了一则新闻稿,这次真的让我很惊讶。他们公布了在App Store上阻止了多少恶意软件。这些数字说实话简直令人震惊。
We'll see what they announce, basically. Yep. Elsewhere in the news, another Apple press release came out, and this one really surprised me. They released numbers on how much malware the Apple stops on the App Store. And the numbers are honestly just astounding.
这个数字比我以前最夸张的猜测还要高得多。他们表示,仅在2024年,也就是去年,就终止了146,000个开发者账户。开发者账户啊,146,000个。什么?这真的让我震惊。
They're way way higher than I would have possibly even vaguely guessed. They said, just in 2024, so last year, they terminated a 146,000 developer accounts. Like, developer accounts, a 146,000. What? It just blows me away.
我很惊讶这个数字竟然如此巨大,我也好奇其中有多少真的是误操作造成的,因为我感觉我们也经常看到类似情况:比如‘哦不,他们关闭了我的开发者账户’或者‘我无法访问并被锁定了’。而且也没有一个很好的方式去说明,嘿,这是一个错误。
I wonder how many of that that's amaze that's a gigantic number, and I wonder how many of those really are, like, also accidental because I feel like we see that often as well. It's like, oh, no. They shut down my developer account or I don't have access and got locked out. And there's, like, not a good way to also, like, say, hey, this was a mistake.
是的。我们不知道具体细节。但仍然有146,000个账户被关闭。我每年最多见过一两个关于这类问题的抱怨,但不是146,000个。
Yeah. We don't know. But it's still a 146,000 being shut down. I've seen, like, one or two complaints a year about that, but not a 146,000 of them.
我很赞赏他们在做这件事,因为不管你怎么看待App Store的规定,能够清除这样的欺诈行为是非常好的,因为它确实改善了生态系统。
I appreciate that it's something that they are doing because, like, no matter what you feel about the App Store rules, cutting out fraud like that is very nice because it does make the ecosystem better.
是的。他们还提到,仅在2024年,就阻止了超过20亿美元的欺诈交易,并拦截了200万次看起来具有风险的应用提交,从而保护用户免受侵害。再说一次,这个数字甚至比我的最高估计还要高出百倍,非常高。当然,这里还有一个真正的问题,由于各种原因我们不会在这里回答这个问题,那就是他们为什么现在才宣布这些信息?
Yeah. Well, they said they prevented, in 2024 alone again, over $2,000,000,000 of fraudulent transactions and blocking 2,000,000 app submissions who looked risky for on reaching users. And again, that's a a factor of a 100 more than I would have guessed, even high guesses. It's very, very high. Now, of course, the real question here, which we're not gonna answer here for various reasons, is why are they announcing this now?
我们可以猜测一下他们为何选择现在公布这些信息,但我们把这个留给听众你们自己思考。为了结束我们的新闻环节,今天来点不一样的,我想提一个有关WBC的传言。如果你不喜欢听传言,请快进大约九十秒。如果你不介意传言,那就继续听下去。否则的话就快进吧。
And we can we can take guesses about why it's announcing this now, but we'll leave that to you, the listener. And to wrap our news up, actually, just for a change just for a change, I want to mention a rumor, about WBC. So if you if you don't like rumors, hit that fast forward button about ninety seconds. If you're okay with rumors, listen on. Otherwise, fast forward.
好,你还在这儿。网上有一个传言称,苹果可能会将他们的操作系统改用年份制编号。也就是说,iOS将不会从18升级到19,而是直接跳到26,因为这是2025、2026年的版本。这样就能统一macOS 26、visionOS 26等版本号。
Okay. Still here. There's been a rumor online saying that Apple might switch to year based numbering for their operating systems. So it would go from iOS 18, not to '19, but to '26 because it's a twenty five, twenty six year release. And so it would allow them to unify macOS 26, version OS 26, and so forth.
我觉得这很有趣,对吧?
I it's interesting. Right?
这说得通。确实如此。但你内心又有一个追求完整的人在说,哦,不,但我们缺少了一些数字。我们永远也不会知道那些缺失的数字里发生了什么。
It makes sense. Like, it does. But then it it's the completionist in you who's like, oh, no. But but we're missing numbers. We will never get to know what happened in those numbers that we all lost.
当有人开始做Vision OS 26的事情时,你就会说,嗯,我之前用的是Vision OS 1,你知道的。这会让你听起来真的很老成,懂吗?
But when someone starts doing Vision OS 26 stuff, you can well, I I was doing Vision OS one, you know. It makes you sound really old and mature, you know.
我很喜欢这一点。是的,这很有道理,可能也是一件好事,因为我们现在有iOS 18、macOS 15、watchOS,对吧?有点难。我其实也不太清楚。
I love that. Yeah. It's it makes a lot of sense and it probably would be a good thing because we are on iOS 18, macOS 15, watchOS Yeah. It's hard. I don't actually know.
tvOS又是另一个系统。是的。不过VisionOS目前只有两个版本。
TvOS is something else. Yeah. VisionOS is only on two though.
那其实是2.5。所以他们确实是这样做的。因此tvOS和iOS保持一致。而watchOS则到处都是。是的。
That was 2.5. But So they they yeah. So tvOS matches iOS. Watch West is all over the place. Yeah.
这挺复杂的,对吧?如果他们把它设定为OS '26或者其他什么,那么像SwiftUI的变化就变得非常容易了。因为你可以看到它们都在同一年、同一个地方统一了。顺便说一下,朋友们,我们的下一期播客将在WWDC周期间于Community Kit现场录制。
It's it's complicated. Right? And if they set this in it's just OS '26 or whatever, it makes things like SwiftUI changes very, easy. Because as you can that's the same year for all of them in one place. Oh, by the way, folks, our next podcast will be recorded live during WWDC week at Community Kit.
敬请期待。届时会有一场临时的通知,关于我们的开放投票,因为它紧接在Apple Park主活动之后。所以请留意这些信息。
So watch out for that. There'll be a last minute call, for our open ballot, because it's very, very tightly after the main event Apple Park. So watch out for that.
说到会议,在Dub Dub期间我们举办的活动叫做community kit,并且它会在周一到周三举行,也就是6月11日。我们将在那里录制Swift Over Coffee,同时还会举办一系列不同的社区聚会以及各种活动,贯穿整个星期一至星期三。任何人都可以随时加入,但也请查看在线网站,了解一些需要门票的具体活动,因为不幸的是,最终我们的容量是有限的。我们会了解到具体的容量是多少。
And then speaking of conferences, the event that we are running during dub dub is called community kit, and that is happening Monday to Wednesday, so June '11. That's where we are going to record Swift Over Coffee, and we are also having a bunch of different community meetups that are happening and different activities throughout the whole or throughout the week, Monday to Wednesday. Anyone could drop in, but also check the website online for specific things that you need tickets for because unfortunately, we have a limited capacity eventually. We will we'll find out what that capacity is.
然后我们就将迎来一个漫长的暑假,因为很多活动都不会在七、八月份举行。如果你要提前计划秋季的活动,九月份我们在西班牙有Swift Island,十月份还有Surfside Swift和Swift Connection,更多活动即将推出。记住,如果你正在组织一场会议,我们很乐意定期在这档播客节目中介绍你们。当你有早鸟票可用,或者宣布演讲嘉宾或其他内容时,请联系我们,我们会尽力为你宣传。
And then we've got a long summer break because a lot of events don't take place during July and August and similar. And if you are planning ahead for autumn, we have Swift Island and Spain in September, then Surfside Swift and Swift Connection in October, plus more coming soon. Remember, if you organize a conference, we'd love to feature you here on our podcast on a regular basis. Get in touch with us when you have early bird tickets available, or you announce speakers, or something else, and we'll do our best to feature you.
这一集的主题是,我们给新Swift开发者的建议是什么?我们写了很多要点,甚至不确定该如何一一列举,但我们会一起理清思路,因为我们有太多建议了。
The theme for this episode is what is our advice for new Swift developers? We wrote so many points. Like, I'm not even sure how we wanna go through it, but we are gonna figure this out together because we just have so much advice.
是的。我们讨论了一大堆想法,因为你知道,就我们两人而言,我们从事这类工作已经很久了。所以希望我们的这些想法和建议对你有用。首先我想真心地说一句,我认为现在正是开发应用的最佳时机。
Yeah. We went through a whole bunch of ideas because, you know, between the two of us, we did this kind of thing for a long time. And so hopefully, some of our ideas and advice is useful for you. Yeah. And first I wanna say, genuinely, I don't think there's ever been a better time to build apps.
我知道有些人担心AI会取代编程的工作,但对我而言,AI只是又一个降低了门槛的东西。如果你想开发一款具有复杂UI或强大API的杀手级应用或其他任何东西,现在再也没有理由不去发布你的作品了。即使是复杂的困难的功能,AI也让它变得更容易、更可行。
I know some folks are worried that AI will take this coding role away. But really for me, AI just removes one more barrier. If you wanna build some killer app with some complex UI or some powerful API or whatever, there's no excuse not to ship something now. Even a complex hard feature, AI makes it easier. AI makes it possible.
这对每个人来说都应该是一件好事,因为它真正降低了入门的门槛。
And that should be great for everyone. It really lowers the barrier to entry.
而且因为WWDC即将来临,届时会宣布一些新的东西。随之而来的是,你和其他经验丰富的开发者一样,都处于尝试这些新事物的同一起跑线上。因此,大家一开始都在摸索学习,你和那些经验非常丰富的人之间并没有什么障碍。当然,肯定还是有一些障碍的,不过……
And because dub dub is coming up, there's going to be new things that are announced. And with that, you are at the same place as other people who are super experienced in trying this new thing. So, like, everybody is trying to figure it out to start. And so, like, there's no barrier between you and somebody super experienced. Of course, there's some, but Right.
但没那么多。
There's not
没错。比如,如果他们在WWDC上宣布了一个惊人的全新小组件功能,那么在第一天,所有人都站在同一个起点上。没有人使用过这个功能,也没有人开发过这样的应用。
as much. Exactly. So if if they announced some amazing new widget feature at WBC, for example, everyone's there on day one. No one's used it before. No one's had this thing before.
没有人开发过这样的应用程序。你在第一天就跟其他人一样,都是新手。好好利用这一点,抓住机会。
No one's built apps to before. You are there on day one just like everyone else. Use that. Seize it. Grab it.
用它做一些有趣的事情。
Do something interesting with it.
我的建议是,不要试图一次性学会所有东西,因为那样你会失败的。这并不是要打击你的积极性,而是编程方面需要学的东西实在太多了。你不需要全部学会,只需要先掌握其中几项,然后就可以开始实践,并在需要的时候再逐步学习其他内容,而不是一开始就全学完。
My advice is but don't try to learn everything all at once because you will fail. And that's not to, like, discourage you about it, but it's just there is so much to learn about programming. You don't have to learn everything. You just need to learn only a couple things, and then you can run with those things and learn the rest when you need to, not all at the beginning.
是的,这有点像,我打算在学习说日语的同时掌握所有的日语单词。不,你做不到的。以这种速度,你永远也学不会任何东西。你知道的,只要学到足够的内容以便与人交流表达你的意思,就够了。
Yeah. It's a bit like, I'm gonna learn all the words in Japanese while trying to speak Japanese. No, you won't. You'll you'll never speak anything at that rate. You know, learn enough to speak to somebody to get your point across and you'll be fine.
编程也是如此。你不可能学会苹果公司所有的框架。你就是做不到。我也不会。
The same is true in coding. You will not learn all of Apple's frameworks. You just won't. You can't. I haven't.
没人能做到。但你可以学到足够构建你想做的东西的程度,这就够了。这才是真正重要的事情。你会发现,在学习过程中,你会经常觉得自己是世界上最愚蠢的人,然后又觉得自己是世界上最聪明的人。这种情况一天之内可能会反复出现好几次。
No one has. But you can learn enough to build something you wanna build, and that's good enough. That's all that matters really ultimately. And what you'll find is, as you're learning, you're gonna regularly feel like you are the stupidest person in the world, and then the smartest person in the world. And they'll go around often several times in a single day.
这就像坐过山车一样,愚蠢和聪明交替出现,一遍又一遍。这就是我们学习的方式。
It's like a roller coaster. Stupid smart, stupid smart again and again and again. That's just how we learn.
确实如此。我曾经至少有一年的时间,每次都要谷歌如何在Swift中定义一个数组。我无论如何都想不起来该怎样写这个语法,尽管我用过其他语言编程,但我就是记不住Swift怎么写。所以我不得不反复地去查。
Absolutely. I googled how to, like, define an array in Swift for at least a year. I for the life of me, I could not remember the syntax to do that because I've programmed in other languages, but I could just not even remember how to do it in Swift. So I had to Google that over and over and over.
好吧,让你高兴的是,Swift 6.2中有一种新的方法,如果你读过我写的关于Swift 6.2的文章,你应该已经知道了。
Well, you'd be pleased to know there's a new way of doing it in Swift 6.2, which you would know all about if you had read my article on Swift 6.2.
我觉得这一集现在会变成米凯拉不欣赏保罗了。
I feel like this episode is now gonna be like, Mikaela doesn't appreciate Paul.
嗯,他们其实在6.2版本加入了一个非常有趣的功能,让我稍微回到新闻话题一下。这是一个整数泛型参数功能。因此,你可以根据传入的整数字面量来参数化泛型类型。听起来可能有点奇怪,但这非常有意思。例如,你现在可以创建一个字符串新数组,并且其中正好包含四个元素。
Well, they've added a a very interesting feature in 6.2. I kinda going back to the news now a little bit, But it's integer generic parameters. So you can parameterize generic generic types based on integer literals being passed in. And it sounds odd, but it's very, very interesting. You can now make a new array of strings, for example, with exactly four items inside.
所以它不能有第五个元素。你无法添加或删除内容。它的大小是固定的,完全取决于传入的泛型参数,比如四或者五,随你想要多少而定。我认为,这项功能最终可能会变得非常受欢迎,并被广泛应用于各种意想不到的地方。所以,是的,数组正在发生变化。
So it can't be a fifth one. You can't add or remove things. It's always an exact fixed size based on that generic parent being passed in four or five, whatever you want to. And I think, I really think that could end being an extremely popular feature used in surprising numbers of places. So yeah, arrays are changing.
谁能想到呢?
Who knew?
我能理解那会很有用。但我也能立刻想到现在会去谷歌搜索更多次。
I could see that being useful. But also I can see now immediately googling that many more times.
是的,对吧?这很正常。
Yeah. Right? And that's normal.
确实如此。这也是我喜欢告诉别人的话,当他们在学习新东西的时候,他们可能会说,哦,我就是搞不懂闭包是什么。这时候我会说,首先,这没问题。其次,对于你以前从未学过的东西,不理解是很正常的。当我这样说的时候,听起来有点好笑。
It is. And it's also what I like to tell people too when they are learning something new and they're like, oh, I just like don't get closures. And it's like, that's okay for one. For two, it's okay to not understand something you've never learned before. Because when I say it like that, it sounds funny.
就像,哦,好吧,这很明显。第一次听到某个自己从未了解过的东西时,不知道它完全是正常的。但这正是编程的本质。是的,其他人可能听说过它,但对你来说,这是你第一次接触。不能立刻理解也没关系。
It's like, oh, well, duh. It's fine to not know something that I've never learned before and you just heard it once. But that's exactly that's exactly what programming is. Yes, other people have heard of it, but you're hearing about it now for the very first time. It's okay to not immediately understand it.
你最终会明白的,事情就是这样发展的。别担心。
You'll get it eventually. It's what's gonna happen. Like, don't worry about it.
没错,这有点像拼图。你知道,你可以看我的视频,或者娜塔莉亚·潘福罗娃、斯图尔特·林奇等人的文章或视频。也许直到你看到肖恩·艾伦的视频时才突然明白了:哦,原来这就是闭包。
Yeah. And it's a bit like a jigsaw puzzle. You know, you you could watch a video from me or a article from Natalia Panforova or Stuart Lynch or whatever. And maybe, actually, finally, you see a Sean Allen video and it clicks. Oh, that's what closures are.
也许肖恩真的很棒,当然他确实很棒。我们都非常喜欢肖恩。他的解释方式确实是其他人没能做到的。但很多时候你会发现,是你从这个内容中获得了一点理解,又从那个内容中获得了一点,再加上第三个、第四个甚至第五个内容,最终才彻底弄清楚,因为它们建立在之前所看到的所有内容之上。
Now maybe Sean's amazing. Of course, Sean is amazing. We like Sean very much. And his thing really did explain it in a way the rest of us didn't explain it. But very often what you find is a little bit of this thing, little bit of that thing, third thing, fourth thing, or the fifth thing finally makes it clear by building on all the things you saw previously.
所以第一次没懂没关系,第四次就会懂了。这也是很正常的。而且你会发现,我认为你会发现自己每天都在努力学习新的东西,因为这真的很难,对吧?
So you didn't get it first time, don't worry, you'll get it the fourth time. That's kinda normal too. And what you'll find is, I think, you're gonna find yourself struggling every day to learn things. Because it's hard. Right?
要知道,我对那些坚持一百天SwiftUI学习的人充满敬意。连续一百天每天都走出舒适区去学习新事物是非常困难且令人疲惫的。这需要极大的韧性、大量的时间以及耐心。但我向你保证,有一天会发生这样的事:有人会来向你求助,而你也会意识到自己已经取得了多大的进步,因为闭包或者其他曾经困扰你的概念现在已经变得清晰明了,而对方却还不明白。这时你就可以把自己的知识分享给他们,那种感觉真的非常棒。
You know, I have infinite respect for folks who do the one hundred days SwiftUI learning something new, feeling out of your comfort zone every day for a hundred days is really hard and really draining. It requires a lot of resilience, a lot of time, a lot of patience. But I promise you, I promise you what will happen is one day someone's gonna ask you for help, and you'll realize just how far you've come because closures or raise, whatever it was, are now obvious to you, and it isn't to them. And you can then pass on your learning to them, and it feels really, really good.
关于学习一百天Swift或SwiftUI的一点提醒:不要试图在二十天内完成,因为它的安排是有特定原因的。同时,也不要试图快速浏览所有内容,因为你根本无法真正掌握。那样做的话,你只是机械地走过场,最后其实什么都没学到。不过回到你刚才的观点,保罗,关于别人向你提问这件事。如果你回头看看第一天或第二十天写的代码,比如到了第一百天或第五十天时再回头看,你可能会觉得奇怪。
Caveat to learning hundred days of Swift or SwiftUI, do not try to do it in twenty days because it's laid out that way for a specific reason. But also, don't try to speed through everything because you won't get it. Like, you will absolutely just go through the motions and you'll end up not actually learning anything. But then to go back to your point though, Paul, about people asking you questions. If you also look at your code from, like, day one or day 20 and then you're, like, on day 100 or day 50 even, if you look back and you're like, oh, that's weird.
为什么我要那样写?这说明你学到了新的东西。
Why did I write it that way? That means you've learned something new.
是的。而且你可能在未来几年甚至余生中一直这样做下去,这是正常的。你说得对。当有人给我发邮件说,我很快就完成了100天挑战,但我记得的东西不多。
Yeah. And you were doing that for years to come, potentially the rest of your life. That's normal. And you're and you're right. When I get emails from folks saying, I've been to the hundred days really quickly and I I'm not remembering very much.
这正常吗?我就说,你记不住那么多是因为你太快地浏览了一遍。我想告诉别人的是,虽然我自己也没能很好地做到这一点:有主动学习和被动学习之分。主动学习是你正在看视频、读书、敲代码,无论你在做什么。
Is that normal? I'm like, well, you're not remembering very much because you ran through it extremely quickly. The what I try and tell folks is, and I obviously do it don't do it quite enough. There's active learning and there's passive learning. Active learning, you're watching a video, reading a book, typing some code, whatever it is.
你现在就在做这件事。而被动学习是你去散步的时候,你的大脑在后台连接神经元,默默建立这些联系,加强记忆,连接那些你此刻没有主动思考的点。两者都很重要。实际上,你的大脑是在睡眠时创造记忆的,在你小睡或睡觉时形成这些长期记忆。所以间隔开学习时间真的非常重要。
You're doing the thing right now. Passive loading is when you've gone for a walk, and your brain sort of connecting neurons behind the scenes, making these silent connections to make things stronger behind the scenes, connecting dots that you aren't actively thinking about right now, and they're both needed. Like literally your brain creates memories when you sleep. It lays down these long term memories when you have a nap or a sleep. And so it having it spaced out really, really matters.
但没人听我的劝。我已经尽力了。
But no one listens to me. I try so hard.
也许他们没像我一样读过你的文章。
Maybe they didn't read your article like me.
也许吧。但无论如何,你会发现这个过程会很艰难。真的很难。学习编程很难,就像学习一门人类语言一样,而且你还得处理一大堆逻辑问题,同时还得具备侦探小说般的解谜能力,所有这些都同时存在。
Maybe. But either way, look, you're gonna struggle a lot. It's it's really hard. It is hard learning to code. It's like learning a human language, except by the way, you've now got this whole bunch of logic thrown in, plus there's like detective novel puzzle solving skills in there as well, all at the same time.
不过,在经历很多挣扎的同时,我也希望你能经常庆祝自己的进步。因为最终,在无数次尖叫和抓狂之后,你会看到自己的代码真正在手机上运行起来,那一刻你会感受到纯粹而强烈的喜悦。你会对着屏幕轻声说:“我就是神!” 因为那种感觉实在太棒了。当其他人下载并运行你写的程序时,那感觉就像魔法一样,因为你以一种非常微小的方式改善了他们的生活。
But as well as struggling a lot, you'll also, I hope, celebrate a lot too. Because eventually, after lots of screaming and hair tearing or whatever, you will get code to run on a real phone and you're gonna feel pure unfiltered joy. You'll just whisper at your screen that I am a god because it feels incredible. And when someone else downloads it and runs it on their phone, it just feels like magic, because you've made their life better even in a very, very small way.
我不知道该怎么回应你的话了。
I don't even know how to follow that.
所以我经常告诉别人的一件事是,在学习过程中要特别注意用户隐私,因为用户确实比网站更信任应用程序。因为你知道,手机就在你的口袋里。从这个角度看,它是一种非常私密的设备,它随身陪伴你 everywhere,包括很多人连上厕所都会带着它,对吧?
So one thing I've tell I tell folks as often as I can is to think very carefully about user privacy and the learning, because users really do trust apps in a way that they don't trust websites. Because you you know, your phone is in your pocket. It's a really intimate device in that respect. It goes everywhere with you, including a lot of folks into the bathroom. Right?
因此,人们通常会把一些真正私密的数据保存在手机上,比如健康信息、私人日记、照片等等,而这些数据你绝不会上传到网络上。对吧?在网络世界中,你会看到一些滑稽的提示,说我们非常重视你的隐私,所以我们有这一大堆来自我们和800个合作伙伴的隐私政策。我甚至见过超过一千个合作伙伴的情况。这些数字高得离谱,因为网络上根本不重视隐私。
And as a result, it's common to save private data, really private data, like health information or your private journal or photos or whatever to your phone that you would never do to to the to the web. Right? On the web, you see these comedy alerts that say, we take your privacy seriously, which is why we have this long wall of privacy policy from us and our 800 partners. And I've seen over I've seen over a thousand partners before. The numbers are through the roof high because privacy is not serious on the web.
而在手机上,情况就不同了。人们期望数据保留在自己的手机上,或者最多上传到iCloud,这样仍然能保证账户的安全性。
Whereas in phones, it is. People expect it to be on their phone and stay on their phone, or at the very worst, go to iCloud, right, where it's still secure to their account.
正如Paul刚才所说的一切,在你刚开始学习Swift语言时不需要立刻考虑这些问题。但一旦你开始着手实现自己的想法时,就可以思考一下,你的应用需要哪些隐私功能,以及如何实现它们。
And with that, what everything Paul just said, like, don't have to think of that immediately when you first, like, learn the Swift language. But once you start, like, working on the idea that you have, that's sort of where you can get into what kind of privacy features do you want and how do you wanna do that.
是的,只要你不要把自己逼进死胡同就好。比如你在粉刷一个房间的时候,由于没有提前想好怎么从房间里出来,结果把自己困在了角落里。我认为像隐私、可访问性等功能最好尽早考虑。不过当你在学习阶段时,尽管随便往Xcode里扔糟糕的代码也没关系。
Yeah. As long as you don't sort of back yourself into a corner. Like, you know, when you're painting a room and you you paint up into a corner because you haven't thought ahead of time how you're gonna get out the room, you know, thinking about privacy, thinking about accessibility or whatever, they I think are best done very early in the process. But yeah, when you're learning, just go ahead and throw horrific code into Xcode. That's okay.
我自己也写过不少极其糟糕的源代码。这其实也是正常现象。
I've I've written my long fair share of horrific source code. That's kinda normal too.
我想我们在上一集中已经提到过了,重要的是进步而不是完美。是的,你随时都可以修改。这是软件开发,没有什么是一成不变的。
And I think we said it last episode, it's progress over perfection. Yeah. You can always change it. This is software. Like nothing, absolutely nothing is set in stone.
总有一天你会发现,自己会改变每一个曾经做过的决定。所以真的没关系,别太担心。
And at one point or another, you're gonna change every decision that you've ever had. So really, it doesn't matter. So don't even worry about it.
没错,你会花很多时间去思考为什么会出现这种情况。比如这段代码昨天还好好的,我只改了一行,现在就出问题了,真是让人不愉快。
Yeah. And you'll spend a lot of time just why you're doing this. You know, this this code worked great yesterday. I've changed one line, bang, it's now on fire or whatever. It's not pleasant.
你会花大量时间试图修复错误等等。修bug并不有趣。但每次你修复了一个bug,解决了崩溃问题或发现并处理了一个奇怪的边界情况,这些都会让你成为一个更好的开发者,这就是成长的过程。所以不要因为花时间在这上面而感到难过。
And and you just spend a lot of time trying to fix bugs and so forth. And fixing bug isn't fun. But every time you fix a bug, every time you've you fix a crash or find and solve a weird edge case, they're all moments that make you a better developer. And so that's where the growth comes. Don't feel so bad about spending time there.
我听过一个编程笑话:我遇到过这个bug,我可以帮你解决。这简直就是程序员之间的示爱语言。而且对于所有这些bug修复来说,也不用马上立即学会所有新东西。比如接下来一周左右即将发布的所有关于WWDC的新内容。
I've seen that's a programming joke that I have is I've seen that bug. I can help you fix it. That's a love language. But and with, like, all of these, like, bug fixes, don't worry about also learning the new things immediately too. So, like, all the new immediate dub dub things that are about to be dropped within the next week or so.
你不需要学习所有东西,也不必观看每个视频。尤其是在DubDub期间,大多数人甚至不会看视频。我记得去年在DubDub期间我只看过一个视频。你不需要看完所有内容,也不需要立刻理解一切,因为在测试版期间API会不断变化。
You do for one, do not have to learn everything. You do not have to watch every video either. Especially like, most people don't watch the videos during DubDub. I think I watched one during DubDub last year. You don't have to watch everything, but you don't also need to understand everything because the API is going to change throughout the beta period.
所以,从六月到九月,它都会一直处于变动之中。因此,你可以了解一些相关内容,但不必担心马上完全掌握。
So, like, from June until September, it will kind of always be in flux. So, really, you can learn some about it, but don't worry about immediately understanding everything.
没错。不过,我甚至不确定一半时间这些真的重要。几周前我在SwiftCraft做了一个演讲,我真的应该把它放到YouTube上。在那次演讲中我说的一件事是,听着,用户其实并不关心你的应用是用Swift 1还是Swift 6构建的,他们不在乎你是使用Core Data还是Swift Data,或者MVC还是MVVM。他们只是希望你能以合理的价格解决他们口袋里的某个问题。
Right. But as well, I'm not even sure it matters half the time. I gave a talk at SwiftCraft a couple weeks ago, which I I should really put on YouTube. And one of the thing I say in the talk is, listen, users don't really care whether your app builds in Swift one or Swift six using core data or Swift data or MVC or MVVM. They just want their problem solved for a reasonable price in their pocket.
对吧?所以,苹果公司宣布了,我不知道,Vision OS现在有小组件了,或者其他什么新奇的功能。是的,它们很棒。
Right? And so, yes, Apple announced, I don't know, Vision OS has widgets now, whatever. Some fancy new thing. Yeah. They're great.
你只需要解决他们的问题。你知道,我的猫对我说了什么,或者适合哪些植物,诸如此类。这才是他们的真正需求。而你可以不用那些炫酷的新功能来解决这个问题。你现在就可以很好地解决,而不必非要等到苹果推出新的炫酷技术。
You just just wanna solve this problem they have. You know, what's my cat saying to me or which plants that, whatever. That's their problem. And you can fix that without the shiny new thing. You can fix it today just fine without having to get the new shiny greatness from Apple.
而且,说实话,我热爱Swift。我喜欢用Swift编程,喜欢开发SwiftUI。我知道探索和思考这些新版本以及尝试最新的测试版很有趣。但请记住,它们的存在是为了帮助你构建产品,而不是让你写越来越多的代码。
And look, I look I love Swift. I love coding in Swift. I love building out SwiftUI. I know they're interesting to explore and interesting to think about and poke around with the new betas particularly. But remember, they're here to help you build stuff, not just write more and more code.
它们是实用工具。所以用它们做出一些实际的东西出来。
They're practical tools. So make something real with them.
我觉得这同样也是独立开发者的建议。如果你打算自己开发一款应用并希望从中赚钱,那么用户并不关心你用了什么技术栈。他们只关心最终结果是否解决了他们的问题。
I feel like that's also like indie developer advice. If you ever wanna make your own app and hope that it makes money, users don't care about the tech stack. They just care about your end result and if that helps them.
是的。有人曾和我讨论过这个,可能是去年的事了。当时他抱怨我们的车。我想我们是在去年换掉了宝马,改用了沃尔沃,可能是在更早之前,大概是去年吧。而这辆沃尔沃的软件系统,我不知道是谁做的,但真的很糟糕。
Yeah. I had someone discussing this with me, maybe last year. Was complaining about our car. We switched from BMW to Volvo, I think, last year, earlier before, perhaps, maybe last year. And the Volvo, the software stack, I don't know who made it, but it's horrific.
真的非常糟糕。比如,我们开车在路上时,车上的显示屏就彻底卡死了。我不得不在驾驶过程中重启车载电脑。简直太可怕了。我当时就说,宝马为iPhone提供的应用程序实际上就做得很好,里面包含了我真正关心的所有功能。
It's really awful. Like, we've had our cars in car, the display thing, just freeze completely while we're driving on the road. I have to reboot the computer while you're driving. It's just horrific. And I was saying how the BMW app for your iPhone is actually quite nice, and it has all the features, you know, built into it that I actually care about.
比如,我的车在哪?或者我一分钟就到。天气冷的时候你能打开暖气吗?然后我说,嗯,Paul,你知道它是用 Flutter 构建的对吧?
Like, where's my car? Or I'll be there in one minute. Could you turn the heating on whenever when it's cold? And so I said, well, Paul, you know it's built in Flutter. Right?
我当时说,我才不在乎它是什么做的呢。显然,比如 Swift 和 Swift UI,但他们打造了一个杀手级应用,感觉像原生应用,有隐私保护、语音导航支持等等。如果是 Flutter 的话,太棒了,放手去做吧。我很开心。
I'm like, I couldn't care less what it's built in. Obviously, like Swift and Swift UI, but they've built a killer app that feels native and has privacy and has voice over support and yada yada yada. In Flutter, awesome. Go to town. I'm happy.
然后又有人说,但它是 Flutter 做的。我不在乎,我就是不在乎。伙计,你没明白我的重点。我不在乎你的技术栈是什么。
And it's like, but it's Flutter. I don't care. I just don't care. You're missing my point here, buddy. I don't care what your stack text stack is.
如果它能解决我的问题,我就挺高兴的。所以最后,我想分享一下我认为成为一名成功开发者的完整秘诀。
If it solves my problem, I'm kinda happy. So to finish up, I wanna give you what I think is the entire recipe for being a successful developer.
这部分要好好听。
This is the part to listen to.
没错。直接快进跳过那些回顾之类的内容。你不需要数学背景,懂吗?
Yeah. Right. Just fast forward past the review and stuff, you know. You don't need to have a mathematics background. Right?
你不需要任何特殊背景,甚至不需要完美的计划。你需要的只是好奇心、坚持力,以及在事情困难时仍然愿意继续下去的决心。说实话,就是这样。因为事实上,世界上最优秀的开发者并不是那些从不挣扎的人,而是那些从不放弃的人。
You haven't gotta have any kind of special background or even a perfect plan. Instead, you just need curiosity, persistence, and a willingness to keep going even when things are tough. And honestly, that's all there is to it. Because the truth is the best developers in the world are not the ones who never struggle. They're the ones who never quit.
现在到了我们的开放投票环节,也是本期的问题:你是如何为应用程序变现的?你是如何决定价格、定期订阅、可消耗的应用内购买,还是其他方式?首先,我们邀请了 Steven Dixon,他说他一周内完成了八项 IQ 开发,但花更长时间才弄好变现功能。他的核心功能是免费的,还有一个简单的专业版本,提供无广告日志、健康套件同步、宏观营养分析和餐食编辑功能,每月收费 2.99 美元或每年 24.99 美元,全部由 RevenueCat 和 StoreKit 2 提供支持。
And now it's time for our open ballot and this episode's question, what is your approach to monetizing apps? How do you decide a price, recurring subscription, consumable in app purchase, or something else? First, we had Steven Dixon who said he built eight IQ in a week, but monetization took longer to get right. There's a free core experience with one simple pro tier that provides unnoted logs, health kit sync, macro breakdowns, and meal editing, and he's charging $2.99 a month or $24.99 a year, all powered by RevenueCat and StoreKit two.
我不知道是不是我理解错了,但这免费的功能好像有点多,或者这些反而是付费功能?
I don't know if I'm reading this wrong, but that's a lot of features for free or if those are the monetized features.
这些是付费的。
That's monetized.
已实现盈利。好的。这些都是可以盈利的功能,非常好。我觉得这些都是人们最终会设法盈利的内容。
Monetized. Okay. Those are the monetized features. That's really good. And I those are a lot of, like, things people end up monetizing.
当然了,我们喜欢 RevenueCat,他们是社区工具包的赞助商,不是这次播客的赞助商。哇,太棒了。
And, of course, we love RevenueCat. They're sponsoring community kits, not this podcast. And Woah. It's great.
不是这次播客,是 RevenueCat。
Not this podcast, Revenue Cat.
咳咳,我不是那个意思。不过 RevenueCat 确实非常适合用来处理这类订阅服务,因为订阅有很多边界情况。使用 RevenueCat 可以带来很大帮助。但正如后面其他人会提到的,StoreKit 2 也非常棒。
Cough cough. I didn't mean it like that. But RevenueCat's really good for using subscriptions like this because subscriptions have so many edge cases. Being able to use RevenueCat really helps. But StoreKit two, as others will say later, is great as well.
StoreKit 2 做了很多更新,对用户也很有帮助。
Stalkit two made a lot of updates that really help people as well.
是的。我确实好奇,如果多年前 StoreKit 2 就已经发布,比如当初的 StoreKit 1 实际上就是 StoreKit 2,那 RevenueCat 是否还会存在?因为 RevenueCat 虽然把 StoreKit 包装得很漂亮,但他们之后也添加了许多功能,比如漂亮的仪表板、报告、销售实时通知、可定制的支付页面等等。但最初的时候,其实它主要是封装了 StoreKit,因为一开始 StoreKit 非常难用。最初的 StoreKit 1 确实非常糟糕,很容易出错。
Yeah. I do wonder if Stalkit two had been out years ago, like if Stalkit one was Stalkit two, would RevenueCat have existed in the first place? Because RevenueCat, you know, they wrap Stalkit beautifully, but they have since added a whole bunch of things, like a beautiful dashboard and reports and live notifications of sales and customizable paywalls and stuff. But ultimately, initially, in the early days, it was kinda wrapping Stalkit because Stalkit was very, very, very hard initially. Stalkit one was quite unpleasant indeed and very easy to screw up.
所以他们最初的主要卖点就是:嘿,我们会让这一切变得更好,而且他们确实做到了这一点。幸运的是,他们此后又增加了一大堆真正强大实用的功能。因此 RevenueCat 至今仍然非常受欢迎。不过 StoreKit 2 确实很好,做得不错,苹果公司。
And so their big thing initially was, hey, we'll make this better, and they did. But luckily for them, they've added a whole bunch of other real power heavy hitting features since then. So it's still very, very popular, I think. But Stalkit two is very nice. Well done, Apple.
说到 StoreKit 2,Kyra 说她的应用只针对苹果设备,所以她使用 StoreKit 2 的订阅功能。她还为自己的游戏设置了一次性买断的内购项目。但如果从订阅转为一次性购买,则需要用户自己取消订阅。哦,如果你在订阅期间决定买断,你仍会被继续收费,因为你必须手动取消订阅。
Speaking of Stalkit two, Kyra says, my apps are just for Apple devices, so I use Stalkit two subscriptions. I also set up a lifetime in app purchase for my games. But if you go subscription to in app purchase, it needs to be canceled by the user. Oh. So if you if you if you have a sub and think, okay, this is good, I must buy outright.
你会继续被收取订阅费用,因为她无法帮你取消。这实际上是一个很讨厌的边界情况。
I'll buy the in app purchase, You'll still get charged for the sub because she can't cancel it for you. That is actually a nasty edge case.
我觉得这确实是一个常见边缘情况。一方面,这是好事,因为它让用户能够始终控制自己的订阅并随时取消;但在这种特定情况下,比如你买了或者正在订阅,然后决定改为终身买断,这时你必须记得回去手动取消订阅,这就有点麻烦了。
I feel like it's very much a it's yeah. It's an it's an edge common case because it makes it so that the user, which is a good thing, can always control which subscriptions they have so that they can cancel them. But in this specific case of, oh, you bought like or you're on a subscription, you're going to Lifetime. Now you have to remember to go back and cancel. That's where it's like, oh, yeah.
为什么他们不能直接为我们做到这一点呢?
Why can't they just do that for us?
是的。至少给他们一个选择去做这件事。我想有一种显示订阅页面的方法,对吧?也许可以帮助你取消订阅。所以你必须编写一些逻辑,比如,他们有订阅吗?
Yeah. At least give them an option to do it. I guess there is a way of showing the subscription screen, I think Yes. To help you just cancel a subscription perhaps. So you have to write some logic, like, they have a sub?
他们现在是在购买终身IAP吗?他们有没有展示过这个页面?这可能可行。但这很复杂。Benjamin Van de Hoot说,我一开始没有把它加入我的应用,所以我突然添加它的话会感觉不太好。
Are they now buying the IAP for lifetime? Have they now showed the screen? That could could work maybe. It's complicated. Benjamin Van de Hoot said, I did not add it to my app from the start, so I'd feel bad adding it all of a sudden.
但对于我的下一个应用,我可能会将其作为一次性购买,因为现在所有东西都是订阅模式,而我其实并不喜欢这样。
But for my next app, I'll probably add it as a one time purchase because everything's a subscription these days, and I don't really like that.
问题就在这里。很多消费者都不喜欢订阅模式。因此,是否采用一次性应用内购买,取决于你的应用类型,完全可以成为一种选择。它们依然存在,人们也仍然使用这种方式。
That's the thing. Many, many, many consumers do not like subscriptions. So having just a one time in app purchase, depending on what kind of app you have, is can absolutely be the way to go. Like, they still exist. People still do them.
如果可行,那就去做吧。
If that works, go for it.
我觉得我理解了。我也一样,并不喜欢为所有东西付费订阅,但我有点觉得我们已经无法回头了。在这个阶段,我们已经不再讨论这个问题了,对吧?有一段时间,我不喜欢在游戏里购买一千个蓝精灵浆果这样的消费行为。
I think I I get it. Like, I also don't like subscribing for everything, but I kinda think that ship sailed now. Like, at this point, we've moved on beyond discussion discussion. Right? You know, for quite a while, I didn't like buying a thousand smurf berries as a consumer purchase in a game.
对吧?我仍然反对这种做法,但事实上,如今免费增值模式已经成为常态。我们已经接受了,人们也已经前进了。消费者可能也已经前进了。所以是的,我认为现在每个小功能都采用订阅模式似乎已成为标准。
Right? I still reign against that, but actually freemium is kind of how things are these days. That's we've got accepted and people have moved on. Consumers have probably moved on too. And so, yeah, I think having subs for every small thing appears to be the standard these days.
所以我对此还可以接受。Kieran Crown说,老实讲,我很想收取一笔小额的一次性费用,但如今人们似乎不太愿意买单,这让免费增值模式成为必须的选择。就是这样。正如Kieran所说,聪明人啊。如今免费增值模式已成为标准,因为人们会想,这里有款应用是免费的,但内购让人反感,另一款则是直接要10美元。
So I'm kind of okay with it. Kieran Crown says, honestly, I'd love to charge a small one time fee, but people just don't seem to bite these days, making the freemium model a must. There we go. That's what was saying, Kieran, smart guy. Freemium is is kind of the standard these days because people go, well, look, there's this app here which is free with scammy in app purchases, or the other one that's sort of $10 up front.
他们会先尝试免费的那个。因为他们不想冒风险,比如万一这个应用花了10美元却很糟糕,那我就亏了,而另一个则每周10美元。差不多或同样的价格,他们可以先完全试用一下。
They're gonna try the free one. They just are because they they don't want that risk of, oh, what if this app sucks for $10, I lose all my money versus one that'll be $10 a week. More or same thing, they can try it out fully first.
这就是问题所在。人们通常不会回去申请退款。很少有人真的会费劲去申请退款。但很多时候,一开始是免费的,之后就变成付费了,因为我们大家都想先尝试一下。
And that's the thing. People don't go back and like get a refund. Like, rarely do people actually take the effort to get a refund. But yeah. It's a lot of times, it'll be free upfront and then some kind of paid after that because we all wanna try things.
我们都想看看,尤其是如果这东西很关键的话,比如换邮件客户端。你会想,哦,我得先看看这个是否适合我,然后再决定是否花钱购买。而不是像更少人那样想着,我先买下来然后去退款。
We all wanna like see, oh, especially if it's something critical or so like an email, like changing your email client. You're like, oh, wait, I wanna see if this is gonna work for me before I actually pay for it rather than way less people have the mindset of, oh, I'll just pay for it and then get a refund.
是的。所以你说得对,实际上退款并不存在。我不敢说这些应用是骗人的,因为这样不公平,但有些让我觉得有点骗人的应用很清楚这一点。比如,我73岁的妈妈现在脑子不太好使,她订阅了一个每周10英镑、也就是每周12美元的人工智能植物识别应用。
Yeah. So you're right. The refunds don't exist. And the I can't call them scammy because it's not fair, but the apps that to me feel a bit scammy know this. Like, my mom who is 73 now and isn't doing great with her brain just subscribed to a 10 pound a week, so a $12 a week AI plant identifier app.
而且她现在几乎不出门。她很少看到植物。她不知道那些植物是什么,因为都是她自己的植物。但她并不明白自己在做什么,她买了这个每周10英镑的东西。
And she very rarely leaves home these days. Right? She doesn't see many plants. She doesn't know what they are because they're all her plants. But she doesn't understand what she's doing because she buys this $10 a week or 10 a week thing.
如果我们没注意到,因为她是在我的家庭账户下,我用我的信用卡为她付款。如果我们没发现这个情况,她每年就会因此损失520英镑,仅仅为了一个应用。他们知道这一点。他们知道人们会这样做,之后后悔却不去退款。这确实不好。
And they if if we hadn't spotted it because she's on my family account, I pay for herself with my credit card. If we hadn't spotted that, she'd have been five hundred and twenty pounds a year, $600 a year worse off, just for one app. And so that they know this. They know folks do it and then regret it and then don't refund it. It's it's not great.
老实说,苹果公司在这方面稍微干预了一下。继续下一个话题,Alexandre Wavran表示,他正在使用Stalkit Two通过订阅来为其应用盈利。这是他的第一个应用,所以找到一个合理的价格很棘手。他很难自信地认为它值得付费,也难以决定哪些功能应该免费,哪些应该收费。
And Apple, honestly, Apple step in slightly more. Moving on, Alexandre Wavran says, I'm monetizing my app with a subscription using Stalkit two. It's my first app, so finding a fair price is tricky. I struggle to feel confident it's worth paying for and also find it hard to decide which features should be free and which paid.
哦,这可以做成一期播客节目。仅凭这个问题提示就可以做整整一期播客。不过,Storkit Two真棒。我喜欢用订阅模式,因为你不需要添加第三方的应用内购买服务。
Oh, that's this could be a podcast episode. Just just that prompt. We could make a whole podcast episode out of that. But Storkit two, awesome. Love it with subscriptions because then you do not have to add a third party in app purchase service.
你可以完全使用Storkit完成所有事情,尽管我们所有人都在说RevenueCat、Superwall、Blake、Adapti等等各种工具。你也可以只使用Storkit。除此之外,关于哪些功能是免费的,哪些是付费的?我总是喜欢这样考虑:用户最想能够做的那一件最基本的事情是什么?把那件事设为免费。
You can totally do everything with Storkit no matter how much we all say, RevenueCat, Superwall, Blake, Adapti, all the things. You can just also use only Storkit. But then past that, which features are free versus paid? I always like to think of it as what's the one most essential thing you want somebody to be able to do? Make that one thing free.
如果那件事情经常发生,并且用户能从中获得价值,那么这时候就可以考虑如何将其转化为付费项目。
And then if that's something that happens often and, like, a user will find value out of that often, that's when it's like, okay, now we can do it. Do something with that to make it then be paid.
是的,这确实很难。我们只是在处理零和一,精心重新排列它们,然后做出一些可以发布到App Store上的东西。我们用自己的智慧创造软件,让事物变得生动起来。
Yeah. And it is hard. Like, we we're we're just taking ones and zeros, carefully rearranging them and making them to something we can ship on the App Store. Right? We're using a power of our minds and make software bring things to the life.
现在的问题是,这些二进制数据,这个每月收费10美元,或者其他类似的定价。真的很难确定。而且我在这方面其实也没有太多信心。就像我最近发布的那个应用程序,它是面向拉丁语和希腊语学生的,这是我的个人爱好,也是我在空闲时间做的项目,我想把它做成订阅模式。我当时就想,好吧。
And now saying, well, these these ones and zeros, this is $10 a month, whatever. It's it's really hard. And I also haven't got a lot of confidence in myself in that one. As seen in my most recent app, I launched this app for Latin and Greek students, which is my personal love and my spare time, and I wanted to make it a subscription. So I'm like, okay.
一开始是付费下载,现在改成了免费增值模式。我当时想,那我就每年收5美元吧。我说,够了吧?别人说,行啊。
It was paid upfront. Now it's freemium style. And I'm like, well, I'll I'll charge $5 a year. I said, enough? People go, yeah, sure.
我可以接受这个价格。我和朋友讨论过,他们都说,不,每年5美元太便宜了,定10美元吧,甚至更高一些。
I'll have that. And I discussed with friends. They're like, no, $5 a year is way too cheap. Make it 10. Make it more.
但我心想,每年10美元?这简直像敲诈一样,太糟糕了。最后定到了每年15美元。然后有人发邮件说,你提供的服务,每年15美元实在太便宜了。
Like, I can't $10 a year? Extortion. That's terrible. End up being $15 a year. And so an email is saying, $15 a year is way too cheap what you're providing.
所以我觉得挺难受的,因为我对自己开发的东西在价值预估方面这么差劲。
So I I feel I feel bad that I'm so bad at guesstimating what the right value is for these things I work on.
但你可以随时调整价格。就像我们之前说的,这是软件产品,你可以随时回去修改它。如果你哪天觉得无聊了,可以看看各种流媒体服务的订阅情况,研究一下它们的各种选项。你会发现,同样的服务有10种不同的名称,价格也各不相同。
But you can always change it. Like we've already said, it's software. You can just go back and change it. Sometimes if you ever get bored, look at the subscriptions of, like, all the different streaming services and, like, look into the different options that they have. They have, like, 10 different names for the exact same thing and they're all at different prices.
你会疑惑为什么会这样?这是因为它们的价格一直在变化。
And you're like, why is it like this? And it's because they keep changing their prices as well.
不过这种做法确实很聪明。我记得几年前,我曾协助在iPad上推出Mac Life杂志。当时我们合作的一家公司,是iPad销售量最大的出版商之一。他们的商业模式非常出色。我记得单期售价是5或6美元,这与当时你在Barnes and Noble书店买到的纸质刊物价格是一样的。
But it's clever though. I I remember years ago, I helped to launch Mac Life magazine on the iPad. And they were in this company group we were working with at the time, the biggest seller in terms of iPad sales. And their model was absolutely brilliant. They were charging, I think it was $5 or $6 for a single issue, which is the same price as the ones you get in the Barnes and Noble at a time when it's still in on the newsstand.
或者你也可以选择按月订阅,每月只需1美元。计算起来很简单:你可以买两期的价格就足够订阅一年,获得12或13期内容,于是每个人都选择了订阅。他们在App Store上最终拥有了大约9万名订阅用户,因为这个选择太明显了,几乎就像是白送钱一样。
Or you could subscribe monthly and pay a dollar a month. And the math is simple. You're like, well, I could buy two issues or I could subscribe for a year and get 12 or 13 issues, and everyone subscribed. And they ended up with something like 90,000 subscribers on the App Store because it was such an obvious thing to do. It was like throw away money.
让我们这么做吧,绝对是个绝妙的策略。
Let's do that. Absolute genius move.
很多定价其实也属于营销。比如,天啊。我感觉,我们需要继续吗?因为我们可以就这个点一直讨论下去。但说实话,我们都是凭空捏造的。
A lot of pricing is really just marketing too. Like, see oh my gosh. I feel like, do we need to move on? Because we could just talk about this one point forever. But, yes, it's honestly, we're all making it up.
别担心,你可以改的。我们只是凭空编造价格而已。
Don't worry about it. You can change it. We're just pulling prices out of thin air
是的。
Yeah.
然后寄希望于最好的结果。
And hoping for the best.
不过显然,尽管她刚刚说了那些凭空捏造的话,RevenueCat 仍然赞助了我们。Coding Sprite 说,我主要使用 RevenueCat 是因为它容易且快速实现。目前我对 Stalkit 还没有那么有信心。我喜欢提供订阅服务,并让用户选择终身或一次性购买。有些人只能负担每月 1 美元,而另一些人则能承担额外的一次性费用。
But still, obviously, RevenueCat still sponsor us despite the whole thin air comment she just made. The coding sprite said, I use RevenueCat mainly because it's easy and quick to implement. I'm not as confident in Stalkit just yet. I like to offer subscriptions with a choice of lifetime slash one time purchase. Some people can only afford the $1 a month, but others can afford the extra one time cost.
我认为尽可能为各种情况提供选项是非常重要的。这是一个非常关键的观点。我记得我们的编辑 Chris,他在幕后工作让我们听起来很聪明,他说过一句话,让我印象深刻,是他妻子 Jenny 的例子。这并不是什么秘密,所以我也不介意说出来。他是在某个社交媒体上提到的:很多人喜欢在英国很早就看到圣诞节商品广告,比如七月的时候,上面写着,嘿,你知道吗,一些圣诞优惠即将上线。
I think it's good to give options for all scenarios where possible. That's a very important point. I remember Chris, our editor, who works behind the scenes making us sound clever, said it's such a and it really stuck with my brain about his wife, Jenny, which is it's public. It wasn't in the public domain, so I don't mind saying this. It was on social media somewhere, he said it, which is that a lot of folks like see adverts for Christmas stuff in The UK early, like in July, saying, hey, you know, there's some offers coming up with Christmas stuff.
他们就会想,圣诞节还有好几个月呢,七月、八月、九月、十月等等,然后才是圣诞节。Jenny 的观点是,对很多人来说,十二月买圣诞用品是非常昂贵的。他们没有足够的钱一次购买所有的食物和礼物等。
You can save some money. And they think, well, Christmas is months away. What about, you know, July, August, September, October, da da da, and then Christmas? And Jenny's point was saying that for a lot of folks, buying Christmas things in December is very, very expensive. They haven't got enough money to sort of in one shop, buy all the food and the presents and so forth.
如果能够更早地开始使用折扣,提前准备圣诞节,他们就可以举办很棒的活动,完成他们想为家人做的事情,而不至于花光所有积蓄。所以,是的,这跟 Coding Sprite 刚才说的情况相同或者类似。有些人只能负担得起每月付款,虽然从长远来看花费更多,但在短期内支出较少。我认为这是件好事。我觉得这里又有一个来自 Chris 的批评。
Whereas if there's some discounts they could start using earlier and start looking towards a Christmas, they can have fantastic events still, put on the things they want to do for their family without destroying the bank. And so, yeah, this is it's the same or similar thing that the Coding Sprite is saying here. Some folks can only afford the monthly payment, which is it ends up being more in the long long term, but less in the short term. And I think that's a a good thing. And I I felt another another Chris Chris criticism here.
Chris 喜欢引用英国作家 Terry Pratchett 的话。Terry Pratchett 的一本书中举了一个守卫军官买靴子的例子。他买了便宜的靴子,可能只穿六个月左右。而有钱的人会买非常贵的靴子,可以穿十年,从长远来看反而更划算,但大多数人买不起这么贵的靴子。所以道理是一样的。抱歉,Chris。
Chris loves to quote, Terry Pratchett on this, who's a a British, author. And he gives the example in one of Terry Pratchett's books about a officer of the guard who buys boots and he buys the cheap boots, which last maybe six months or whatever. Whereas folks who have more money buy very expensive boots that last a decade and end up being cheaper in the long term, but most folks can afford the expensive boots. So it's it's similar. Sorry, Chris.
我现在实际上经常看到你了。
I'm I'm actually you are around all the time now.
没关系,保罗。我插句话,向你们完整地讲述一下萨姆·维姆的社会经济不公平理论。这句话出自特里·普拉切特的书《武装人员》。维姆认为富人之所以富有,是因为他们花的钱更少。比如靴子,一双真正好的皮靴要花50美元,而一双价格实惠、只能勉强穿一两个季节、之后纸板一烂就开始漏水的靴子大概只要10美元。
It's quite alright, Paul. And I'm cutting in here with permission to give you the full Sam Vimes theory of socioeconomic unfairness. Here's the line which is from Terry Pratchett's book Men at Arms. The reason that the rich were so rich, Vimes reasoned, was because they managed to spend less money. Take boots for example, a really good pair of leather boots cost $50 but an affordable pair of boots which were only sort of okay for a season or two and then leak like hell when the cardboard gave out cost about $10.
但问题是好靴子可以穿很多年。一个能买得起50美元靴子的人,买了这双靴子后,十年后他的脚仍然能保持干燥;而一个穷人只能买得起便宜的靴子,在同样的时间里他已经花了数百美元在靴子上,却依然双脚湿漉漉的。这就是山姆·维姆队长的靴子理论所描述的社会经济不公平。描述中有相关链接。另外值得注意的是,活动人士杰克·门罗已获得特里·普拉切特遗产管理方的许可,使用维姆靴子指数作为新的价格指数,用以监测基本食品价格隐性上涨的情况。
But the thing was that good boots lasted for years and years. A man who could afford $50 had a pair of boots and still be keeping his feet dry in ten years' time, while a poor man, who could only afford cheap boots, would have spent hundreds of dollars of boots in the same time and would still have wet feet. This was the captain Samuel Vimes Boots theory of socioeconomic unfairness. There's a link in the description. And also, it's worth noting that the campaigner Jack Monroe got permission from Terry Pratchett's estate to use the Vimes Boots index as a new price index for checking the insidious creeping price of basic food products.
不管怎样,回到米凯拉的话题。你刚刚说什么来着,米凯拉?
Anyway, back to Mikaela. What were you saying, Mikaela?
我也想补充一点,就是关于前期购买和后期购买的问题。你总可以在应用中的某个地方注明:如果你想要折扣或者暂时买不起,可以私信联系你,然后你可以给他们一个优惠码。我在每一条我在App Store收到的差评下都加上了这个信息。我会说,很抱歉你有这种体验。另外,根据评论有多糟糕,我还会直接说,我可以免费给你。只需要私信我就行。
And I say with that point as well of, like, buying something upfront versus then later, you can always just be like, put it in the app somewhere of if you want a discount or can't afford something, just DM you and you can get like, just give somebody an offer code. I put that on every bad review I've ever had on the App Store. I'm like, sorry you had that experience. Also, depending on how crappy the review is, I'll just be like, I'll give it to you for free. Just DM me.
我的联系方式已经在应用中了。但我从没收到过任何人的私信。所以这其实是用户的问题,他们不愿意去寻找折扣,不是说人们不想去找折扣,而是当你主动提供这样的折扣时,有人却不兑换,尽管他们有能力这么做。没人会这么做。
My information is already in the app. I've never had somebody DM me. So it's really users fault for not wanting to not like not people, like, seeking out discounts, but, like, when you actively offer a discount like that and somebody just doesn't redeem it, like, they have the ability to. No nobody does.
丹尼尔说,我在App Store之外销售Bolt AI这款Mac应用。他们使用Polar进行支付和许可证管理,Sparkle软件更新,全部托管在Cloudflare上。他们最近将价格从9美元涨到了100美元,并测试了市场反馈,发现79到100美元之间是最优的价格区间。哇靠。他们是怎么测试的?
Daniel says, I sell Bolt AI outside of the App Store as a Mac app. They use Polar for payment and license management, Sparkle software updates, all hosted on Cloudflare. They recently increased their prices from $9 to $100 and tested the market feedback and found between 79 and 100 is the optimal range. Damn. What are the testing that was?
他们出售的是永久授权,包含一年内的更新服务,续费可选并享有40%的折扣。这个价格区间真的很有意思。哇。
They sell a perpetual license with one year license updates included and renewals optional with a 40% discount. That's a really interesting set of price ranges. Wow.
看吧,去做价格实验,你可以随时调整。我们刚才所说的一切,丹尼尔全都验证了。就在那里你能看到结果。
Run see, run price experiments, and you can change things. Everything that we've been saying, Daniel just proved all of it. You can find it right there.
马丁说,作为一名开发者,我更喜欢订阅模式。但作为一个消费者,我则更喜欢一次性付款。所以我两种方式都提供。是的,我明白。我之前已经收到一封关于我的应用的邮件,里面说:“你能加个一次性付款选项吗?”
Martin said, as a dev, I prefer subscriptions. As a consumer, I prefer one time payments, so I offer both. Yeah. I get it. I I I already had an email about my app saying, could you please add a one time payment?
是的,我明白。我的顾虑是我需要有一个理由继续开发软件。如果收入枯竭了,那么很多动力也会随之消失。如果苹果也有像丹尼尔提到的那种机制就好了,比如说你购买应用后可以享有一年的更新服务。
Yeah. I get it. I I my concern is that I need a reason to carry on working on software. And if the money dries up, then a lot of reasons dried up. And if Apple had this, Kathleen, that Daniel mentioned, hey, you get a one year update of this app when you buy it for a year.
更新之后,你得再买一次。如果App Store有这个选项的话,我想很多人应该都会这么做。就是说,你付一次钱,可以拥有一年的更新权限,之后再重新付费。
After that updates, you gotta buy it again. If that were an option in the App Store, I think a whole bunch of folks would be doing that. You know? You pay for it once and that gives you a year of its updates. After that, pay again.
但可惜的是,我们受限于苹果所提供的功能。
But we're limited by what Apple offers, sadly.
是的,没错。我们都觉得,天哪,这些订阅服务都要一直付费。不过我最近倒是遇到一个人,他完全不花钱订阅任何服务,什么都没有。我当时就震惊了,你是怎么活下来的?
Yeah. Absolutely. And it's we all feel it like, oh, yeah, you have to pay for all these subscriptions. I recently though did just meet somebody who they, like, do not pay for any subscriptions for, like, anything. And I'm like, how do you live?
连iCloud都没有。太厉害了。我当时就想,你是怎么生活的?
Like, not even iCloud. Wow. And I'm like, how do you live your life?
只有5GB的存储空间啊。天呐,这也太难了吧。
With five gig of storage. Damn. That's hard.
真是令人佩服。我当时就说,你太厉害了。我也想那样极简地生活。但我这边手机上装了300个应用,可能也就用其中五个吧。
It's amazing. I'm like, you're amazing. I wanna live that digital minimally. But I over here have like 300 apps on my phone and I have probably, you know, use like five of them.
Michael License提到,他更倾向于一次性解锁的应用内购买模式,这更适合他正在开发的应用类型。他们非常喜欢g hat gunduz开发的Freemium Kit,据说非常好用。我之前没用过这个工具,你听说过Freemium Kit吗?
Michael License said, my preference is a one time unlock in app purchase that suits the apps I'm trying to build. And they really like freemium kit from g hat gunduz. It's excellent apparently. I haven't used that before. Have you heard of freemium kit?
我听说过,但还没实际使用过。Freemium Kit本质上是对Store Kit的一个封装,让开发者更容易使用它,但它比Revenue Cat要轻量一些。我可以在描述中放一个链接,方便感兴趣的人查看。
I have heard of it, and I have not yet used it, though. Freemium Kit is like also a wrapper around store kit to make it easier to use, but it is more on the lightweight side as compared to Revenue Cat is. And then I can include a link in the description also for that, for anyone who wants to check it out.
哦,我们的RevenueCat赞助就这样没了。来得快去得也快。最后还有一个话题,来自节目老朋友Stuart Lynch。他表示将发布一款小型的SF Symbols浏览器应用,支持iPhone、iPad和Mac菜单栏,在TestFlight上线,并且未来如何变现也是他现在考虑的问题之一。但他最终可能会选择免费发布并开源代码。
Oh, there goes our RevenueCat sponsorship. Easy come easy go. And one to end on, from Stuart Lynch, a friend of the show, I'm releasing a small SF Symbols browser app for iPhone, iPad, and Mac in the menu bar, the test flight, and future monetizations on his mind right now. In the end, I think I'll just release it for free and open source the code.
感谢大家收听。如果你人在加州,请务必现场参加Swift Over Coffee在Community Kit举办的WWDC25线下活动。我们会到场,期待与你们见面。喜欢节目的话,请给我们写个评价,参与下一次公开投票。
Thank you to everyone for listening. Be sure to tune in live in California if you are there for Swift Over Coffee live at Community Kit during dub dub twenty five. We'll be there. We'll see you there. Once you like it, leave a review in our next open ballot.
你对 dub dub twenty five 最兴奋的是什么?
What were you most excited about from dub dub twenty five?
显然,是网页视图。对吧?剧透警告。我完全不知道。
Obviously, web views. Right? Spoiler alert. I've got no idea.
我觉得
I think
网页视图。我们等着看吧。
web views. We'll see.
我忘记结束了。再见。回头见。
I forgot to end it. Bye. See you.
是的。我本来想坐回来,像老人一样提些建议。不。没关系。
Yeah. I was wanna sit back and dispense advice like old people. No. That's fine.
我刚才
I was
要说没关系。好吧。很好。不知为何,我当时想着像个喝醉的叔叔。
gonna say that's fine. Alright. Good. I was I was thinking like a drunk uncle for some reason.
我不知道为什么。不。这次结束于咖啡。我们可能需要重命名播客。
I don't know why. Nope. This is over coffee. We may need to rename podcasts.
关于 Bayt 播客
Bayt 提供中文+原文双语音频和字幕,帮助你打破语言障碍,轻松听懂全球优质播客。