Tag: iOS应用程序开发

使用iOS应用程序抓取Firebase服务

那是晴天的时候之一,那时我回到家,终于有时间从我的购物清单中计划好美食应用程序。 不管是好是坏,我不仅需要进行应用程序设计,而且: 身份验证。 我可以在其中保存和检索内容(数据,信息,图像)的数据库。 可搜索的食品API。 大概,我需要一个认真的人加入我自己的小团队。 或者,我可以一个人做吗? 或多或少😃。 简短答案-是的! 因为我一方面找到了价格合理的可搜索食物API,另一方面又找到了Firebase 。 长答案? 继续阅读! Firebase是面向移动开发人员的统一平台(是的,适用于Android和iOS),提供了许多很棒的功能,其中包括实时数据库,崩溃报告,分析,身份验证等。最好在以下位置查看整个列表:他们的官方网站。 我写的最后一篇文章包括一个项目 名为Unicorner,旨在接收带有Unicorner用户看到并拍照的独角兽图像的远程通知。 这次,该项目将要拍摄独角兽的图片并将其上传到数据库。 然后,来自数据库的数据将被馈送到一个列表,在该列表中可以看到上传的图片和信息。 通知不会发送,但我们可以在另一篇文章中进行处理,对吗? 无论如何,这是计划的文章工作流程: Firebase帐户注册和iOS应用程序配置。 在Xcode中设置Demo项目。 编写一些代码以与Firebase实时数据库和存储进行通信。 实际上,这很简单。 首先转到此链接,然后单击屏幕右上方的“ 登录”按钮。 可以使用gmail帐户( 大多数人都拥有一个 )登录,也可以按照注册步骤创建新帐户来登录。 完成后,再次点击右上方的转到控制台 , 进入 Firebase控制台。 这是可见的: 我的Firebase控制台中已经有一个正在处理的应用程序项目。 要添加另一个,只需点击添加项目,然后看到此模式: 我为我的项目选择的名称是UnicornUploader和 我选择的地区是美国。 根据需要选择,然后单击创建项目 。 在创建项目时稍等一下,瞧: 点击“ 继续”后 ,您将进入“ 项目概述”页面: 在这里可以访问Firebase提供的所有功能。 确实,在本文中,我将仅关注三个方面-身份验证,数据库和存储。 您确保在时间允许的情况下将它们全部检查出来。 将Firebase添加到iOS应用 是时候选择将Firebase添加到您的iOS 应用程序中,以将Firebase添加到我的iOS应用程序中 : 我已经输入了演示项目的iOS Bundle ID,对您的演示文稿也做了同样的操作,然后点击Register […]

应用程序开发的入门故事

