Tag: Ios开发

Info.plist本地化

如果您的项目中已经有本地化字符串,但是需要将本地化添加到Info.plist某些键,例如NSCameraUsageDescription或NSLocationAlwaysUsageDescription或NSLocationUsageDescription 。 好吧,只需执行以下步骤,您便会准备就绪。 1.创建InfoPlist.strings 转到“ File->New->File或按Command(⌘)+N并创建一个字符串文件,并将其命名为InfoPlist。 完成后,应具有以下内容: 2.为InfoPlist.strings启用本地化 选择InfoPlist.strings ,按文件检查器面板中的“ Localize…按钮 在按Localize…您应该看到类似以下内容: 这样,您就一切就绪了。 只需添加键(它必须与Info.plist的键相同)及其对应的字符串就可以了。 大多数优秀的程序员进行编程并不是因为他们期望获得报酬或获得公众的赞誉,而是因为编程很有趣。 —莱纳斯·托瓦尔兹 感谢您的阅读,希望您对我的一些想法有所帮助,欢迎您提供任何反馈或意见。 如果您想浪费时间,请在Twitter @guerrix上关注我

了解使用iOS,Xcode 9和Swift的UI测试

Xcode提供了功能齐全的可编写脚本的UI测试框架。 使用该框架的关键是了解其架构以及如何最好地利用其功能。 了解Xcode UI测试 在Xcode中创建新项目时,新项目向导会询问您是否要包含单元测试 ,以及是否要包含UI测试 。 一个人可能会怀疑-UI测试不是单元测试吗? 如果没有,那是什么? 实际上,这些复选框及其结果主要是用来通知Xcode在项目中创建哪些目标的。 选中每个复选框都会在项目中生成不同类型的测试目标。 Xcode 单元测试和Xcode UI测试之间的根本区别: 单元测试用于测试源代码是否产生预期的结果。 例如:确保函数在传递特定参数时会生成某些预期结果。 UI测试测试用户界面是否按预期方式运行。 例如:UI测试可能会以编程方式点击一个按钮,该按钮会自动切换到新屏幕,然后以编程方式检查预期的屏幕是否确实加载并包含预期的内容。 单元测试和UI测试都支持完全自动化,并支持在应用程序生命周期内进行回归测试。 一般而言,Xcode 单元测试将练习并评估您的Swift代码 ,但不检查对用户界面的影响,而Xcode UI测试则评估响应操作的UI行为 ,但不检查您的代码。 与往常一样,这些是带有例外的通用语句。 当然,可以从(代码)单元测试中了解UI,并可以从UI测试中了解代码对象的状态。 但是,这些工具旨在根据此概括性说明使用。 UI测试示例 在检查UI测试的体系结构和实现之前,让我们看一下已完成的操作测试。 此测试的用户故事如下: 在第一个屏幕上,用户可以在表格视图中选择一个单元格,这将打开第二个表格,在标签中显示所选值。 然后,用户可以在原始标签下方的文本框中键入新值。 当用户随后返回第一个表单时,新值将显示在“表视图”中。 如果质量检查测试人员要手动检查此过程,则会执行以下顺序: 启动应用 连续点击 加载时观察表格视图行文本在第二个窗体上 在文本字段中输入新值 按下后退按钮 观察他们键入的值已替换表格视图中的原始文本 手动测试过程如下所示(这是一个动画的.gif-如果使用Medium应用程序,则可能需要在浏览器中打开此页面才能查看动画)。 如果我们可以自动化该过程,这样我们的QA测试人员就不必在每个版本之前都手动重复此过程,那不是很好吗? 这正是UI测试的目的所在-我们将逐步介绍如何使该测试过程自动化! UI测试架构 在深入研究代码之前,了解Xcode UI Test框架的工作方式非常重要。 通过了解UI测试如何访问和操纵UI组件,您将能够使您的UI易于构建测试。 与单元测试 (使用源代码的单元测试一样),XCode使用XCTest来运行UI测试。 但是XCTest代码如何知道如何检查和操作在Storyboard和/或Swift代码中设计的UI? 为了在运行时访问您的UI,XCTest使用iOS Accessibility公开的元数据。 例如,这与使iOS能够向盲人和弱视用户读取屏幕的技术相同。 在运行时,XCTest遍历您的UI控件,查找可访问性属性(例如accessibilityIdentifier和accessibilityLabel以查找您希望XCTest在UI测试中进行点击,更改或检查的UI组件。 […]

iOS应用开发过程的9大准则

iOS是两个主要的移动操作系统之一,因此在构建应用程序时几乎不可避免。 但是与Android不同,iOS拥有更严格的规则。 以下是一些指南,可帮助您进行iOS应用开发过程 。 iOS应用开发过程的9大准则: 1)规划并勾勒出您的想法:首先,您需要进行规划,您的应用程序将是什么,为什么人们会选择您的应用程序? 如果这些操作正确,则可以节省大量时间和混乱。 在项目经理的指导下完善您的想法并草拟技术特定的文档。 2)研究:找出是否有与您相同的其他应用,研究设计,找到有关技术要求的信息,最后找到如何营销您的应用并从中获利。 3)创建线框:线框是UX(用户体验)路线图,显示用户选项,并且还包含信息体系结构蓝图。 4)设计:要创建吸引人的视觉设计,必不可少的是直观的UI(用户界面)和引人入胜的UX(用户体验) 。 在开发的这一部分,设计师需要处理屏幕功能(图标,图形,动画),并为开发团队生成设计原型。 5)软件体系结构规划:在此阶段,前端和后端开发人员将进行协作,这与开发过程之前的设计阶段并行进行,以确保软件对于应用程序是否稳定和可扩展。 •模型视图控制器范例(MVC)是iOS应用开发的核心原则,分为3个组件:用户界面,数据和软件 6)前端和后端开发:该应用程序的前端和后端开发都是协调一致的。 当前端进行代码开发以为应用程序创建不同的设计元素时,后端开发指的是服务器部分,该部分专注于应用程序的工作方式。 前端应用程序开发包括: •数据库缓存 •同步数据库 •开发模型和线框 •UI设计与开发 •根据需要进行改进 •测试 •部署 后端开发包括: •设置后端结构 •用户帐户和身份验证的管理 •维护服务器端功能 •定制用户体验 •通过社交网站与第三方进行数据集成 •推送通知服务 7)测试阶段:由于Apple的批准和提交过程比较困难,因此这一部分至关重要。 在这里,开发人员逐个屏幕地浏览以下功能,以确保没有错误,并且应用程序可以正常运行: •测试用例准备 •脚本自动识别和修改 •手动和自动测试 •可用性测试 • 性能测试 •安全和合规性测试 •设备测试 8)将应用程序提交到App Store:要在App Store中发布应用程序并不容易,因为它需要一些步骤: •创建应用程序ID或标识符 •创建用于分发的iOS供应配置文件 •在Xcode中配置目标的构建设置 •创建应用商店列表 •创建发布版本 •填写版本信息 •提交版本以供审核 •应用发布 9)维护应用程序的定期更新:完成应用程序后,请密切注意定期更新,以确保您的应用程序支持所有最新的iOS更新和开发。 从最初的构想到完成,这是一条很长的路要走,但是规划每个步骤都可以增加成功的机会!

