Tag: ruby在轨道上

Bundler是iOS开发人员的好朋友

这是“ 一切都与工具有关 ”周期 的第2条 。 所以, 抽象 Bundler是一个简单而强大的Ruby gem依赖管理器。 等等,为什么标题为“ iOS developer”的Ruby? 答案很简单-两种最流行的iOS开发工具(cocoapods和fastlane)几乎完全用红宝石编写,并以Ruby gem的形式分发。 尽管您可能尚未使用fastlane,但您肯定已经听说过cocoapods,并且我99.99%的人肯定在开发过程中使用了cocoapods(或使用了它,但停止使用Carthage)。 所以,让我告诉您一些有关上述宝石的故事… 故事1 最近,我意识到我的机器上确实堆满了XCode游乐场: 其中一些是Swift独立的,另外一些则必须嵌入XCode项目中,因为它们应该与Alamofire,ReactiveSwift等3d方库一起使用。 我决定为此目的创建一个XCode项目“ PlaygroundsHost”,用我正在使用的最广泛使用的Pod填充它,然后将所有Playground缓慢移入该项目以将它们保持在单个位置。 将3d-party库集成到游乐场的流程很简单: 创建一个新项目。 关闭它。 在根文件夹中创建一个Podfile。 装上必要的豆荚(例如Alamofire) 运行pod install 运行open *.xcworkspace打开新创建的工作区 创建一个新的Playground,将其放置在项目文件夹中的某个位置(在我的情况下为$PROJECT_DIR/Playgrounds/MyPlayground.playground ) 将创建的Playground拖到XCode中。您将看到类似以下内容: Cmd + B构建所有Pod和项目 完成后,您现在可以在操场上使用import Alamofire了。 您的XCode Project Navigator选项卡如下所示: 好吧,我做到了…… 错误:无法查找符号: __T09Alamofire7requestAA11DataRequestCAA14URLConvertible_p_AA10HTTPMethodO6methods10DictionaryVySSypGSg10parametersAA17ParameterEncoding_p8encodingAJyS2SGSg7headerstFfA3_ 我很困惑,尝试使用Google问题,结果发现可可足类1.4.0和1.5.0之间的游乐场集成出现了问题。 我的本地版本是1.5.2。 一个人可以将可可豆的版本降级到某个版本吗? 绝对可以。 在项目之间进行切换时,是否值得一直上下使用版本? 绝对不… 故事2 我的开发人员几天前曾问我,我是否现在正面临一个奇怪的问题,即他正在CI配置上,而在导出存档时却遇到了“ Lottie.framework不支持配置文件”的构建失败。 我们聊了一会儿,猜测该问题可能与cocoapods更新及其Copy Frameworks构建阶段有关。 […]

RedPotion入门可加快iOS开发

在上一教程中,我向您介绍了用于构建iOS应用程序的RubyMotion。 RubyMotion还支持其他平台,包括Android,但是在本教程中,我们将继续学习iOS开发。 本教程将向您介绍一个名为RedPotion的框架,该框架将大大改善您的iOS开发体验。 在本教程中,我们将开始构建一个利用表格屏幕显示事件列表的应用程序,特别是Calagator.org中的事件。 什么是RedPotion? 我喜欢将RedPotion视为“ iOS开发的轨道”。 它是RubyMotion的一些最佳工具的集合,提供了简单,直观的API和DSL工具包,可完成常见任务并减少通常在iOS应用中编写的样板代码的数量。 RedPotion用直观的术语和简单的方法名称抽象了许多iOS特定的术语和详细的方法名称。 例如,iOS应用程序将具有以下方法: 应用程序:didFinishLaunchingWithOptions: applicationDidBecomeActive: tableView:cellForRowAtIndexPath: 在RedPotion中,这些相同的方法可以定义为: 负载 on_activate table_data 这只是RedPotion使iOS开发更简单的许多方式中的几个示例,更像您作为Ruby开发人员所习惯的那样。 要了解有关RedPotion的更多信息,请访问文档:http://docs.redpotion.org/en/latest/ RedPotion入门 要开始使用RedPotion,您需要安装gem: 创建画面 在iOS中,UIViewControllers负责协调您在屏幕上看到的内容。 在RedPotion中,这些屏幕称为“好”屏幕。 RedPotion提供了许多不同的屏幕类,以帮助您避免构建这些公共屏幕所需的样板代码。 其中一些示例包括表格,导航栏,标签栏,地图,网页屏幕等等。 让我们从创建一个显示事件的表格屏幕开始。 为此,我们将使用RedPotion命令行生成器。 如果您遇到任何问题,请随时发表评论或在Slack中找到我们。 我们将继续扩展此应用程序,并在以后的教程中探索更多主题。 您可以在GitHub上找到我们Calagator应用程序的源代码。

