Tag: iOS App开发

为什么要对Fastlane使用连续部署?

作为iOS开发人员,您担负着许多职责,例如编码,为不同环境创建证书和临时证书,创建开发和发行版本,生成用于应用商店部署的屏幕截图,在发布应用之前将必需的元数据添加到应用商店并将其上传到应用商店。 因此,除了实际的开发之外,还有很多杂项任务需要照顾。 而且您必须每次都执行它们。 您想花时间做有意义的事情,这就是Fastlane出现的地方。 Fastlane自动执行这些琐碎的任务,这些任务是使用少量命令来部署构建所必需的。 是的,这是对的。 Fastlane几乎可以处理为不同环境创建证书和临时证书,创建开发和发行版本,生成用于应用程序商店部署的屏幕截图,将必需的元数据添加到应用程序商店以及将应用程序上载到应用程序商店的所有操作。 就这么简单! 您只需要设置Fastlane即可,所需的工具和少量命令集将为您完成所有工作。 Fastlane提供了各种工具来自动执行这些任务。 您可以根据需要使用这些工具。 但是在那之前 如何为您的新/现有项目设置Fastlane? 打开终端并使用以下命令导航到您的项目路径,然后按Enter。 cd ~/your project path 输入以下命令,然后按Enter。 fastlane init 将Fastlane添加到项目后,它将具有Fastlane文件夹,其中应包含以下所示的文件。 在这里, Appfile存储应用程序标识符和您的Apple ID。 Fastfile管理您创建的调用某些操作的通道。 通过Deliverfile ,您可以在将应用程序提交到App Store时添加所需的元数据。 泳道基本上是一个动作项目,按照您的指令和所需顺序执行某些任务。 您可以创建多个通道及其关联的任务。 完成后,您可以呼叫任何特定的车道以执行其任务。 这是Fastlane的工具列表。 cert:自动创建和维护iOS代码签名证书。 这将确保您在本地计算机上安装了有效的证书及其私钥。 要使用此工具,请运行命令fastlane cert 。 仅当需要创建新证书时, 证书将 –创建一个新的私钥 –创建一个新的签名请求 –生成,下载和安装证书 –将所有生成的文件导入您的钥匙串 请注意 cert将永远不会撤销您现有的证书。 如果您无法再创建任何证书,则cert会引发异常,这意味着您必须撤消其中一个现有证书才能为新证书腾出空间。 感叹:因为您宁愿花时间在建物上,也不愿与资源调配作斗争。 是的 它可以创建,更新,下载和修复供应配置文件(使用一个命令)。 它支持App Store,Ad Hoc,Development或Enterprise配置文件,并支持一些不错的功能,例如自动添加所有测试设备。 叹息将确保您在本地安装了与已安装的证书匹配的有效配置文件。 要使用此工具,请运行以下命令 […]

XCode iOS版新游戏-第1部分

Pre guntas porque en los视频教程,没有重要的解释性的los复选框,opciones y otras cosas que aparecen al inicio de un proyecto en Xcode… Muchas veces cuando iniciaba在Xcode上使用了程序化的iOS应用程序,并在comenzaban con algo como上播放了视频教程: “ Iniciamos el proyecto pulsando 创建一个新的Xcode 项目,seleccionamos Single View Application ,ponemos x nombre yces 连续式”我的预告片是“¿? “ Bien empecemos por laprima vista al abrir Xcode y si no conoces parkaún,descubrirásla mina de […]

在iOS 10.3:小版本中自定义应用程序图标。 大功能!

多年来,iOS开发人员(包括我自己)一直希望能够自定义应用程序图标。 但是整个iOS生态系统(以及后来的Clock)中只有一个应用程序可以实现:Calendar-本地Apple应用程序,使用当前日期更新其图标。 这个看似很小但看似复杂的功能(需要4个API)开辟了许多可能性! 这里只是几个: 利用多租户模型的企业应用程序; 为每个客户提供他们自己的自定义品牌的应用程序图标。 利用免费增值模式的应用; 当用户购买完整版本时,请从图标中删除“精简版”。 让用户选择他们支持的团队作为其应用程序图标; MLB应用程序可以提高用户参与度,并提供新颖的应用程序体验。 让我们以MLB At Bat应用程序为例,说明自定义应用程序图标的过程。 打开应用程序,点击设置,然后点击“设置主屏幕图标”。点击您最喜欢的团队,您就完成了。 就这么简单。 从安全角度来看,我敢肯定苹果公司不愿意启用此功能,因为它可能会误导用户或给非技术精明的人造成混乱或问题。 但是,苹果公司最终解决该问题的方式非常简单。 无论更改是由手动用户选择还是由自动配置驱动,都会显示一个弹出窗口(如上所示)以请求用户验证。 如果要利用此功能,开发人员要考虑的唯一警告是,必须在Info.plist文件中包括资产和条目才能使其正常工作。 这意味着您将无法即时更改图标; 图标在提交到AppStore之前必须预先包装在IPA中。