“嘿! 您是否想知道以经验有限的人的身份制作应用程序是什么感觉? 好吧,这个问题很夸张,因为您单击的文章非常抽象。” 为了给本文提供背景信息,我和我的搭档正在为软件产品开发课程制作一个应用程序,目的是学习协作的最佳实践。 我的合伙人在后端工作时,我负责应用程序的移动/客户端。 我们俩都是编程/软件开发的新手,时间表也大相径庭。 规划过程 尽管不仅开发软件而且进行协作工作对我来说都是新的,但我知道计划和研究必要的材料,适当地确定项目范围并为基于开发过程的清晰路线图至关重要。在我们的技能水平上。 遵循这些粗略的准则,我和我的合伙人可以平等地委派任务,以提高开发过程中的个人效率。 在第一周,我们计划在整个学期中定期召开每周会议,并决定在项目的计划过程中花费两个星期。 我们决定花两个星期的时间来计划自己,以便有足够的时间在其他课程上取得领先。 我们在计划过程中能够完成的工作: 为我们域内的应用程序集思广益。 确定了MVP(最小可行产品)及其之后的版本/扩展目标。 在Trello板上列出必要的任务和准则。 确定对应用程序的必要研究。 将任务适当地委派给每个人。 制定线框和项目时间表。 头脑风暴时的白板(上图)。 在我们的集思广益会议期间,我们决定做出一些能够解决旅游/探索问题的事情。 更具体地说,我们想开发一款能够激励和激励人们去探索自己的地区并在旅行过程中轻松地导航新的陌生地区的应用程序。 我们的解决方案 我们的解决方案是创建一个可用作个人导游的应用程序,奖励用户步行即可到达景点。 我们的主要目标是对探索进行游戏化,以鼓励人们更多地走出去,并帮助不喜欢旅行的旅行者。 在讨论这些目标时,我的一位同学同意这一观点,说: “制定行程会浪费一半的乐趣。” 我们决定采用此想法的另一个原因是,我们希望在可能会很有趣的同时又提供足够的空间使其复杂并具有更多功能,从而使之有趣。 详细的应用程序 该应用程序将使用自定义api向用户显示要探索的各种位置,这些位置均在用户位置的步行距离内。 一旦用户选择了感兴趣的位置,该应用程序便会将用户重定向到Apple地图。 我们的主要激励机制是与用户互动的吉祥物/伴侣,并向用户奖励各种化妆品,以指示他们探索了多少地方。 这个应用程序的主要目的是游戏化探索,以鼓励任何人走出家门,并在自己的家乡或旅行时探索他们所在的地区。 我们对该应用程序的灵感来自一位同学向我们提出的类似想法。 他们正在制作一个应用程序,该应用程序将允许用户沿用当地人创建的路线,以探索和发现不同的区域(类似于地理缓存)。 另一个灵感来源是《神奇宝贝GO!》,这是因为它们使用了游戏化的现实世界探索以及其中包括的他妈哥池方面。 经过广泛的计划,下一步就是开始开发。 冲刺计划和回顾: 在开始编写第一行代码之前,我们需要计划冲刺。 “冲刺计划”是在短期会议上进行的,小组在此期间确定在特定时间段内要完成的任务,确定特定任务的优先级并设定小组目标。 在小组中,我们将冲刺设置为两个星期,并为我们每个人委派了一些任务,从而使我们有足够的灵活性来完成其他课程的工作。 冲刺结束后,我们还计划召开回顾性会议,以回顾迄今为止的进展和工作质量。 我们在这次会议上提出的问题包括:1)进展顺利吗? 2)什么进展不顺利? 3)我们是否需要重新安排积压的优先级? 和4)在下一个Sprint中我们可以做哪些小的改进? 在这段时间里,由于社区事件和/或无法控制或意外的情况,我们通常转移并重新安排任务的优先级。 糟糕,存在一些问题: 即使经过了广泛的计划,也可能总是存在一些无法控制的因素,使工作陷入僵局。 我们在执行此项目时遇到的一些问题是: 疾病 无法互相追究责任 拖延 无法有效地概念化 缺乏沟通 由于这些问题大多数与组织和团队合作有关,因此在感恩节期间,我们召开了一次长期回顾会议,在会议上我们分析了自己的优缺点,并制定了一项计划来帮助我们克服挑战。 […]

iOS App中的TestFlight:Beta测试

