Tag: App开发

认识iOS开发人员Pere Daniel Prieto

我于2014年完成博士学位,并决定在次年年底进入企业领域。 在接受Data Analyst职位面试后,我于2016年5月最终成为一名初级iOS开发人员。 从那时起,我担任过多个角色,从混合开发人员到初级QA,从成熟的iOS开发人员到最近的初级DevOps角色。 还有很多东西要学! 我一生都住在巴塞罗那及其周边地区,这是一个生活的好地方。 天气晴朗,食物美味; 城市周围的海滩,山脉和河流。 巴塞罗那拥有您想要的一切! 它足够大,可以多元文化,但是又足够小,可以在短时间内到达任何地方,这真的很方便! 我真的很喜欢安装和绘画模型,主要是微型游戏。 我也喜欢玩大多数棋盘游戏,也喜欢为新手准备“演示游戏”。 ____ 在我们的网站上与我们团队的其他成员进行交流:www.wearemobilefirst.com。 想与我们合作? 给我们发送电子邮件:hi@wearemobilefirst.com

(iOS)人机界面指南_控件

Controls控件列表。 纽扣 扣틀의의텀텀틀틀틀틀틀틀틀틀틀틀틀틀틀틀틀틀틀틀틀。 1–1系统按钮 系统按钮은导航栏나工具栏에서에서이보며버튼입니다。 제목에용하여사를정특정동작이도와줍니지도와줍니다。 제목에다。 목은유하여하여발생하발생하발생하발생하발생하합니다。 。스템리테두이나정설지되어지않습니다。 。리테두가합니다。 1-2详细信息披露按钮 细节披露버튼은정나타나는정항목과가정보또는기사보다。 1-3个信息按钮 信息按钮고고。알려주위한위한위한버튼입니다버튼입니다。 1-4添加联系人按钮 单击“添加联系人按钮”,然后单击“添加联系人”。 。메시의받는의받는의받는추추있습니있습니있습니있습니있습니있습니다 添加联系人按钮Contact정보를 정정보제입니 입니다。 만로만로용할이있지만만만드이장점 를를。 2.编辑菜单 在“编辑菜单”上,单击“双击”,然后单击“双击”。 。합니합니다。 면다면编辑菜单选项합니다적절하게정하여야다。 않도록않도록않도록른른와른른른않않않않도록합니다。 编辑菜单실행하였지,사용자가사놓습니지,로,놓습니다。 用户自定义命令는系统命令다합니다。 自定义命令하고하고하고。다합니다。 3.标签 标签을이용하여이스요소를지메세를지를제공합니다。 在Label Label만없없지中,在Label Label복사있습니다中。 标签은쉽도록으텍트트트를있게’Dynamic Type’으로설정것이좋습니다。 标签의유하는하는이장다。 4.页面控件 Page Control(页面控制)和3DS(3位)。 용할이。가열려있는로나타납니로나타납니다나타납니다。 나타내는데요를이지를。 。보이는이미지에서는페이지가보있습니지있습니다。 页面控制, 分层页面 ,页面控制,页面控制,页面控制,页面控制,页面控制和页面控制。 页面控制。정해야다합니다。 5.选择器 Picker스크롤을상의크롤을하나포함합니다。 가텍보이는스트에이。다。 Date Picker네가지모드가있으며다선택로선택로있습니다。 날짜: 월,표시합니다。 […]

推送通知基础(2之2)