在Xcode Playground中使用CoreData

Xcode Playground是一个功能强大的工具,可以测试您的Swift代码并编写整个框架。 它使您能够实时检查代码结果并进行快速更改。 Apple Swift 4游乐场提供了练习使用的示例,您可以在其中查看使用这种可爱语言编写的新内容。 在应用程序中开发Core Data时,您可能会考虑数据流并尝试构建一些数据堆栈,这可能会在不久的将来缩短您的开发时间。 您可以在Xcode游乐场中完成所有这些操作,但是有一些限制。 首先也是最重要的一点是,您不能在操场上使用NSManagedObject子类,而必须使用KVO对Core Data实体执行操作。 您必须记住的第二件事是,每次更新数据模型时,也需要更新游乐场资源。 让我们从向项目添加数据模型开始: 现在用一些行填充模型: 保存并构建应用程序。 下一步是将Playground添加到您的Xcode项目中,无论如何我还是更喜欢这样做,因为我认为这是测试服务调用,模型初始化等的理想场所。 如果您的项目中已经有Playground,请在Xcode树中打开“产品”文件夹,右键单击.app文件,然后单击“在Finder中显示”。 接下来,右键单击打包文件,然后单击“显示打包内容”。 之后,将.momd文件移动到Playground Resources文件夹 就是这样! now您现在可以在操场上使用数据模型! 重要说明:如前所述,如果您更改数据模型,则需要再次执行此步骤,只需更新Playground Resources中的.momd文件即可。 最后,将以下代码添加到操场上并开始播放! 👌🏽 结论 如您所见,在Playground中使用Core Data很简单,但是您必须牢记此解决方案的限制。 无论如何,从现在开始,您已经分离了“沙盒”以通过实时预览快速构建和测试数据堆栈! 😋另外,您可以基于真实的应用程序模型测试查询和其他操作,而不会影响主数据模型! 谢谢阅读! 😁

