GroundControl 2.1.0

GroundControl 2.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Mattt 维护。



  • Mattt Thompson

iOS 的远程配置

摆脱 App Store 批准流程两周的暴政!

许多开发者不知道,他们允许远程控制其应用程序的行为(前提是应用程序没有下载任何新代码)。

GroundControl 以一种极其简单的方式允许您远程配置应用程序,您可以添加如特性标志、即兴的A/B 测试或简单的“每日消息”

它基于AFNetworking构建,并为NSUserDefaults提供了一个类范畴(只需将 #import "NSUserDefaults+GroundControl.h" 添加到您想要使用的任何文件的顶部)。

该项目是系列开源库的一部分,涵盖了 iOS 应用程序基础设施的关键方面。请确保查看其姊妹项目:SkyLabCargoBayhouston,和 Orbiter

客户端代码

NSURL *URL = [NSURL URLWithString:@"http://example.com/defaults.plist"];
[[NSUserDefaults standardUserDefaults] registerDefaultsWithURL:URL];

...或者如果您需要成功/失败回调,并且不想监听 NSUserDefaultsDidChangeNotification

NSURL *URL = [NSURL URLWithString:@"http://example.com/defaults.plist"];
[[NSUserDefaults standardUserDefaults] registerDefaultsWithURL:URL
  success:^(NSDictionary *) { 
    // ... 
} failure:^(NSError *) { 
    // ...
}];

...或者如果您需要使用除了 GET 之外的 HTTP 方法,或者需要设置任何特殊头部,请指定一个 NSURLRequest

NSURL *URL = [NSURL URLWithString:@"http://example.com/defaults.plist"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[[NSUserDefaults standardUserDefaults] registerDefaultsWithURLRequest:request
  success:^(NSURLRequest *, NSHTTPURLResponse *, NSDictionary *) { 
    // ... 
} failure:^(NSURLRequest *, NSHTTPURLResponse *, NSError *) { 
    // ... 
}];

服务器代码

GroundControl 异步下载并读取一个远程的 plist 文件。这可以是一个静态文件,也可以是动态生成的,如下面的示例(也请参阅 example/server 中找到的完整 Sinatra 应用程序)。

Ruby

require 'sinatra'
require 'plist'

get '/defaults.plist' do
  content_type 'application/x-plist'

  {
    'Greeting' => "Hello, World",
    'Price' => 4.20,
    'FeatureXIsLaunched' => true
  }.to_plist
end

Python

from django.http import HttpResponse
import plistlib

def property_list(request):
    plist = { 
         'Greeting': "Hello, World", 
         'Price': 4.20, 
         'FeatureXIsLaunched': True, 
         'Status': 1 
    }

    return HttpResponse(plistlib.writePlistToString(plist))

Node.js

var plist = require('plist'),
    express = require('express')

var host = "127.0.0.1"
var port = 8080

var app = express()
app.use(app.router)

app.get("/", function(request, response) { 
        response.send(plist.build(
            {
                'Greeting': "Hello, World", 
                'Price': 4.20, 
                'FeatureXIsLaunched': true, 
                'Status': 1
            }
        ).toString())
})

app.listen(port, host)

联系

Mattt Thompson
@mattt

许可证

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