EVURLCache 3.6.0

EVURLCache 3.6.0

测试已测试
语言语言 SwiftSwift
许可证 未知
发布时间最后发布时间2018年8月
SPM支持 SPM

evermeer 维护。



EVURLCache

Build Status Issues Documentation Stars Awesome

Version Language Platform Support License

Git Twitter LinkedIn Website eMail

这是什么?

这是增强型NSURLCache的一个子类,用于处理所有使用NSURLRequest的网页请求。(包括UIWebView)

EVURLCache旨在处理以下缓存策略

  • 即使没有网络连接,应用程序也必须能够正常运行。
  • 下载后,应用程序也必须能够立即正常运行。(这意味着所需的内容可以包含在应用程序中。)
  • 如果可用,您还希望能够下载新/更新的内容。

其他功能

由于(可能,请参见限制条件)所有文件都将被缓存,您无需自己处理传入的数据。您可以进行NSURLRequest操作,然后在connectionDidFinishLoading中,您可以使用缓存中的文件。您可以通过调用:EVURLCache.storagePathForRequest(theRequest)来获取该文件的完整路径。

控制缓存

EVURLCache会尊重包含'no-cache'或'no-store'的HTTP头变量'Cache-Control'和'Pragma'。如果在这种情况下,响应将不会被写入缓存。但是您需要注意,如果文件已在缓存中(因为您将其放入了PreCache文件夹或使用不同头变量之前已经检索过文件),则该文件将写入缓存以更新其内容,而HTTP头变量将被忽略。

EVURLCache在从缓存中读取时还会考虑HTTP头变量'Access-Control-Max-Age'。当内容过旧时,它会尝试重新获取内容。

缓存是基于包括查询字符串参数在内的完整URL进行的。如果您出于某种原因想将多个URL存储和检索为相同的缓存项,则可以添加HTTP头部变量(服务器端)MobileAppCacheKey。

大多数Web服务器解释URL时不会区分大小写。由于iOS和OSX(不总是)具有区分大小写的文件系统,所以可能请求的URL在文件系统中不具备区分大小写的匹配项。默认情况下,EVURLCache在将路径转换为小写时存储所有文件。如果您确实想具有区分大小写的匹配项,则可以设置EVURLCache.FORCE_LOWERCASE为false。

您可以通过EVURLCache影响最大文件大小。这是由NSURLCache基类处理的设置。默认情况下设置为16MB。您可以通过设置EVURLCache.MAX_FILE_SIZE来影响它。它作为位数设置。因此将其设置为24表示缓存大小为2^24 = 16MB。

您可以通过EVURLCache影响最大总大小。这是由NSURLCache基类处理的设置。默认情况下设置为256MB。您可以通过设置EVURLCache.MAX_CACHE_SIZE来影响它。它以位数设置。因此将其设置为30表示缓存大小为2^30 = 256MB。请确保它至少比最大文件大小大16倍,否则最大文件大小将不会使用。

如果还想查看EVURLCache正在做什么,可以将EVURLCache.LOGGING设置为true。

观看演示

按照以下步骤查看演示应用操作。日志已被启用,因此请关注输出窗口以了解正在发生什么。

  • 确保演示应用不在您的手机上,并将其设置为飞行模式。
  • 启动应用。您仍然可以看到我的网站的主页,因为它在PreCache中。
  • 从菜单选择其他页面。您将看不到任何内容,因为这些页面既不在PreCache也不在Cache文件夹中。
  • 关闭飞行模式并选择一个菜单选项。您将只看到该页面。
  • 打开飞行模式并导航回主页。您现在还可以访问您之前选择的页面,因为它已被缓存。其他页面仍然不可用。

创建初始缓存

只需将您希望一开始就可用的所有文件放入/PreCache文件夹。所需的目录结构将与完整URL相同。所以evict.nl/ios/samples/index.html必须存储在/PreCache/evict.nl/ios/samples/文件夹中。将此添加到项目中的最简单方法是选择'添加文件',然后选择文件夹,并选择'为任何添加的文件夹创建文件夹引用'

