Tag: 移动应用程序开发

AR之旅

作为我在Galvanize课程中的一部分,学生在我们的第3季度项目中面临挑战,要有雄心壮志。 多么雄心勃勃? 不能发布产品是可以接受的,因为经验中最有价值的部分是尝试新事物,先潜水,拥抱学习新概念的过程,而不管结果如何。 考虑到这一点,我将记录我们团队在使用ARKit构建iOS增强现实应用程序方面的进展。 目标是建立一个类似于Jenga的游戏,在该游戏中,用户从AR塔中取出积木,然后将它们堆叠在塔上,直到塔翻倒,可怕地羞辱了最后一步的可怜灵魂。 当天的首要任务 大致了解Swift的语法 熟悉Xcode作为IDE 查找具有类似功能的应用程序的一些示例 今天发生的惊人的事情 我真正地接受了我零经验开始项目的感觉 。 我没有在Swift中工作,也没有进行任何移动应用程序开发,因此尝试全新的东西既令人恐惧,又令人兴奋。 对Swift语法有一个大致了解-我从Swift的伦敦应用程序啤酒厂的Angela Yu那里找到了一个很棒的Udemy课程,其中包括关于ARKit的部分。 在阅读了最初的视频之后,我对这种语言感到更加自在(部分由于在课程中学习Java作为选修课)。

世界走向斯威夫特

作者:Tamir Avrahamov公司。创始人 Gini-Apps (linkedin.com/in/tamiraaa) 2014年6月2日,Apple宣布将Swift语言作为Apple操作系统的编程语言,当然,还宣布了IOS的本机语言,IOS是iPhone和iPad的操作系统。 Swift语言是这里取代以前的语言-Objective C的一种 ,它采用更安全的编程模式,添加了现代功能,使编程更轻松,更灵活且同样重要,它更加有趣。 苹果一直致力于开发快速编程语言,直到大约两年前才向开发人员发布。 重要的是要了解语言不会轻易死亡。 目标C仍然存在于Apple代码的许多部分中,并且将始终存在,但是受困并依赖于过去技术的应用程序和开发将变得难以维护并最终消失。 那么我们应该继续使用其他语言吗? 如果是这样,什么时候? 当然,与苹果一起前进总是值得的,并且不建议忽略苹果公司对开发环境带来的任何变化,并且在过去几年中带来了很多变化。 这些更改带来了对新设备中新分辨率的支持,更好的性能,应对图形挑战的工具以及界面,这些操作从一开始就很复杂,现在变得更易于实现。 在某些情况下,目标C功能已被弃用,Apple或任何其他第三方提供了更新和更快的方法/算法以供快速使用。 您可以看到Apple工程师进行的比较,并可以更清楚,更明显地看到性能: 没有简单或魔术的方法可以快速转移到Swift。 您必须投入大量的精力,采用更安全的编程模式,甚至还要考虑新的设计,因为唯一的方法是重写您的应用程序。 是的,是时候了,这也是Swift Ver。的好时机。 3.0被认为是稳定且安全的实施。 除此之外,我认为最重要的原因是程序员。 在过去的两年中,世界各地的大学都在教授Swift,从那时起,新的Objective C开发人员还没有进入工作岗位。 开发者社区非常喜欢swift,以下图表说明了Swift被爱了多少(堆栈溢出): 那你从哪里开始呢? 有很多方法可以实现和重写代码,因此正确地计划,升级应用程序功能,以习得的方式设计代码体系结构非常重要,因为Swift可以在这里保留很多年。

创建一个移动应用程序:您应该知道的事情