蒸气3 Udemy课程!!

我真的很高兴宣布发布我的新课程“ 使用蒸气3掌握服务器端Swift ”。 Swift是在WWDC 2014上宣布的,它席卷了整个世界。 除了编写iOS,Mac,Apple Watch和Apple TV应用程序外,您还可以使用Swift语言编写完整的后端。 在本课程中,您将学习如何使用Vapor 3框架将现有的Swift技能带到云中。 您只需9.99美元即可获得完整的课程。 让我们检查一下课程内容: 了解路线 在本节中,您将学习有关路线的所有信息。 这包括将参数传递到路由以及查询字符串。 我还将解释如何使用分组和嵌套路由来清晰地构建路由。 JSON格式 Vapor 3使获取和发布JSON值变得非常容易。 在本节中,您将学习如何使用Vapor框架中定义的帮助程序协议将自定义类转换为JSON表示形式。 期货 蒸气3与蒸气1和蒸气2框架完全不同。 在本节中,您将学习期货。 期货允许执行异步响应,从而使您的服务器可以立即返回响应。 SQL Fluent提供程序 在本部分中,您将学习如何将Vapor 3应用程序与SQLite3数据库集成。 我正在演示如何使用SQL Fluent Provider从数据库中获取数据。 从数据库返回的数据/记录将作为JSON响应发送给用户。 控制器 在本节中,您将学习如何通过实现Controller更好地组织代码。 控制器充当视图和模型之间的中间人。 开发大型应用程序时,控制器变得至关重要。 将Vapor Web API与iPhone应用程序集成 在本部分中,您将把Web API与iPhone应用程序集成。 这将包括通过iPhone应用程序创建新记录,获取记录,过滤和删除记录。 我真的希望您喜欢这门课程! 我已经开始研究本课程的未来更新。 非常感谢您的评分和评价。 谢谢,喜欢这个课程, Azam

我2018年最好的第三方iOS库

在过去的几个月中,我接受了挑战,将我的理论ios技能付诸实践。 我们有一个仅在Android平台上存在的应用程序,我们需要创建一个iOS应用程序,以便迎合使用iOS设备的客户。 与往常一样,在构建应用程序时,使用由其他开发人员构建,尝试和测试的第三方库是有意义的。 Github是我发现iOS很棒的开源库的最佳去处。 不要重新发明轮子,只需重新调整轮子即可。 —安东尼·安格洛 因为我不想重新发明轮子,所以我决定使用一些第3方库。 与我决定自己编写其中一些库相比,这减少了我的开发时间,并可能节省了一些调试时间(是,几天days)。 以下是一些帮助我构建iOS应用程序的库: Alamofire 大多数移动应用程序都与后端服务进行通信,而我们的服务也不例外。 我发现Alamofire是一个易于使用的Swift网络库。 感觉就像是iOS开发生态系统的翻新。 我还能够快速将插件功能添加到库中,因为其他开发人员已经构建了与Alamofire交互的出色库。 一些示例包括:AlamofireLogger和AlamofireJsonToObjects。 图表 Android开发人员熟悉MPAndroidChart。 该库与iOS / tvOS / OS X平台的Swift等效。 使用此库可以轻松创建精美的图表/图形。 我还喜欢每种图表类型的示例项目都易于理解和定制。 Firebase库 Firebase附带了许多可用于构建应用程序的库。 我主要使用性能库,Crashlytics和Firebase消息传递。 性能库有助于跟踪网络通话和屏幕渲染的质量。 Crashlytics可帮助您确定应用中的问题(严重和非严重错误)。 它有一个漂亮的仪表板,显示了相关信息,可以帮助修复开发人员来解决问题。 Firebase Messaging用于处理我们应用中的推送通知。 IQKeyboardManager 来自Android世界。 我真的不认为我会为软件键盘而烦恼,所以我很惊讶iOS默认键盘上没有简单的手势。 这样的图书馆让我很高兴。 使用IQKeyboardManger,我不必编写代码就可以在完成TextField编辑后关闭键盘,也不必编写代码以移至表单中的下一个字段,也不必编写其他代码来确保虚拟键盘不会显示时覆盖一个字段。 最好的部分是,我不必为此输入太多代码。 我刚刚添加了库和一行代码,所有这些开始工作。 SwiftValidator 只要您的应用程序中有像TextField这样的开放式字段,输入验证就很重要。 我使用SwiftValidator是因为它易于设置和使用。 当我开始使用该库时,有20条预定义的规则。 规则用于确保只有遵循验证规则,才能将TextField中的文本视为有效。 可可豆 不,这不是图书馆。 它是Swift的依赖项管理器。 我也必须潜入,因为它也很重要😉。 这就像Android世界的gradle 。 它帮助我简化了添加这些第三方库的过程。 如果不使用此依赖项管理器,则需要将依赖项(框架)作为嵌入式二进制文件添加到我的项目中,与使用CocoaPods相比,这不是一个简单的过程。 感谢您的阅读,并请让我了解其他可以简化iOS开发的开源库。 干杯👋🏻。

