关于配置和启动API服务器的实用指南-完美

有很多方法可以配置和启动Perfect Server。 本指南介绍了用会话 , 路由 , 过滤器和日志记录配置Perfect服务器的最佳实践。 届会 如果我们计划在服务器端Swift上进行会话,则需要在启动服务器之前对其进行配置。 这是我的示例配置,可以根据您的需求进行自定义: 另外,我们需要调用let sessionDriver = SessionMySQLDriver()来配置会话过滤器,并使用purgeInterval来清除停滞的会话。 CORS 为了使您的API与单页面应用程序(react,vue.js或Angular)一起使用,我们需要配置跨域引用共享(CORS) 。 您可以在此处阅读有关CORS的信息: 跨域资源共享(CORS) 跨域资源共享(CORS)是一种使用其他HTTP标头让用户代理获得…的机制。 developer.mozilla.org 以下是CORS配置的工作示例。 启动服务器之前,我们可以在主目录中调用CORS.configure() 。 确保定义了所有自定义的HTTP标头和可接受的主机名,否则将不接受Web客户端使用您的api! 👈 CSRF 跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作。 CSRF攻击专门针对状态更改请求而不是数据盗窃,因为攻击者无法看到对伪造请求的响应。 您可以在此处阅读有关CSRF的信息: 跨站请求伪造(CSRF)– OWASP 跨站请求伪造(CSRF)是一种攻击,迫使最终用户在Web应用程序上执行不需要的操作… www.owasp.org 为了避免CSRF攻击,我们需要配置服务器。 以下是可以根据需要自定义的示例。 我们可以在启动服务器之前在主目录中调用CSRF.configure() 。 模式初始化 由于我们需要会话和数据库连接,因此需要在启动服务器之前对其进行配置。 我们可以将数据库,SMTP,会话等的所有配置都放在JSON并使用它来配置我们的服务器。 我们可以有针对不同环境的配置。 以下示例显示了如何为macOS和Linux不同地配置服务器: 典型的配置文件如下所示: 然后,我们可以像下面这样设置DB , session和SMPT配置: let opts = initSchema(fname) 这还会返回启动服务器时将使用的baseURL , httPort …。 […]

第3部分:安装自定义日志管理器

欢迎使用第3部分:安装自定义日志管理器 如果需要检查第2部分,请继续 。 首先,什么是SwiftyBeaver? SwiftyBeaver是基于Swift的iOS和macOS日志记录框架。 SwiftyBeaver具有不同类型的日志消息,我们还可以过滤日志以使错误检查更加轻松。 它有一个免费的许可计划。 那不是全部。 出站日志信息保存在云中。 SwiftyBeaver带有一个macOS应用程序,可让我们实时查看日志。 SwiftyBeaver日志记录框架可以使用您选择的安装工具安装在每台Apple设备以及Swift 2和Swift 3上 。 对于Swift 3,请安装最新的SwiftyBeaver版本 对于Swift 2,安装SwiftyBeaver 0.7 在第3部分中,我们将为项目配置SwiftyBeaver。 云设置 完成注册SwiftyBeaver首选项菜单后,您将需要生成新的凭据。 File> New SwiftyBeaver保存本地日志文件。 但是我没有必要的信息。 保存的位置并不重要,但是请不要忘记此位置。 单击“ 生成新的应用程序凭据”按钮时,您应该看到我们应用程序的应用程序ID , 应用程序秘密和加密密钥 。 让我们使用AppDelegate定义这些信息。 安装SwiftyBeaver Logging Framework之后,只需在AppDelegate.swift的顶部添加以下3行: 导入SwiftyBeaver 让日志= SwiftyBeaver.self AppDelegate:didFinishLaunchingWithOptions()添加您要在整个应用程序中使用的SwiftyBeaver日志目标(控制台,文件等): //添加日志目标。 至少需要一个! let console = ConsoleDestination()//登录到Xcode控制台 let file = FileDestination()//登录到默认的swiftybeaver.log文件 log.addDestination(控制台) log.addDestination(文件) 要开始记录到平台,您只需要使用您的凭据启动SBPlatformDestination() ,可以选择调整属性,然后将该实例添加到SwiftyBeaver本身。 让平台= […]

为什么我写家庭框架