您是否知道公司在逐年增加移动应用投资? 如今,创建移动应用程序已非常流行,实际上这是推广品牌的非常明智的策略。 但是在构建移动应用程序之前,您应该仔细考虑所有因素,因为与所有与业务相关的决定一样,确保获得投资回报非常重要。 什么是移动应用程序,什么是网络应用程序? 移动应用程序和Web应用程序可帮助用户通过手机,平板电脑等访问数据。移动网站类似于任何其他网站,但它适用于移动屏幕。 您只能通过Internet浏览器访问它。 但是关键的区别在于,移动应用程序是为较小的手持显示器和触摸屏界面设计的。 移动应用程序是用户从Google Play或Apple商店等数字发行平台购买和下载并安装在其设备(例如智能手机,平板电脑,而不是台式机或笔记本电脑)上的应用程序。 网络应用程序的优势 方便 为了使用移动应用程序,用户需要从在线商店下载该应用程序才能访问其内容。 借助Web应用程序,用户可以直接通过浏览器访问内容,而无需执行下载和安装过程。 兼容性 除非您要使用混合移动应用程序,否则本机应用程序是为不同的操作系统(例如iOS和Android)开发的。 Web应用程序允许从任何移动设备访问其操作系统,而不管其用户如何。 这使得Web应用程序比本地移动应用程序更具兼容性。 灵活性 如果您需要更新Web应用程序上的内容和其他信息,则只需要在Web上进行更改,显然这些更改将立即可见,但是如果要创建移动应用程序,则每次更改时在您的移动应用程序上,您需要对其进行更新,并通知您的用户将其更新为新版本。 更难,更昂贵 开发移动应用程序比构建Web应用程序更加昂贵和复杂。 似乎我在说Web应用程序更好,因为我刚刚列出了拥有Web应用程序的优点。 但是事实并非如此,我认为这取决于情况。 移动应用程序不仅适用于亚马逊,阿里巴巴等大型公司,而且在竞争激烈的世界中,移动应用程序常常带给您领先优势,并发挥了优势。 那么,移动应用程序可以做什么,而网络应用程序不能做什么? 什么时候考虑创建移动应用程序? 授予访问内容和功能的权限 实际上,在移动应用程序上,您授予了访问不需要互联网的内容和功能的权限。 让我们以一个离线应用程序为例,您可以在其中保存视频,文章和其他类型的内容,以供以后选择访问:Pocket。 让他们玩 如果您想为用户提供游戏体验,那么创建移动应用程序始终是为用户服务的最佳选择。 定期使用 如果您打算定期使用您的应用,那么您希望增加用户的参与度,发送有关最新新闻的通知等,那么显然移动应用将是正确的选择。 这适用于许多电子商务企业,使购物体验更加轻松。 有什么要报告的吗? 如果您需要使用某些数据并通过复杂的计算,图表或报告进行操作,则可以使用应用程序。 使其互动 例如,在教育领域,如果教师需要与学生互动以交流想法或帮助他们的学生在学习过程中解决问题,那么创建移动应用程序可能是一个好主意。 分享图片,视频和内容 例如,类似Whatsapp的应用程序允许用户直接从手机发送图片或视频,甚至可以与朋友通话和聊天。 或者像instagram这样的应用程序,使用户可以上传图片和视频,对其进行编辑并与朋友分享。 因此,如果您需要访问用户的摄像机或联系人列表,则应用程序将是更好的选择。 问自己什么 如果要构建移动应用程序,则应首先回答一些重要问题。 您的业​​务真的需要吗? 构建应用程序并不容易且不便宜。 在做出任何决定之前,您应该真正考虑这一点。 是移动应用程序是解决问题的唯一解决方案,还是还有其他选择,例如,使用Web应用程序。 您是否考虑过第二步? 请记住,构建移动应用程序并在网上商店出售后,它并不会全部停止。 如果您想“烧钱”,则您的应用程序需要为用户提供真正的价值,而且这需要定期进行,这意味着可以帮助您规划和推广应用程序的数字营销策略。 另外,请记住,用户有很多原因会在其手机或设备上卸载移动应用程序。 您必须意识到所有这些问题。 目标是什么?您愿意投资多少? 开发应用程序的成本是不同的,并且取决于应用程序的类型和功能。 […]

WWDC 2018最新Swift 4.2功能

