Tag: 移动

Swift并行编程:承诺

并发在我们的日常工作中越来越重要。 在我的上一篇文章(使用Swift进行并行编程:基础知识,操作)中,我们研究了Apple提供的工具。 这次,让我们看一下没有得到官方支持的东西。 总结一下: 并发是指同时进行工作的能力。 想象一下,任务长期存在。 需要一段时间,最后,我们得到了结果。 例如,这可能是下载文件。 结果将是图像。 同时,我们知道将图像设置为UIImageView。 那么我们如何实现呢? 最简单的版本是通过NSURLSession下载文件,然后将其关闭。 我们都知道,该怎么做。 所以这里没问题。 但是让我们稍微复杂一点。 我们没有该文件的链接,而是必须从后端请求该文件。 这样做将包含请求链接,将响应解析为我们期望的格式,请求图像然后进行设置。 对于像这样的简单用例,这可能会变得越来越复杂。 最后,我们处于回调地狱。 相反,我们可以创建一个委托并对此做出反应。 如果您有两个以上的请求,将很难维护。 调查操作,我们将这些任务拆分并以这种方式编写。 但是正如您所看到的,很难遵循用例的逻辑。 那么还有哪些其他选择呢? 承诺 有一个想法,考虑在将来创建包含值的变量。 它现在不需要立即包含其值,但是在某个时候,它将具有该值,然后我们就可以在其上执行代码。 这无非就是承诺-在某个时间点交付价值的保证。 对于Promise,您可以编写有关此想法的代码,即该变量有时会包含值或错误。 只要兑现了承诺,它就会被执行。 创作与创作 一个Promise包含一个带有2个回调的闭包。 您可以通过调用具有相应值的complement()来实现Promise,也可以通过错误拒绝它。 要创建Promise,只需包装要创建值的代码即可。 用法 承诺分为多个部分:承诺本身,成功代码(如果包含值)和错误代码。 只要没有代码,promise将不会执行任何代码,这将对其值做出响应。 要添加此代码,我们使用`.then()`。 这仍然不能决定执行时间。 它只是说,诺言如果愿意就可以开始。 由于经常需要创建代码链,因此我们不仅可以返回值,而且还可以返回承诺。 如果响应者链中有任何错误,执行流程将跳转到catch子句,而不继续执行其他then()闭包。 PromiseKit 有多个承诺库。 Google刚刚发布了自己的版本。 还有一个鲜为人知的竞争者,称为HoneyBee。 我将使用PromiseKit,因为它已经相当成熟并且已经开发了多年。 根据我的经验,他们的问题响应时间非常快,仅几个小时之内。 此外,PromiseKit提供了许多扩展,您可以在iOS中使用这些扩展来简化其使用过程。 由于Swift及其对Promises的解释,它确实包含一些特殊情况,但无论如何,让我们深入研究一下如何使用它。 安装 PromiseKit支持几乎所有的安装方式。 您可以通过Cocoapods做到这一点: 迦太基: SwiftPM: […]

在GoustoTech与团队见面-Spencer MacDonald-移动主管

Spencer Macdonald-移动主管 嗨,我是Spencer,我是Gousto的3人iOS和3人Android团队的移动主管。 从本质上讲,这意味着我每天为我们的移动开发团队提供技术领导和线路管理,同时在技术团队和整个企业中代表移动的需求。 我于2017年4月加入,当时我们每周卖出10000箱。 我很幸运在iPhone SDK发行的同时毕业,所以自大学毕业以来,我一直致力于为伦敦的各种创业公司开发移动应用程序。 我决定加入Gousto,因为我对产品和建立一支出色的移动团队(我们在短短四个月内从1个团队发展到7个团队!)的项目充满信心。 去年,该公司在紧迫的时间范围内进行了重大的品牌重塑,因此这是一个令人兴奋的项目。移动团队还对应用程序进行了许多幕后调整,而这些变化通常在第一时间被客户忽略,但它使应用程序更快,更可靠,并且从开发角度来看也提高了可维护性。 现在,移动团队为我们的应用程序奠定了坚实的基础,我们对如何改进应用程序以及如何将其与各自的平台更紧密地集成有很多想法。 作为一家企业,Gousto对于如何改进核心产品也有很多令人振奋的想法,因此看到这些想法进入应用程序将令人兴奋。 古斯托(Gousto)的文化是一种鼓励每个人就如何改善业务各个方面(甚至是其专业领域以外的方面)提供意见的文化。 我建议您加入Gousto,如果您喜欢在不仅仅是应用程序或网站的产品上工作,而在过去具有最佳性能的产品上工作又会带来很多其他挑战! 斯宾塞·麦克唐纳 工程经理/建筑师—移动部落