使用Ruby简化移动应用程序开发– Dave Trollope

使用Ruby简化移动应用开发 去年春天,我有个主意,为什么没有一个应用程序可以跟踪轮到谁来支付咖啡/午餐/早餐等费用。结果,有几个旧应用程序,但这对我来说是一个很好的机会尝试回到应用程序开发中,我几年前就尝试过,但从未发布过任何东西。 我对RubyMotion也很感兴趣,并且已经开发了很长时间的Ruby,想了解它如何作为移动应用程序工作。 您不知道可以用Ruby编写移动应用程序吗? 就像Web应用程序一样有趣! 因此,我开始了构建现在位于应用商店中的应用的旅程。 版本1是一个非常简单的基于表的列表,由于可用的包装iOS API(ProMotion)的有用宝石,因此花了不到两周的时间来开发。 我希望该应用程序更美观,因此我开始使用版本2,这是挑战变得更加困难的地方。 我对使用RubyMotion感到非常高兴-挑战主要在于了解iOS API。 对于版本2,我为主页创建了一个自定义iOS视图,并基于RubyMotion示例之一创建了该视图。 它可能仍然漂亮,但比桌子更具吸引力! 当您不完全熟悉iOS生态系统时,将iOS API映射到ruby是我最大的挑战,但是毫无疑问,无论我使用哪种语言,我都会在很大程度上获得学习曲线-尽管Objective-C和Swift在网上有更多示例从。 RubyMotion将ruby编译为静态本机代码,因此常规的ruby gem在RubyMotion中不起作用。 我发现这并不是一个沉重的负担-有很多宝石可以移植功能或以其他方式进行操作。 可以预料,在完全不同的生态系统中运行时,有关此问题的文档很多。 调试可能会遇到一些挑战,因为有时(针对最棘手的问题)有时需要诉诸LLDB而不是RubyMotion REPL,但是REPL对于大多数问题超级有用,因为它允许您在运行iOS模拟器时检查进程状态该应用程序,太好了! 希望人们在App Store上找到该应用程序,开始使用它并向我提供反馈,这真是令人称奇。最大的请求之一是历史跟踪,由于红宝石,这非常容易! 将来,该功能将扩展为支持付款跟踪,这是另一个非常需要的功能。 我即将发布我的第一个应用程序内购买实现,它将实现支持设备对等同步的PRO版本(以上屏幕截图来自预发布)。 我还计划在Android上发布该应用程序的版本,因为RubyMotion也支持Android,WatchOS和OSX。 有一些实现跨平台支持的瑰宝,因此您不需要了解所有本机API(例如,EG Flow),尽管我并非以此为起点,所以我将不得不决定在为每个生态系统学习API还是切换瑰宝之间做出决定-以及重新创建我的自定义视图将变得多么容易。 另一天的挑战。 另外,我也想给JetBrains的人们一个叫喊声-我在整个开发过程中都使用了RubyMine,我真的很喜欢他们的开发平台。 他们也支持RubyMotion,尽管我实际上没有在该配置中设置…。 我很快也会再来的! 总体而言,RubyMotion在无需学习另一种语言的情况下使我轻松进入应用程序世界提供了极大的帮助,我非常感激能将其包含在我的工具带中!

RubyMotion iOS开发入门

