Stork 0.1.3

Stork 0.1.3

Tests已测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2014年12月

Josh Holtz 维护。



Stork 0.1.3

  • 作者:
  • Josh Holtz

Stork iOS SDK

从任何地方将混合应用程序部署到任何设备,仅需几秒钟 - http://www.storkhq.io/

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Prepare delivery - configure Stork (default version will be 0.0.0)
    [[Stork sharedClient] prepareDeliveryWithProjectToken:@"your-project-token" withVersion:@"your-project-version"];
    [[Stork sharedClient] prepareDeliveryWithWebView:self.webView];

    // Start Stork delivery - Stork now handles downloads and updates
    [[Stork sharedClient] deliver];
}

概览

Stork 是一个平台,用于管理并部署在原生 iOS、Android、Windows Phone 和 Cordova 包装器内的混合 HTML5 应用程序。您所需做的就是提供 projectTokenversion,Stork 将处理其余工作。它会下载并安装您的 HTML5 应用的最新版本,这样您的用户无需通过 App Store 推送更改即可始终运行最新的更新。

需要从 HTML/JS 与原生 iOS 进行通信?没问题!Stork 配备了一个本地桥接器,允许进行此类通信。但这是尚未官方发布的功能,在这之前您可以使用 Cordova。

概念

  • 工作目录 - 被加载到 UIWebView 中的目录。这是用户正在与之交互的当前安装的部署。
  • 暂存目录 - 在安装之前,保存最新下载的部署的目录。部署在这里保持,直到它准备好移动到用户交互的工作目录。临时目录通常手动移动到工作目录,因为这会重新加载用户可能正在与之交互的 webview。默认情况下,Stork 在应用程序启动时将临时目录移动到工作目录。

功能

  • 将 HTML5 应用程序部署到原生包装器中
  • 限制部署到特定的原生版本
  • 使用 StorkConsoleViewController 在您的设备上运行应用程序时进行调试 - 了解更多
  • 使用 StorkLoaderViewController 在下载和安装新内容时向用户显示(这样他们就不会遇到空白屏幕) - 了解更多

安装

示例

使用 StorkLoaderViewController 的简单设置

此设置具有最少的工作量,但提供了最多的功能。以下是正在发生的事情

  1. 使用您的项目令牌和版本(从 Stork 仪表板配置)设置 Stork
  2. 使用您的 webview,其中 Stork 对象将加载您的 web 应用程序(了解更多关于 deliver
  3. 使用单例 [Stork sharedClient] 来初始化 StorkLoaderViewController
  4. 设置 [Stork sharedClient] 的代理为 StorkLoaderViewController 实例,这使得 StorkLoaderViewController 能够接收显示所需的所有信息,并在完成下载后隐藏
  5. 告诉 Stork 开始分发(这将检查新的部署,下载它们,并将它们加载到 webview 中)
@interface ViewController ()<StorkDelegate>

@property (nonatomic, strong) StorkLoaderViewController *storkLoaderViewController;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Prepare delivery - configure Stork
    [[Stork sharedClient] prepareDeliveryWithProjectToken:@"your-project-token" withVersion:@"your-app-version"];
    [[Stork sharedClient] prepareDeliveryWithWebView:self.webView];

    // OPTIONAL - Use this fancy view controller to show loading status
    self.storkLoaderViewController = [StorkLoaderViewController addToViewController:self withStork:[Stork sharedClient]];

    // Start Stork delivery - Stork now handles downloads and updates
    [[Stork sharedClient] deliver];
}

@end

使用方法

Stork

Stork 对象是这个库的核心。它处理 API 通信、下载 HTML 网络应用、加载 UIWebView,以及包含工作目录和存放目录的状态等。以下是重要方面的详细说明。

Stork sharedClient

通过在 Stork 上调用 sharedClient 方法,您可以在整个应用程序中获得一个单一实例。Stork 中内置了单例,因为大多数应用程序实际上只需要一个 UIWebView 实例,它只需要一个 Stork 实例。

然而,如果您需要的话,可以实例化自己的(和多个)Stork 对象。

Stork *storkSingleton = [Stork sharedClient];

Stork prepareDelivery

Stork 对象有几个以 prepareDelivery 前缀开头的方法。这些方法应该只执行一次,并在调用 deliver 方法之前被调用,因为它们要么是 1) 执行分发所必需的,要么是 2) 确定 Stork 为您执行工作的方式。

prepareDeliveryWithProjectToken:withVersion

如果您的项目令牌和/或版本没有定义,Stork 实例将无法找到任何部署

prepareDeliveryWithWebView

如果您的 webview 没有定义,Stork 实例将无法自动加载您的 webview

prepareDeliveryWithOnDeliverBehavior:withOnEnterForeground

kStorkBehaviorNone - 不做任何事情
kStorkBehaviorCheckNewDeploy - 检查是否有新的部署可用 - 点击 手动请求下载和安装
kStorkBehaviorDownloadNewDeploy - 检查是否有新的部署可用并在后台下载它 - 将在下次应用程序启动或手动安装时重新加载
kStorkBehaviorReloadNewDeploy - 检查是否有新的部署可用,在后台下载它,安装它,并重新加载 webview

想要手动控制 Stork 吗? - 点击 这里了解更多信息

// Configures this Stork instance with your project token and app version
[[Stork sharedClient] prepareDeliveryWithProjectToken:@"your-project-token" withVersion:@"your-app-version"];

// Configures this Stork instance with which webview will be loaded with the web app
[[Stork sharedClient] prepareDeliveryWithWebView:self.webView];

// Configures this Stork instance's behavior when 'delivery' is called - checks for deploy, download new deploy if available, and then reload the web view
[[Stork sharedClient] prepareDeliveryWithOnDeliverBehavior:kStorkBehaviorReloadNewDeploy withOnEnterForeground:kStorkBehaviorReloadNewDeploy];