更少的样板=更快乐的开发人员 作为iOS开发人员,我像许多其他人一样从Objective-C开始。 在日常工作中,我与Swift一起工作,考虑到它的第一次迭代的增长,我发现它的多功能性很有希望。 是的,前几个版本的重大更改难以使用; 但是,这些不断增长的痛苦导致了一种更好,更高效的语言。 它的第四个主要版本在功能和社区方面都继续给人留下深刻印象。 上周,苹果举行了年度全球开发者大会(WWDC),其中展示了Swift的一些最新改进。 尽管Swift 5计划于2019年发布,但Swift 4.2具有其自身的优势,特别是在消除繁琐的样板代码方面。 枚举案例的派生集合 Swift的可爱功能之一是它具有使用类似结构的功能来扩展枚举的功能。 例如,如果我们要遍历下面显示的枚举中的所有Fruits ,则需要实现一些样板代码,其中包含数组中的所有案例。 除了每次要遍历数组时都创建一个allCases变量外,每次向枚举添加新的大小写时,我们还必须更新allCases数组。 这可能很麻烦,并且为开发人员错误留了太多空间。 Swift 4.2添加了一个名为CaseIterable的新协议,该协议默认情况下只是添加allCases数组。 我们需要做的就是将CaseIterable添加到我们的枚举中,现在我们可以遍历所有案例。 但是,请务必注意,具有关联值的枚举将无法扩展CaseIterable 。 allCases数组中的元素必须具有相同的类型,而每个枚举的关联值可以包含不同的类型。 合成等量一致性 假设有一个用户对象具有我们可能要比较的简单属性。 令人讨厌的是,我们需要User对象符合Equatable协议,然后检查两个比较对象的每个属性是否相等。 尽管这看起来很简单,但是如果我们比较具有许多属性的大型对象,这也是一项不必要的麻烦任务。 Swift 4.2现在将能够比较两个 Equatable 对象,而无需实现Equatable函数。 只要每个属性都符合Equatable ,Swift就可以推断出我们的Equatable函数。 因此,开发人员将不再需要编写该样板代码。 数组的条件一致性 以前,我们无法像上面的areArraysEqual函数中所示比较两个数组的内容,因为不将Users数组视为Equatable类型。 虽然如果我们比较两个函数数组可能会有意义,但由于函数类型不是Equatable ,而元素类型为Equatable则没有意义。 在Swift 4.2中,我们提供了一个数组扩展名,可以比较两个具有Equatable元素类型的数组。 除了数组之外,可选内容和字典还通过这种新的条件一致性提供了相同的功能。 新的随机数生成器 如果您想在Swift中创建随机数,则必须使用导入的C API,这些API需要进行严格的平台检查。 坦白说,这不是最优雅的解决方案,而要正确解决问题可能会很棘手。 Swift 4.2现在为Floats和Ints提供了新的随机数生成器功能,可以接受一定范围以准确返回随机数。 此外,现在可以从数组中检索随机元素,并且可以分别通过添加randomElement()和shuffled()函数对数组的元素进行混洗。 更多细节 这些是Swift 4.2的主要更改,但这里还没有涉及其他内容,例如新的哈希算法和协议。 如果您想了解Swift的最新功能,建议您访问https://apple.github.io/swift-evolution/以查看正在审查,接受或实施的最新更改。 一如既往,感谢您的阅读和记忆,更少的样板=快乐的开发人员🙂 资源资源 Swift的新功能– WWDC […]

转换Ionic应用程序以吸引全球受众的5个步骤指南