Beta测试是软件产品发布周期中的一个步骤。 我们所有人都使用内置模拟器和我们自己的设备测试了您的应用。 有趣的是,即使您是应用程序的创建者,也可能无法发现其中的一些错误。 通过Beta测试,您会惊讶于此阶段发现的缺陷数量。 通过TestFlight,可以轻松邀请用户测试您的应用并收集有价值的反馈,然后再在App Store上发布它们。 仅使用他们的电子邮件地址,您最多可以邀请10,000名测试人员。 要利用TestFlight,只需上传您的应用程序的Beta版,然后使用iTunes Connect添加您想要测试应用程序的人员的姓名和电子邮件地址。 测试人员将安装适用于iOS,watchOS和tvOS的TestFlight应用程序,以便他们可以使用您的Beta应用程序并快速提供反馈。 Beta测试通常向特定数量的用户开放。 他们可能是您潜在的应用程序用户,您的博客关注者,您的同事,朋友甚至家庭成员。 Beta测试的全部目的是让一小部分真实的人接触到您的应用程序,对其进行测试并提供反馈。 您希望您的Beta测试人员在此阶段发现尽可能多的错误,以便可以在向公众推出您的应用程序之前对其进行修复。 内部测试员: 每个应用程序最多可以由团队中的25位成员进行测试,这些成员在iTunes Connect中被分配了管理员,应用程序管理员,开发人员或市场人员角色。 每个成员最多可以在30个设备上进行测试。 内部测试人员可以访问您所有可用于测试的Beta版本。 外部测试人员和小组: 准备就绪后,您可以邀请多达10,000个不需要成为团队成员的外部测试人员对您打算在App Store上公开发布的应用进行Beta测试。 您可以将外部测试人员组织到自定义组中,并根据您要测试的功能与每个组共享不同的内部版本。 “一次可以在内部或外部对多达100个应用进行测试,并且在上传后,构建会在90天内保持活动状态。 TestFlight同时支持多种版本的iOS应用程序,watchOS应用程序,tvOS应用程序和iMessage应用程序。” 将您的应用上传到iTunes Connect 步骤1: 首先转到“ 构建设置”的“代码签名身份”部分 。 在发行版部分,将标识值更改为iOS Distribution 。 步骤2:转到“ 产品”菜单并存档您的项目。 步骤3:成功归档项目后,单击闪亮的蓝色按钮( Upload to App Store .. )。 步骤4: 对于App Store的发行选项,请检查Strip Swift符号并上载您应用的符号选项。 步骤5:选择您的iOS发行证书和App Store配置文件。 第6步:最后,查看.ipa内容 (库/摘要/标识符),最后触摸一下将.ipa文件上传到iTunes connect。 步骤7:最后,.ipa文件成功上传到iTunes connect 。 […]

Instagram的缩放/平移手势教程

*********本教程是使用Swift 3.0创建的******** Instagram具有很多魔力,并且作为当今最流行的应用程序之一,它提高了对其他应用程序的期望。 作为用户,我们常常忽略了出色应用程序的精妙之处,并且我们期望达到某种标准。 Instagram帖子上的缩放功能是这些标准之一。 本教程着重于复制该行为。 我是Rep的产品和工程负责人,Rep是一个有影响力的市场,品牌和有影响力的人可以在市场营销活动中进行协作。 我决定分享如何将此功能内置到用户个人资料中以放大照片。 我已经在下面附上了一些已完成结果的剪辑,但是为了详细介绍所有内容,我们将从头开始,并逐步解决它。 在项目设置中向左/向右移除风景,保留“纵向”选择。 好的,设置完成。 让我们开始编写我们的UI。 我喜欢以编程方式进行所有操作,但是如果您习惯IB,那么也可以这样做。 单击“ ViewController.swift”文件,然后添加表视图和数据源。 在创建带有要放大的图像的自定义单元之前,我们将使用UITableViewCell作为占位符。 现在是继承代码。 // ViewController.swift 导入UIKit 类ViewController:UIViewController { var tableView:UITableView! 覆盖func viewDidLoad(){ super.viewDidLoad() //加载视图后进行其他任何设置,通常是从笔尖进行。 view.backgroundColor = .orange setUpTableView() } func setUpTableView(){ tableView = UITableView() tableView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tableView) 让const:[NSLayoutConstraint] = [ tableView.topAnchor.constraint(equalTo:topLayoutGuide.bottomAnchor), tableView.leadingAnchor.constraint(equalTo:view.leadingAnchor), tableView.trailingAnchor.constraint(equalTo:view.trailingAnchor), tableView.bottomAnchor.constraint(等于:bottomLayoutGuide.topAnchor) ] NSLayoutConstraint.activate(const) tableView.register(UITableViewCell.self,forCellReuseIdentifier:“ cell”) tableView.dataSource =自我 […]