如何在可编码协议中使用Swift 5结果

我已经写过有关Alamofire API管理器的文章,但是有了新的Swift 5 Result功能,我想对其进行一些升级。 我们将它与Codable协议一起使用,使我们的生活更加轻松。 如果您不是Alamofire粉丝,则可以将其删除。 但是,结合Codable和Result的原理,您应该尝试在网络处理程序中实现。 这个想法是建立一个可重用和直接的API管理器。 我们必须使用单一职责原则创建一些帮助程序类-ErrorObject,EndpointType,EndpointItem,NetworkEnvironment。 我现在不会解决这些问题,因为您在这里。 API管理器 我们的APIManager使用EndpointItem对象创建URL请求。 同样,它解析数据。 使用Codable时,解析是一项简单的任务。 因此,代表数据模型的所有结构和类都应实现Decodable和Encodable协议。 我们使用通用参数T,其中T是可编码的。 T通知APIManager我们正在获取哪种数据以及希望管理器返回哪种类型的对象。 T可以是实现“可解码”和“可编码”协议的任何对象或对象数组。 处理程序需要Result类型。 因此,Result的第一个参数是通用参数T,第二个是错误对象。 我们使用Swift.Result表示法,因为Alamofire也有其Result对象,并且我们需要指定要使用的对象。 APIManager —带有Swift 5结果的通用方法 收到响应后,APIManager尝试解码数据。 如果成功,他将退还。 在其他情况下,它将返回AlertMessage对象。 值得一提的是,Result对象的第二个参数必须符合Error协议。 我们需要扩展AlertMessage对象。 AlertMessage —错误对象 在APIDemoViewModel中,我们使用API​​Manager的方法。 在这里,我们指定要获取的结构,以便将数据解码为适当的对象。 APIDemoViewModel-实现的APIManager通用方法 好处 如果将APIManager与Results和没有结果进行比较,则主要优点是我们不再具有可选参数,并且可以使用强类型引用。 这意味着我们的代码更直接,更容易读写。 结果错误也很重要,因为它们是强类型的,我们可以创建自定义错误,使它们适合我们的项目。 只是不要忘记它需要符合Swift的Error类型。 现在我们确定我们将获得成功或失败,不可能两者皆有或两者皆有。 没有Swift 5结果的APIManager旧版本 结论 我们将Swift 5结果和Codable协议结合在一起,使我们的代码更清洁,更高效。 这是一个简单的代码示例。 如果您有任何问题或建议,请随时发表评论。 资源资源 示范项目 Alamofire Api Manager-原始帖子

AppCode和单元测试

由于不稳定,XCode的质量每天都在下降。 这些天,我正在尝试AppCode,感觉好多了。 但是对于一直使用XCode的人来说,几乎不可能迁移到AppCode,因为它看起来或感觉上都不像XCode。 在我的职业生涯中,我曾从事过各种IDE的工作,从Visual Studio,PhpStorm,PyCharm,Android Studio,Eclipse,最后是用于iOS开发的XCode。 在XCode中,即使重新启动计算机后,XCode中的小菱形测试按钮也会消失并且永远不会显示,更不用说重新启动XCode了。 有没有想过为什么? 查看我的这篇博客文章,以找回它们。 这就是为什么我想尝试用于iOS开发的新IDE的原因之一,而我在这里使用AppCode。 与XCode不同,AppCode并未配置其他目标。 我们将必须手动配置它们。 请按照以下步骤操作,您将一路顺风。 从“选择运行/调试配置”菜单中单击“编辑配置”。 在打开的窗口中,单击左上角的“ +”,将弹出上面显示的菜单。 选择XCTest / Kiwi选项。 在“名称”字段中为测试目标命名。 如果要测试类或方法,只需为“测试种类”选择“类/方法”。在“类”字段中,可以将其保留为空白以测试测试目标中的所有类,也可以测试特定的类。 键入测试类的名称后,“方法”下拉菜单将显示该特定类中的所有测试,您甚至可以选择测试一个类的单个方法。 这提供了非常好的灵活性。 将“目标”设置为项目中的测试目标。 单击“应用”。现在,您将在“选择运行/调试配置”下拉菜单中看到测试目标的配置。 选择测试目标和设备,然后单击“运行”按钮。 瞧! 您的测试将开始运行。 撰写本文时使用的AppCode版本为2016.1.2。