使用Swift在10周内构建iPhone应用程序

边干边学。 趣闻:我想构建一个iPhone应用程序。 我确定我们之前都听过该声明。 iPhone应用程序已成为我们生活的一部分。 我们中的许多人无法想象没有能力随时掌握天气预报。 快速浏览Instagram和几轮Quiz-Up,可以轻松地改变无聊的午休时间。 如果有需求,可能有一个应用程序。 现在,许多软件开发人员已将重点从传统的桌面应用程序转移到了移动应用程序开发上。 甚至网页设计师都在寻找一种方法来将移动应用程序开发添加到他们的技能库中。 真正的问题是: “几乎没有编码技能的人会去哪里学习如何构建iPhone应用程序?” 答案是通过学习Swift 。 我是那些不知道该去哪里的设计师之一。 除了使用HTML / CSS和少量前端Javascript构建网站外,我不知道从哪里开始。 但是,简单的Google搜索很快改变了这一点。 突然,我的选择权从零增加到数百。 对我而言突出的一种选择是学习Swift 。 对于不认识的人,Swift是用于创建iOS应用的相当新的编程语言。 它是C和Objective C的完善版本,使设计人员和开发人员更轻松地进入iOS开发。 苹果公司表示,Swift非常易于使用, “任何有创意的人都可以创造出令人难以置信的东西。” 甚至大型公司也开始使用这种语言。 去年,LinkedIn开发人员分享了他们的经验,他们为iOS构建Slideshare,这是完全内置于Swift的首批应用之一。 快速浏览Quora后,似乎每个使用Swift的人都对它的易用性大加赞赏。 受Katie Smillie和Kenny Chen的启发,我决定尝试一下。 目标? 在16/1/16之前在App Store中拥有iPhone应用程序 在接下来的10周里 ,我将每天花几个小时研究iOS开发,重点是设计 。 此旅程不仅涉及构建应用程序,还涉及利用移动设备上有限的空间来精美地传达想法,游戏或任务。 我对这一挑战最感兴趣,同时又建立了使我的设计栩栩如生的技能。 您可以在此处或在我的博客上通过每周更新来关注我的旅程和进度。 我还将分享学习Swift时需要注意的工具,资源和障碍。 敬请关注!

祈祷应用启动-爆米花还是独角兽?

在2016年在App Store上启动移动应用程序的真实故事。 上周,我们在iOS App Store上发布了Pray:The Catholic Novena App,我向你保证我会分享发生的结果。 它是否随着iPhone携带的独角兽在朝天堂飞舞的彩虹中爆炸? 我们是否通过到达教皇的天主教社区发出了冲击波? 😏,不完全是。 按照承诺,我在这里告诉您发生了什么。 让我们首先回顾一下我们所做的发布工作。 通过Devin的联系(我的业务伙伴),我们能够在天主教网站上发表5篇文章,包括教堂流行,史诗皮尤,天主教答案,Devin自己的博客和Productive Catholic。 他还接受了3个天主教广播节目的采访(SonRise,Mater Dei和Jen Fulfiller)。 此外,德文(Devin)组成了一个由15人组成的启动团队,该团队将进行推文,转发和总体上也有助于向其关注者推广我们的广告系列。 这里的重点是,我们的发布活动针对这一细分市场非常针对性和实质性。 另一个关键点是,与付费广告相反,这全是宣传。 如果没有Devin过去10年的建立观众和人脉关系,这将是不可能的。 如果您正在开发应用程序,但还没有考虑过如何吸引受众,请记住这一点。 结果? 好的,让我们先了解一下数字。 我在这里结合了部分营销和产品渠道,以说明1)发布日营销的影响,以及2)我们在应用内实际“激活”了多少用户(即发布的最终结果)。 好消息是,我们的营销活动将成千上万的人带到了应用商店。 我们的应用徽标或应用页面在第一周显示了超过16k次。 这样一来,我们的应用程序下载量就超过了4k,但只有20%的人决定使用Facebook登录名来祈祷。 最终,我们以不到700人的祷告结束了本周的活动,至少在他们的第一只novena的第一天祷告。 我们所有人都被认为是该应用程序商店是一个神奇的金矿,每个应用程序都只是在不进行市场营销的情况下在全球范围内病毒式传播。 如您所见,我们有大量的免费宣传,但最终只有不到1k的激活用户。 它向您表明,如果没有这么多的目标受众,那么您基本上就没有成长的机会。 它还显示了跟踪分析并弄清用户来自何处以及是否离职的重要性。