Swift:第一时间获得正确的MVC

开发人员为什么倾向于在其视图控制器中填充视图? 在Swift中使用MVC的更好方法呢? 我遇到的大多数开发人员都倾向于做真正奇怪的事情。 他们中有些人避免洗衣服和发臭,像地狱一样。 其他人则喝加盐和胡椒粉的咖啡。 但是我看到的最常见的行为是,开发人员不使用视图,而是喜欢在视图控制器中执行所有与视图相关的操作,例如填充,创建动画等。 首先,假设我们有一些描述用户的结构: 其次,我们的任务是用该用户的数据填充一些演示文稿。 许多开发人员的代码,甚至是Apple在其教程中提供的代码,看起来都像下面的怪兽: 罪人,听我说,谁会说:“哦。 嘿。 那就是我通常写的代码。 实际上,这没有什么错。”实际上在几个层面上确实是错的: 视图的内容取决于您何时设置模型。 它不可扩展且不可维护; 这是不可重用的。 而且,我们不应该忘记使@IBOutlets变弱,因为视图控制器的view属性可能会更改,并且我们将对视图持有强大的引用,对此我们不承担任何责任。 如果模型是在视图出现后设置的(例如,它是从Internet下载的),则不会在屏幕上显示,除非进一步进入导航层次结构然后返回。 有很多人在野外用viewDidLoad做到这一点,但更糟糕的是,更新内容的唯一方法是用新模型创建新的视图控制器。 即使这样,如果在将控制器推入导航控制器后设置模型,也不会显示该模型,因为在推入过程中已经调用了viewDidLoad 。 可扩展性和可维护性在这里也确实很痛苦。 您的视图控制器负责填充整个视图层次并为其设置动画。 目前,只有2个子视图,但是想象一下,您有20个甚至更多。 此外,您必须为它们设置动画或根据模型数据更改它们的外观。 viewWillAppear很快就会变成一团糟。 至于重用,请设想一下这种情况,当您希望在不同的视图控制器上呈现相同的视图和模型关系时,具有何时以及如何获取和处理模型的逻辑不同。 例如,在表格视图中将其显示为单元格,或者将其呈现给来自不同API端点的另一种用户。 在我看来,确实很奇怪,网络上没有那么多声音,他们提出了一种更好,更简单的选择。 在大多数情况下,开发人员不会反对编写任何东西: 让我们考虑一下。 UILabel具有一些复杂的绘制逻辑和字符串处理功能。 它的作用是显示字符串。 但是视图的字符串是什么? 这不是很明显吗? 这是模特!!! 那么,为什么我们的代码在使用自己的视图时却归结为我之前模拟的代码? 有些人会开始争论,那是做MVC的正确方法。 MVC是一种设计模式。 苹果公司在其代码中做到了这一点,我们应该承担义务。 你知道,这使我想起什么? 使用20个类和协议编写具有hello world的企业Java项目。 当然,Java开发人员可以简化事情,但是他们严格遵守GoF和其他主流设计模式,忘记了它们是建议,而不是严格遵循的规则。 让我们从我坚持的观点出发,对我们的代码和演示进行推理。 我们的每种观点都与某种模型紧密相关。 它的设计和呈现方式仅适用于一种模型。 证明? 您将无法使用用户展示屏幕展示考试数学问题。 它的设计不同,子视图也不同。 例如,同样适用于UITableView,但是在这种情况下,我们应该将其模型视为模型数组。 在那种情况下,它适合于1模型与1视图关系的相同方案。 同样适用于动画和其他内容。 View Controller不应在实现细节的底层上处理这些事情。 […]

为什么现在应该学习如何在Swift中进行编码