Swift 4中的iOS UIKit:将MenuItem添加到UIMenuController

预习 资源 项目 https://github.com/calmone/iOS-UIKit-component 参考 UIMenuController https://developer.apple.com/reference/uikit/uimenucontroller UIMenuItem https://developer.apple.com/reference/uikit/uimenuitem 快乐编码😄

有抱负的iOS开发人员的最佳资源和做法

iOS开发社区中大量的内容和资源,使该专业成为想要从事计算机科学职业或业余爱好的初学者最容易,最热情的方式。 唯一的问题是,您从哪里开始? 作为一个自学成才的开发人员,我的经验可以用我正在使用的资源来帮助回答这个问题,而我遵循的一些最佳实践也使我在软件开发中日趋成熟。 学习资源 AppCoda AppCoda是iOS开发人员共享与iOS开发相关的任何内容的教程和分步说明的媒介。 文章的范围从简单的技巧(例如如何自定义导航栏)到与iOS相关的机器学习主题。 我从该站点中学到了一些主题,包括如何开始使用CoreML,如何生成自己的CoreML模型以及如何使用ARKit。 浏览其库时,请注意发布日期(阅读文章时总是如此),因为某些文章可能由于Swift和iOS中的更新而过时了。 除此之外,他们的图书馆还可以为来自不同水平的读者提供服务。 这使我向很多人推荐了这个网站。 在这里查看网站 迅捷黑客 HackingWithSwift由Paul Hudson撰写; 是iOS开发者社区中受人尊敬的人物。 他的内容涵盖了从Swift示例的片段,逐步教程到初学者到高级的书籍。 我在该网站上最喜欢的部分是Swift实例部分,在这里我用它代替了Apples官方文档,因为它简单易懂,并且对初学者友好。 话虽如此,我会推荐给任何人,尤其是在您从事iOS开发工作的初期。 在这里查看网站 LetsBuildThatApp LetsBuildThatApp是Brian Vong拥有的YouTube频道。 在这里,您将获得从创建特定功能,基本编程主题到从头开始构建整个应用程序的深入教程。 我的许多开发习惯在很大程度上受Brian编码风格的影响。 这也是我第一次学习Firebase数据库并以编程方式开发用户界面的地方。 尽管他提供了大量有价值的内容,但是他的视频对于我的注意力范围来说太长了,并且确实需要很多患者。 他还无需使用情节提要就可以用代码教授一切。 我可以想象的图像会吓到许多初学者。 但是,如果您花时间至少阅读了他的教程中有关构建整个应用程序的系列教程之一,那么您应该能够更快地快速观看他的其他视频。 话虽如此,我强烈建议对至少对Swift编程语言和UIKit基本原理有一些基本了解的开发人员推荐该渠道。 在这里查看他的频道 肖恩·艾伦 YouTube上的肖恩·艾伦(Sean Allen)带领您踏上iOS工程师的旅程,其独特的各种内容可以为观众提供大部分(即使不是全部)水平的体验。 从撰写本文之时起,Sean便推出了初学者内容,我强烈建议每个初学者都应该看一下。 他的较早视频包括iOS面试挑战,基本的iOS概念以及职业建议。 他还主持每周举办的Swift News,负责组织与iOS开发相关的主题,以使社区了解行业变化,发现和独特的想法。 如果您是一位经验丰富的开发人员,您将了解这将带给您的价值。 与我在清单中提到的其他人相比,他的教学风格也非常独特。 他快速而直截了当,同时有效地解释了该主题的所有重要细节。 话虽如此,如果您与我拥有相同的学习方式(注意力集中时间短,喜欢事物快​​速而又快速),那么这就是您的正确渠道。 如果您是经验丰富的开发人员,Swift News就是一颗宝石! 在这里查看他的频道 布莱恩·安文特(Brian Advent) 到目前为止,Brian Advent的YouTube频道是我最喜欢的iOS学习频道。 他谈到了其他渠道通常不教的话题,例如创建手写识别应用程序,使用SceneKit构建3D游戏,如何使用RxSwift,测试Beta技术(如ARKit 2)等。 他还推出了设计开发教程,这本身就是一项单独的技能。 我看到许多有抱负的开发人员会将他们的重点从应用程序开发转向应用程序设计。 感觉比应用程序开发容易。 […]

