iOS on Rails- up and running

作为一个 iOS 开发,相信很多人和我一样想给自己的App快速的建立后端Server, 把各种高负荷的计算工作都扔到后端,这样 App 的开发就可以重点放在提高用户体验上。 而作为一个 Ruby 开发者,我们同样希望自己优雅的 Ruby 代码不仅仅作为 Web App 的后端,更希望自己也能够给自己的后端写移动 App,在地铁上无聊的时候玩玩。 所以我对自己的定义是“一个喜欢Ruby的iOS开发者”,我将会陆续的分享我使用 Rails 作为自己App后端的经验,每一次的分享都将是一个完整的项目,你可以直接 clone 我放在 Github 上面的项目,然后在自己的本地完美的跑起来,由浅入深。我想把这一系列称之为“iOS on Rails”,后续可能包括: REST API, 授权认证,消息通知,统计等。

而今天这这篇文章是一个开始,一个很简单的开始: 是一个 Rails 和 iOS 相遇的故事。

需求

我们要做一个自己的新闻客户端。

分析

这就是一个很典型的需要后端支持的 App 的场景,App不可能去代替后端去完成新闻的获取,信息的处理等工作,App的目的是为终端用户提供最优质的新闻阅读体验。

实现

Rails

有很多种方式去为 iOS App 搭建一个后端,但是也许 Rails 是最快的方式,Rails 让我们可以在几分钟之内就可以搭建起一个干净的API Server:backend-as-a-service.显然我们App需要的resource是新闻(news),那么我们的REST API应该是这样子:

 GET /news

对于Rails来说,我们只要进行下面几步就可以达到目的了:

  • 创建一个 Rails 项目
    rails new Server
  • 创建相应的model和controller
    rails g model news
    rails g controller news
  • 在config/routes.rb中设置路由
    Rails.Application.routes.draw do
      resources :news
    end

现在我们可以查看我们Server已经支持了哪些路由了

$ rake routes

     Prefix Verb   URI Pattern              Controller#Action
    news_index GET    /news(.:format)          news#index
               POST   /news(.:format)          news#create
      new_news GET    /news/new(.:format)      news#new
     edit_news GET    /news/:id/edit(.:format) news#edit
          news GET    /news/:id(.:format)      news#show
               PATCH  /news/:id(.:format)      news#update
               PUT    /news/:id(.:format)      news#update
               DELETE /news/:id(.:format)      news#destroy

当然我们需要去 controller 去实现相应的 Actioin,为了支持 'GET /news' 这个路由,我们需要去实现index 方法,所以我们的 App/controllers/news_controller.rb 如下:

class NewsController  News.all
  end
end
  • 添加测试数据

给我们的项目添加一点测试数据吧, db/seed.rb

1000.times do
  News.create(title:Faker::Name.name,
              link:Faker::Internet.url,
              pub_date:Faker::Time.between(2.days.ago, Time.now),
              image:Faker::Internet.url,
              video:Faker::Internet.url,
              text:Faker::Lorem.paragraph,
              category: Faker::Lorem.word,
              from_site: Faker::Lorem.word)
end

    $ rake db:seed

简单的测试一下我们的API。

    $ rails s
    $ curl 127.0.0.1/news

是不是看到哗啦啦的一大波数据,这就说明基于Rails的一个简单的 API Server就完成了。

iOS

对于很多的 Ruby 开发者来说,习惯了使用 Vim/Emacs 写代码之后,打开笨重的 Xcode,真是一件不是那么爽的事情啊,不过对于 iOS 开发来说, Xcode 真的对我们的开发提供了很多方便的功能,无论是 Storyboard 拖拖拽拽还是代码的自动补全和提示都是非常顺手,因为 Objective C 的代码风格和 Ruby 的差异真是太大。当然如果你自认为没有 Vim/Emacs 就不能写代码的纯洁 geek,可以给 Xcode 安装 Vim/Emacs 的插件。

开始编写我们的 iOS App 吧。打开 Xcode,创建一个新项目,然后选择 Sigle View Application。删掉 main Storyboard 以及 LaunchScreen.xib 中的 View。删掉这些的目的让我们从一开始就用纯代码的方式去完成我们的 iOS App,用 Storyboard 在开始的时候是可以让我们很快的进行布局等工作,但是当我们的 App 开始变的复杂之后,纯代码的控制让我们可以绕过很多的坑,节省很多宝贵时间。

在这片文章中,我们的目的很简单: 为我们的 App 创建一个简单的 View, 然后当我们的 App 从我们的 Rails Server 拿到我们新闻之后, 将第一条新闻的标题显示在 View 的中间。所以我们只要下面一段简单的代码就可以达到目的.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    UIViewController *viewController = [[UIViewController alloc] init];
    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UILabel *label = [[UILabel alloc] initWithFrame:
                      CGRectMake(0,
                                 [[UIScreen mainScreen] bounds].size.height / 2 - 22,
                                 [[UIScreen mainScreen] bounds].size.width,
                                 44)
                      ];
    label.backgroundColor = [UIColor whiteColor];
    [label setTextAlignment:NSTextAlignmentCenter];
    [view addSubview:label];
    viewController.view = view;

    self.window.rootViewController = viewController;
    [self.window makeKeyAndVisible];

    [self get:@SERVER_URL parameters:@{}
      success:^(id JSON) {
          label.text = JSON[0][@"title"];
      } failure:^(NSError *error) {
          NSLog(@"%@", [error localizedDescription]);
      }];

    return YES;
}

- (void)get:(NSString *)url parameters:(NSDictionary *)params success:(void (^)(id))successHandler failure:(void (^)(NSError *))failureHandler {
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];                                                                                                            
    [manager GET:url parameters:params
         success:^(AFHTTPRequestOperation *operation, id responseObject) {
             successHandler(responseObject);
         }
         failure:^(AFHTTPRequestOperation *operation, NSError  *error) {
             failureHandler(error);
         }
     ];
}

作为一个骄傲的 Ruby 程序员,你应该已经猜到上面那段代码的大体意思:创建一个 View,在View的中间放置一个 label,然后从我们的 Rails Server 上请求新闻,并且将第一条新闻标题放到 label上面去显示。对,就是这样的。当然别忘了在 AppDelegate.m 中添加

#import "AFNetworking.h"
#define SERVER_URL "http://127.0.0.1:3000/news"

然后你就点击 build and run 或者 command + R 让 Xcode 去编译并且运行我们的 App。如果没有什
么意外你应该可以看到我们的 App 已经完美的运行起来,虽然它非常的简单。但是我们的 Rails 在此刻和我们的 iOS 终于合体了。(此处应该有掌声 ): )

完整的代码可以在 https://github.com/metrue/iOSonRails

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值