跳到主要内容

· 阅读需 5 分钟

SwiftUI 引入了一组视图修饰符,允许我们高效地管理视图中的安全区域。在许多情况下,安全区域是你希望放置内容的地方。今天,我们将了解 SwiftUI 引入的新内容边距概念,以及它与安全区域有何不同。

· 阅读需 7 分钟
GoSwiftUI

在 SwiftUI 中检测按键事件允许你响应键盘键,如回车(输入)、shift、command 等。虽然大多数 Mac 应用程序使用键盘事件,但你必须考虑为 iPad 应用程序添加支持,因为可以使用外部键盘。

· 阅读需 5 分钟
GoSwiftUI

我发现很容易不小心阻塞了 MainActor,并且因为一个我以为在后台线程上的长时间运行任务而导致用户界面挂起。这里有一个最近的例子。

用户界面挂起

Apple 建议不要在主线程上运行长期运行的任务。阻塞主线程超过100 毫秒,用户会注意到无响应或挂起的用户界面。

· 阅读需 8 分钟
GoSwiftUI

使用 TDD 修复 Swift 中的错误

测试驱动开发 (TDD) 是一种技术,要求你在开始实现解决方案之前先编写一个失败的测试。虽然开发人员在一般开发过程中会使用这种技术,但有一种方法可以仅将其应用于错误修复。

发现错误已经令人失望,但发现错误再次发生会更糟。防止错误在你修复后再次出现是一项重要的开发技能。

测试驱动开发 (TDD) 流程要求你在开始实现解决方案之前先编写一个失败的测试。你可以使用它来定义新功能的所有规范,并确保不会忘记任何预期结果。

· 阅读需 6 分钟
GoSwiftUI

期待已久的 iOS 17.4 和 iPadOS 17.4 刚刚发布,这意味着如果你是一位欧盟 iOS 用户,我们可能会逐渐开始看到其他应用商店出现。除了 17.4 版本外,Apple 还发布了 Xcode 15.3 和 Swift 5.10。

Swift 5.10 中包含的提案数量并不多,但这并不会让此版本显得不那么重要。

借助 Swift 5.10,Apple 设法弥补了 Swift 并发数据安全功能中存在的一些重大差距。简而言之,这意味着编译器将能够通过在更多地方强制执行 actor 隔离和可发送性来捕获更多可能的线程安全问题。

· 阅读需 11 分钟
GoSwiftUI

Swift 中的可选类型详解:你需要知道的 5 件事

可选类型是 Swift 的核心,自 Swift 的第一个版本以来就已存在。可选值允许我们编写简洁的代码,同时处理可能的 nil 值。

如果你刚接触 Swift,你应该习惯在属性中添加问号的语法。一旦你习惯了它们,你就可以开始从它们中受益,例如使用扩展。

· 阅读需 11 分钟
GoSwiftUI

Swift 提供了一种强大的机制来定义我们自己的自定义错误,从而可以更好地处理错误,并在我们的应用程序中创建更具信息性和用户友好的错误。当我们旨在增强基于 Swift 的项目的健壮性和可用性时,此功能至关重要。通过编写适当的自定义错误,我们可以清晰准确地指导用户,从而显著改善整体用户体验。

在这篇文章中,我们将深入探讨在 Swift 中定义自定义错误的基本知识,探索特定方面并了解一些鲜为人知但非常有价值的 API。通过实际示例和详细解释,你将获得知识,让你编写出更可靠、对用户更直观的软件。

· 阅读需 6 分钟
GoSwiftUI

如果你曾经使用过依赖于应用内购买(我将其缩写为 IAP)的 iOS 应用程序,你可能已经体验过彻底测试你的 IAP 是否正常工作是多么具有挑战性。

这是因为 IAP 处于一个特别困难的交叉点:

  • 一方面,围绕 IAP 的用户流程可能会很快变得复杂:恢复购买、从一个计划升级或降级到另一个计划、订阅价格上涨通知等。
  • 另一方面,IAP 通常是使用它们的应用程序的主要收入来源,因此生产中的 IAP 损坏可能会对应用程序背后的公司产生非常严重的后果

然而,苹果似乎注意到这正在成为一个问题,因为几年前他们在 Xcode 中引入了一项新功能,使测试 IAP 比以前更容易:StoreKit 配置文件

