AFCache 0.13.0

AFCache 0.13.0

测试已测试
语言语言 Obj-CObjective C
许可证 自定义
发布上次发布2016年7月

Michael MarkowskiClaus WeymannMark Zeller维护。



 
依赖项
ZipArchive~> 1.3.0
VersionIntrospection~> 0.4.0
 

AFCache 0.13.0

  • Michael Markowski、Lars Blumberg、Nico Schmidt、Björn Kriews和Christian Menschel编写。

当前版本

0.9.10

当前活动分支

develop

AFCache是什么?

AFCache是用于iPhone/iPad和OSX的HTTP磁盘缓存,可以作为静态库或框架链接。该缓存最初编写,因为iOS中的NSURLCache忽略了NSURLCacheStorageAllowed,而是将其视为NSURLCacheStorageAllowedInMemoryOnly,这对于持续缓存来说几乎是没用的。

目标

  • 构建一个完全符合RFC2616的缓存,而不是简单地基于时间进行缓存Status: 对于一般使用效果良好,一些边缘情况可能尚未完全符合/实现。

  • 提供离线模式,以便在没有网络时从缓存中提供内容Status: 工作正常

  • 提供打包机制,预先填充缓存以访问离线内容Status: 工作良好并被用于多个实际应用程序。存在两种包装工具:Obj-C和python。

  • 允许通过覆盖NSURLCache来缓存UIWebView资源Status: 工作正常,但自iOS4以来,AJAX请求有一些问题。可能由于iOS缺陷。

听起来我需要。我可以在哪里获取文档?

这是一个好问题 ;) 文档总是不足,但您可以先查看FAQ。在AFCache-iOS Xcode项目中,您可以找到使用AFCache的不同方式的示例控制器。

查看CHANGES以获取发行说明。

历史

  • AFCache已被一些应用程序使用后,从GitHub的master分支开始。
  • 为两个大型项目(iOS和OSX)分支到“bip”,在这些项目中AFCache经过了相当充分的测试,并且获得了大量的成熟度(例如磁盘缓存、打包、认证)。
  • 在bip分支中添加了“engine room”进行日志记录(可选):https://github.com/bkrpub/EngineRoom
  • 已丢弃旧的主分支,已将其保存为分支“pre0.7”
  • 将“bip”分支移动到主分支,bip未来可能会被弃用,也可能是一个新功能的试验场

API

API已从主分支更改为bip分支,但迁移应该比较容易。旧的master分支已移至“pre0.7”分支,但我强烈建议您迁移到新的主分支。

项目状态

AFCache被用于多个iPhone应用的不同版本。它在不断进化,因此被认为是测试版。

已完成目前我正在进行一些重大的更改和添加,比如打包工具,并在两个大型实际项目中(iPhone和OSX应用)进行测试。已完成在将这些项目成功整合AFCache之后,我将扩展演示和一些文档,使其成为一个对公众有用的库。测试用例(仍然)没有很好地维护。

分支

  • master: 当前与develop(0.9.9)同步

过时

  • 除了develop之外的其他所有分支

日志记录

日志记录是通过AFLog宏实现的,这个宏可以是

  • 只是NSLog的替代品(如果没有定义则为空)
  • EngineRoom的日志点,这是一种高级日志框架,它可以在运行时动态地操作日志,来自EngineRoom文档:基本思想是将日志消息作为第一类公民。日志点是可以在运行时操作的数据结构(例如启用/禁用)。这是通过在单独的链接器段中创建静态结构来实现的。

    您可以在此处检查EngineRoom(https://github.com/bkrpub/EngineRoom),并通过定义USE_ENGINEROOM并将EngineRoom-OSX.xcodeproj添加到您的项目中,将AFCache链接到它上。

问题(待处理)

  • 位移策略:仍然被注释掉了,它位于重构列表的顶部
  • 打包文件处理策略尚不完全明确。目前,提取后直接删除了打包文件。有些人可能想要跟踪哪些打包文件已经提取过。这也需要与文件位移策略兼容。

  • 对于清理方法仍然不满意。这里需要一个聪明的位移算法。

  • 用于在磁盘上确定缓存文件大小的代码被注释掉了,因为它有bug。不要使用这个版本进行生产。

  • 同步请求测试得不好

  • 与其使用PHP脚本作为服务器部分,不如使用内置的HTTP服务器进行单元测试。也许也可以为NSResponse对象使用模拟对象。
  • 也许应该将MIME类型添加到清单文件中?
  • 使加密成为可选的。当前,zip类中包含加密代码。

问题(已完成)

  • 大文件应该直接流式传输到磁盘,而不是在AFCacheableItem中保留。
  • OSX框架和iOS库现在是独立的Xcode项目,这减少了麻烦。

清单文件的组成

manifest.afcache文件包含存档中每个文件的条目。一个条目看起来像这样

URL ; last-modified ; expires\n ; mimetype

注意分隔符,它是" ; "(空格分号空格)格式。MIME类型是可选的。

示例

http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png ; Sat, 27 Mar 2004 18:43:30 GMT+00:00 ; Thu, 29 Jul 2010 14:17:20 GMT+00:00 ; text/html

URL必须正确编码,并且不得包含末尾的hash或参数。

由于文件路径是根据URL计算的,因此不需要将其包含在清单文件中。日期必须按照rfc1123格式化。例如:"Wed, 01 Mar 2006 12:00:00 GMT"。

包zip文件的解剖结构

zip文件结构类似于URL

hostname/path/to/file.suffix zip文件包含打包器收集的所有文件和清单文件。可选地,它还包括用户数据。

在项目中使用AFCache时的构建说明

编译时需要链接到SystemConfiguration.framework和libz.dylib。由于AFCache使用了Objective-C Category,您需要将以下选项添加到链接器(目标/您的项目,信息,构建设置:"其他链接器标志")-ObjC -all_load

更多信息请参阅:http://developer.apple.com/mac/library/qa/qa2006/qa1490.html

如何运行单元测试(已过时)

单元测试目前依赖于现有的HTTP服务器,例如Apache。提供了一个简单的php脚本来正确地回答请求。将脚本放在您的htdocs目录下,并在LogicTests.m中配置URL,例如:

static NSString *kBaseURL = @"http://127.0.0.1/~mic/afcache/";

更多信息请参阅CHANGES。

我经常使用Charles作为HTTP调试代理,它非常适合查找不一致性。 http://www.charlesproxy.com/

版权

版权2008,2009,2010,2011,2012,2013艺术品 - 精细软件开发

http://www.artifacts.de

作者:Michael Markowski ([email protected]) Lars Blumberg Sebastian Grimme Claus Weymann

Nico Schmidt (Savoy Software) Björn Kriews (bkr (0x40) jumper.org) Christian Menschel (post at cmenschel.de)

许可证

在Apache许可协议版本2.0(“许可证”)下许可;您不得使用此文件,除非遵守许可证。您可以在https://apache.ac.cn/licenses/LICENSE-2.0获得许可证的副本。

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管辖许可和限制,请参阅许可证。