为什么我使用Texture构建我的应用程序(以及为什么也应该如此)

我已经在我的应用程序中使用了很长一段时间(Facebook,Pinterest和Buffer等巨头也使用过Texture)。 这是一个基于UIKit构建的iOS框架,即使最复杂的用户界面也可以保持平滑和响应。 在本教程中,我想分享我在Texture方面的经验以及所有有关如何充分利用此工具的有用技巧。 我们将一起在Texture中实现几个接口,并查看其实际工作方式。 起源 当他们构建Facebook Paper应用程序时,纹理起源于Facebook内部。 作为该项目的首席工程师之一,斯科特·古德森(Scott Goodson)最初从事第一批iPhone构建应用,例如计算器,股票,时钟等。 在理想的世界中,我们希望药丸可以增加数量而无需求助于近似值(例如在指标中显示999+)。 同时,我们希望支持诸如动态类型之类的辅助功能。 解决此问题的最明显方法是使用水平UIStackView并将标签和药丸保留在堆栈中。 不过有一个问题! 在这种情况下, UIStackView 。此外,您还必须设置contentHuggingPriority和contentCompressionResistance并使用其他属性(在读完这句话之后,我需要喝杯咖啡)。 摆弄所有这些属性并弄清楚它们将很容易使我花费一个下午的时间。 相比之下,让我们看一下Texture的实现: 另外,Texture在`ASTableNode`上有一个很好的`inverted`属性,对于聊天/消息应用程序来说真的很方便。 基本上可以确保单元格是反向的,因此它们从底部开始!

移动应用程序和大数据-未来的组合?

移动用户被视为访问Web内容的未来的时代已经过去很久了。 自从移动用户接管PC用户到Internet使用已经过去了将近两年。 如此大量的人一直使用手机的结果之一就是,移动用户正在使用大量的数据。 这将我们带入了“未来组合”的其他组成部分-大数据。 什么是大数据? 关于什么是大数据尚无定论。 即,该词没有最终的和真实的定义。 从本质上讲,大数据是一组具有三个以“ V”开头的属性的数据,即体积,速度和多样性。 换句话说,大数据是巨大的,信息是多种多样的,并且可以快速获取。 如今,大数据之所以成为流行语,是因为它具有巨大的潜力,可以提供对几乎所有事物的更好的洞察力,并且由于拥有如此丰富的数据,使那些能够访问大数据的人能够做出更好的决策。 如果您想进一步了解它,可以查看这篇文章,其中一些非常聪明的人解释了他们的看法。 移动大数据有多大? 我们已经提到过移动用户会产生大量数据,但是我们在谈论什么比例呢? 嗯,根据思科的最新移动数据统计,到2015年底,全球移动数据流量为每月3.7艾字节。 仅从角度看,一个1 EB等于一百万TB。 换句话说,十亿千兆字节。 每月。 总之,它绝对满足“体积”标准。 考虑到移动用户可以执行多少种不同的动作以及他们通过移动设备共享的信息有多大差异; 可以肯定地说,移动数据也符合“多样化”标准。 应该指出的是,这些数据的很大一部分涉及某种应用程序。 最后,由于全球不断使用(79亿)个移动设备,因此毫无疑问,移动数据也很快可用。 可以学到什么? 可以从移动应用程序中获得的见解的类型和数量将取决于“用户”的身份,即获取和分析数据的公司(或任何其他类型的组织)。 例如,设备制造商可以学到很多有关他们的用户如何使用他们的设备,他们使用它们的目的以及他们可以在后代中包含哪些新功能的信息。 例如,仅通过查看社交媒体趋势和活动,业务分析师和营销人员就可以获得有关他们的客户和潜在客户的无限知识。 开发和启动自己的应用程序的人还可以深入了解他们的用户和潜在的未来用户。 除其他外,他们可以了解他们的应用程序的哪些功能最常使用,哪些功能毫无意义。 他们还可以注意到其应用程序的功能和用户在使用其应用程序时显示的模式方面的问题。 如何使用见解 在使用或什至将这些新见解用于上下文之前,获取所有这些数据(或部分数据)的组织将必须找到一种分析数据的方法。 这是商业智能软件解决方案以及专门分析移动大数据的公司展示其实力的地方。 一旦“净化”并压缩了大数据,所有不同类型的用户都可以充分利用它们。 例如,公司可以使用其新见解来修改其运营的某些方面。 如果他们了解到客户将客户留给了提供更好客户服务或类似服务的公司,则可以改善组织的这一部分。 营销人员可以将精力集中在特定的细分市场上,或者在产品/服务仍缺乏吸引力的那些细分市场上加大力度。 对于应用程序开发人员而言,移动大数据可以极大地改善其工作的各个方面。 它们可以包含以前认为没有用的功能。 他们可以根据用户反馈和对其他应用程序用户的分析来更改设计。 简而言之,他们可以使用数据来创建最终的应用程序,这将带来惊人的采用率以及保留率。 闭幕词 移动应用程序,其用户和大数据构成了每个人都将获胜的惊人组合。 借助大数据,大数据变得更大,移动应用程序也变得更好。 未来就在眼前,这无可厚非。