我完成了上一篇文章,总结了如何配置您的应用程序以接收推送通知,但是我没有讨论一旦这些通知到达时您可以怎么做。 所以我们开始。 除非您可以响应这些推送通知,否则向您的设备发送推送通知并没有真正的帮助。 这就是我今天将向您介绍的内容。 具体来说,以下内容: 响应用户对推送通知的操作 在前台处理推送通知 在后台处理推送通知 1和2均由UNUserNotificationCenter处理,其中3由UIApplicationDelegate严格处理。 响应用户对推送通知的操作 UNUserNotificationCenter是一个非常强大的API,它使您可以计划本地通知,配置推送通知动作以及与用户对推送通知的动作进行交互。 iOS在通知方面已经走了很长一段路,而这仅仅是帮助开发人员构建美好体验的另一层。 我们将只专注于响应用户操作。 当推送通知发送到设备时,会显示类似的内容 用户可以选择向右滑动并打开推送通知,或向左滑动并查看一些选项。 无论用户做什么,应用程序都将完全相同地处理它。 UNUserNotificationCenter具有使用方法userNotificationCenter(didReceive: withCompletionHandler:)的协议UNUserNotificationCenterDelegate 。 这是进入应用程序的入口点 。 启用此功能后,我们现在可以在后台响应远程通知。 将通知有效内容中的content-available标志设置为1可使您的应用程序知道有信息要处理,它将触发必要的应用程序委托回调方法。 func application(_ application:UIApplication,didReceiveRemoteNotification userInfo:[AnyHashable:Any],fetchCompletionHandlercompleteHandler:@转义(UIBackgroundFetchResult)->无效) 与我们通过UNUserNotificationCenterDelegate获得的UNNotificationResponse对象不同,我们在UNUserNotificationCenterDelegate获得准系统有效负载[AnyHashable: Any] 。 用户尚未与推送通知进行交互,因此动作标识符将是无关紧要的。 但是,我们得到了completionHandler 。 再次使用此完成处理程序来让系统知道任何处理已完成。 这对系统很重要,因此可以 再次终止应用程序 将应用程序保留在后台,但减少分配给该应用程序的资源量 yada yada yada有助于延长电池寿命,保持系统效率。 此完成处理程序和用户通知完成处理程序之间的区别在于其签名。 这里的完成处理程序采用UIBackgroundFetchResult ,它可以是noData , newData或failed 。 这很清楚,该处理应该是进行任何更新的快速网络调用 ,因为该应用程序没有太多的活动时间(实际上,我相信这是30秒左右)。 后台远程通知的主要动机是,当用户进入“多任务”模式时,他们可以查看每个应用程序的最新状态。 老实说,这提供了相当不错的用户体验;)。 后台远程通知处理不应与后台获取混淆,后台获取是后台工作的一个完全不同的方面。 我将在以后的文章中专门介绍后台获取。 希望您能读一读! 更多款待即将推出!

不论电话语言如何,如何在iOS应用程序内部进行本地化

