Tag: iOS应用开发

选择IOS平台进行应用程序开发的主要理由

为了证明这是最好的移动应用程序开发平台,技术界一直在Android和iOS平台之间展开激烈的竞争。 这种拖拉之战在应用程序开发公司中很常见 在iOS和Android平台上始终向最终用户授予特权。 最终用户总是对市场中即将到来的利益充满兴趣和热情。 选择iOS平台进行移动应用开发的原因很多。 本文旨在为您提供帮助,以使您清楚地知道iOS平台是最可接受且适应性最强的平台。 摩根士丹利(Morgan Stanley)进行的一项调查显示,计划在一年内购买新手机的iPhone用户中有92%选择保留使用苹果手机。 当谈到如何选择这些应用程序开发平台时,各有其优缺点。 任何开发人员的选择均取决于应用程序要求和其他一些重要因素。 以下是选择iOS平台进行应用程序开发的原因。 流畅的经验: 人们认为,Android更具可定制性,但iOS仍以提供简单,流畅且易于使用的用户体验而闻名。 尽管Apple设备的处理器相对较慢,但是iOS的稳定运行确保了应用程序的流畅性和速度更快。 Apple设备始终优先考虑将UI和UX转换为应用程序的优先级,这使用户无需任何培训手册即可轻松理解。 随着苹果设备在市场上的普及,如果您打算针对具有有吸引力的应用程序的用户,则必须继续为iOS平台开发它。 应用性能: 无论使用哪种类型的应用程序(例如媒体,游戏或任何类型的行业等),iOS平台都可以提供无与伦比的性能和更高的质量。毫无疑问,有关使用这两种平台开发的应用程序的数量,何时谈到iOS应用程序的性能在Android方面较高。 选择性数据: Apple设备非常特别,不允许不必要的或垃圾的应用程序进入应用程序列表。 用简单的语言对iPhone应用程序的开发和可用性进行过滤或限制。 当选择应用程序时,iOS平台为iOS用户提供了清晰的视野,这是提供顶级服务体验的主要优势。 设备的硬件: 苹果设备以其永不妥协的硬件质量而著称,并提供具有最佳设计和杰作的一流硬件组件。 另一方面,当我们谈论Android平台时,通常会使用便宜的建筑材料和较低的美学水平的廉价设备。 因此,如果要设计功能取决于系统硬件的应用程序,则必须在iOS平台上开发该应用程序。 改进的Siri: 带有简易Siri的Apple具有许多令人惊讶的功能,这些功能可以使用人工智能技术立即回答问题。 这些问题可能会根据用户的问题而有所不同,并针对这些问题提供非常令人满意的答案。 苹果的Siri拥有各种出色的功能。 它解决了各种各样的问题,包括各种各样的问题,都给出了出色而令人满意的答案。 因此,谁不愿意为此类创新设备开发应用程序? 有吸引力的图标: 吸引人的动态图标是iOS应用程序的最佳组成部分,可在使用特定应用程序时增加整体体验。 在当前未运行的情况下,某些应用程序还会显示通知。 这种体验方式允许用户与iphone装置建立更多联系,从而加强了公司在市场上的控制力。 结论: 市场上可用的应用程序越少,与排名靠前的机会就成反比。 iOS应用开发所需的开发时间更少,从而可以成功开展业务。 iOS应用会在期望的时间内增加收入。 由于流畅的体验,更好的用户体验吸引了更多的受众。 多级身份验证的更好安全性显示了兼容性。 在iOS应用程序开发中,一项主要的规则是开发一个应用程序,它将在所有iOS设备上正常工作。

使用Swift的iOS项目中的持续集成环境变量