从来没有比现在更好的时间成为应用程序开发人员。 随着网站越来越多,过时的公司正在从Web切换到应用程序,并且此过程才刚刚开始。 苹果公司在2014年首次推出的Swift语言已成为世界上最重要的编程语言之一。 使这种语言如此流行的原因是,正确教授它非常容易学习。 这就是为什么在选择有关该语言的在线课程时需要仔细选择的原因。 大多数课程都以“创建Instagram”或​​“制作自己的Facebook,Snapchat等”之类的承诺使学生蒙蔽,这是荒谬的。 坦率地说,无论老师多么出色,都不可能创建一个可以让数百人在几个月内,数小时内使用它的应用程序。 但是我必须承认我也信守了那些诺言,这就是为什么我知道它们是错误的。 尽管您可能会以流行的应用程序的较差版本结尾,但是您对应用程序或编程语言的工作方式一无所知。 您将无法使用这些克隆中的任何一个来增强您的履历,因为您将无法向任何人解释代码为何起作用,因为您所做的只是复制并粘贴了教师告诉您的内容。 这就是为什么我们在RUME学院决定现在是时候创建自己的语言课程了。 我与同事Johannes Ruof一起教的课程非常适合希望开始学习如何使您的应用创意成为现实的每个人。 我们涵盖了该语言的所有重要方面,即使您是初学者,我们的教学方法也包含帮助您理解它的实际示例。 我们已经培训了7500多名学生,并使数百人以Swift开发人员的身份开始了自己的事业。 一旦成为开发人员,就有许多工作机会在等待着您。 无论您是选择在公司工作,是自由职业者,还是想创建自己的应用程序并使您的想法成真。 Swift被认为是初学者最简单的编程语言之一,因为它很容易理解和应用。 它是用于开发iOS和MacOS应用程序的语言。 有可靠的谣言称,谷歌也在考虑将Swift用作Android的首选编程语言。 我们的课程是作为iOS开发人员成功事业的完美起点,为了使您更轻松地做出决定,我们为所有阅读本文的人提供92%的折扣。 只需点击此课程链接即可 或在udemy上使用代码:MEDIUM15。

React Native –从零开始到App Store

计划 应用程式创意 使用的技术 开发环境 应用结构 打字稿介绍 付款介绍 推送通知简介 介绍持久性Redux存储 苹果评论修复 最重要的提示 结论 应用程式创意 一年前,我搬到柏林,面临非常不同的挑战。 每当您需要与当地行政办公室进行互动时,都需要预约。 这就是问题所在,通常最接近的可用约会日期是一个月,但是如果您很幸运并且有足够的空闲时间整天刷新包含可用约会的页面,则可以在下周获得一个。 但这不是我们的方式,我和我的朋友决定将其自动化。 使用的技术 反应本机 React Native· 使用React构建本机应用程序的框架 使用Reactfacebook.github.io构建本机应用程序的框架 打字稿 TypeScript –可扩展的JavaScript。 TypeScript为您带来了可选的静态类型检查以及最新的ECMAScript功能。 www.typescriptlang.org Redux 自述文件·Redux 如果您来自Flux,则需要了解一个重要的区别。 Redux没有… redux.js.org I18n i18next / react-i18next react-i18next-国际化的反应正确。 使用i18next i18n生态系统。 github.com “ redux-persist”模块 rt2zz / redux-persist redux-persist –坚持并补充redux存储库 github.com 后端API的Node.js(本文未涵盖) 二手平台功能: 推送通知 应用内购买(可续订) 开发环境 React […]

专业的iOS工程YouTube系列

我们非常高兴与您分享我们的新系列专业iOS工程第1季的发布-在Essential Developer的Youtube频道上使用TDD和模块化设计构建Swift应用 。 在Caio和Mike的一对编程系列中,将演示测试驱动开发的原理, 模块化系统的功能以及如何满足未来的需求 。 他们保持可持续的发展周期,并不断思考如何提高效率,同时注意技术优势和良好的设计 。 该系列专为希望将其技能提升到更高水平的专业人士和有抱负的iOS开发人员而创建。 Caio和Mike尝试推理并解释他们做出的大多数决定,并努力为问题提供多种解决方案。 立即订阅我们的Youtube频道, 每周获取免费的新剧集,并在Github上关注该项目的进展。