Swift S中的信号量之美

在这个故事中,我们将执行以下操作 : 了解什么是信号量 了解信号量如何工作 实施并解释2个示例 开始吧 信号量使我们能够控制多个线程对共享资源的访问。 为了简单起见,让我们考虑以下现实情况: 一位父亲和三个孩子坐在家里,然后掏出iPad … 孩子2 :我想玩iPad !!! 小孩1 :不!,我想先玩… 孩子3 :Ipad! iPad! iPad! *掌声* 父亲 :好的,孩子2,因为您首先问过,并且目前没有人使用iPad,请拿走它,但是一旦完成,请告诉我。 其他孩子,请耐心等待。 孩子2: (5分钟后)我做完父亲了。 父亲:孩子1,有iPad,请在完成后告诉我。 孩子1: (5分钟后)我做父亲了。 父亲:孩子3,有iPad,请在完成后告诉我。 孩子3: (5分钟后)我做完父亲了。 在上述方案中,父亲是信号量,iPad是共享资源,孩子是线程。 注意父亲如何确保一次只有一个孩子使用iPad。 如果将此与编程进行比较,则一次只能有一个线程访问共享资源。 另外,请注意使用顺序,首先询问的是谁(FIFO)。 提示 :共享资源可以表示变量,也可以表示工作,例如从url下载图像,从数据库读取等等。 如果父亲只是把iPad给孩子们怎么办? 飞机飞行到可能损坏的iPad😖的地步。 如果将其与编程进行比较,则多个线程会尝试同时访问同一资源,并且没有任何阻止。 这种行为可能导致争用情况,崩溃,并且显然,我们的代码将不是线程安全的。 线程安全:可以从多个线程安全地调用而不会引起任何问题的代码。

iOSND新闻:核心数据更新