在今天的文章中,我们将讨论一个非常常见的问题,我们iOS开发人员有时必须在我们的开发工作流程中处理这个问题。 问题是如何存储应用程序生产API密钥,以存储我们使用的服务,开发,测试或生产服务器URL以及其他可能过于敏感而无法通过代码添加到我们的存储库中的数据。 以及如何分隔持续集成管道以使用不同的API密钥,访问密钥,服务API地址或任何敏感数据进行生产,测试或开发构建。 有任何方法可以解决该问题。 包括在这篇名为Xcode中的Secret变量和CI的惊人文章中描述的内容,以获取乐趣和收益 由出色的Flawless App团队所带来的灵感之一,实际上是这个项目的灵感之一。这个小项目叫做Swift Variable Injector 。 另外,当我进行研究时,有人问我相同的问题的另一个思路是这样做的。 我们将在下面显示的示例方法与[1]中描述的方法非常相似,该方法使用Sourcery和代码生成基于环境变量值创建快速文件,并将其插入到Continuous Integration流水线中的项目中。 现在,我们将演示一个示例,说明如何使用Swift变量注入器执行文字值替换,将环境变量值注入到Continuous Integration Pipeline中的Swift代码中。 所以…… 开始吧 首先,创建我们的项目,让我们定义用于处理环境变量和Continuous Integrations值的类。 注意 :这些Xcode环境变量参数在启动时而不是在编译时传递给Process(App)。 这意味着您将使用这些参数启动该过程,仅当使用Xcode运行该项目时,您才具有这些值。 通常仅对开发有用。 如果您希望能够在不使用Xcode的情况下启动已部署的版本,则可以将CI类从var模式替换为键值。 但是重要的是,在提交和推送它时,不要让它静态定义。 :)) CI.swift类声明在连续积分的变量注入器步骤中要替换的变量。 注意:重要的是文字值与格式$(ENV_VAR_NAME)匹配。 在持续集成方面,我们必须定义一个环境变量,并在每个工作流程(生产,测试等)中为其指定值。 我将使用Bitrise服务在此处演示步骤。 但是,大多数CI服务都提供了所需的所有功能。 在这里,我们基本上为每个工作流程定义环境变量。 因此,例如,如果我们有一个生产工作流程和一个Beta测试工作流程,则可以在两者上定义键,但要使用不同的值。 在为每个工作流程定义变量或秘密之后。 现在,我们可以在构建步骤之前添加变量注入步骤。 您可以通过两种方式执行此操作: 使用shell脚本 您可以在构建之前定义一个步骤,以运行以下脚本来安装和运行变量注入器: #安装 CURRENT_DIR =“ $ PWD” cd / tmp curl -OL https://github.com/LucianoPAlmeida/variable-injector/releases/download/0.2.1/x86_64-apple-macosx.zip 解压缩x86_64-apple-macosx.zip cp -f ./x86_64-apple-macosx/release/variable-injector / […]

iOS应用开发趋势

无论您是希望像经验丰富的企业一样希望聘请App开发ios服务甚至是iPhone应用程序开发人员 ,您的最终目标都是为您的企业提供强大的先进技术支持,以实现这一竞争市场并扩大您的市场投资回报率。 iPhone和iPad的开发,以精明的小工具的操作方式,改变了世界经验。 每当有iOS新的复杂版本发布时,公司部门每次都会讨论一些全新的东西。 讨论的主题始终围绕着消费者的经验和技术发展。 改进的UI,新的API,以及面向iOS开发人员的框架,使iOS应用开发成为提供世界应用程序开发iOS服务中的热门主题材料。 全新框架和应用程序的发布为iOS开发人员和您的企业提供了必要的信誉。 因此,让我们注意一些人员模式。 1-快速规则 Swift是全新的编程词汇,它统治着实际的应用程序开发市场,这是iOS开发人员的第一选择。 除iPhone和iPad外,Apple Watch和Apple TV还在行业中取得了进步,并在无数创新奇特中吸引了许多思想。 Swift是一种多范式,汇集了多种编程语言,特别是为iOS,OS X以及watchOS和tvOS生成的。 它太适合Linux。 通过使用Swift 2的发布,该语言可以更适当地创建并且易于使用,从而使开发人员与技术本身相比,可以将更多的精力放在开发中的应用程序上。 2 —完全免费的程序与已付费的应用程序 最近,iOS生态系统已集中在付费应用程序上,而Android生态系统则依赖免费应用程序。 趋势总体上发生了变化,需求以及免费应用程序的下载都在增加。 因此,预计今年的iOS免费应用程序也会注意到25%的增长。 3 —基于云的应用程序 在应用程序市场中,基于云的应用程序已成为热门话题,无论是开发人员还是最终用户,也为其用户提供了众多优势。 此外,由于应用程序在大小和多小工具同步功能方面的广泛减少,这些应用程序也将在本季度继续在市场上占据主导地位。 简而言之,每天对无数手持设备的依赖将促进移动商务市场的发展。 因此,作为一名企业家,为了利用当今的技术并获得无数客户的考虑,那么现在是时候聘请iOS应用开发公司或专业的iOS开发人员来进行业务应用开发了 。