VIPER🐍iOS的架构演进

很久以前,我们的iOS团队决定尝试VIPER体系结构模式。 周围的模式有很多变化。 随着时间的流逝,我们有各种各样的用例,而经典的VIPER架构(请参见下文)无法提供标准化的解决方案。 因此,我们根据需要修改了架构模式。 现在,我想分享我们的学习和改进。 对于那些不了解VIPER架构模式的人来说,这是一个简单的示例:假设您要显示应用程序中的项目列表。 通常,您只会创建一个包含该UIView的UIViewController 。 用VIPER方式进行操作意味着您将创建5个组件,这些组件全部由其负责。 视图:我想你们都知道这个组件是什么。 大多数时候,它是一个UIViewController ,有时只是一个UIView 。 它向用户显示UI元素。 演示者:他负责从Interactor中获取数据,从该数据创建视图模型以及更新View。 此外,他告诉路由器导航到另一个视图或显示另一个视图 。 Interactor: Interactor处理业务逻辑,例如从API或本地数据库中获取数据。 路由器:如前所述,他负责导航,这可能意味着显示模态视图控制器或将视图控制器推入导航堆栈。 线框:他连接了上述所有组件,并返回了准备使用的View 。 在下文中,我将使用VIPER堆栈作为上述所有组件的别名。 started我们开始的VIPER架构变体 看看我们开始的VIPER Architecture变体。

使用Codesigndoc自动执行iOS代码签名以进行实际设备UI测试