iOSND核心数据课程更新为Swift 4 我很高兴代表整个iOS开发人员纳米学位计划团队,宣布我们核心数据课程的全新版本! 对于任何成功的iOS开发人员而言,核心数据都是一项基本技能,并且本课程将教授所有最佳实践和最新功能。 如果您有一些用Swift编写基于表视图的应用程序的经验,并且对构建可创建或使用内容的应用程序感到兴奋,并且不想让数据管理使您变慢,那么这就是您的选择。 我是第一手知道的,因为我在自己的开发者旅程中发现了Core Data的优点。 我第一次开始学习Core Data,当时正准备参加我的第一次黑客马拉松。 距离我们还有几周的路程,但是我已经知道我想要构建什么应用程序。 这将是一个可视化的日程表应用程序,可以帮助有特殊需要的家庭管理日常工作。 我之所以开发此应用程序感到很兴奋,因为当时我使用了来自职业治疗师的夹层卡片纸和魔术贴工具,很难携带。 我梦想着在手机中将其作为应用程序使用。 当我思考了技能之后,我将需要构建应用程序-设计用户界面,使用收藏集-我意识到我遇到了很大的障碍。 我不知道如何保存应用程序的数据。 我非常确定我可以招募队友在UI方面提供帮助,但是我认为我不能指望找到一个了解iOS持久性的人。 我本人必须自己学习。 老实说,我对使用关系数据库的前景并不感到兴奋。 我早在几年前的Web编程课程中就遇到了它们,而管理表和唯一标识符的细节并不能完全吸引我的兴趣。 因此,我很不高兴地在Core Data上寻找了资源,我听说这是Apple处理持久性的方法。 我找到了我能找到的最平易近人的教程(这是在Objective-C时代开始的),并适应了我所期望的一周无聊的后端工作。 令我惊讶的是,那一周充满了变革和活力。 事实证明,Core Data根本不需要我直接与关系数据库交互! 我了解到,Core Data 管理着数据层 ,使开发人员可以与基础存储区交互,而不必担心其实现细节。 毕竟,我不必成为数据库管理员即可编写我的应用程序! 长话短说,我参加了这次黑客马拉松,与一名设计师和一个UI开发人员合作,亲自编写了数据层和持久性,我们获得了第一名。 感谢核心数据! 从那时起,我一直是Core Data的热情拥护者和老师,是为iOS应用程序开发人员学习的一项非常有用的技能。 因此,您可以想象我很高兴地宣布,今天我们为iOS开发人员Nanodegree计划推出了完全更新的Core Data课程。 我与Udacity iOS工程师Josh Svatek合作构建了本课程。 我们的过程是首先重写现有示例应用程序的代码库,以使用WWDC的最佳实践和最新功能,然后根据该经验构建和编写课程。 我们还试图平衡大多数Core Data文档的大量文本内容。 一开始可能会造成混淆的一件事是使用了许多名称相似的类: NSManagedObjectContext , NSManagedObjectModel , NSPersistentStoreCoordinator , NSPersistentContainer 。 我们决心通过使它们栩栩如生的动画帮助初学者更轻松地区分它们。 我们很高兴与您分享本课程,以帮助那些像过去一样对开发应用感到兴奋的开发人员,并决心不让数据管理成为障碍。 新课程现已作为iOS开发人员纳米学位计划的一部分提供,该课程使您可以访问经过代码审查的项目,并获得个性化的支持和进度反馈。 您还可以在免费版的iOS持久性和核心数据课程中查看新的核心数据课程。

面向对象的校长—普通英语

这篇文章讨论了面向对象的原始概念。 在编写代码时,您知道如何将方法声明为私有方法,或者如何从类中进行子类化,而在这里,我尝试用通俗的英语解释这些概念。 这是对每种情况的简单合理解释,以防您想将其解释为六岁的孩子: 遗产: 继承允许我们从类中继承子类。 在面向对象的编程中,类都是层次结构的所有成员,并且只有在继承的帮助下才有可能。 子类从父类继承方法和属性。 这使开发人员可以轻松地重用代码。 抽象: 抽象意味着表示基本功能而不包括实现。 这意味着什么? 抽象是根据事物在继承层次结构中的位置,用更简单的术语(抽象的细节)描述事物的概念或范例。 它有助于表示基本功能,而不必担心实现。 在最抽象的级别上,没有实现细节。 最抽象的概念位于顶部,更具体的思想位于底部。 该图表示抽象概念的一般概念: 接口是一组没有实现的方法。 抽象类包含抽象方法和具体方法,它们必须被继承。 封装形式: 封装用于定义,隐藏和限制访问以外的属性和方法。 它可以防止不必要地访问方法和属性(类是封装数据的容器)。 该访问仅在需要时可用,这由访问修饰符处理: 公开:可从任何地方访问 受保护的:可在相同的包和子类中访问 默认值(无说明符):包内可访问的表格 私有:仅可在同一类中访问,子类不可见 Swift中的访问修饰符可以是一个示例。 多态性: 多态性使我们可以定义在父类中已经声明的方法(在子类中)。 通常有两种类型的多态性: 编译时多态或重载: 您可以定义多个具有相同名称的方法,唯一的区别是方法签名。 运行时多态或覆盖: 您可以使用与父类(或已实现的接口)相同的名称和签名来定义方法。 这使我们能够定义特定于特定子类的方法。

编码无限的世界