带附件的iOS 10通知以及更多其他内容

这是关于iOS 10通知的两部分文章的第二部分。 今天,我们将详细介绍如何实现通知附件的技术细节以及iOS 10中引入的许多更复杂的功能。 首先,Apple已将通知处理移至名为UserNotifications的新框架。 请参阅https://medium.com/@prianka.kariat/ios-10-notifications-an-overview-8e88b7f3436b#.1yk3ij8j4了解iOS 10通知中的新功能。 本文将分为以下几部分 权限处理 带有附件和通知处理的本地通知 带有附件的远程通知 自定义通知的UI 1.权限处理 为了使您的应用能够将通知发送到设备,它应该向用户询问权限。 可以使用UserNotifications框架按以下说明进行操作 。 不同的通知可能具有不同的操作。 如果您可以从应用程序发送短信和电子邮件会话,则在收到每种消息时必须响应的动作将有所不同。 因此,我们有通知类别。 稍后您将了解到,当您想为不同的通知实现自定义界面时,这些类别也很重要。 UNUserNotificationCenterDelegate 如果用户在取消通知或单击操作按钮后打开应用程序,则您的应用程序应实现此委托以在前台接收通知并进行任何处理。 我有一个可以删除通知的按钮。 我将仅在用户使用“发送”按钮发送通知后启用该按钮。 我们有一个文本字段,可让用户输入通知的正文。 我们仅发送带有单个标识符的通知。 因此,当收到新通知时,它将更新现有通知,而不会使通知中心混乱。 我们为通知触发器指定了10秒的间隔。 如果用户选择在发送通知之前选择发送带有修改主体的通知,则通知中心安排的旧通知将被更新。 删除通知 您可以删除传递的通知以及应用程序发送的未决通知。 附件应该很小! 使附件保持最小尺寸,尤其是在下载内容时。 短时间间隔后,操作系统将终止服务扩展。 因此,您必须确保在分配的时间之前完成处理。 我们将向用户显示食谱供稿,以作为通知。 此通知将包括以下部分。 食谱标题 字幕 -谁张贴了食谱 正文 -食谱的简短说明 视频附件 –显示配方过程 因此,当前的工作是将视频附加到服务扩展中的通知上。 您的服务扩展名有两个文件Info.plist和NotificationService.swift 您将在NotificationService中获得一些样板代码。 不过,让我们编写用于下载视频和设置通知内容的代码。 在此之前,只需确保要发送的有效负载如下。 4.自定义通知的UI 上面交付给用户的UI是带有视频附件的通知的默认UI。 iOS 10添加了自定义此UI的功能。 现在,自定义通知UI时有些事情看起来是不可能的。 动画。 […]

暴风雨前的平静