为了在真实设备上进行iOS UI测试,您需要安排代码签名。 我们已经更新了Codesigndoc,现在它可以为您找到UITest目标的正确文件。 用于在真实设备上运行应用程序 首先,基础知识:我们非常确定您知道, 如果您想在真实设备上运行您的应用,则需要先对其进行签名 。 为此,您将需要一个可爱的代码签名对,即Certificate和Provisioning Profile 。 因此,您需要找到正确的证书和供应配置文件对,并将其上载到Bitrise。 有时就像大海捞针(或两个)一样,这就是我们创建Codesigndoc工具的原因,该工具可以为您的项目导出所需的证书和配置文件。 只需在项目的目录中运行此脚本: bash -l -c “$(curl -sfL https://raw.githubusercontent.com/bitrise-tools/codesigndoc/master/_scripts/install_wrap-xcode.sh)” 这将安装并运行codesigndoc工具。 它将导出部署您的应用程序所需的所有代码签名文件: 此后,您必须将导出的证书和配置文件上载到Bitrise。 (转到您应用的“协同设计”标签。) 好的,您现在可以通过Bitrise为测试人员部署应用程序并到App Store。 但是,也可以在真实设备上运行UI测试,不是吗? 用于在真实设备上运行UI测试 好吧,在Bitrise上,您可以选择在Firebase的 真实设备上运行UI测试 。 (了解有关在Bitrise上进行iOS设备测试的更多信息)。 但这也需要在Bitrise上为UI测试目标提供另一对证书和配置文件对 … 要在真实设备上运行UI测试,需要使用其他配置文件。 首先是基础知识: UI测试目标作为不同的应用程序在物理设备上的不同进程上运行。 这意味着将需要像您的应用程序一样对其进行签名。 您仍然还需要对您的应用程序进行签名(因为您的应用程序也将安装在设备上。) 对于UI测试,您还将需要App和UI测试目标的代码签名文件。 因此,您将需要同时运行install_wrap-xcode.sh (上面的脚本)和install_wrap-xcode-uitests.sh (下面的脚本)。 幸运的是,Codesigndoc现在还具有导出这些代码签名文件的选项。 只需在您的项目目录中运行此脚本即可。 bash -l -c “$(curl -sfL https://raw.githubusercontent.com/bitrise-tools/codesigndoc/master/_scripts/install_wrap-xcode-uitests.sh)” 它将导出UI测试目标所需的所有代码签名文件。 在也上传了这些导出的证书和配置文件之后,就完成了。 故障排除 如果UITest扫描程序找不到所需的方案,请按照下列步骤操作: 1.确保您的方案对运行UITest有效。 […]

在Bitrise(beta)上推出适用于iOS的坚固,灵活的真实设备测试

借助Google Firebase,也可以在iOS应用程序的Bitrise上获得以日志,视频和屏幕截图形式呈现的最终测试结果。 一年前,我们推出了针对Android的真实设备测试,您很喜欢它,因此现在也可以在iOS上尝试它。 🎉 好消息是,除了您的Android应用程序之外,您现在还可以在各种设备和设备配置上测试您的iOS应用程序,并在Bitrise上查看生成的日志,视频和屏幕截图。 测试实验室使用运行在Google数据中心中的实际生产设备来测试您的应用。 测试实验室在iOS应用上运行XCTest测试。 启用项目后,您需要添加和配置两个新步骤: 请注意,这两个步骤目前都处于BETA阶段。 请继续阅读以获取详细指南。 🤖 您必须分别为每个应用程序激活它。 在 Certificate and profile installer 步骤 之后, 添加 [BETA] Xcode Build for testing for iOS 步骤 该步骤的project_path输入设置为BITRISE_PROJECT_PATH env var,如果我们的扫描程序为您的项目生成了基本配置,则该BITRISE_PROJECT_PATH将指向您的Xcode项目或工作区。 scheme输入设置为BITRISE_SCHEME ,它也由扫描程序设置。 确保您的默认方案具有最合适的目标(如果不使用包含某些方案的其他方案)。 默认情况下,该步骤将使用Debug配置构建测试,并使用configuration输入根据需要进行更改。 默认情况下,该步骤将为设备目标构建步骤,该步骤的destination输入设置为: generic/platform=iOS 。 在 [BETA] Xcode Build for testing for iOS 之后 添加 [BETA] iOS Device Testing 步骤 [BETA] Xcode […]

在Xcode中变得更加高效

在开发时,您想提高生产力和效率,充分了解Swift是一回事,但也要了解您的IDE(集成开发环境),在我们的情况下就是Xcode。 首先,Xcode令人生畏,但是了解以下内容无疑将使您的开发过程变得更快,更容易。 Control + 6并筛选您的方法。 突出显示,然后按Control + Command + E Command + 0 使用以下命令搜索文件,类,函数和方法 Command + Shift + O 选择文本,然后按Control + I 单击带有Option + Shift文件 编程时,留下标记以提醒自己需要注意的事情,也可以轻松跳转到该地方。 // MARK: Everything is crashing 当您经常使用相同的代码时,这非常有用。 例如,我已经保存了这段代码,因此我不必完全记住语法,也不必浪费时间来键入它。 Command + / Command + [或Command + ] 还有更多快捷方式/提示/技巧,如果我错过了,请告诉我,我将其添加到🙂中。