这位大学新生如何改变比赛 对于莎伦·林而言,STEM始终融入她的生活。 “在小学和中学,我喜欢科学和数学竞赛。”对于某些孩子来说,这可能很乏味,但是她发现它很有趣,可以满足她的好奇心。 “参加这些比赛的学习经常涉及有趣的实验或做一些项目,从中我们可以了解关于我们世界的不可思议的现象,从天空色彩背后的光学原理到导致皮肤晒黑的机理。” 她最初在高中时就沉浸在黑客马拉松的世界中。 “在我大二的时候,我有机会参加了UNC Chapel Hill举办的黑客马拉松赛Pearl Hacks。 在开发了一款证明避孕药重要性的iOS游戏之后,我被迷上了。”这种经历促使她在她所在的学校Stuyvesant高中开始了一次黑客马拉松。 她说, “我知道我必须将这种精力和兴奋带回到我的学校。” 在整个高中期间,沙龙还参与了许多科学研究项目。 “在我大一的时候,我致力于设计用于纳米结晶的DNA,并构建张力三角形,以形成用于在纳米级捕获和成像蛋白质的几何形状。 第二年夏天,我了解了用于纳米电子学的聚二甲基硅氧烷(PDMS)制造技术,以及用于单层二硫化钨的化学气相沉积技术,该材料已用于制造微型磁盘。” 她继续说道:“我还参加了许多项目,包括城市条形码项目,在该项目中,我帮助纽约市各区的植物标本中的DNA条形码进行条形码确定,以帮助确定大型湖泊的生物多样性。 最近,我一直在研究水样本的图像以确定细菌的存在。 我使用Google的Tensorflow库和Python包装来帮助构建经过人工训练的神经网络,以识别有害细菌样本的图像。 我目前建造的原型的准确率为95%。 我希望扩展当前的图像数据库,以包含更多可能难以识别的有害颗粒。” 沙龙决心将对技术的兴趣用于社会公益。 “我一直在发布iVOTE,该应用程序可为选民提供有关选民的官员,选举日以及他们对平台的意见的资源和信息。 在2016年大选之后,我对那些不在乎政治进程或感到不知所措的选民人数感到粗鲁,所以我正在使用可访问的应用程序向用户传递信息来解决这一问题。 此外,我正在构建一个VR体验,它将使用户能够通过模拟和互动故事更好地理解心理健康问题。” 当被问到她的建议时,沙龙说:“拥抱失败,找到可以依靠的导师。 如此多的工程涉及一次又一次地进行故障切换,直到找到解决方案为止,有时它可能会令人沮丧和士气低落。 即使如此,仍然值得留在该领域,因为您可以拥有影响力以及可以建立的技能和联系。 寻找导师确实帮助我保持了步伐,并在整个技术之旅中保持了灵感。 我认为,与激发您灵感的人们接触尤为重要-与鼓励和振兴您的人在一起总是一个好主意。 建立社区确实是成功的关键之一!”

iOS开发人员设置:清理,准备

从干净的石板开始,并添加必需品:rvm,npm,自制 这篇文章是有关设置iOS开发环境的系列文章的一部分。 我上一次设置iOS环境时,我的Mac已作为学生机器使用了多年。 我在数十个教程中都失败或部分安装。 我有用于语言的SDK,我再也不会碰。 在开始设置环境之前,我清理并清除了所有可能的旧应用程序和安装。 如果您是从一台闪亮的新机器或全新安装开始的,则可以跳过第一部分。 塔布拉罗莎 您需要自行决定清洁机器的认真程度。 因为我不信任几年前愚昧无知的安装完整性,所以我清除了ruby,rvm,rbenv,gem,postegres,sqlite,node,javascript和bundler。 万一我弄坏了东西,在清洁过程之前克隆硬盘驱动器就给了我一个安全网。 删除所有内容后,我确认系统已在运行且稳定,因此再次克隆,以便在安装出现问题时可以重新使用。 Ruby和RVM(红宝石版本管理器) 安装rvm来管理您的ruby版本。 这将安装rvm和Ruby的最新稳定版本。 \ curl -sSL https://get.rvm.io | bash -s稳定–ruby 您可能需要根据所使用的宝石和Cocoapods版本在Ruby的不同版本之间进行切换。 除了最新的稳定发行版,这些是我安装的版本: rvm安装2.2.3 rvm安装2.4.0 列出可用的版本,并将2.2.3(或您的首选版本)设置为默认值: rvm列表已知 rvm-默认使用2.2.3 家酿 是否安装了自制软件? 酿造-v 如果没有,请继续并立即安装。 将以下内容复制并粘贴到命令提示符中,然后按Enter。 /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 如果您有自制软件,请更新并运行医生。 解决出现的任何问题。 酿造更新 酿造医生 尝试酿造更新时权限错误的快速修复:“ / usr / local error”: 须藤chown -R $(whoami)/ usr / local […]