Helios是一个开源框架,为iOS应用程序提供基本的后端服务,可提供从数据同步、用户账户到消息推送、IAP以及Passbook集成等服务。它使得开发者在短短几分钟内就可以获得并且运行一个客户端-服务器应用程序以及必要的功能性无缝整合。
Helios是专门为“移动为先”的开发而设计的,在设备上创建了伟大的功能,并实现了必需的服务器端组件。把你所有的精力投入到制作一个伟大的用户体验中,而不是因后端陷入困境。
Helios中关于这个理论有一个很棒的例子,那就是Core Data数据同步。它允许你使用现有的Core Data模型的定义来自动的生成一个REST网络服务,可用于在服务器和客户端传送数据。没有iCloud也没有问题。
Helios还附带一个Web UI。浏览并查找你的所有数据库记录、推送注册通知、应用程序内购买以及passbook passes。你甚至还可以从浏览器发送有针对性的推送通知。
基本要求
1. Ruby 1.9
2. PostgreSQL 9.1 (
Postgres.app是一个让Postgers服务器在Mac上运行的最简单的方法。)
在OS X系统上开始
1. 验证Ruby安装:
- $ ruby -v
如果你没看到Ruby 1.9x输出,我们建议你安装
RVM来管理Ruby版本
2. 根据命令提示符安装Helios:
- $ gem install helios
3. 创建一个新的Helios应用程序:
- $ helios new myapp
4. 根据命令提示符创建一个Postgres数据库:
- $ createdb -h localhost myapp
从由Helios生成的.env文件读取数据库证书,作为DATABASE_URL变量。默认情况下,会用生成的应用程序的名称指向一个数据库。
1. 进入到myapp目录:
- $ cd myapp
2. 启动web服务器:
- $ helios server
3. 转到
http://localhost:5000/admin,你将会看到你的应用程序的Web UI
阅读下面的说明:
1. 链接一个Core Data模型
2. 将Helios集成到你的移动客户端
使用方法
建立在Rack webserver接口之上,Helios作为中间件,能够很容易地被添加到现有的Rails或者Sinatra应用程序中。或者,如果你启动一个Helios应用程序,你能在其上建立一个新的Raild或者Sinatra应用程序。
这意味着,你能用自己喜欢的工具和框架开发你的应用程序,并能随着需求的发展维持架构的灵活性。
Sinatra/Rack
Gemfile
- gem 'helios'
config.ru
- require 'bundler'
- Bundler.require
- run Helios::Application.new do
- service :data, model: 'path/to/DataModel.xcdatamodel'
- service :push_notification, apn_certificate: 'path/to/apple_push_notification.pem', apn_environment: 'development'
- service :in_app_purchase
- service :passbook
- end
Rails
想要创建一个用Postgres作为数据库的Rails应用程序,需要将-d postgresql语句传递给rails new命令:
- $ rails new APP_PATH -d postgresql
如果你将Helios添加到现有的Rails工程中,确保在config/database.yml中指定一个PostgreSQL数据库,并检查pg Gem包含在你的Gemfile中:
Gemfile
- gem 'helios'
- gem 'pg'
通过把这个添加到config/application.rb的配置块中,Helios可作为Rails中间件运行。
config/application.rb
- config.middleware.use Helios::Application do
- service :data, model: 'path/to/DataModel.xcdatamodel'
- service :push_notification, apn_certificate: 'path/to/apple_push_notification.pem', apn_environment: 'development'
- service :in_app_purchase
- service :passbook
- end
可用服务
Helios中的每个服务都可以单独启动和配置:
data:从一个模式定义中生成一个REST webservice。目前支持Core Data (.xcdatamodel) 文件。
参数
model: 数据模型文件路径
相关的类:
指定数据模型中的每个实体都将有一个Sequel::Mode子类,这个子类在Rack::CoreData::Models命名空间下创建。
端点
push_notification: 增加iOS推送式通知注册/注销端点。
相关的类:
- Rack::PushNotification::Device
端点
in_app_purchase: 增加一个iOS应用程序内购买收到验证的端点,还有一个返回产品标识符的端点。
相关的类:
- Rack::InAppPurchase::Receipt
- Rack::InAppPurchase::Product
端点
passbook:通过添加web服务器协议端点来与Passbook通信。
相关的类:
- Rack::Passbook::Pass
- Rack::Passbook::Registration
端点
newsstand: 增加Newsstand端点。使用plist-based网络服务和Atom feeds全面管理问题和资产。
相关的类:
- Rack::Newsstand::Issue
端点
命令行接口
Helios配有一个CLI,来帮助创建和管理你的应用程序。在你$ gem install helios之后,你将会有可用的helios二进制。
创建应用程序
使用Helios的第一步是创建一个新的应用程序。可以使用$ helios 新命令来完成,如果你用过Rails,你会很熟悉这个命令。
连接一个Core Data模型
为了保持数据模型和REST webservice同步,你可以将它链接到你的helios应用程序。
- $ helios link path/to/DataModel.xcdatamodel
这在Xcode的数据模型文件和Helios项目之间创建了一个硬链接,任何一个文件的改变将会影响另外一个。下一次你启动服务器时,Helios将会自动的移植数据库来建立一个表单和插入列来存储任何新的实体或属性。
在本地启动应用程序
在localhost上的开发模式中运行Helios,运行server命令:
- $ helios server
测试推送通知
一旦你注册了一个设备并设置了证书,试试这个:
- $ curl -X POST -d 'payload={"aps": {"alert":"Blastoff!"}}' http://localhost:5000/message
为Newsstand设置存储器
为了给Newsstand设置存储器,你将需要以下云存储提供商之一的账户:
Amazon
Google
Rackspace
在你的应用程序目录中,用你的证书为你所选的云存储供应商编辑一个config.ru。以下是使用AWS配置的例子。
- require 'bundler'
- Bundler.require
- app = Helios::Application.new {
- service :data, model: Dir['*.xcdatamodel*'].first if Dir['*.xcdatamodel*'].any?
- service :push_notification
- service :in_app_purchase
- service :passbook
- service :newsstand, { :storage => {
- :provider => 'AWS',
- :aws_access_key_id => 'YOUR_ACCESS_KEY_ID',
- :aws_secret_access_key => 'YOUR_SECRET_ACCESS_KEY'
- }
- }
- }
- run app
其他的配置选项,请参考
fog.io。
运行Helios控制台
你可以在Helios应用程序的运行环境中启动一个IRB会话,使用控制命令:
- $ helios console
这个命令可以激活Helios应用程序配置的服务,包括任何生成的Core Data模型。启动时自动包含rack模块,允许你直接访问一切:
- > Passbook::Passes.all # => [...]
部署到Heroku
Heroku是激活和运行应用程序的最简单的方法。如何启动的详细说明请查阅“
Getting Started with Ruby on Heroku"。
一旦你安装了
Heroku Toolbelt,并且有一个Heroku账号,那么你可以从项目目录中输入如下命令行:
- $ heroku create
- $ git push heroku master
集成一个iOS应用程序
Core Data同步
使用
AFIncrementalStore, 你可以直接将Helios应用程序集成到Core Data栈中。无论它是一个获取或者保存更改需求,或者是实现一个属性,AFIncrementalStore能够处理所有从服务器读写或者向服务器读写所需要的网络连接。
请看Heroku开发者中心的“
Building an iOS App with AFIncrementalStore and the Core Data Buildpack”来理解如何使用AFIncrementalStore和Core Data Buildpack。即将有一篇Helios的文章,除了部署外,其他本质上没有变化。
推送通知注册
使用Orbiter可以很简单的将推送通知集成到你的应用程序中:
- - (void)application:(UIApplication *)application
- didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
- {
- NSURL *serverURL = [NSURL URLWithString:@"http://raging-notification-3556.herokuapp.com/"];
- Orbiter *orbiter = [[Orbiter alloc] initWithBaseURL:serverURL credential:nil];
- [orbiter registerDeviceToken:deviceToken withAlias:nil success:^(id responseObject) {
- NSLog(@"Registration Success: %@", responseObject);
- } failure:^(NSError *error) {
- NSLog(@"Registration Error: %@", error);
- }];
- }
转换你的推送通知证书
这些指令来自
Rails项目中APN.
一旦你的应用程序有苹果授权的证书,将你的密钥和这个授权证书作为p12文件输出。以下快速地介绍如何做到这一点:
1. 单击密钥访问中授权证书旁边的箭头,然后选择这个证书和密钥。
2. 右击选择Export 2 items。
3.下拉选择p12模式,并命名为cert.p12。
现在将p12文件转换到pem文件中:
- $ openssl pkcs12 -in cert.p12 -out apple_push_notification.pem -nodes -clcerts
未来改进
Helios还有很多地方需要提高,这有一些好的想法:
1. 测试覆盖率
2. 更多的文档
3. 更多的示例
4. 更好的RubyMotion集成
5. 支持多模式定义(不只有Core Data)
6. 从UI发送推送通知
7. 支持其他平台(Android, WP7)
联系我们
Mattt Thompson
mattt@heroku.com
授权
Helios基于
MIT协议发布。