Swift:常见错误无人问津-宏和指令

您好,我亲爱的开发人员, 我有个故事要告诉你。 从前我很无聊。 那时我像往常一样在课堂上玩耍,用猕猴桃为他们编写测试。 我偶然发现了一个有趣的问题,我真的很想为块模拟,以删除不必要的样板。 可悲的是,没有人开源。 所以我想,为什么不写呢? 具有一些非常有趣的功能的请求不会伤害我或整个社区。 因此,我开始实施代码,并在重构和挖掘运行时库的过程中发现了很多奇怪的事情。 可悲的是,故事并没有很好地结束,因为当我提交请求请求时,维护人员决定停止添加任何具有大型功能的新功能。 而且我就像FFFFFFUUUUUUUUUUUUUUUUUUUU…。因为在接受请求请求之前,我开始在项目中使用该Kiwi功能,这意味着我必须维护并行分支。 我的故事。 那好吧… 尽管如此,在这段旅程中,我发现代码中散布着一件有趣的事情: #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG @尝试{ #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG … #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG } @catch(NSException * exception){ KWSetExceptionFromAcrossInvocationBoundary(exception); } #endif // #if KW_TARGET_HAS_INVOCATION_EXCEPTION_BUG 如果看一看,您会发现它分散在整个代码中,但是它具有清晰的模式。 对我们来说,这意味着应该删除重复数据。 为什么,因为从表面上看,这种黑客不再存在,但是将其从代码库中删除真的很困难,因为代码绝不是孤立的。 而且,从我收集到的信息来看,不再需要这种hack(我不知道它的引入原因,但是在禁用它的情况下测试不会失败,至少看起来像这样,因为我没有进行深入研究) 。 您不应该认为这是针对猕猴桃的怨言,因为事实并非如此。 Kiwi令人敬畏,它的开发人员和维护人员构建了我多年来使用的工具,并且在编写ObjC代码时仍在使用。 阅读完代码后,我决定不想自己碰到此类问题,因此我添加了一条准则,使所有特定于宏的代码隔离。 如果我们将该准则应用于我专门为您编写的错误代码: 这不是唯一迅速解决的具体问题。 它们有很多,甚至没有用#标记。 因此,对于此类代码,更好的措施是至少将其隔离为单独的功能。 但是,这也不是最好的主意。 为什么? 我们在整个代码中具有不同的特定操作,这导致我们遇到#if os(iOS)的相同问题,该问题既重复又难以重构。 因此,更好的方法是使用与注入闭包和隔离此类代码相同的方式进行操作: 您可以在以前的演讲中读到更多有关注射的信息: 没人管的常见错误– Swift扩展 最糟糕的编码方式。 […]

SOLID原则-第1部分

单一责任原则-SRP 因此,“四人帮”在20多年前为OOP设计模式奠定了第一个基础,尽管我认为这已经过时了,但在努力编写简洁的代码时仍然有用。 这个原则规定,一堂课只能做一份工作! 是的,这是单一责任的含义,无需加糖。 “一个类=执行一个操作”简单而愚蠢。 因此,假设我们有一个需要在服务器上 启用 / 禁用或打开 / 关闭 服务的要求,并且我们希望将此原理应用于核心。 我们可以从使用协议抽象表示开始,首先描述业务逻辑应该做什么,如下所示: 本系列文章使用Swift语言介绍了SOLID原理,并附有实际示例,下一部分继续: 第二部分OPEN / CLOSED原理 您还可以在github存储库上找到完整的游乐场 鲍勃·戈德温(@bobgodwinx)| 推特 Bob Godwin(@bobgodwinx)的最新推文。 移动团队首席工程师@dunnhumby Germany GmbH。 @Apple的粉丝… twitter.com