什么是RubyMotion? RubyMotion是一个工具链,可让您使用类似于Ruby的语法编写iOS,Android,OSX,Apple Watch和AppleTV的真正本机应用程序。 它不是编译器(将您的代码转换为Objective-C)。 应用程序的静态编译方式与Objective-C或Swift编译为本地代码的方式相同。 RubyMotion本质上是Ruby的新实现,旨在用于构建移动应用程序。 为什么要使用RubyMotion? 使用RubyMotion的主要好处之一是,您无需学习新语言即可开始构建移动应用程序。 您将使用已经熟悉的Ruby语言。 如果您还不熟悉Ruby,那么您会发现Ruby比Objective-C,Swift或Java更容易读写。 实际上,您将最终了解一些有关Objective-C的知识,以便翻译一些示例或文档。 第二个好处是能够构建跨平台应用程序。 通过消除语言差异,RubyMotion可以允许您在同一代码库中编写同时支持iOS和Android的单个应用程序。 实际上,在单个代码库中构建跨平台应用程序依赖于使用某种框架来抽象特定于平台的用户界面之间的差异。 幸运的是,已经有一些伟大的框架在这​​一领域取得了进展。 无论如何,由于通用语言,仍然有机会重用代码。 安装RubyMotion 应当注意,RubyMotion仅在Mac上运行。 这是因为RubyMotion仍需要访问Apple库和构建工具才能编译您的应用程序并运行iOS模拟器。 您还需要确保已安装Xcode。 安装Xcode后,打开Xcode>首选项,单击“下载”选项卡,然后安装iOS SDK 9.2。 要开始使用RubyMotion,您首先需要注册许可证并下载安装程序。 访问RubyMotion下载页面,然后选择以下计划: 免费 (“入门”)—非常适合尝试RubyMotion。 您甚至可以将应用程序发布到App Store,但是您的启动图像将显示一条消息,说明它是“由RubyMotion制成”。 另请注意,免费计划仅支持iOS和Android的最新版本。 独立 ($ 199 /年)—如果您打算进行任何类型的专业开发,您可能会想要这个。 支持仅限于社区论坛(以及我们的社区Slack频道)。 专业 ($ 499 /年)—如果您需要优先支持,这是您的计划。 注册计划后,您将收到一封电子邮件,其中包含许可证密钥和下载安装程序的链接。 生成您的第一个应用 现在您已经安装了RubyMotion,让我们生成您的第一个应用程序。 打开您的终端机应用程序。 请注意,本教程是使用RubyMotion 4.8编写的。 如果您没有看到模拟器弹出窗口,那么该是找出问题原因的时候了。 我可能忘了解释一步。 您可以在以下几个地方寻求帮助: 在RubyMotion社区论坛中搜索答案。 在我们的RubyMotion Slack频道中寻求帮助。 在下面的评论中发布您的问题。 假设您已经做到了这一点,那么您已经解决了开发RubyMotion应用程序所需的所有系统配置和依赖项。 接下来,让我们快速看一下app_delegate.rb文件。 这是您的iOS应用程序的入口。 […]

Swift for Ruby Devs:基础知识pt。 2

在上一篇文章中,Swift for Ruby Devs:The Basics pt。 参见图1,我们研究了最基本的数据类型在Swift和Ruby之间的语法差异。 我们介绍了变量和常量,字符串,整数和浮点数,运算符以及集合类型,例如数组和哈希(在Swift中称为字典)。 在了解了这些基本数据类型之后,我们将研究如何在Swift中编写控制流结构,以及它们在Ruby中的不同之处。 我们还将学习Swift中的方法,结构和类。 控制流程结构 循环和迭代器 在Swift中,有很多不同的机制可以遍历数组,字典,字符串,范围和其他序列。 尽管语法可能有些不同,但它们在大多数编程语言中都很常见。 如果您是Ruby / Rails开发人员,则应该已经熟悉这些内容,尤其是如果您之前编写过一些Javascript。 在大多数编程语言中,“ for-in”循环很常见。 即使Ruby也会实现它,尽管我们更喜欢其他迭代方法来编写更多惯用的Ruby。 #红宝石 #数组 生物= [“尼斯湖怪兽”,“萨斯喀彻奇”,“唐纳德·特朗普”] 对于生物中的生物 输入“您好,我叫#{creature}。” 结束 #哈希 生物= {狗:“汪汪”,猫:“喵”,donald_trump:“拥抱!”} 对于钥匙,生物的价值 放置“#{key}和#{value}” 结束 如果您以前编写过Javascript,那么您已经熟悉使用花括号打开和关闭函数,类,控制流语句等。 在Swift中也是如此,这是将Swift的语法与Ruby的语法进行比较时会注意到的主要区别之一。 //迅捷 //数组 让生物= [“尼斯湖怪兽”,“萨斯喀彻奇”,“唐纳德·特朗普”] 对于生物中的生物{ 打印(“你好,我叫\(生物)。”) } //字典 让动物= [“狗”:“ woof”,“猫”:“喵”,“唐纳德·特朗普”:“呵呵!”] 为生物中的(键,值){ 打印(“ \(键)和\(值)”) } 值得一提的是,Swift中的字典是按照相反的顺序进行迭代的,而Ruby中的哈希是从哈希中定义的第一个键值对进行迭代的。 如果您使用的是哈希/字典,那么您可能不在乎事物的顺序。 但是,在编写惯用的Ruby时,在遍历数组或哈希执行某些任务时,我们更喜欢使用“ each”,“ map”,“ […]