支持您的移动应用程序的一种简单方法是支持他们的母语。 Apple强烈建议您为全球受众准备您的应用程序。 本教程介绍了如何翻译Ionic应用程序以支持其他语言。 我最近的“工作时间”更新(版本3.2)包括对其他5种语言的支持。 本教程通过5个简单步骤逐步介绍了如何更新应用程序: 翻译您的应用程序的内容 将Angular Translate模块添加到您的应用中 更新您的模板 更新您的控制器和服务 测试您的翻译 翻译您的应用程序的内容 在更改任何代码之前,我们需要翻译所有应用程序内容。 创建应用程序中所有文本的文本文档。 确保检查所有内容。 以下是一些注意事项: 每个模板的文字 来自每个控制器的文本 每个服务的文字 过滤器返回的文字 App Store说明 App Store关键字 除非您是多语种,否则您需要使用翻译服务将文本转换为您的首选语言。 我过去曾经使用过一个名为“我可以本地化”的网站。 您也可以在Fiverr上找到负担得起的翻译产品。 我建议找到具有翻译移动应用程序经验的翻译人员。 将Angular Translate模块添加到您的应用中 假设您使用Ionic Framework和AngularJS构建了应用程序,则应使用功能强大的翻译服务Angular Translate。 从他们的仓库中下载最新版本,解压缩文件,然后将angular-translate.min.js文件移动到项目js文件夹中。 然后只需将脚本嵌入到www/index.html文件中,如下所示: 确保将模块作为依赖项注入到您的应用程序中。 这是工作时间的节选: angular.module(‘hoursworked’, [‘pascalprecht.translate’]) 然后使用$translateProvider向应用程序介绍您的$translateProvider 。 以下是工作时间示例: $translateProvider.translations(‘en’, { start_label: “Start Time”, end_label: “End Time” }); $translateProvider.translations(‘es’, { start_label: “Principio”, […]

立即开始使用Helper类! – 第2部分

。 。 专业人士提示: 对于iOS中的状态标语,有一些相当不错的第三方解决方案。 如果您使用cocoapods,则可以为此使用多个吊舱。 如果您不熟悉在iOS中使用cocoapods,请参阅此内容。 。 。 我个人使用NotificationBannerSwift。 我们可以利用此程序包的功能以及我们的Helper类,以一种巧妙的方式来显示具有警报样式的通知/状态横幅消息。 首先,我们需要按照自述文件中的说明安装NotificationBannerSwift。 然后,我们需要将其导入到Helper类上方的Helper.swift文件中。 导入NotificationBannerSwift。 .class Helper {静态var应用程序:Helper = {返回Helper()}()。 。 。} 现在,只需在我们之前在Helper类中编写的警报函数之后添加函数showStatus() 。 在执行网络详尽的任务之前,我怎么知道是否有互联网? 如果您在构建iOS应用时曾经问过自己这个问题,那么这是给您的。 苹果有一个方便的SystemConfiguration 该类可以检查网络可达性,更人性化,它可以为您检查是否有互联网,以便您可以检查连接以及在联机时发出请求和进行网络呼叫。 首先,在我们的帮助文件中导入SystemConfiguration类。 导入SystemConfiguration 在到目前为止在Helper类中声明的函数之后,添加以下isInternetAvailable()函数。 就是今天的人们! 在这里查看我的其他文章。

印度十大iOS应用开发公司

在当今的移动驱动世界中,企业家面临的最令人困惑的问题之一是,应从成千上万个应用程序开发公司中选择哪家公司来进行iOS应用程序项目? 如今,许多公司都夸耀其熟练和经验丰富的iOS应用程序开发人员,因此,在选择一个应用程序时要格外小心,以免将您的应用程序创意误入歧途。 如果选择错误的iOS应用开发合作伙伴,则可能会损失大量金钱和精力。 因此,在这里,我们列出了总部位于印度的十大iOS应用开发公司 。 我们之所以选择了印度的公司,是因为印度作为全球IT解决方案提供商的枢纽而赢得了声誉。 除了成本效益和及时的项目交付,如果您在美国或欧洲有业务,印度的IT公司还为您提供时区优势。 该列表并没有穷尽,您将发现它对于将来的iOS应用程序项目非常有用。 让我们从一流的iOS应用开发公司开始: 1. 解决方案分析师 Solution Analysts成立于2011年,是印度发生率最高的城市之一,在提供端到端IT解决方案的同时,保持高质量并符合行业标准已实现了许多里程碑。 除了iOS应用开发之外,开发量身定制的Web解决方案,企业移动解决方案,电子商务和IoT解决方案是该公司的强项。 公司拥有一支由100多名专业人员组成的强大劳动力,他们精通使用先进的工具来满足全球客户的各种业务需求。 该公司在总部和位于美国的办事处运营。 自成立以来,Solution Analysts在处理iOS应用程序开发领域的技术进步方面显示出透明的方法和专业知识。该公司的核心重点是面向全球企业的移动应用程序开发和IoT软件开发。 2. TechAhead 该公司于2009年在印度的NCR地区成立。 该公司拥有150多名专业人员,他们在为Android和iOS平台开发移动解决方案和量身定制的移动应用程序方面拥有丰富的经验。 TechAhead在企业移动性和移动应用程序开发领域提供简单可用的功能性解决方案。 该公司拥有丰富的UID(用户界面设计)和后端架构应用开发人员。 该公司在为全球客户提供高质量服务方面处于领先地位。 3. Konstant信息解决方案 Konstant Infosolutions总部位于印度北部各州之一的首都,主要专注于移动应用程序开发和Web开发。 该公司成立于2003年,提供定制的移动应用程序和Web解决方案。 该公司还提供可穿戴设备,物联网,电子商务和云技术领域的高质量解决方案。 该公司还提供适合客户预算和其他要求的不同合作伙伴关系模型。 该公司拥有经验丰富的专业团队。 4. 融合技术 Consagous Technologies于2008年成立于印度中部最大的城市之一,提供定制的Android和iOS移动解决方案。 该公司还提供托管和应用营销服务。 它的核心重点是Android和iOS移动解决方案。 Consagous Technologies还提供PHP,ASP.NET,Symphony和其他技术的Web应用程序和Web开发服务。 该公司拥有资深的技术资深人士,可提供企业级移动应用程序,网站开发和软件开发服务。 5. Sphinx解决方案 Sphinx Solutions成立于印度西部最大的城市之一,提供移动应用程序开发和定制软件开发服务。 该公司成立于2010年,至今仍是领先的应用程序开发公司。 该公司还提供区块链开发。 为公司客户提供ICO开发和Web设计服务。 此外,Sphinx Solutions还通过公司的80多个内部资源提供Chatbot开发,大数据和数字营销服务。 6. Simpalm Simpalm位于印度中部城市之一,是领先的移动应用程序和网络开发服务提供商。 在移动应用程序开发中,该公司为Android,iOS和Windows平台提供量身定制的应用程序。 […]

iOS开发设置:Xcode

定制Xcode以获得更流畅体验的小技巧。 这篇文章是有关设置iOS开发环境的系列文章的一部分。 Xcode定制高度依赖于个人喜好,您可以做很多事情来改善自己的体验。 以下是一些我最喜欢的技巧来增强Xcode。 如果您不喜欢任何内置的Xcode主题,则可以轻松导入新主题。 这是一个很好的入门资源: hdoria / xcode主题 xcode-themes – Xcode的颜色主题 github.com 除了导入主题外,您还可以轻松自定义主题并保存或导出主题。 您可以在~/{user}/Library/Developer/Xcode/UserData/FontAndColorThemes/找到所有已安装的主题。 这是我的自定义主题在“首选项”窗格中的示例: 以及它的使用方式: 我在代码的任何地方都使用TODO:和FIXME:作为“自我注释”。 因为我不需要生产代码中的注释,所以我想在使用过关键字的位置添加警告,因此很明显,在进行生产之前,需要清理一些内容。 在Objective-C中,我们能够根据需要使用#warning标记显示警告,但是Swift没有等效选项。 相反,您需要添加一个Build Phase Run Script来为TODO:和FIXME:添加警告。 该脚本可在Swift和Objective-C工作区和测试中使用,但会忽略Pods。 最终看起来像这样: 隐藏Cocopod警告: 为确保您不会丢失新的TODO和FIXME警告,并且通常只需要为安装的Pod遍历大量警告,请确保禁止Podfile中的所有警告。 这应该在平台声明下的Podfile的顶部: #忽略来自所有Pod的所有警告 hibit_all_warnings! 我将直接链接到此,因为机器人Natasha的解释要好得多,但是要点是:如果添加异常断点并打印出参数,则每次应用崩溃时,崩溃的原因在控制台中打印出来。 它极大地改善了我的调试生活,并强烈建议所有人使用。 Xcode:一个奇怪的调试技巧,可以挽救您的生命 好的,希望您能告诉我这个标题让我玩得太开心了🙂无论如何,现在又恢复了定期安排… www.natashatherobot.com

轻松管理Swift项目中的不同环境

想象一下,您已经完成了应用程序的开发和测试,现在可以将其提交生产版本了。 但这是问题所在:您所有的API密钥,URL,图标或其他设置都针对测试环境进行了配置。 因此,在提交您的应用程序之前,您将必须修改所有这些内容以适合您的生产模式。 显然,这听起来不太好。 另外,您可能会忘记在庞大的应用程序中进行某些更改,因此您的服务将无法正常运行。 代替这种凌乱的方法,最好有几个环境并在需要时简单地更改它们。 今天,我们将通过最流行的方法来尝试组织不同的环境: 使用注释。 使用全局变量或枚举。 使用带有全局标志的配置和方案。 将配置和方案与多个* .plist文件一起使用。 1.使用注释 当您有2个分离的环境时,您的应用程序需要知道它应该连接到哪个环境。 想象一下,您拥有Production , Development和Staging环境以及API端点。 处理此问题的最快,最简单的方法是拥有3个不同的变量并注释其中2个: 这种方法非常肮脏,凌乱,会使您哭泣很多。 有时我会在黑客马拉松上使用它,因为代码的质量不起作用,而速度和灵活性才是关键。 在任何其他情况下,我强烈建议您完全不要使用它。 2.使用全局变量或枚举 另一种流行的方法是使用全局变量或Enum (这会更好)来处理不同的配置。 您将必须在3种环境中声明您的Enum ,并在某处(例如在AppDelegate文件中)设置其值: 这种方法要求您每次更改代码时都只在代码中设置一次。 与以前的方法相比,此方法要好得多。 它非常快速,可读性强,但有很多局限性。 首先,在运行任何环境时,您始终具有相同的捆绑ID。 这意味着您将无法同时在设备上拥有两个具有不同环境的相同应用程序。 一点都不舒服。 同样,在每个环境中使用不同的图标也是一个好主意,但是采用这种方法,您将无法更改图标。 同样,如果您忘记在发布应用程序之前更改此全局变量,则肯定会遇到问题。

Swift:没有人会打扰的常见错误-一流的功能和保持循环

您好,我亲爱的开发人员, 最近,我认识的一家基于洛杉矶的创业公司联系我,要求我进行代码评估。 他们在代码不稳定,随机崩溃和类似问题上遇到了可怕的问题。 我能说什么 代码中充满了我在上一篇文章中提到的错误(尤其是强制拆包和强制转换,我向之致敬,因为它们是导致大量崩溃的原因)。 但是,由于人们了解Swift中的所有功能都是一等的高阶函数,因此在不同的项目中一遍又一遍地出现了一个特别的错误。 您可以放入变量,将其作为参数发送给其他函数,并作为执行某些函数的结果来接收。 因此,让我们看一下一般的简化情况: 免责声明 : 这是概述方法的示例代码,其他代码段也是如此。 请原谅我,我的读者,我的确理解这一点。 令我震惊的是,有多少人没有得到我所有的文章都描述了通用方法,而不是具体用例。 处理器是执行处理并在处理完成后调用回调的某种实体。 在这种情况下, 数据是拥有处理器并对处理完成时调用的回调感兴趣的某个实体。 最简单的用户故事之一是Data是UIViewController子类,而Processor是UIView子类,当用户以某种方式与视图交互时,该类从控制器调用回调。 那么,这段代码有什么问题呢? 我们这里有一个保留循环。 Data和Processor都不会被释放。 检查我的陈述确实是真的很简单。 只需将调试打印放入Processor和Data的 deinit方法中即可。 如您所见,它从未打印任何内容,因为从未调用过deinit 。 那是因为保留循环。 但是为什么在这种情况下实际上会出现保留循环? 为了掌握这一点,您需要了解swift中的任何struct和class实例函数都是闭包。 闭包是捕获和存储外部上下文(例如变量)的一种函数。 一个完美的关闭示例是: autoincrementedIDGenerator返回一个函数,该函数捕获id并对其进行操作。 每次我们调用该函数时,它都会创建一个名为id的新变量,并返回捕获该变量的函数。 当我们测试输出时,我们将收到: user id = 0 user id = 1 user id = 2 image id = 0 image id = 1 image id […]