· 阅读需 7 分钟
GoSwiftUI

Swift 中的扩展允许你扩展类、结构体、协议和枚举,即使你无法访问源代码。

所谓的追溯建模允许你扩展你没有源代码访问权限的类型。Swift 的这一强大功能使你能够在外部代码之上创建自定义层。作为一名应用程序开发者,何时以及如何使用它们是一项重要的技能,所以让我们深入了解一下。

· 阅读需 7 分钟
GoSwiftUI

SFSafariViewController 可用于让用户在应用内而非外部浏览器中打开网页。虽然该视图控制器在 UIKit 中运行良好,但在 SwiftUI 应用中让其正常工作可能具有挑战性。

每当你遇到只有 UIKit 解决方案可用的情况时,你想知道如何编写一个包装器并使 UIKit 类对 SwiftUI 视图可用。最好的情况是,它是可重用的,以便稍后可以重复使用它。让我们深入了解吧!

· 阅读需 4 分钟
GoSwiftUI

在 2023 年,Xcode 15 带来了新功能,支持结构化日志,让使用 OSLog 变得更加值得推荐。现在可以通过筛选功能在调试控制台中只看到来自自己应用程序的日志,还能高亮显示警告和错误。对于需要更多信息的情况,只需按一下相应日志行即可。然而,需要注意结构化日志仅适用于 iOS 17 及以上版本,但对于早期版本,仍可使用旧的os_log。配置日志记录器时,习惯上使用应用程序标识符作为子系统,模块名作为类别。整体上,这些改进使得 OSLog 在技术文章中更加实用。

· 阅读需 3 分钟
GoSwiftUI

多棒的主题演讲!

如果 Vision Pro 能够兑现承诺,我们可能即将迎来一些非常令人兴奋的时刻,就像 15 年前发布原始 iPhone 时一样 🤩

但我相信你已经听说了主题演讲中宣布的所有信息。所以我就不再多说了。

相反,我一旦有机会,就立刻安装了 Xcode 15,并开始探索寻找所有我能找到的酷炫新功能!

现在我想与你分享我的发现 😌

· 阅读需 7 分钟
GoSwiftUI

Swift 中的范围(Ranges)允许我们选择字符串、集合和其他类型的部分内容。它们是我们从 Objective-C 中熟悉的 NSRange 的 Swift 变体,尽管在使用上有所不同,我将在本篇博文中解释清楚。

通过使用范围运算符,范围使我们能够编写优雅的 Swift 代码。你第一次使用范围可能是因为你需要从字符串中选择一段字符,但是实际上你可以做的远不止这些!

· 阅读需 6 分钟
GoSwiftUI

在移动和 Web 应用程序中,视差标题是一种流行的设计模式,可以创建视觉上令人惊叹的界面。通过在用户滚动时以不同的速度移动内容,视差标题可以创建深度和动态的错觉。

在本博客文章中,我们将讨论如何使用 SwiftUI 实现视差标题。我们将使用.named(coordinateSpace)修饰符创建一个坐标空间,用于计算标题在用户滚动时的位置。

· 阅读需 4 分钟
GoSwiftUI

对于使用 SwiftUI 的多平台项目,它确实可以显著加快为多个平台开发的速度。然而,由于苹果的各个平台之间存在足够的差异,因此最终你的代码库将充斥着#if os()判断。

· 阅读需 5 分钟
GoSwiftUI

今天,当我注意到 SwitchBuddy 倒计时小部件之一出现问题时,我的一天变得相当糟糕。游戏是今天推出的,但小工具显示的是 "明天"。起初,我以为在这种情况下,我的倒计时逻辑只是稍有偏差,而我之前并没有注意到。

· 阅读需 10 分钟
GoSwiftUI

在 iOS 应用程序中,使用 C、C++、Objective-C、Objective-C++ 或 JavaScript 编写的代码在技术上相当容易。在本文中,我们将了解如何使用 JavaScriptCore 从 Swift 调用 JavaScript 代码。例如,我将通过向我的iOS 阅读应用程序添加 JavaScript 依赖项来从 URL 中删除跟踪参数的步骤。