最近,当我们与我的团队为一个iOS应用程序开发项目的完成感到高兴时,一封电子邮件入侵了我的屏幕。 我们从刚刚完成项目的同一客户那里收到了新要求。 邮件中写道:“我希望我们的应用程序应从应用程序内部更改其语言,而与电话语言无关”。 你们遇到过这个问题吗? 好吧,你可能有! 因此,我想到写这个博客来分享我如何解决此问题的经验。 在这篇文章中,我想介绍以下几点: 什么是应用程序本地化? 本地化如何在iOS中工作? 为什么应该优先考虑iOS应用本地化? 如何在iOS应用中进行本地化? 为什么本地化很重要? 什么是应用程序本地化? 根据W3C(万维网的主要国际标准),应用程序本地化是指对您的应用程序进行调整,以满足目标市场( 语言环境 )的语言,文化和其他要求。 本地化通常写为l10n ,其中10是l和n之间的字母数。 本地化如何在iOS中工作? 启动iOS应用程序后,操作系统会努力将您喜欢的设备语言与应用程序支持的语言进行匹配或整理。 您的应用使用默认语言。 例如,英语和法语是您的应用程序支持的语言,在这种情况下,用户将英语设置为应用程序的默认语言。 因此,现在当用户的电话语言设置为法语时,您的应用将显示法语内容。 但是,当用户将电话语言更改为意大利语时,您的应用将加载默认的应用语言,在这种情况下为英语。 这是因为您的应用仅支持英语和法语,而没有意大利语本地化。 因此,在这种情况下,当电话语言设置为法语以外的其他任何语言时,您的应用将始终显示英语内容。 为什么要优先考虑iOS应用本地化? 多年来,iPhone在全球范围内的销售取得了巨大的增长。 让数字说明一切,请参见下图(由Statista提供)。 在上图中,您可以看到苹果iPhone从2007年第三季度到最近一个财务季度的全球销售情况。 苹果在2017财年售出2.176亿部iPhone ,2018年第二季度售出5222万部iPhone 。 尽管全球智能手机市场竞争激烈,但苹果的收入从2004年的80亿美元增长到2017年的超过2,290亿美元 。 归功于几乎所有国家/地区的iPhone成功。 现在,您可以期望您的下一个客户来自印度,中国,墨西哥,泰国或其他任何地方! 因此,正确制定iOS应用本地化策略可能会转化为更多应用下载。 如何在iOS应用中进行本地化? 当涉及到根据手机更改语言时,通常我们会获取手机语言代码并相应地加载“ lproj”文件。 但是在这种情况下,它必须是动态的,因此我创建了“ String”的扩展名。 看下面的代码: extensionString { publicvar localized:字符串{ ifletbundleName:String = UserDefaults.standard.value(forKey:“ USER_LANG”)如? 串 { let […]

构建应用程序时犯下的最大错误

所以您想构建一个应用程序? 太好了,我喜欢人们对新的,创新的应用程序有惊人的想法,这些应用程序可以改变世界或做一些有趣的事情。 因此,您有了自己的想法,然后聘请了开发机构或自由职业者来实际构建它! ! 但是,你现在该怎么办? 坐下来,让他们使用所有精美的功能来构建大型应用程序? 没有。 即使这是大多数公司/个人最终要做的事情。 这是建立公司/个人应用创意的最糟糕的解决方案/方法。 您应该怎么做? 您需要选择实施Roadmapping的开发人员,代理商,策略。 那是什么? 简单来说,它是一个概述应用程序的主要目标/目的,受众,目标和支持的过程。 为什么这是必要的? 因为映射的主要目标是采取一个复杂的,功能加载的想法,并将其分解为最简单的形式和主要的ONE功能。 有了这些信息,您现在就可以设计和构建应用程序MVP和版本1,以便尽快将其发布给用户。 但是我的想法还不完整吗? 好。 您甚至都不知道用户想要什么,不需要一堆不必要的功能,只需要一个可以吸引用户使用的核心功能。 有了他们的反馈,建议和努力,您现在可以在您的应用程序的基础上构建并添加用户想要和持续使用您的应用程序的确切条件。 如果我不这样做怎么办? 您需要与您的开发人员/代理商就应用程序背后的PLAN进行讨论。 他们计划做什么,时间表和时间表,以及何时开始为Beta用户进行测试? 我知道我知道,这听起来像是常识,但是很容易让代理商完全接管并且对您的应用程序的实际过程不透明。 您需要尽快与开发人员/代理商进行沟通,并确保他们制定严格的时间表,计划和开发策略,以便尽快将最基本的MVP提交给Beta测试人员。 如果我不这样做怎么办? 老实说,你可能还好。 并非每个代理商或开发人员都使用此模型,并且他们可能会像您想要的那样为您构建出色的软件。 但是,可能会有一些弊端: 延长项目时间 没有开发范围—未来功能,时间表,发行版,版本控制 更高的开发成本 浪费的功能-更多错误 和更多。 当您没有具体规划路线图时,会有很多“ 假设 ”的计划,您打算如何将该想法从思想,测试到部署。 所以..我想构建一个应用程序,现在呢? 做您的尽职调查,确保您与多家代理商和开发商进行交谈,最重要的是不要仅仅选择最便宜的一家。 在同意开发具有3个以上功能的应用程序之前,请确保您正在与您一起进行某种计划,路线图和发现。 有一些出色的代理机构可以帮助您采纳您的伟大构想,并将其压缩成一个完美的MVP /版本1,并在一半的时间内将其发布给用户,以便您获得真正的价值。 反馈。 收到反馈后,就可以开始慢慢将新功能和新技术集成到您的应用程序中,从而完全满足用户的要求! 我真的希望这能帮助你们中的某些人避免构建应用程序时遇到的最大错误: 失去对开发机构/开发人员的所有控制权和权限。

iOS应用程序开发入门指南

App Builder Appy Pie:在进行应用程序开发和选择要为其开发应用程序的平台时,您真正需要考虑的两个主要平台是Android和iOS。 做出此决定还可以更加明确地定义要定位的受众。 Android占据了全球智能手机市场83%的市场份额,但是iOS在应用商店中拥有更多的应用。 尽管Android设备在市场上占主导地位,但这并不意味着只有Android对应用程序开发人员具有所有好处。 因此,在我们开始帮助您开发出色的iOS应用之前,让我们先谈谈为什么您必须开发iOS应用。 iOS比任何Android设备都快很多 iOS应用运行更加流畅,几乎没有故障 iPhone或iPad的功能几乎相同,而Android设备的构造和功能却千差万别 iOS应用从App Store获得更高的收入 所有iOS应用程序均可在任何MacOS中使用。 如果是Android,则缺少等效功能 使用iOS设备,可以与亲朋好友共享iOS应用。 尚未为Android开发的另一个功能 虽然您可能会很想先潜水然后开始编写iOS应用程序,因为这是所有操作的所在。 后续流程可能会很乏味,但其中也有好处。 事先花一些时间以正确的方向设置项目,这一点很重要。 现在,您可能认为它正在消耗您的时间,但是请相信我,您正在帮自己一个忙,并在将来节省了很多时间。 如果您有一支致力于应用程序开发的专业团队,那么我在下面列出的要点尤其重要。 这些考虑因素肯定会减少团队的潜在挫败感,并提高应用程序质量。 《编码样式指南》指定了使用任何特定语言进行编码时应遵循的样式和约定。 本指南将为决策提供指导,例如您是否应使用制表符或空格,变量的命名系统或特定语言所遵循的特定约定,例如在Swift中您将使用Class还是Structs。 我们不能真正认为编码样式是对还是错。 您可以设置自己独有的编码样式,但是在与团队合作时,他们必须遵循您设置的样式准则,这一点很重要。 这样做可以确保您的代码保持统一并易于阅读。 如果您在设置这些代码时遇到麻烦,则有些公司已经为Swift&Objective-C开源制定了编码准则,您可以在设置自己的代码之前先进行阅读。 在跳入编码过程之前,必须首先确定并修复应用程序的体系结构。 拥有良好的应用程序体系结构可使您的应用程序更易于测试,相对易于理解,并降低了维护成本。 如果适合您,则可以选择传统的MVC架构,如果您正在寻找更高级的产品,则可以选择MVVM或VIPER。 您可以在网上找到许多可以描述这些体系结构的资源,并且您将可以更好地应对这一点。 尽管将所有内容都转储到单个根文件夹中似乎很简单(而且很简单),但是如果不遵循任何一种结构,您将留下数百个源文件,这些文件最终堆在一个难以描述的大堆中。 为避免这种情况,为应用程序开发一个文件夹结构是一个好主意,该文件夹结构将由应用程序的体系结构定义和确定。 一旦有了明确的想法,首先在组中以组的形式创建文件夹,然后将项目名称放入XCode的Project Navigator中。 接下来,对于每个组,通过打开右侧的文件检查器,单击灰色的小文件夹图标,然后在目录中创建一个指向该组名称的新子文件夹,创建指向项目路径中实际目录的链接。您的项目目录。 尽管这样做时,您可能会觉得这只是小事,但实际上它使您的应用程序更加结构化,更易于理解。 开发iOS移动应用程序时,很自然地会在应用程序中使用某些第三方库。 主要有三种方法可以管理项目中的依赖项。 这是Swift和Objective-C Cocoa项目的适当依赖项管理器。 该系统拥有大约一万个库,因此有潜力以一种优雅的方式帮助您扩展任何项目。 当涉及到与RubyGems方法有些相似的依赖项管理时,该系统特别有效。 Git子模块是将依赖项组织为子存储库的好方法。 子模块比Cocoapods有明显的优势,仅仅是因为子模块是子仓库。 这很大,因为这意味着git和git GUI会隐式识别它们,并且越来越多的GUI支持轻松使用它们! 此外,这还意味着您的依赖项在git repos存在的生态系统中保持联系。 但是,与任何其他系统一样,这也有其局限性。 使用Github子模块的不利之处在于,您的项目将来将没有可依赖的代码源。 它仅引用子模块的存储库,在大多数情况下,该存储库甚至不在您的控制之下。 该代码经过专门设计,旨在成为向Cocoa应用程序添加框架的最简单方法。 […]

枚举的许多面孔

对我来说这已经是忙碌的几个星期了,很高兴终于回到我可以适应例行程序的地步。 从单身派对到一个可怕的寒冷一周,再到哈德逊山谷度过一个愉快的假期,我再一次发现自己在布鲁克林,在计算机前编写代码(与之相对的另一种纸张和纸本一支钢笔)。 所以我们到了! Swift有了对Objective-C的许多改进(对于那些久经考验的真正的Objective-C开发人员,我很容易受到侮辱),从面向协议的编程到功能更强大的编程方法,甚至是围绕泛型的更好的API。 Swift中的许多功能使其成为令人愉悦的开发体验。 我个人发现Swift中的枚举很棒。 它们一直是我最常用的语言功能之一,以至于我可能对它们有些执迷,这是一个错误。 但是,我将介绍一些我认为枚举可能非常强大的案例,特别是 澄清看似任意的值 状态的封装 错误包装 澄清看似随意的值 枚举最适合用来处理似乎晦涩难懂,难以记忆的价值并为其应用含义。 这主要是因为它们是可读值。 我们每天在语言中使用的单词具有很多含义,我们可以在有些令人困惑的值之上轻松地传递该含义。 让我们以CAGradientLayer为例。 CAGradientLayer具有两个属性,即startPoint和endPoint ,它们都是CGPoint.实例CGPoint. 苹果将​​这些文件记录如下 绘制到图层的坐标空间中时,渐变的起点和终点。 起点对应于第一个渐变停止点,终点对应于… 这是对这两个属性的不必要的冗长描述。 这两个点都代表渐变开始的x和y坐标,范围从0到endPoint和endPoint的默认值endPoint为[0.5, 0] endPoint [0.5, 0]和[0.5, 1] endPoint [0.5, 1] 。 很难想象这意味着什么,但这是从上到下的垂直渐变。 如果要构建水平渐变层,则需要执行以下操作。 func horizo​​ntalGradientLayer()-> CAGradientLayer { 让渐变= CAGradientLayer() gradient.startPoint = CGPoint(x:0,y:0.5) gradient.endPoint = CGPoint(x:1,y:0.5) 返回梯度 } 即使现在只输入一次,我也必须考虑一下startPoint和endPoint可以正确定义水平渐变的不同可能性。 这种想法容易出错。 使用枚举定义渐变方向可以改善我们对渐变实际外观的可视化。 枚举GradientDirection { 垂直案例 案例水平 […]

线框和足球比赛

至少可以说,过去一周对我们许多人来说都很忙。 天气起伏不定,发生了超级碗-给了我们很多有趣但又戏剧性的广告-流感一直在敲响每个人的前门。 尽管大多数人本周都忙于躲避流感,但我们在应用程序Best Best上却取得了进展。 上周一我们进行了一次演讲,向全班展示了我们的研究结果和未来计划。 演示进行得很顺利,但是在进行任何繁重的工作之前,我们需要弄清楚应用程序的外观。 在本周的头脑风暴会议中,我们深入探讨了线框,功能,徽标和配色方案。 有些人可能不认为应用程序的配色方案会成为其开发的重点,但人们却认为应该将其置于应用程序的颜色中。 人们希望他们的应用能够正常工作,是的,但是他们需要在运行时保持美观。 配色方案也会影响应用程序的可用性。 当应用中充满了相互矛盾的鲜艳色彩时,重要的按钮就很难从其余布局中脱颖而出。 我们考虑了一些颜色,但还没有完全落在理想的调色板上。 对于我们来说,徽标非常重要。 这是我们议程中的优先事项。 没有拱门,麦当劳会怎样? 苹果没有苹果? 我们希望徽标贴在人们的记忆中。 徽标必须简单但可以识别。 我们考虑了以前卫的方式展示我们的品牌的不同方法,并且我们提出了一个想法,该想法将很好地为应用程序的整体设计服务。 我们对应用程序图标的外观也有一个大致的了解,我们期待对其进行调整。 我们讨论了很多有关线框以及如何使其易于使用的内容。 用户无休止的标签和列表很容易使他们分心和沮丧。 我们在手机上下载了一些杂货店应用程序,以了解某些功能的工作原理,并查看其中哪些功能令人讨厌。 设计这种线框的方法有无数种,因此我们的大脑每分钟工作一百万英里。 我们计划实现的功能将直接影响线框的工作方式。 我们知道我们想要的大多数功能,但是我们仍然要解决几个功能的问题。 我们的目标是使Best By简单易行,但要提供足够的功能,以使它们不会淹没基本功能-跟踪食物的有效期。 我们希望这些功能为该基本功能提供支持; 这些功能对于该基本功能应该是自然的。 有点像树枝从树的身体伸出来。

4种在iOS上改善应用下载的绝佳方法

尽管其他平台提供了更便宜,更开放的市场,但苹果的iOS AppStore仍然保持了流行。 这背后的主要原因是其旗舰iPhone的普及。 苹果市场上有超过300万的移动应用程序,因此获得更多下载是企业主唯一担心的事情。 在本文中,我们讲述了获得更多下载并提高iOS应用排名的秘密! 免费下载-应用内购买 多年来,用户决定通过iOS设备上的“免费应用程序”下载“付费应用程序”已经发生了很大变化。 如今,为了加快应用程序的下载,提供免费下载而不是付费是更好的选择。 以折扣价提供应用程序也是一个不错的选择,尤其是在圣诞节等节日期间。 一种通过应用程序获利的方法是提供应用程序内购买功能,以提高客户的体验。 许多受欢迎的游戏以及商业应用程序都使用此策略在iOS上获得更多应用程序下载。 应用商店优化(ASO) 涉及iOS应用开发的主要步骤是确保移动应用针对市场进行了优化。 这不仅有助于使应用程序进入封闭平台AppStore中,而且对其进行优化还可以提高受欢迎程度和下载量。 新泽西州的iOS应用开发公司应优化本地业务应用,以使其在技术上能够投入使用时就可以使用。 一个经过优化的产品还具有通过广告等赚钱的更好方法。 提升应用排名 一旦开发了移动应用程序,则取决于营销团队来帮助获得所需的宣传。 这可以通过自然的方式以及付费的方式来完成,您可以从影响者那里购买应用程序评论。 通过提高排名,可以在市场的主屏幕上显示广告,从而提高下载次数。 始终检查说明和等级 描述是人们在搜索要下载的正确应用程序时首先阅读的内容。 因此,这是一个关键因素,可以成为用户选择下载特定应用程序而不是竞争对手的原因的原因。 插入相关关键字,流行短语也将有助于在市场上排名。 同样,也应考虑评级,因为它是许多用户的决定因素。 良好的评分(4或5星)将间接促进应用营销,并在行业类别中获得提升。 两分钟的时间:以上几点是改善iOS应用下载并从中获利的最佳方法。

协议扩展-iOS

在开始阅读本文之前,我强烈建议您继续阅读以下文章。 了解协议-iOS 通过委托和协议在ViewController之间传递数据 与往常一样,让我们​​如下设置基本协议和类。 如果您已经阅读了我以前关于Protocol的文章,我希望下面的代码可以自我解释。 否则,出于上述相同原因,也会抛出如下错误 您已经猜到了,扩展中的方法仅适用于已确认该扩展之母的类。 在这种情况下,它具有战争能力。 如果我把所有事情都放在一个文件中。 它看起来应该像下面这样。 希望您从本教程中学到了更多有关协议的知识。 祝好运!