在Apple平台上构建应用程序时,开箱即用的是模型视图控制器模式。 尽管多年来引起了很多争议,但这种体系结构本身并没有什么坏处。 主要的抱怨是可怕的“ Massive View Controller”,这些年来,它还获得了许多其他同义词,例如哥斯拉控制器,View ConTROLLer,我可以继续说下去。 我分享了很长时间的观点,在其他几个模式中寻找一个穿着闪亮盔甲的骑士。 但是,他们全都走同一条路。 与系统作斗争,直到我迷路了,发现自己回到了Apple为您提供的服务。 看起来一切希望都已荡然无存,Dave DeLong发表了自己的四部分文章系列“更好的MVC”。 更好的MVC,第1部分:问题 “修复”模型视图控制器系列文章的第1部分:修复封装问题修复大规模视图控制器… davedelong.com 使灯泡发光的是第3部分。 我是一个常见的误解的受害者,因为误解是视图控制器需要负责整个屏幕。 一旦我学会了这种“反模式”,生活就变得像一千个太阳的火焰一样明亮。 我开始以不同的方式考虑控制器,并且我接受了子视图控制器。 作为iOS开发人员的生活开始重新变得有意义。 在继续之前,我只想弄清楚本文的目的。 这与流量控制器模式无关。 使用该模式仅暴露了我认为需要修复的情况。 我不认为流量控制器模式是最终的答案。 这是构建模块化,可扩展且可测试的控制器的一种好方法,甚至是一种很好的模式,对于我和我的同事来说,这都是很好的选择。 如果您想更多地了解该模式,则不是本文。 我建议您阅读戴夫的文章。 他解释得比以往任何时候都好。 继续前进,在使用了子视图控制器一段时间之后,我开始看到我的时间花在了哪里,主要是在必须快速适应变化的时候。 更精确地说,构建流量控制器比将多个控制器粘合在一起要麻烦得多。 我想使用Apple提供的所有可用的UI元素来构成我的用户界面,但是当任何需要出队的问题出现时,我很快就感到失望。 必须有更好的方法。 一种不涉及链式约束并且适应变化的方法。 就像过去的爆炸一样,我想到了Spots框架的核心实现,即SpotsScrollView 。 在该类中,我们使用了基于OLEContainerScrollView的Ole Begemanns实现的布局算法。 该算法开放用于在滚动视图内部使用滚动视图,从而为用户创建一致的滚动体验。 我以Spots算法为基础,重新审视了代码,并逐渐对其进行了改进,直到它可以与您喜欢的任何UI元素按预期方式工作,而无需配置单个约束。 在为框架破解公共API时,我希望它尽可能精简。 我的目标是成为一个嵌入式解决方案,使设置子视图控制器变得像馅饼一样容易。 “公共API简洁明了,应该节省很多您想花在其他地方的时间……” 我想出了三种方法,一种用于添加常规子视图控制器,该子视图控制器处理内部调用所有适当的子视图控制器相关方法。 对于需要将控制器(或更确切地说,其视图)限制为特定高度的情况,我又添加了一个。 最后但并非最不重要的一点是,我添加了一个带有闭包的方法来选择与标准UIViewController的视图不同的视图。 这些是当今存在的公共API方法,以与添加视图时相同的线性垂直顺序排列视图,而子视图控制器由框架内部掩盖和处理。 如果视图在任何时间点都应更改,则算法将相应地对视图进行布局。 另外,我实现了对动画的支持,如果通过使用动画将视图的高度设置为零来删除视图,则框架将确定动画的持续时间,并在布置视图的新位置时采用动画。 这样,它尊重用户的意愿,而无需他们做任何额外的工作。 那么关于出队的事情呢,因为该实现植根于Spots框架,该算法已经考虑到了这一点,这意味着您可以自由地混合和匹配集合视图,表视图,堆栈视图,分段控件和常规UIView ‘ s。 Family框架仍处于起步阶段,但是我看到它的前途光明,因为它的责任很轻,公共API简洁明了,应该可以节省很多您想花在其他地方的时间,最好是与人类家庭在一起。 因此,事不宜迟,我给你一个家庭友好的儿童视图控制器框架:家庭。 希望您能像我一样喜欢它! […]

应用程序开发的入门故事

“嘿! 您是否想知道以经验有限的人的身份制作应用程序是什么感觉? 好吧,这个问题很夸张,因为您单击的文章非常抽象。” 为了给本文提供背景信息,我和我的搭档正在为软件产品开发课程制作一个应用程序,目的是学习协作的最佳实践。 我的合伙人在后端工作时,我负责应用程序的移动/客户端。 我们俩都是编程/软件开发的新手,时间表也大相径庭。 规划过程 尽管不仅开发软件而且进行协作工作对我来说都是新的,但我知道计划和研究必要的材料,适当地确定项目范围并为基于开发过程的清晰路线图至关重要。在我们的技能水平上。 遵循这些粗略的准则,我和我的合伙人可以平等地委派任务,以提高开发过程中的个人效率。 在第一周,我们计划在整个学期中定期召开每周会议,并决定在项目的计划过程中花费两个星期。 我们决定花两个星期的时间来计划自己,以便有足够的时间在其他课程上取得领先。 我们在计划过程中能够完成的工作: 为我们域内的应用程序集思广益。 确定了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 。 […]