· 阅读需 5 分钟
GoSwiftUI

工具栏API是我在SwiftUI中最喜欢的API之一。它允许您以非常明确的方式定义工具栏及其项目,并在不同的平台上表现不同。下一代SwiftUI框架为我们带来了更多自定义工具栏的方法。下面,我们将了解 SwiftUI 中新的工具栏 API。

· 阅读需 5 分钟
GoSwiftUI

iOS 要求最多的功能之一是可定制的锁屏。最后,我们在最新的iOS 16上得到了它。我们可以用一目了然的小组件填充我们的锁屏。实现锁屏小组件很简单,因为它的API与主屏幕小组件共享相同的代码。下面我们将学习如何为我们的应用程序实现锁屏小组件。

· 阅读需 11 分钟
GoSwiftUI

SKStoreReviewController 允许从应用程序内向您的用户询问 App Store 评分。正面的评价可以帮助您的应用在 App Store 中脱颖而出并吸引更多用户。当您在正确的时间要求用户评分时,转化率会增加。

虽然实施评级请求很容易,但在正确的时间要求评级可能会变得更加复杂。参与的用户更有可能发布正面评价,而当您在用户流的中间要求评分时,您可能会期望得到负面评价。让我们深入了解如何创建出色的评分请求体验。

· 阅读需 3 分钟
GoSwiftUI

在SwiftUI中构建应用程序的主要吸引力在于能够跨平台共享 UI 代码,尤其是 iOS 和 macOS。它并不完美,您经常需要进行一些#if os()检查,但是当它起作用时,它确实很棒。在 SwiftUI 出现之前,您已经可以在 iOS 和 macOS 之间共享大量(非 UI)代码。许多系统框架在两个平台上都可用,例如FoundationCore Data。偶尔会存在 API 差异,但它们很少会带来很大的负担。

在开发跨平台 SwiftUI 应用程序时,最大的问题是当您需要在 macOS上使用AppKit和在 iOS上使用UIKit时。通常,您需要的 API(因为 SwiftUI 中没有它们)完全不同。但是,有时 API几乎相同,但只是不同,以至于需要分支到特定于平台的代码路径。一个很好的例子是UIPasteboard在 iOS 和NSPasteboardmacOS 上。

在我正在开发的这个跨平台 SwiftUI 应用程序中,我希望允许用户从表格视图中复制一些文本。两个平台共享 UI 代码,但不共享底层复制功能——因为我们需要在 macOS 上使用 AppKit,在 iOS 上使用 UIKit。但我想保持调用站点的复制操作代码干净,无需进行大量#if os()检查。为此,您可以巧妙地使用typealias.

· 阅读需 6 分钟
GoSwiftUI

多次获得在 App Store 推荐的开发人员的方法

在 App Store 中获得推荐是一笔不错的交易。但是您知道**您可以要求 Apple 展示您的应用吗?**每个 App Store 开发者都可以申请功能。您需要做的就是在 Apple Developer 网站上填写专门的表格。

由于我还没有使用表单的经验,所以我决定与其他开发者聊天,希望能启发更多的独立开发者,也许是为了关注这种表单并在 App Store 上获得良好的曝光率。

· 阅读需 4 分钟
GoSwiftUI

了解如何在 SwiftUI 和 UIKit 实现 Apple 的密码自动填充。

Apple 的密码自动填充功能允许用户在不同设备上登录同一个帐户,而无需记住他们的凭据。

例如,在 Web 应用程序中注册时,用户可以生成密码并将凭据保存在他们的 iCloud 钥匙串中。当他们在某个时候运行本机应用程序以访问同一帐户时,该应用程序会在密码 QuickType 栏中建议为网站存储的凭据。在用户进行身份验证后,假设使用 Face ID,系统会预先填写凭据 - 因此无需重新输入它们。

· 阅读需 3 分钟
GoSwiftUI

这里有一个有趣的问题,似乎定期重新出现,但没有明确的答案:在用户获得应用程序内购买退款后,苹果的佣金会发生什么?

根据付费应用程序协议,如果应用程序内购买退款,所有 iOS 开发人员必须同意以下政策:

“Apple 将有权保留其销售该许可应用程序的佣金,尽管已将价格退还给最终用户。”