好一个星期。 Canvas的截止日期早在春假之前就困扰着我们。 现在是时候了。 Quatro团队有很多思考(和反思)。 一个问题引出了数十个问题,我们发现自己陷入了困境。 本周,我们的首要任务是尽一切可能使Best By进入App Store。 我们已经被拒绝过一次,因此我们一直专注于尝试修复错误。 借助TestFlight上的Best By,我们能够理解为什么我们会遭到最初的拒绝。 在操作和功能方面存在明显的UI / UX问题。 跨学科工作在两端继续进行。 本周早些时候,新闻专业的学生在Firebase上站了起来,并添加了食品。 现在,我们的团队正在考虑将原始到期信息再增加几天。 在我们的调查中,大多数人说他们更喜欢较少的通知。 您是否想收到一条通知,说您的鸡在购买后一天就要到期? 可能不会。 它会很快变质吗? 再一次,可能不是。 测试Best By帮助我们认识到“食物”页面有多空白,因此我们集思广益地重新设计它。 屏幕有两个主要问题:1)屏幕上没有任何内容;(2)难以浏览。 结果,我们添加了一个文本框,将用户指向正确的方向。 计算机科学专业的学生一直在研究整体设计和布局,以查看将给潜在用户带来最无缝体验的内容。 他们首先注意到,在通知用户方面,食物数据库需要更加真实,并且需要重新设计食物页面。 到目前为止,计算机科学专业的学生已经投入了50多个小时的编码,以使Best By更好。 他们肯定是士兵! 这周确实涉及次要细节,以及它们如何影响考虑下载并积极使用我们的应用程序的人。 现在是时候开始邀请其他人测试Best By,我们创建了一个Facebook页面,以便我们找到志愿者。 本周发生了重大变化,而且情况有所好转。 放弃我们以前的配色方案时,有很多想法,因为它与食品发生冲突-每个单独的食物都是不同的颜色。 这就是为什么我们将所有屏幕背景都更改为白色。 它使Best By看起来更干净,更美观。 我们还将徽标更改为深绿色。 很高兴看到我们的劳动成果(之所以得到它,是因为食物)聚集在一起。 @Apple帮助一些学生及其成绩!

反对第三方依赖

“这不是每天的增加,而是每天的减少。 摆脱不必要的东西。” 李小龙(Jeet Kune Do)的道 介绍 请考虑以下情形:一群开发人员正在从头开始进行短期项目。 客户很着急,因此他们决定不重新发明轮子,而是使用人类尽可能多的外部依赖项。 发展的步伐是荒谬的。 几周后,吉拉(Jira)有许多封闭票。 真好 大家都很开心 几个月后,开发人员可以完全控制很多第三方依赖项,并且只有很少的代码。 几年后,有一个项目很难维护。 不再支持某些依赖项。 语言版本已更改,客户需要支付叉子维护费用。 哦,与此同时,这十七个外部框架之一存在一个小的安全问题…… 三个问题 第三方开源库很棒。 (通常)将它们抛光到可能的极限。 使用它们(通常)是一种乐趣。 (通常)它们是由比我聪明得多的人开发的,我对此非常赞赏。 Chapeau为那些将自己的时间花在使其他开发人员的生活变得更轻松的开发人员上而起。 但是,使用它们总是会带来一些风险-这可能是个问题。 如果不再支持该库怎么办? 您准备好承担维修货叉的费用了吗? 还是迁移到另一个解决方案并进行大规模重构会更便宜? 如果存在安全漏洞会怎样? 这不是一个不现实的场景-足以回顾流行的AFNetworking的情况。 添加第三方代码始终带来增加潜在的未检测到的漏洞的风险。 如果您的要求在几个月后发生变化,会发生什么? 您的项目在变化,第三方框架也在变化。 在某些时候,重叠的路径可能会明显分开。 您可能需要已经集成的第三方不提供的功能,或者以无法接受的方式提供的功能。 那你要怎么办 摘要 我不反对使用第三方库,我反对失去对代码的控制并承担不必要的风险。 在将另一个第三方依赖项添加到您的项目之前,请考虑是否确实必要。 想想如果它不再被支持会发生什么。 迁移到另一个解决方案或分叉维护的成本可能是多少。 不要误会我的意思-第三方代码不是万恶之源。 它很有用,有助于更快地交付产品并提高整体生产率。 所有这些都是在风险与收益之间取得平衡。 如果您决定使用第三方依赖关系,请使用适当的设计和合理的抽象层来保护自己。 就像古代的斯多葛式的一样-始终牢记最坏的情况。