第六周回顾-训练营

本周开始于提交作品集分配和演示。 这周标志着我和大部分班级的开始! 领英 Massive Interactive的首席质量保证工程师Abhi Daspatnaik抽出时间来谈论他的角色。 作为负责人,我认为他在每个负责评估规格和技术设计文件质量的人员中都在海外。 我看到他在像Massive Interactive这样的大型团队中扮演角色的重要性。 确保QA处于这一位置很重要,因为他们能够从不同的角度看待正在构建的内容。 MVC MVC或模型,视图,控制器是一种架构模式。 它是最常用的或正在开发的用户界面,它将应用程序分为三个相互链接的部分。 (MVC)通过在酒吧点酒来解释 通过 凯文·科诺年科(Kevin Kononenko) 以一种易于理解的方式解释了这三者之间的关系。 24/09 / 2018–30 / 09/2018 再次,我继续每天阅读一到两章的《 Ikigai》,现在我几乎完成了。 在这一周里,我受亚当·德米雷尔(Adam Demirel)邀请去抱石。 我立即迷上了它,结果一周内我去了五次。 我知道这有点多,但我受不了。 超级有趣,现在我将继续登山和骑自行车。

更好的iOS项目:如何使用rbenv管理iOS项目的ruby环境

在“更好的iOS项目”系列中,我们介绍了各种工具和环境,这些工具和环境对于更方便,高效地处理iOS项目很有用。 特别提示 对于随后的任何安装,您都不必通过sudo使用root用户权限。 如果您似乎需要,则很可能您之前已经有权限问题,或者您没有正确安装和设置rbenv 。 如何使用rbenv管理iOS项目的ruby环境 我们为什么要这样做? ruby已用于编程和运行各种iOS开发工具,例如fastlane , cocoapods或xcodeproj 。 macOS预先默认安装了较旧版本的ruby 。 由于系统本身使用ruby ,因此最佳实践是不要弄乱系统ruby,而要使用用户安装(以及最新)的ruby语言版本。 使用ruby版本管理器,您可以同时维护多个不同ruby版本的安装,并根据项目(自动通过.ruby-version文件)确定要使用哪个ruby版本。 本文末尾提供了本文中使用的工具和文件名的词汇表。 我应该使用哪个红宝石环境管理器? 我们在使用rbenv方面有一个流畅的经验,但是使用rvm或chruby应该可以得到类似的结果。 安装和设置rbenv 安装酿造 可以使用brew package manager轻松安装rbenv ,因此请确保已安装并运行它。 使用brew安装rbenv和ruby-build 通过运行安装rbenv (用于管理ruby环境) brew install rbenv 这还将安装ruby-build工具(用于通过rbenv安装ruby的版本)。 如果要升级,请运行 brew upgrade rbenv ruby-build 为您的外壳设置rbenv 安装完上述工具后,您需要在外壳程序的配置脚本中添加一个设置rbenv的调用。 您可以通过调用来找出正在使用的shell echo $0 根据结果​​,您需要更改〜/ .bash_profile (对于bash), 〜/ .zshrc (对于zsh)或外壳程序的相应文件(如果您有其他外壳程序)。 如果文件(例如〜/ .bash_profile )以前不存在,则只需创建它即可。 由于我们使用非常好的Oh-My-ZSH作为外壳,因此可以通过在图形文本编辑器中打开〜/ .zshrc来对其进行编辑,也可以通过在外壳中直接调用来对其进行编辑 nano ~/.zshrc […]