如果您不确定需要在PreCache文件夹中包含哪些文件,那么只需在模拟器中启用EVURLCache并运行您的应用程序,然后执行所有需要在没有互联网连接的情况下才能正常工作的功能。然后浏览到文件(请参阅~/Library/Application Support/iPhone Simulator/ ...)。下载的文件将在Documents/Cache文件夹中。查看输出窗口以获取确切位置(如果启用了调试)。您可以将其复制到PreCache文件夹中

兼容性

这个缓存应与所有使用NSURLRequest从网络下载的下载库兼容(例如AFNetworking和Alamofire)。它还适用于UIWebview中的每个请求。

局限性

下载的文件在写入磁盘之前将完全在内存中。正因为如此,大文件不会被缓存。最大文件大小可以通过在EVURLCache.swift中设置MAX_FILE_SIZE来影响

用法

只需将以下代码放入您的AppDelegate.swift中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    EVURLCache.LOGGING = true // We want to see all caching actions
    EVURLCache.MAX_FILE_SIZE = 26 // We want more than the default: 2^26 = 64MB
    EVURLCache.MAX_CACHE_SIZE = 30 // We want more than the default: 2^30 = 1GB
    EVURLCache.activate()
    return true
}

调试

如果你在设置 EVURLCache 时遇到问题,请启用日志记录。你可以通过设置 EVURLCache.logging = true 来完成这件事。在报告问题时,包含此输出会有所帮助。

在自己的应用中使用 EVURLCache

'EVURLCache' 现在可以通过依赖管理器 CocoaPods 提供。你必须使用版本 0.36 或更高版本的 CocoaPods。目前,可以通过执行以下操作进行安装

[sudo] gem install cocoapods

如果你已安装 CocoaPods 版本 0.36 或更高版本,则只需将以下两行添加到你的 Podfile 中,即可将 EVURLCache 添加到你的工作区

use_frameworks!
pod "EVURLCache"

CocoaPods 0.36 或更高版本会将你使用的所有 pods 制作成动态框架。因此,它只支持 iOS 8.0 或更高版本。使用框架时,你还需要在 swift 文件的顶部添加一个导入,如下所示

import EVURLCache

如果你想要支持比 iOS 8.0 更旧的版本,你也可以简单地将 EVURLCache.swift 和 ReachabilitySwift.swift 复制到你的应用中。

构建 EVURLCache 演示

  1. 将存储库克隆到工作目录

  2. CocoaPods 用于管理依赖关系。Pods 简单设置并通过 ruby gem 分发。按照网站上的简单说明进行设置。设置完成后,从 EVURLCache 的顶级目录运行以下命令以下载 EVURLCache 的依赖项

pod install
  1. 在 Xcode 中打开 EVURLCache.xcworkspace 并运行应用。

许可证

EVURLCache 在 MIT 3 许可证下可用。有关更多信息,请参阅 LICENSE 文件。

我的其他库

另请参阅我的其他开源iOS库

  • EVReflection - 基于反射的对象映射(字典、CKRecord、JSON和XML),并支持Alamofire和Moya扩展,使用RxSwift或ReactiveSwift
  • EVCloudKitDao - 简化Apple的CloudKit访问
  • EVFaceTracker - 计算您的设备和您的脸之间的距离和角度,以模拟3D效果
  • EVURLCache - 一个NSURLCache子类,用于处理所有使用NSURLRequest进行网络请求的情况
  • AlamofireOauth2 - 使用Alamofire实现的OAuth2
  • EVWordPressAPI - 使用AlamofireOauth2、AlomofireJsonToObjects和EVReflection实现的WordPress(Jetpack)API(开发中)
  • PassportScanner - 扫描护照的MRZ代码并提取姓名、姓氏、护照号码、国籍、出生日期、到期日期和个人编号
  • AttributedTextView - 最简单创建具有支持多个链接(url、标签、提及)的格式化文本视图的方式