iOS 11上HEVC编码器的文件大小问题

有关此问题的原因,请参见下面的更新5! … iOS 11备受期待的功能之一是对HEVC(或H.265)编码视频的支持。 HEVC使文件大小从H.264减少了约50%,而不会降低质量。 新的编码器的初始印象在随附的相机应用程序中表现良好,但将视频编解码器设置为HEVC时,AVASsetWriter使用的编码器似乎存在问题。 要查看该问题,请在此处克隆或下载我的Git存储库。 另外,如果您有一个已经使用其他编解码器将帧写入视频的项目,只需将使用的AVVideoCodecKey替换为AVVideoCodecType.hevc(在较早版本的Swift上为AVVideoCodecHEVC),如下所示: 在比较使用HEVC编解码器与H.264进行输出的文件时,我已经看到,使用HEVC进行输出的文件的大小大约是使用H.264进行编码的文件的三倍,而质量似乎是相同的。 我已经向Apple提交了错误,并且在收到他们的来信后会更新此帖子,但是与此同时,如果您需要使用AVFoundation逐帧编写,我建议不要跳入使用HEVC。 更新:此问题在iOS 11.0.1中仍然存在-HEVC编码文件的文件大小仅是H.264编码文件的三倍多。 更新2:在iOS 11.0.2中仍未修复 更新3:在iOS 11.0.3中仍未修复 更新4:在iOS 11.2中仍未修复 更新5:根据Brad Ford的说法,问题是HEVC编码器的默认比特率(30兆位)比H.264编码器的默认高得多(5mit)。 尚不清楚这是为什么,并且从文档中看不出来,但是需要更多细节才能了解哪种比特率可以提供两种不同编码器可比的质量。

成功的iOS应用中常见的5种功能

苹果的App Store是仅次于Google Play商店的第二大移动应用市场。 目前,iOS设备用户可使用220万个应用程序,无论您是销售产品还是服务,商业应用程序市场都在蓬勃发展。 与任何技术产品一样,为了脱颖而出并产生持久影响,新泽西州的任何iOS应用开发公司都经常与企业主紧密合作以整合某些功能。 我们来看一下Apple App Store上成功的移动应用背后的哪些共同因素。 独特身份 当今的移动设备可以达到与其他移动设备相同的目的(例如,在线销售T恤),但之所以会比其他移动设备更受青睐是因为该应用程序为其用户提供了独特的功能。 这可以提供自定义功能,个性化体验,或者简单来说,可以提供更好的用户体验。 促成独特性的一些因素是针对目标受众,应用程序平台和硬件性能的方法。 锐利的设计 在考虑iOS移动应用程序时,您根本无法忽略设计元素。 如今,大多数iPhone和iPad具有出色的分辨率和清晰的显示屏,可增强用户体验。 在这样的目标市场中,设计薄弱,外观不美观的缺陷是一个很大的缺点! 设计很重要,因为它可以给用户留下第一印象,并且通常是导致用户保持对应用程序忠诚度的决定因素。 安全开发 众所周知,与Play商店不同,App Store是一个封闭的市场。 这对于企业主来说意味着什么,只有完全安全且具有最佳开发能力的应用程序才能被接受。 适当的优化,数据安全性,用户权限是确定应用程序开发良好程度时要考虑的一些关键因素。 综合分析 作为想要启动iOS应用程序的企业主,应该意识到可以帮助企业发展和使应用程序在市场上推出后变得更好的功能。 后端分析就是其中一项功能,可以帮助进行商业智能和决策。 当用户与该应用进行交互时,一旦生成模式,它便可以揭示很多内容,因此,分析成为任何成功的移动应用的关键基础。 不断改进 该应用程序在iOS市场上发布后,仍然需要在后端不断进行很多工作。 例如:如果企业主雇用了iOS应用程序开发公司来进行开发工作,则双方都知道,即​​使应用程序上线后,维护,重大修复,新的安全措施等也可能会不时出现!

将图像制作成圆形或圆形的iOS

此示例显示如何制作一个用如下半径四舍五入的UIView或UIImageView: 目标C someImageView.layer.cornerRadius = CGRectGetHeight(someImageView.frame)/ 2; someImageView.clipsToBounds = YES; 迅速 someImageView.layer.cornerRadius = someImageView.frame.height / 2 someImageView.layer.shouldRasterize = true someImageView.clipsToBounds = true 建议如果使用自动布局,则将someImageView.layer.cornerRadius代码放入viewDidLayoutSubviews中。 如果图像更改大小,这将允许更新图像的cornerRadius。 覆盖func viewDidLayoutSubviews(){ super.viewDidLayoutSubviews() someImageView.layer.cornerRadius = someImageView.frame.size.width / 2 someImageView.layer.masksToBounds = true }