在Swift中编写我的第一个iOS应用程序之前,我想知道什么

上周,我们和我的兄弟一起发布了我们在Swift中开发的第一个iOS应用程序。 在本文中,我想分享我对过程的看法。 这是从一个人的角度写的,他花了六年的时间在Ruby和JavaScript中构建各种Web应用程序(在规模和领域方面),而最近三个月一直在Swift中工作。 Objective-C死了吗? Swift是由Apple开发的,Apple是世界上最大的公司之一。 这意味着很多事情; 首先,苹果公司不怕对其平台进行重大更改。 所谓重大变更,也是指破坏代码的更新。 您需要注意这一点。 例如,在上一个WWDC期间,他们宣布重命名了API的较大部分。 Swift本身是对iOS开发人员以前的主要语言(Objective-C)的巨大转变。 顺便说一句,对我来说,WWDC像工作一个星期一样,赶上所有有趣的演讲和公告。 即使这样,Swift还是我见过的维护得最好的开源项目之一。 只需检查存储库及其语言建议即可。 这是否意味着Objective-C已经死了,您不需要知道吗? 的种类。 我敢肯定,您可以在Internet上找到的大多数外部库和代码示例都是用Objective-C编写的。 但是,有趣的是,当我在Swift中做更多的事情时,了解Objective-C代码的问题就会减少。 我几乎可以自然地阅读它。 您需要知道的另一个事实是内部API的大小,它很大,开始浏览时可能会感到害怕。 您基本上可以构建任何东西,并且可以访问所有移动专用功能,例如摄像头,麦克风,地理位置,加速度计,触摸屏等,比在网络上容易得多。 工具集 XCode(Apple IDE)是发生魔术的地方。 它包括在iOS应用程序开发过程中需要的所有工具:代码编辑器,界面生成器,数据库管理器,调试器,检测工具等。 不幸的是,这远非完美。 特别是Interface Builder,它提供了最多的“最新动态” 。 当我开始玩它时,我真的很感动- “哇! 我可以在诸如Sketch或Photoshop之类的图形编辑器中构建整个界面”-这不是事实。 Interface Builder更像是抽象层,用于覆盖编写的代码,而不是用于设计UI的工具。 在Interface Builder中选择一个选项并不少见,但这完全不会影响您的应用程序。 那里有很多您无法猜到的东西,您只需要了解它们即可。 这样的错误约束警告,您可以通过直接单击警告描述来解决。 另外,删除插座或动作时,切记要删除情节提要中的引用。 您在编译过程中不会收到任何警告,但是如果不删除它们,您的应用将崩溃。 您需要找到最佳位置。 根据我的经验,Interface Builder可以方便地设计应用程序流程,放置内置UI元素,并在视图控制器之间(而不是在按钮和视图控制器之间)创建序列。 将所有设置存储在代码中,并使用对现有UI对象的继承来创建自定义UI元素。 当您创建iOS应用程序时,计算机图形编程比Web应用程序要多得多。 我的建议是阅读有关向量之类的基础知识或转换的工作方式。 了解这些主题非常有用,因为您将尽快而不是稍后面对它们。 始终在真实设备上测试您的界面。 单击模拟器并用手指点击真实设备的感觉完全不同。 官方的依赖项管理器尚未发布,但是您可以在两种社区驱动的替代方案之间进行选择:CocoaPods或Carthage。 我正在使用第一个,并且没有遇到太多问题。 最后一个小技巧:不要过多地依赖撤消选项。 当您按cmd + z时,XCode不会在文件之间跳转,因此您无法直观地跟踪更改。 […]

Swift for Ruby Devs:类型系统