iOS中的MVC方法

MVC是一种将代码分为三个不同部分的体系结构模式。 模型视图控制器。 这是一种流行的体系结构,因为它将用户界面代码与逻辑代码分开。 因此,可以更轻松地在错误发生时进行更新,扩展和查找错误。 三个不同部分的简要概述。 模型 -模型是处理大多数逻辑和数据过程的地方。 视图 -您的UI元素将位于此类内。 由于它不包含任何逻辑,因此也称为伪类。 控制器 -这是模型和视图之间进行交互的地方。 控制器管理这些交集。 在iOS开发中,将所有代码编写在ViewController可能是诱人的; 实际上,如果您是一个自学成才的开发人员,您可能会实践过。 在本文中,我将演示如何在应用程序的简单注册功能上执行此操作。 我喜欢以编程方式执行此操作。 因此,如果您关注以下内容,请删除Storyboard文件,并确保在项目设置中将“ Main Interface选择保留为空白,并在AppDelegate.swift初始化rootViewController 设定 我将创建三个文件: Register RegisterView和MainController 。 我们的Register类将充当我们的模型,其中将包含我们的所有逻辑。 RegisterView将充当我们的View,并将包含我们的所有用户界面元素,并且MainController将托管RegisterView 。 注册—模型 在本课程中,我们将使用用户名和密码。 我们想对密码的格式化方式添加一些限制。 首先,我希望密码长度至少为6个字符,并且在继续操作之前,密码和确认密码必须相同。 我们没有使用数据库来保存任何信息。 首先,让我们设置初始化程序,该初始化程序将使用用户名,密码和确认密码。 在那之后,我想要三个功能。 validatePasswordLength() validatePasswordAndConfirmPassword() completeRegistration() validatePasswordLength()少于5个字符时将引发错误。 如果validatePasswordAndConfirmPassword()不相等,也会抛出错误。 completeRegistration()函数将在try块中同时调用validatePasswordLength()和validatePasswordAndConfirmPassword()函数。 因为我们正在使用try块进行错误处理,所以我们需要一个enum不同的错误。 枚举验证:错误{ 案例密码太短 案例密码 } 完成后 您的代码应如下所示: RegisterView —查看 如前所述,此类将包含我们的UI元素。 对于此注册页面,我们想向用户询问用户名和密码。 我们还希望另一个密码字段来确认密码。 因此,我们总共需要三个UITextField。 我们还需要一个按钮来执行注册操作。 […]

在Swift上编写函数

简要回顾概念 当我们谈论功能的组成时,我们采用的是两个功能,其中一个的输出值是另一个的输入值。 他们都必须等待一个参数(这将是复合函数的输入),也就是说,它们没有被完全应用。 (此过程称为部分申请) (雾)(x)= f(g(x)) 在谈论部分应用程序时,特别是在讨论部分应用程序功能时:如果传递的参数少于期望的接收数量,则该函数将返回一个新函数,该函数将等待其余参数。 f(x,y,z):w / f(x,y)->(g(z)-> w) 没有另外的基本概念,局部应用就不可能存在。 咖喱化是将等待几个参数的函数转换为一系列接受一个参数并返回等待下一个参数的函数的过程。 考虑到这一点,部分应用是计算直到特定参数N的过程。 f(x,y,z):w / f(x)->(g(y)->(h(z)-> w)) (我没有使用数学符号,尽管这样做是正确的,因为这些概念属于数学。 所有这些概念在这里都有更好的解释,以及如何在Swift中应用。