NSIcon Framework

NSIcon GitHub 许可证 GitHub 发布

NSIcon 为 SwiftUI 编程提供了一个易于使用的 Mac 应用程序图标视图,通过利用系统原生资源中的高清资源,减少了手动存储额外资源的需求。

概述

NSIcon

可用版本: macOS 13.0+

使用 NSIcon 就像 SwiftUI 中内置的 Image 视图一样简单。您可以访问 Mac 上安装的几乎所有应用程序图标。

// Use `init()` if you want to access the icon of your app itself.
NSIcon()

// Get an app icon view by name.
NSIcon("Safari")

// You can also access app icon by its bundle identifier.
NSIcon(bundleIdentifier: "com.apple.safari")

如果无法提供相应的图标,NSIcon 将显示 macOS 默认附带的 GenericApplicationIcon。

您可以使用 iconPlaceholderStyle 修饰符来获得占位符的不同外观。

NSIcon("unknown")
    .iconPlaceholderStyle(.classic)

GenericAppIconStyles

UIIcon

可用版本: iOS 16.0+, iPadOS 16.0+, Mac Catalyst 16.0+, watchOS 9.0+, visionOS 1.0+

考虑到这些平台上的应用程序沙箱环境,无法访问其他应用程序的图标文件资源,UIIcon 仅提供访问应用程序自身图标的能力。

NSIcon 的行为不同,UIIcon 默认情况下会为图标添加遮罩。使用参数 addMask: Bool 来控制。

在不同的平台上,遮罩的外观是不同的。

平台 iOS iPadOS Mac Catalyst watchOS visionOS
遮罩 AppIconMask AppIconMask MacAppIconMask 圆形 圆形
UIIcon()
UIIcon(addMask: false)

在 visionOS 中,应用程序图标由三个不同的图层组成。默认情况下,使用 init() 渲染合并版本。您也可以使用 init(_ layer: AppIconlayer)init(_ layers: [AppIconlayer]) 来选择要显示的图标部分。

UIIcon(.back)
UIIcon([.middle, .front])

注意: UIIcon 不支持 iconPlaceholderStyle 修饰符。

NSAsyncIcon

可用版本: macOS 13.0+

NSAsyncIcon 的行为与 NSIcon 类似,它通过访问 iTunes Search API 从 App Store 获取应用程序图标。

NSAsyncIcon("Pages")
NSAsyncIcon(bundleIdentifier: "com.apple.iwork.pages")

当使用 appName 作为初始化参数时,您可以设置您对 iOS、macOS、watchOS 或 visionOS 应用程序的偏好,以决定您收到的结果。默认值为 .macOS

NSAsyncIcon("Pages", for: .iOS)

iOS 应用程序图标和一些 macOS 应用程序图标呈现为不透明的正方形。因此,请考虑是否为其添加圆角矩形遮罩。默认值为 false

注意: NSAsyncIcon 将检查此图标是否包含透明像素。如果是,则不会将遮罩添加到视图。

NSAsyncIcon("Pages", for: .iOS, addMask: true)

NSAsyncIconPreview

注意: 按照 Apple 的 人机界面指南,iOS 应用程序图标的外观比 Mac 应用程序图标略大。此框架无意破坏这些规则。请根据您的具体用例酌情处理。

有时,您可能想要访问某些仅在特定国家或地区的 App Store 中提供的应用程序。您可以通过输入国家/地区代码轻松实现此目的。

NSAsyncIcon("原神", country: "CN")

NSAsyncIconCountryPreview

UIAsyncIcon

可用版本: iOS 16.0+, iPadOS 16.0+, Mac Catalyst 16.0+, watchOS 9.0+, visionOS 1.0+

UIAsyncIcon 的工作方式几乎与 NSAsyncIcon 相同,请查看以下差异

  1. 默认情况下,为图标添加遮罩
  2. for platform: AppPlatform 参数默认为 .iOS
  3. 支持自定义占位符
  4. 不支持 placeholderStyle 修饰符

UIAsyncIcon 使用 ProgressView() 作为默认占位符,要创建自定义占位符,只需将自定义视图添加到 placeholder 闭包即可。

UIAsyncIcon("Pages") { CustomPlaceholder() }

安装

NSIcon 可通过 Swift Package Manager 安装。

dependencies: [
    .package(url: "https://github.com/Stv-X/NSIcon.git", branch: "main")
]