GBCloudBox 2.1.0

GBCloudBox 2.1.0

测试已测试
语言语言 Obj-CObjective C
许可证 Apache 2
发布上一个发布2016年3月

Luka Mirosevic维护。



  • 作者
  • Luka Mirosevic

GBCloudBox  

GBCloudBox 是一个框架,用于在 iOS/Mac OS X 应用程序与服务器之间执行空中、异步、后台资源同步。假设您的应用程序依赖于一个名为 MyResource.js 的 jersey 资源文件,但您希望经常更改它而无需将整个应用程序重新提交到 App Store。GBCloudBox 允许您在应用程序内打包资源版本,发布和分发您的应用程序,然后一旦应用程序发布到野外,就可以将资源的更新版本推送到云端,并使野外的应用程序一旦新的资源可用,即可自动同步资源。

它包含一个服务器实现,预先配置为一次点击部署到 Heroku。它经过彻底的负载测试,可以支持 1300 个 req/s,每个 dyno(即免费)可以有 1000 个并发用户。在超负荷容量下,它可以优雅地降级,并可以维持 ~800ms 的端到端响应时间,有 4000 个并发用户,大约 38% 的请求丢失;即,通过量为 3100 个成功 req/s。您也可以根据自己的意愿编写自己的服务器实现。

使用方法

首先添加 GBCloudBox 服务器

//Set the source servers, takes an array so if you have multiple servers, the library will load balance between them
[GBCloudBox setSourceServers:@[@"https://www.server1.com", @"https://www.server2.com"]];

然后注册一个资源

[GBCloudBox registerResource:@"MyResource.js"];

然后您可以在应用程序的任何位置获取资源数据

NSData *scriptData = [GBCloudBox dataForResource:@"MyResource.js"];

然后您将有一个代表您资源的最新版本的 NSData 实例。

我喜欢为我的资源注册一个反序列化程序,以便我可以轻松地获取本地对象,而不是 NSData 实例,在这种情况下我们的资源是 NSString,所以我们的反序列化程序将类似于

[GBCloudBox setDeserializer:^id(NSData *data) {
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
} forResource:@"MyResource.js"];

现在,每当我需要真正的 NSString 对象时,它就简单多了

NSString *script = [GBCloudBox objectForResource:@"MyResource.js"];

您必须决定何时同步对象。这是一个异步的背景同步,您可以在应用程序启动时进行操作。要执行资源与服务器之间的最新版本的同步,您需要调用

[GBCloudBox syncResource:@"MyResource.js"];

要同步所有已注册资源,只需调用

[GBCloudBox syncResources];

GBCloudBox 会在更新后发布一个 kGBCloudBoxResourceUpdatedNotification 通知。然后您可以通过调用 objectForResource:dataForResource: 如上所述来简单地获取最新版本。

或者,还有一个基于块的 API 注册一个后更新处理程序

[GBCloudBox addPostUpdateHandler:^(NSString *identifier, NSInteger version, NSData *data) {
    //do something now that the resource has been updated
} forResource:@"MyResource.js"];

将资源包的初始版本与应用程序捆绑在一起是个好主意,这样用户可以使用而不需要立即联网(如果用户没有互联网或者应用程序无法在没有它的情况下运行)。

在你的应用程序中包含一个名为 GBCloudBoxResource.bundle 的文件夹。将你想要与应用程序一起分发的任何资源保存在那里。在这个包内,添加一个 Manifest.plist plist,列举捆绑的资源及其版本。The Manifest.plist 具有以下格式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>MyResource.js</key>
    <dict>
        <key>version</key>
        <integer>1</integer>
        <key>path</key>
        <string>Resources/MyResource.js</string>
    </dict>
    <key>SomeOtherResource.json</key>
    <dict>
        <key>version</key>
        <integer>4</integer>
        <key>path</key>
        <string>Resources/SomeOtherResource.json</string>
    </dict>
</dict>
</plist>

库将随后智能选择最新的可用资源,缓存最新版本,并始终保持最新。

别忘了导入头文件

#import <GBCloudBox/GBCloudBox.h>

存储

您的应用程序可以捆绑资源,以便从第一天开始就准备好使用,即使没有互联网连接。当您的应用程序与服务器同步并获得更新的版本时,它会将此版本缓存在本地磁盘上,以便从那时起,最新的版本始终可用,即使再次无法访问互联网也不例外。当有互联网连接可用时,库将尽力更新,并将负责缓存,并确保您的应用程序始终有最新的版本可用。这个库非常聪明,只有当有新版本可用时才下载资源,所以您可以有任意大小的资源,并且它的表现仍然合理。

服务器(Ruby)

参见:github.com/lmirosevic/GBCloudBoxServer-Ruby

版权  许可

版权 2013 Luka Mirosevic

根据Apache许可证版本2.0(“许可证”)授权;您不得未经许可使用本作品。您可以在LICENSE文件中或从以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可协议的权限和限制,请参阅许可证。

Bitdeli Badge