FaviconFinder 4.1.0

FaviconFinder 4.1.0

William Lumley 维护。



FaviconFinder: Simple Favicon Finding

FaviconFinder

CI Status Version Carthage Compatible SPM Compatible Swift 5.0 Platform License Twitter

FaviconFinder是一个小巧的纯Swift库,专为iOS和macOS应用程序设计,允许您检测网站使用的favicon。

为什么不止下载位于https://site.com/favicon.ico的文件?开发者可以在很多地方放置favicon,而不仅是在根目录下具有特定文件名favicon.ico的目录。favicon的地址可能链接在HTML标题标签内,或者可能位于一个web应用程序manifest JSON文件中,甚至可能是自定义文件名的文件。

FaviconFinder为您处理了这些繁琐的工作,它会遍历众多可能的favicon位置,一旦找到图像,就通过闭包向您提供。

FaviconFinder将

  • 检测根目录中URL提供的favicon。
  • 在子域失败时,自动检查favicon是否位于根URL内(如果子域失败,则检查https://site.com/favicon.ico)。
  • 检测并解析URL处的HTML以声明favicon。
  • 为您解析favicon URL,即使它是查询的子域的相对URL。
  • 允许您优先服务器端favicon的格式。
  • 检测并解析web应用程序manifest JSON文件中的favicon位置。
  • 如果您将checkForMetaRefreshRedirect设置为true,FaviconFinder将分析HTML以查找meta refresh重定向标签。如果找到了这样的标签,标签中的URL将被查询。

待完成

  • 检测并解析web应用程序Microsoft浏览器配置XML。

用法

FaviconFinder使用简单的语法,允许您轻松下载所需的favicon,并继续您的项目。只需将此代码插入到项目中即可

    do {
        let favicon = try await FaviconFinder(url: url).downloadFavicon()

        print("URL of Favicon: \(favicon.url)")
        DispatchQueue.main.async {
            self.imageView.image = favicon.image
        }
    } catch let error {
        print("Error: \(error)")
    }

高级使用

然而,如果您想对所需的favicon进行细粒度控制,您也可以做到。

FaviconFinder允许您指定首选的下载类型(HTML、实际文件或Web应用程序清单文件),然后允许您为每种下载类型指定您首选的favicon类型。

例如,您可以指定您首选HTML标签favicon,类型为appleTouchIcon。FaviconFinder将随后搜索HTMLfavicon标签中的appleTouchIcon类型。如果找不到此类型,则将搜索其他HTMLfavicon标签类型。

如果URL没有指定favicon的HTML标签,FaviconFinder会默认尝试其他下载类型,并搜索URL中的每个favicon下载类型,直到找到为止,或者将返回错误。

就像您可以指定首选的HTMLfavicon标签一样,您也可以在搜索实际文件时设置首选的文件名。

类似地,您还可以指定在遍历Web应用程序清单文件时偏好的JSON键。

对于.ico下载类型,您可以要求FaviconFinder搜索您选择的文件名。

此外,您还可以让FaviconFinder知道您需要解析和analysis网站HTML以查找meta刷新重定向标签,并查询找到的新URL。

这是您如何发出请求的方法

    do {
        let favicon = try await FaviconFinder(
            url: url, 
            preferredType: .html, 
            preferences: [
                .html: FaviconType.appleTouchIcon.rawValue,
                .ico: "favicon.ico",
                .webApplicationManifestFile: FaviconType.launcherIcon4x.rawValue
            ]
        ).downloadFavicon()

        print("URL of Favicon: \(favicon.url)")
        DispatchQueue.main.async {
            self.imageView.image = favicon.image
        }
    } catch let error {
        print("Error: \(error)")
    }

这允许您控制

  • FaviconFinder首先使用何种下载类型
  • 在遍历每种下载类型时,查找哪种子类型。对于HTML下载类型,此功能允许您优先考虑不同的“rel”类型。对于文件.ico类型,此功能允许您选择文件名。

如果您的URL中不存在所需的下载类型(例如,您请求了作为文件存在的favicon,但没有文件),FaviconFinder将自动尝试所有其他favicon存储方法。

示例项目

要运行示例项目,请克隆存储库,并从Example目录运行pod install

要求

FaviconFinder 现在支持 await/async 并发,如下例所示。因此,FaviconFinder 的最新版本需要 iOS 15.0 和 macOS 12.0。如果您需要支持较旧版本的 iOS 或 macOS,FaviconFinder 3.3.0 版本使用闭包回调和 await/async 并发。

安装

Cocoapods

FaviconFinder 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod 'FaviconFinder', '4.0.0'

Carthage

FaviconFinder 同时也通过 Carthage 提供。要安装它,只需将该行添加到您的 Cartfile 中:

github "will-lumley/FaviconFinder" == 4.0.0

Swift Package Manager

FaviconFinder 也通过 Swift Package Manager 提供。要安装它,只需在您的 Package.Swift 文件中添加依赖。

...
dependencies: [
    .package(url: "https://github.com/will-lumley/FaviconFinder.git", from: "4.0.0"),
],
targets: [
    .target( name: "YourTarget", dependencies: ["FaviconFinder"]),
]
...

作者

William Lumley[email protected]

许可证

FaviconFinder遵从MIT许可证。更多详情请参阅LICENSE文件。