在开始学习Swift的过程中,您首先要注意的主要事情之一是Swift和Ruby之间的类型系统之间的差异。 清楚地了解这些差异将帮助您更好地了解如何编写Swift以及为什么我们必须做一些不同的事情。 差异:动态类型与静态类型 如果您是Ruby开发人员,那么您将生活在一个动态类型的世界中,可以自由地编写表达性代码,而不必指定变量将包含的对象类型或方法将作为参数接受的对象类型。 在设计接口时,您可能不习惯于类型方面的考虑。 这是因为Ruby并不真正在乎对象的类型 ,只要它们响应发送给他们的方法(或消息)即可。 从技术上讲,对象的类型是由其消息定义的,而不是由对象的类定义的。 动态类型化意味着事物的类型可以在程序过程中进行更改,因为在使用事物之前不会确定类型。 例如,这允许我们将变量定义为字符串,然后将该变量重新定义为任何其他类型的对象。 例: my_variable =“这是我的字符串” =>“这是我的琴弦” my_variable = SomeClass.new =># 另一方面,Swift是一种静态类型的语言。 这意味着我们必须在代码中声明对象的类型 ,以便编译器在编译程序时可以使用这些类型声明来检查类型错误。 但是,在Swift中,如果您为变量设置初始值,则不必显式声明对象的类型。 然后,编译器将在编译时推断对象的类型(稍后将对此进行更多介绍)。 在这里,事物的类型必须在设计软件时确定,而不是像Ruby那样在运行时确定。 这意味着,一旦声明了类型,就无法再更改。 例: var myVariable =“这是我的字符串” =>“这是我的琴弦” myVariable = 123 =>错误:无法将类型“ Int”的值分配给类型“ String” 差异:类型安全 类型安全性是指编程语言强制执行可以对某些类型执行的操作的程度。 如果一种语言可以执行的唯一操作是该类型可以接受的操作,则该语言是类型安全的。 Swift是一种类型安全的语言,而Ruby不是。 在类型安全的语言中,您必须清楚代码可以使用的值的类型。 例如,您必须清楚变量将包含的对象类型或方法将用作参数的对象的类型。 您还必须清楚方法将返回的对象类型。 因此,如果将变量声明为String类型,则以后不能将其更改为Integer。 如果某个方法希望接收Float类型的参数,则不能传入Double类型的参数。 如果尝试这样做,编译器将捕获这些类型不匹配的内容并将其标记为错误。 在Ruby中,您无需声明变量将包含的对象类型,方法将接受的对象类型或方法将返回的对象类型。 如前所述,Ruby并不真正在乎对象的类型 ,只要它响应发送给它的消息即可。 在这里,对象是由它们的消息定义的,而不必由它们的类型定义。 每个类都定义一个合同,它是公共接口。 以这种方式考虑,可以对类执行的唯一操作是属于其公共接口的那些操作。 但是与Swift这样的类型安全语言不同,我们不必明确说明代码可以使用的值的类型。 相似之处:强类型和类型推断 这些语言要注意的两件事是它们都是强类型语言,并且使用类型推断来推断对象的类型,因此我们不必显式声明它。 […]

模型视图控制器的起源

MVC(模型视图控制器)是一种用于在电子设备上实现用户界面的软件模式。 根据其架构师Trygve Reenskaug的说法,“ MVC的创建是为了解决使用户可以从多个角度查看其信息的一般问题的解决方案。” Trygve在施乐Palo Alto研究实验室担任客座科学家时就想到了MVC。 PARC),在1978年夏季至1979年之间。在PARC期间,他专注于支持LRG(学习研究小组),该小组正在开发DynaBook。 DynaBook是对现在称为平板电脑的早期概念。 它的创建者设想了一种通用工具,可以弥合用户和与她相关的信息之间的鸿沟。 早期的概念是考虑到儿童的,因此DynaBook可以用作所有年龄段儿童的学习计算机。 因此,它必须易于使用,并且必须直观。 正如创作者所描述的:“ 用户就是沙皇; LRG所做的一切都是为了支持他。” 在这种背景下,创建了MVC,将其作为一种新型个人计算机的支持软件体系结构。 一台将可用性放在首位而不影响功能的计算机。 这种想法在MVC的原始理论化中显而易见。 正如Trygve所说的那样, “ MVC的基本目的是弥合人类用户的心理模型与计算机中存在的数字模型之间的鸿沟。 理想的MVC解决方案支持用户直接查看和操作域信息的错觉。 如果用户需要在不同的上下文中和/或从不同的角度同时看到相同的模型元素,则该结构很有用。” MVC的第一个实现是由LRG集团以一种称为Smalltalk的语言完成的。 smalltalk是第一种真正的面向对象语言。 如今,MVC已成为桌面GUI,Web应用程序甚至移动应用程序的首选架构模式。 它也已成为Web最受欢迎的Web框架的选择模式。