Tag: ruby在轨道上

更好的iOS项目:rbenv的高级用法

在“更好的iOS项目”系列中,我们介绍了各种工具和环境,这些工具和环境对于更方便,高效地处理iOS项目很有用。 特别提示 对于随后的任何调用,您都不必通过sudo使用root用户权限。 如果您似乎需要,则很可能您之前已经有权限问题,或者您没有正确安装和设置rbenv 。 rbenv的高级用法 在“更好的iOS项目”系列的上一篇文章“如何使用rbenv管理iOS项目的ruby环境”中,我们学习了如何安装和使用rbenv和bundler。 现在我们来看一下使用rbenv和bundler的一些更高级的功能和陷阱。 如何在ruby -scripts中使用捆绑程序? 为了确保在ruby脚本内使用正确版本的gem,您需要在脚本顶部要求rubygems和bundler / setup : #!/ usr / bin / ruby #非捆绑包依赖 需要“ optparse” 需要’ostruct’ #支持Bundler和Gems 需要“ ruby​​gems” 需要’捆绑器/设置’ #现在,使用通过Bundler定义的xcodeproj版本 需要’xcodeproj’ 使用垃圾桶 为了确保所有调用都使用Gemfile中定义的版本,而不会在调用之前加上bundle exec前缀,可以将–binstubs和gems附加到存根到安装命令: 捆绑安装–binstubs fastlane 建议明确命名要存根的宝石,以避免与提供自己存根的宝石发生冲突,例如rails 。 然后,您可以在bin/之前添加命令,例如 箱/快车道 您还可以将export PATH=”./bin:$PATH”到Shell的rc文件中(见上文),以在运行命令时始终搜索bin文件夹(binstubs安装到的bin)。 但是,这可能会带来安全隐患。 如果执行此操作,则只需键入 快车道 作为binstubs的替代方法,您还可以将别名alias be=”bundle exec”到.rc文件中,以使原始调用更短: 快车道 奖励:如何自动安装正确的红宝石版本和宝石 在Number42,我们始终在项目中包含一个名为bootstrap.sh的脚本,该脚本会执行随后运行该项目所需的最基本的设置调用。 克隆(或拉出)项目后,只要开箱即用,在大多数情况下,调用sh bootstrap.sh就能解决大部分问题。 对于iOS和Web项目,我们使用相同的方法。 在本系列的下一集中,我们将仔细研究引导脚本。 这是脚本的摘录,它显示了我们如何安装ruby […]

iOS开发中的Ruby历史

该帖子最初发布在我的个人博客中 。 阅读原始帖子,这样您就不会错过任何内容。 今天,2月24日是Ruby编程语言诞生25周年,因为它由日本的Yukihiro“ Matz” Matsumoto命名。 自从1993年发布以来,它已成为最动态,易学且最时尚的编程语言。 在iOS开发领域,Ruby几乎已广泛用于包管理,自动发布或使用脚本管理Xcode项目的任何地方。 这是为什么? 即使在iOS和Ruby中没有什么共同点,Ruby在iOS开发领域中正在做什么。 在本文中,我们将尝试找出Ruby在iOS开发和部署中存在的一些历史原因。 如果您不使用Ruby,则可能会发现您的语言中的库,最佳实践,设计模式,工具或框架在很大程度上受到Ruby最佳实践的启发。 我目睹了如此多的Swift,PHP,JavaScripts库,这些库是从原始Ruby库直接实现的。 RSpec已在PHP(PHPSpec),JavaScript(Jasmine)和Swift(Quick)中实现。 可能还有许多其他示例已由Ruby用其他语言实现。 不知道为什么Ruby如此流行,但这是因为语言的简单性,社区和生态系统使Ruby成为优秀的编程和脚本语言。 现在,我们将介绍在iOS开发中使用哪种基于Ruby的工具。 由于各种原因,iOS应用程序开发中积极使用了各种基于Ruby的工具。 最近,有人在Twitter上问了一个真正的问题, iOS Developer为什么经常使用Ruby? 这是一个有效的问题,因为除了苹果公司开发的项目外,几乎没有任何内部没有Ruby的iOS项目。 现在,我们将列出一些工具,这些工具在iOS开发人员中非常流行,并成为iOS开发的核心部分。 游牧人 可可豆 快车道 危险系统 xcpretty xcov 这些只是一些基于ruby的精选工具,但在iOS应用开发中可能还会使用更多工具。 现在,我们将简要介绍这些工具的背景知识。 由于Nomad-cli已被Fastlane工具取代,因此最近没有积极使用nomad-cli,但是Fastlane工具受到使用Ruby编写的nomad-cli的启发。 这是基于红宝石的工具开始出现在iOS开发中的早期参与者之一。 该项目为可以在nomad-cli之上编写的命令行工具奠定了坚实的基础。 这是用于将iOS应用分发到App Store的纯命令行界面。 您可以在此处阅读有关nomad-cli的更多信息 在nomad-cli之前,通常用于使用本地Xcode存档的应用程序,或者需要使用xcodebuild工具进行复杂脚本编写的应用程序。 xcodebuild生成的脚本通常非常冗长且难以维护。 它接受很多参数,每个参数都需要在脚本中配置,这很繁琐。 nomad-cli的作者Matt精通Ruby,开发了此工具来使用命令行解决iOS二进制分发问题。 不确定nomad-cli的作者为什么开始使用Ruby在Apple的本机技术上构建包装器。 看着mattt的Github仓库,他对Ruby十分精通,这也许就是他选择Ruby作为nomad-cli的原因。 CocoaPods是Ruby涉足iOS应用开发的项目。 CocoaPods是Xcode项目的依赖管理系统。 它被用来创建和分发Swift和Objective-C包,并在其他项目中重复使用。 CocoaPods具有可在Xcode项目中使用的所有软件包的集中存储库。 CocoaPods不是单个项目,而是使用Ruby编写的项目的集合。 这些项目包括Xcodeproj,CLAide,Molinillo,CocoaPods Core,Master Repo等。您可以在此处找到项目的详细信息。 在使用CocoaPods之前,在Xcode项目中管理依赖项确实很痛苦。 iOS工程师必须在Xcode构建阶段中手动链接框架。 Cocoapods通过内部自动化所有这些任务解决了这个问题。 CocoaPods的主要作者Eloy […]