Stork deliver

一旦调用 deliverStork 实例将开始工作。

默认行为
  • 应用程序启动时将检查新的部署
  • 当应用程序返回到前台时,将在一天后检查新的部署
  • 当发现新的部署时,它将在后台(到暂存目录)下载它。下载完成后,它将自动将其从暂存目录移动到工作目录,并重新加载UIWebView,以便用户可以使用新的Web应用

注意:由于UIWebView将自动重新加载,这可能无法提供最佳的用户体验。稍后会有其他配置使其更加完善。

[[Stork sharedClient] deliver];

Stork 代理

Stork提供了一个可以设置代理,即StorkDelegate。该代理调用- (void)stork:(Stork *)stork finishedOperation:(StorkOperation)operation withData:(NSDictionary *)data withError:(NSError *)error将获取所有可能发生的不同类型的状态更新和错误。

这允许您处理...
  • 当有新的部署可供下载时——您可能会显示自己的(下载和重新加载)界面
  • 当新的部署已在后台下载时——您可以向用户询问是否想要刷新他们的Webview
  • 当发生错误时——也许用户没有最好的互联网连接,应该被告知
可用数据
  • 下载进度更新 - kStorkOperationDownloadProgressUpdated
    • kStorkNotificationUserInfoProgress - 进度为CGFLoat - 0.54
  • 更新了工作目录 - kStorkOperationDidUpdateWorkingDirectory
    • kStorkNotificationUserInfoUrl - 指向索引页面的NSString URL
@interface ViewController ()<StorkDelegate>

@end

@implementation ViewController

- (void)viewDidLoad
{

    // ... other setup code

    // Being a delegate but we don't really need to in this example
    [[Stork sharedClient] setDelegate:self];

    // ... other setup code

}

#pragma mark - StorkDelegate

- (void)stork:(Stork *)stork finishedOperation:(StorkOperation)operation withData:(NSDictionary *)data withError:(NSError *)error {

    switch (operation) {
        case kStorkOperationNewDeployAvailable:
            NSLog(@"New deploy available");
            break;
        case kStorkOperationNoNewDeployAvailable:
            NSLog(@"No new deploy avaiable");
            break;
        case kStorkOperationFailedCheckingNewDeployAvailable:
            NSLog(@"Failed while checking for new deploy - %@", error);
            break;
        case kStorkOperationDownloadProgressUpdated:
            NSLog(@"Download progress - %@", [data objectForKey:kStorkNotificationUserInfoProgress]);
            break;
        case kStorkOperationDownloadedNewDeploy:
            NSLog(@"Downloaded new deploy");
            break;
        case kStorkOperationFailedToDownloadNewDeploy:
            NSLog(@"Failed to download new deploy - %@", error);
            break;
        case kStorkOperationWillUpdateWorkingDirectory:
            NSLog(@"Will update working directory");
            break;
        case kStorkOperationDidUpdateWorkingDirectory:
            NSLog(@"Did update working directory - %@", [data objectForKey:kStorkNotificationUserInfoUrl]);
            break;
        case kStorkOperationFailedToUpdateWorkingDirectory:
            NSLog(@"Failed to update working directory - %@", error);
            break;
        case kStorkOperationDidReloadedWebView:
            NSLog(@"Did reload web view - %@", [data objectForKey:kStorkNotificationUserInfoUrl]);
            break;
        default:
            break;
    }

}

@end

手动控制Stork

有时您可能想要手动检查新部署,下载新部署或从暂存目录更新

检查新部署

使用此调用来检查新部署。如果您希望让用户在安装最新部署时有所行动,可以使用这个选项来通知他们一个新的部署。

[[Stork sharedClient] checkForNewDeploy:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Found new deploy
        NSDictionary *deploy = [data objectForKey:kStorkNotificationUserInfoDeploy];
    }
}];
下载最新部署

使用此调用来从最新检查的部署下载,如果有,并将其下载到暂存目录。

// Returns YES if Stork can download a new deploy
BOOL hasNewDeploy = [[Stork sharedClient] downloadNewDeploy:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Downloaded successfully into holding directory
    }
}];
更新暂存目录到工作目录并重新加载webview

使用此调用来将部署从暂存目录移动到工作目录,并使用最新部署重新加载web视图。

// Returns YES if there is a deploy in the holding directory to update with
BOOL canUpdateFromHolding = [[Stork sharedClient] updateWithHoldingDeploy:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Incase you need this - you probably don't
        NSURL *urlOfWorkingDirectory = [data objectForKey:kStorkNotificationUserInfoUrl];
    }
}];
组合调用 - 检查新部署和下载
[[Stork sharedClient] checkForNewDeploy:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Found new deploy
        NSDictionary *deploy = [data objectForKey:kStorkNotificationUserInfoDeploy];
    }
} andDownload:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Downloaded successfully into holding directory
    }
}];
组合调用 - 检查新部署,下载,安装到工作目录,并重新加载
[[Stork sharedClient] checkForNewDeploy:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Found new deploy
        NSDictionary *deploy = [data objectForKey:kStorkNotificationUserInfoDeploy];
    }
} andDownload:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Downloaded successfully into holding directory
    }
} andUpdateWithHolding:^(NSDictionary *data, NSError *error) {
    if (!error) {
        // Incase you need this - you probably don't
        NSURL *urlOfWorkingDirectory = [data objectForKey:kStorkNotificationUserInfoUrl];
    }
}];

StorkConsoleViewController


StorkLoaderViewController


作者

Josh Holtz, [email protected], @joshdholtz

在威斯康星州密尔沃基由RokkinCat手动编码

许可证

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