gitignore快速项目

如何在带有源代码树的swift项目中使用gitignore? 在这个故事中一步一步地显示出来。 保持冷静并阅读。 首先,开放源码树并正常添加项目,但“您不对源代码提交任何东西” 。 然后,按右上方的设置按钮。 接下来,选择“高级”,然后按“编辑”按钮。 很好,“。gitignore文件”显示在您的面前,但此处没有任何内容。 不用担心,我们将在上面找到一些东西。 然后,访问“ github / gitignore / Swift.gitignore”(https://github.com/github/gitignore/blob/master/Swift.gitignore)并复制所有这些内容。 接下来,返回到源代码树中的.gitignore文件。 将Switf.gitignore粘贴到其中并保存文件。 最后关闭设置弹出菜单,然后首先提交您的项目。 不错! 很简单,对吧?

iOS上的事件传递:第3部分

我们已经通过iOS中的事件传递系统结束了旅程。 在介绍目标动作模式如何工作以及如何使用某些相同的API沿响应者链发送自定义事件之前,让我们回顾一下到目前为止所涵盖的内容。 在第1部分中,我们研究了UIKit如何通过点击测试处理触摸事件以及手势识别器在系统中的位置。 我们还简要地研究了响应者链如何处理这些触摸事件,包括它们遵循的到达视图和视图控制器层次结构的路径。 在第2部分中,我们介绍了UIResponder中定义的其余事件,以及有关Responder Chain如何运行的更多信息。 目标行动 UIKit大量使用目标动作模式。 它在UIControl中定义。 让我们看一看UIControl标题的代码段。 NS_CLASS_AVAILABLE_IOS(2_0)@interface UIControl:UIView —-剪断—- -(void)addTarget:(nullable id)目标动作:(SEL)ControlEvents的动作:(UIControlEvents)controlEvents; -(void)removeTarget:(nullable id)目标动作:(nullable SEL)针对ControlEvents:(UIControlEvents)controlEvents的动作; -(NSSet *)allTargets; -(UIControlEvents)allControlEvents; -(nullable NSArray *)actionsForTarget:(nullable id)target for ControlEvent:(UIControlEvents)controlEvent; -(void)sendAction:(SEL)action to:(nullable id)target forEvent:(nullable UIEvent *)event; -(void)sendActionsForControlEvents:(UIControlEvents)controlEvents; —-剪断—- 这些方法定义了目标动作模式。 该模式使我们可以定义要处理的事件,接收事件的目标以及要发送到目标的动作(消息)。 事件和动作的这种分离还使我们可以为一个或多个动作定义多个收件人。 有关UIControl和目标动作模式的更多信息,请查看Apple的UIControl文档。 那么,这与活动交付相适应吗? 当前, UIControl使用带有类似于以下内容的调用跟踪来发送操作: 框架#0:-[BPXLTableViewCell cellButtonTapped:] 框架#1:-[UIApplication sendAction:to:from:forEvent:] 框架2:-[UIControl sendAction:to:forEvent:] 框架#3:-[UIControl _sendActionsForEvents:withEvent:] 框架4:-[UIControl touchesEnded:withEvent:] 框架5:_UIGestureEnvironmentSortAndSendDelayedTouches —剪- 这里重要的API调用是-[UIApplication […]

测试驱动开发:开发人员魔术棒

让我们讲一个故事。 “不久以前,我已经为即将上线的测试仪提供了我的应用程序的构建。 我已经对其进行了一些修复,根据我的开发人员健全性测试,这些构建已使生产准备就绪。 但是经过测试,情况完全不同。 在某些情况下,由于某些较早的修复程序,我遇到了错误。 搞什么鬼??? 除了使我的构建稳定之外,我使它更加不稳定。” 我不是唯一遇到这种情况的人,但是许多开发人员也遇到了这种情况。 那么我们该怎么做呢? 答案是测试驱动开发(TDD)。 我们要学什么? TDD上有很多博客。 我将列出您可以在其中找到的一些最佳参考。 我们不会讨论理论上的TDD概念,而是将重点放在我们如何从开发人员的角度计划实现TDD。 什么是TDD? 为什么选择TDD? 如何规划TDD? TDD的警告。 您需要TDD吗? 看起来太多了吗? 不用担心,我们会做的很快而简短。 😉 什么是TDD? 测试驱动开发是美国软件工程师肯特·贝克(Kent Beck)提出的开发程序,在编写代码的同时,我们还记录了测试用例。 从而允许我们在继续开发的同时测试我们的代码。 下图描述了传统开发与TDD之间的区别。 在传统开发中,我们首先开发代码,完成功能并进行手动测试。 但是在TDD中,我们首先写下测试用例,然后相应地开发代码。 这有助于我们最大程度地减少代码失败或错误的机会。 如果不更新旧的测试用例,则开发的任何新功能也应尊重现有的测试用例。 TDD基于RGR的概念,即红色,绿色和重构。 红色:我们首先编写失败的测试用例。 绿色:我们编写通过测试所需的最少代码。 重构:如果需要测试代码,我们也会重构代码。 为什么选择TDD? 最大限度地减少代码失败的机会。 最小化团队中任何新开发人员在代码库上工作的机会。 由于引入了新功能或错误修复,破坏现有功能的机会较小。 提高产品知识。 改进编码标准。 如何规划TDD? 百万美元问题来了? 我们都知道什么是TDD。 但是我们如何计划TDD? 我们将如何决定需要编写哪些测试用例? 我要编写并开发该功能,然后为它们编写测试还是将来如何? 困惑? 了解正确实施的功能。 让我们以以下要求为例: 要求: 构建一个程序,该程序将从用户那里获取城市的人口输入,并返回该城市所属的类别。 以下是城市类型及其人口范围: 小(5,000至10,000) 中(10,000至50,000) […]

网络链接调节器

有时,我们需要通过不良或不良的网络连接来测试我们的应用程序。 对我们来说幸运的是,Apple为此提供了一个实用程序:Network Link Conditioner。 网络链接调节器可以模拟各种网络条件,包括减少的带宽,高延迟,DNS延迟,数据包丢失等。 在交付使用网络的任何软件之前,应先安装此工具,启用它,然后运行软件以查看其在实际条件下的性能。 苹果资料 适用于iOS的网络链接调节器 在真实设备上,您会在iPhone Settings > Developer > Network Link Conditioner器中找到NLC。 到达那里后,您将能够选择默认的网络配置文件或根据需要创建一个默认的网络配置文件,然后只需启用该功能即可。 注意 :启用NCL后,所有应用程序的所有连接都将在该配置文件上运行。 因此,一旦完成测试,不要忘记禁用它。 模拟器的网络链接调节器 为了为您的iPhone模拟器启用NCL,首先您需要为Xcode下载Additional Tools软件包。 一旦下载了其他工具,网络链接调节器将位于“ 硬件”目录中,双击“ Network Link Conditioner.prefPane ,将安装该实用程序。 并且,以与iPhone中相同的方式,您可以选择默认的网络配置文件或创建一个。 同样,一旦完成测试,不要忘记禁用它,否则来自Mac的所有连接都将在选定的网络配置文件上运行。