Synx —快速解决旧的/未维护的XCode项目

这是“ 全部与工具有关 ”周期 的第3条 。 所以, 最近,我承担了一项任务,即分析一个iOS项目并准备描述性文档,以便估算准备Android克隆所需的工作量。 尽管绝对不是最好的估算方法,但这是一个相当坚持的要求,要尽可能接近iOS应用程序体系结构进行Android克隆-以便可预测地维护两个应用程序。 我开始看这个项目,它看起来结构很规则(到目前为止非常好): 我通常要做的第一件事是根据经验,通过编写的代码量来估计复杂性。 我为此使用cloc(这也是简单但功能强大的工具): machine_name:目录名petr $ cloc TargetName 517个文本文件。 501个唯一文件。 忽略105个文件。github.com/AlDanial/cloc v 1.74 T = 4.69 s(87.8文件/秒,10433.4行/秒) ————————————————– —————— 语言文件空白注释代码 ————————————————– —————— 斯威夫特333 7380 4814 34714 JSON 78 0 0 2025 C / C ++标头1 2 5 1 ————————————————– —————— 和:412 7382 4819 36740 ————————————————– —————— 好的,333个Swift文件和34714 SLOC。 […]

部署我的第一个iPhone应用程序的经验教训

第三部分 上一次我谈到了如何设置crontab以便每分钟运行某个命令的内容。 细心的读者会看到它正在运行cron_helper.rb 。 由于我不是这种编程人员的新手,所以这可能不是公认的最佳实践,但是它对我有用(暂时),因此,我将向您介绍该特定脚本及其功能。 我的应用程序是一个名为HustleTime的运输时间应用程序(虽然目前尚未面向公众发布,但目前可通过应用程序商店进行“试飞”)。 HustleTime占用MTA的最新交通数据,并将其发送到您的智能手机。 一键式显示,HustleTime显示接下来的两个到达地点最近的车站。 这个应用程序的想法是在一个早晨走到地铁时想出来的,我想知道我是否有时间在当地的酒窖里喝杯咖啡-几个月后,我有了HustleTime,每天使用它。 那么cron_helper.rb如何获得我的运输数据,以及如何在上面的我的小iPhone SE上显示该运输数据? GTFS GTFS或通用运输提要规范是MTA(以及许多其他运输系统)分发其运输数据的方式。 在上一篇文章中,我简短地谈到了我最初是如何通过将GTS数据发送到postgresSQL数据库开始的。 这有一些严重的问题。 主要是postgres并不是特别快,因此事实证明每30秒写入和重写一次运输数据的过程很困难。 我每30秒或每分钟写14,000条记录(MTA系统中在纽约市的工作日中每1/2个小时到达站点的次数)。 PG根本跟不上。 我需要更快的东西。 雷迪斯 输入Redis。 对于许多人来说,这是显而易见的选择。 但是对于刚刚离开训练营的人,我不知道Redis是什么或如何使用它。 Redis本质上是利用系统RAM的键值存储。 它不是默认的持久性,但是您可以根据需要保存状态。 它的主要优点是超快,并且易于设置和使用。 因此,我实际上要做的是以下内容: — ping MTA服务器以获取最新的过境到达 —解析我感兴趣的到达数据(即仅接下来的30分钟) -将旧的redis数据保存到旧数据的变量中(在其中重写任何内容) —在redis中将新的(解析的)数据保存到当前数据 我基本上在任何给定的分钟上都有2组数据-收到请求后,如果新数据不存在或尚未准备就绪,它将要求使用旧数据。 之前我说过Redis在我的系统RAM上运行,所以我需要在本地安装redis和redis-cli。 您可以使用redis-cli monitor来查看您的redis在做什么。 我的显示器看起来像这样: 我基本上要做的是获取运输数据并将其组织为json对象,然后将这些数据推送到redis中。 我通过后端(当我从前端收到api请求时)从Redis检索数据,并通过该数据的JSON.parse(@@redis.get([key_for_data])将该数据发送到前端进行渲染每个单独的到达看起来像这样: {“train”:”[SUBWAY_LINE”, “time”: [UNIX_TIME], “station”: “[MTA_station_code]”, “direction”: “[N/S]”} 我想这篇文章与设置我的第一个应用程序没有多大关系,但是我想值得注意的是,拥有一个有用的应用程序可能会要求您拥有一个正常运行的后端,这样您才能拥有它在前端做尽可能少的工作。 在我的下一篇文章中,我将讨论有关启动和运行该应用程序的更多信息。 关于react-native与xCode的交互方式以及如何调试一些问题的一些知识……

对Lona的贡献+如何在macOS上设置Ruby环境

本周初,我正在查看Airbnb的开源项目,并且发现了一个名为Lona的项目。 Lona是用于构建设计系统并使用它们生成跨平台UI代码,Sketch文件和其他工件的工具的集合。 (来自Lona的GitHub存储库) 我真的很喜欢这个项目的想法,所以我选择它作为我的开源课程的下一个项目。 没有打开很多问题,而且我不确定一开始是什么好任务。 我使用了项目自述文件中的提示,其中指出: 如果您有兴趣在公司中贡献或使用它,请随时打开GitHub问题或在Twitter @dvnabbott上与我联系。 (Lona README) 因此,我发了推文给正在维护该项目的Devin: 在开放源代码开发方面有一些经验,我知道维护者和贡献者之间的交流非常重要。 我相信,这是围绕该项目建立社区并让人们希望将来做出更多贡献的关键。 我感谢他的时间,并提供了很多帮助。 让我们回到项目本身。 Lona包含3个部分: Lona Components —跨平台组件的数据格式.component Lona Studio —用于设计.component文件的GUI工具,Swift Mac应用程序。 Lona Compiler —一种CLI工具和API,用于从.component文件,ReasonML生成UI代码 从上面的推文中可以看到,我选择了Lona Studio作为我的贡献。 我决定在接下来的几个月中专注于Swift开发,因此我想尽可能多地使用这种语言。 另外,我发现它很有趣,因为我以前从未使用过Mac应用程序,据我所知,macOS开发与iOS开发有很大不同。 设置项目 首先,我必须在机器上设置项目。 对我来说这不是小事,因为我没有一个先决条件。 为了从源代码构建Lona Studio,您需要安装以下工具: 捆扎机 可可豆 迦太基 我的Mac上已经安装了CocoaPods和Carthage,但是我没有Bundler,甚至没有听说过。 Bundler通过跟踪和安装所需的确切gem和版本,为Ruby项目提供了一致的环境。 (来自bundler.io) 我以前从未接触过Ruby,因此我必须设置Ruby环境才能安装Bundler。 首先,您需要安装RVM(Ruby版本管理器)。 这是我用于安装它的步骤: 安装GnuPG 酿造安装gnupg gnupg2 2.安装RVM的密钥 gpg –keyserver hkp://pool.sks-keyservers.net –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 3.运行经过验证的安装 […]

2018年最值得学习的10种编程语言

保持领先是业务和技术创新的关键因素之一。 拥有600多种独特的编程语言,为您的项目选择最佳的编程语言可能很困难,并且可能是初始开发阶段最困难的部分。 为了帮助您,以下是我们在2018年学习的十大潜在编程语言列表,以帮助确定用于项目的最佳编程语言是评估项目需求。 1. Swift :这是比Objective-C更流行的语言,它是开发本机iOS或Mac OS应用程序的语言,并且是重塑未来的最有可能的编程语言。 已经发现本机应用程序胜过跨平台混合应用程序,而SpriteKit使构建2D游戏变得更加容易。 确实,它以C和Objective-C的成功为基础,没有兼容性的限制。 它在很大程度上受Ruby和Python的影响,被认为是用户友好且易于使用的。 Swift是一种高级语言,通常易于维护,是Apple为iOS开发的通用多范式语言。 因此,如果与Apple产品合作是您的利基市场,那么这就是适合您的语言。 作为静态类型的语言,意味着Xcode会为您检查错误,因此您的错误更易于跟踪,而且,随着事物的定义更加明确,它的运行速度也更快。 Swift拥有领先的竞争优势,因为它还拥有自动引用计数(ARC),这是一项众所周知的功能,可以实时跟踪和管理应用程序的内存使用情况,以确保不会占用过多的内存。 使用这种语言可能会给您带来优势,因为iOS应用程序通常比Android应用程序更有利可图。 2. Ruby :1993年由Yukihiro Matz Matsumoto诞生的一种通用的,面向对象的编程语言。 它的需求量是Python的5倍,它是增长最快的编程语言之一,对于大多数已完成的项目,Java才可见。 实际上,Ruby非常易于使用,您可以在10分钟内在其中创建一个应用程序。 Groupon,Airbnb,Pxlr和Bloomberg都用Ruby编码,还有更多。 Ruby以动态的,面向对象的方式运行,因为它的读法类似于英语,因此使代码易于阅读。 需要维护许多高端网站的代码数据库,因此Ruby的需求不断增加,以至于在DevOps角色中变得很常见,即工程师确保运行高流量网站的服务器的可靠性和效率。 根据您公司的需求,这可能是您的理想之选。 3.由于WordPress, PHP被广泛使用。 在前1000万个网站中,有80%以某种方式使用PHP,包括Facebook和Wikipedia。 关于如何构建特征没有硬性规定,并且它具有解决问题的灵活性。 它以自由职业者的身份或流行的内容管理系统进一步得到广泛使用。 这是Web开发的绝佳选择,因为它主要是服务器端脚本语言,是WordPress和Facebook的基础。 因此,对于Web开发而言,学习PHP是成功的必备条件。 学习PHP使您能够创建令人惊叹的动态网站和Web应用程序。 您可以将PHP用于各种Web开发项目,包括电子商务,移动应用程序开发,内容管理系统。 它是一个开放源代码,易于学习,具有简单的数据库集成,并且具有许多应用程序和用途。 4. C ++ :它创建于1983年,是对C的替代,并有充分的理由立即受到欢迎。 它具有预定义的类,可以与程序员可能已经在使用的类一起使用。 Microsoft Windows和Google Chrome是使用C ++创建的两个最著名的项目,实际上,大多数Adobe和许多亚马逊网站都是用C ++编写的。 由于该编程语言是一种功能强大的工具,可适用于金融,银行,游戏,电信,电子银行,零售等多个领域,因此仍然需要这种编程语言。 确实,学习C ++使您能够轻松编写应用程序以及游戏和商业软件的代码。 它是目前最强大的语言之一,并具有多种功能,包括依赖于平台(即,该程序在与开发该程序相同的操作系统中执行)。 5. C :成立于1972年,使程序员能够在UNIX操作系统中进行编写,但事实证明它仍然非常非常受欢迎。 它是世界上使用最广泛的编程语言之一。 而且由于它以“机器级”语言运行,因此您将能够了解程序与硬件的交互方式。 […]

PayPal服务器到服务器validation问题

我正在构build一个使用PP进行付款的iOS应用程序。 这一切工作正常。 该应用程序从PP获得批准的交易。 应用程序然后发送批准的ID(pay_key或payment_id)到我们的服务器进行validation。 当服务器收到付款ID时,validation电话(用于find付款的信用卡“Payment.find(id)”)将返回“未find付款”响应。 PP支付的适应性呼叫响应相同。 基本上,这两个电话都找不到应用程序批准的付款。 我使用rubygemPP适应和rest。 另外,来自PP Android团队的Jeff Brateman回答了以下服务器到服务器的最佳实践问题,但是我想知道,最佳实践是向前迈进的。 我现在使用的服务器到服务器的方式是否是下一年的最佳做法? IPN将会是一个怎样的路? 原始最佳实践问题和答案从杰夫: 机器人validation贝宝付款 [问题来自里克]杰夫,你可以validation付款validation的最佳做法。 是服务器到服务器,因为我正在执行推荐的方法,或者现在是他们的IPN设置? [来自Jeff的回复]我build议继续使用服务器到服务器validation。 你可以玩IPNs,看看它是否有你需要的信息,但这是不太可能的。 另外,如果你有新的问题,让我们创build一个新的SOpost,因为这个问题的范围已经变得有点笨拙。

我如何在Android和iOS上使用相同的Cucumber步骤定义

我目前正在为Android和iOS的stream程和devise开始一个应用程序的自动化项目。 我正在使用与Cucumber框架的Ruby。 我已经开始自动化Android,基本上我需要做的是每个步骤的定义,为Android和ios单独的代码有点像这样的伪代码: Then (/^I click the Login Button$/) do if mobile_platform = android #android locators and code here else #iOS locators and code here end end 我将如何去设置我的项目,以允许这样的具体步骤定义的用法? 为每个操作系统分别设置特征和步骤定义,而不是试图将它们融合在一起更好? 感谢您能给我的任何和所有的帮助。

通过iOS设备连接时无法从本地服务器获取响应

我使用AFNetworking从一个简单的iOS项目中的基本导轨服务器检索项目。 当我在模拟器中提出请求时,一切正常。 但是,当我在设备上运行项目时发出同样的请求时,出现令人沮丧的错误。 我明白,我不能直接从我的设备连接到本地,因此需要使用我的IP地址,我正在做的。 这是奇怪的部分:当我向服务器发出请求时,我可以在我的terminal中看到服务器已被命中,并且正在返回200响应。 但是,该请求失败(在客户端),并显示错误消息:“请求超时”。 信息和代码: 我的rails服务器是非常基本的。 我基本上已经生成了一个新的项目,build立了一个名为'items'的简单模型,该项目的内容只有一个字段(一个string)。 我有路由设置为只响应JSON请求和items_controller上的索引方法只是返回JSONforms的Item.all的结果。 这是我的路线: TestingServer::Application.routes.draw do scope :format => true, :constraints => { :format => 'json' } do resources :items, :only => [:index] end end 这里是我的items_controller.rb class ItemsController < ApplicationController def index @items = Item.all render :status => 200, :json => @items end end 至于iOS项目,这里是我的AFHTTPClient子类头: #import <Foundation/Foundation.h> #import […]

适用于iOS的安全API,无需用户帐户

我知道这是一个受欢迎的问题,但是我还没有find任何其他的问题来解决我的具体需求。 背景 我有一个iOS应用程序,从我的Ruby on Rails开发的Web API中检索数据。 我想私有化我的API,以便其他来源不能使用来自我的API的数据(即别人开发一个应用程序,打我的APIurl,并为他们的客户使用的数据) 要求 (HARD)私有API,以便只有经过授权的客户端(只能从iOS应用程序进入)才能访问API中的数据。 (HARD)用户不必创build用户/密码帐户。 (SOFT)我已经读过,试图获得苹果认可的应用程序时,SSL可能会变成一场噩梦。 由于这是一个小型应用程序(截至目前),我宁愿不依靠SSL。 但是 ,如果您可以指出正确的方向,就可以轻松在iOS上使用所有APIstream量使用SSL,我完全可以接受)。 ! 如果你失去了兴趣,跳到这个问题的结尾:) ! 迄今为止的想法 想法1: iOS从Web请求令牌,发送一些UUID WEB响应API_Token和Token_Expiry WEB存储数据库中的UUID,API_Token和Token_Expiry iOS在本地存储API_令牌Token_Expiry iOS通过发送UUID和API_Token来请求数据 WEBvalidationUUID和API_Token,以数据响应 重复步骤5-6,直到API_Token过期,然后从步骤1开始重复 *想法2 :(一次性使用API​​_Token)* iOS从Web请求令牌,发送一些UUID WEB响应API_Token WEB将UUID和API_Token存储在数据库中 iOS在本地存储API_Token iOS通过发送UUID和API_Token来请求数据 WEBvalidationUUID和API_Token,用数据和NEW TOKEN响应 iOS获取数据并在本地保存NEW TOKEN 无限重复步骤5-7 这些想法的问题 我相信,iOS不再有完美的UUID解决scheme。 如果UUID可能随时间变化(或者用户有多个iOS设备),则可能会发生身份validation问题。 如果黑客得到一个API密钥,我不希望他们能够访问数据(因此到期或新的令牌的想法)。 题 你有什么build议在Rails和iOS之间创build一个安全的API? 编辑1: 我还是很惊讶,这不是一直出现的。 必须有大量的应用程序与API通信,但不会强制用户注册。 如果SSL或OAuth是唯一合适的解决scheme,请进行辩护。 我是耳朵。