Xcode 8.2 Simulator中的新功能

在Xcode 8.2的发行说明中,Apple为其新版本的Xcode引入了功能。 在此博客中,我将解释如何使用这些新功能。 这是Xcode 8.2 Simulator的两个新功能: 您可以使用xcrun Xcode命令行实用工具xcrun Simulator的视频和屏幕截图。 📷要截屏,请运行命令xcrun simctl io booted screenshot 。 📹要拍摄视频,请运行命令xcrun simctl io booted recordVideo . (9887264) 将应用程序拖到“模拟器”窗口中即可安装该应用程序。 (23387069) 捕获 第一个功能是录制视频并拍摄屏幕截图,非常简单。 您可以启动模拟器,在其上运行您的应用,然后可以截屏或开始/停止视频。 此功能非常方便从您的应用程序发送演示视频。 尽管该命令很长,但是却很容易执行! 拖放 第二个功能是将应用程序拖动到“模拟器”窗口中,但并不是那么简单。 至少不适合我😉 我的想法是,当我拥有.ipa格式的应用程序时,只需将其拖到将安装该应用程序的Simulator窗口中即可。 太糟糕了,事实并非如此。 但是苹果的意思是什么? “ 将应用程序拖到模拟器上” ? 因此,我在大型互联网上进行了搜索,并在Twitter上做了一些研究,在那里我收到了Brandon的这条推文。 提出的问题是; 为什么.app在模拟器中可以工作而.ipa不能工作? 这是因为.ipa格式的iOS应用是针对不同于模拟器可在其上运行的架构(ARM)构建的(x86)。 因此,.ipa格式的iOS应用只能安装在物理设备上,而不能在模拟器上运行! 附加:从DerivedData获取应用程序包 现在我们知道了如何将应用程序捆绑包拖放到Simulator上,我也想提供有关该应用程序捆绑包的一些详细信息。 该应用程序包位于DerivedData文件夹中,并在为设备构建项目时进行编译。 此DerivedData文件夹包含所有中间构建信息,调试和发布构建目标以及项目的索引。 模拟器应用程序捆绑包的特定位置可以在这里找到: 〜/库/开发人员/ Xcode / DerivedData / / Build […]

UIStackView:垂直轴肖像,水平轴风景

您是否曾经使用过UIStackView,并认为“ Jeez,此垂直堆栈视图在人像上看起来确实不错,但在风景上看起来像是一场灾难。 如果我能使它在肖像上垂直但在风景上水平……” 好吧,本教程适合您! 😁 如果您只想看技巧,请跳至第2部分! 第1部分仅介绍如何进行设置。 第1部分:设置 从一个名为“ Single View Application”的新项目开始,然后直接跳入Main.storyboard文件。 将UIImageView插入到View Controller的任何位置,添加所需的任何图像。 我选择了柏拉图的图像。 确保将要使用的任何图像都放在项目的Assets目录中,以便该图像显示在“图像选择”中! 2. 在UIImageView下面插入一个标签。 将行数设置为0,并将换行符设置为自动换行。 将行数设置为0允许多行文本。 标签将根据文本的数量占用其需要的任意数量的行。 如果您不知道标签上要显示多少文本,这对动态文本很有用。 将换行设置为自动换行可以使文本在完整的单词处换行。 3. 将UIImageView和Label嵌入到堆栈视图中。 有很多方法可以做到这一点。 在按住Cmd的同时单击图像和标签,然后按底部的堆栈图标。 4. 在堆栈视图上设置约束。 在文档轮廓上选择堆栈视图,然后设置水平和垂直约束。 我选择了:尾随= 5,领先= 5,顶部空格= 20 5. 在堆栈视图上,将“对齐方式”设置为“ 填充” ,将“分布”设置为“ 均等填充”。 将“对齐方式”设置为“ 填充”可使每个项目完全填充垂直于堆栈视图轴的可用空间。 将“分布”设置为“均等填充”可使堆栈视图中的每个项目均等地沿其轴填充空间。 如果需要,请添加一些间距。 我加了3。 6. 在标签上添加一些文本。 好的。 全部设置好了。 😤 第2部分:垂直轴肖像,水平轴风景 要更改堆栈视图在横向上的显示方式,我们需要实现特质变化。 “特征变化”根据设备的配置呈现不同的UI。 在这种情况下,您希望堆栈视图在不同的设备方向(纵向和横向)上看起来有所不同。 在文档大纲上选择堆栈视图后,单击“轴”旁边的“ +”。 […]