iOS 开发

iOS 常用 XCode, Swift3, UITableView, cocatouch, 一起创建 iPhone, iPad 和 Macbook应用

与Swift编译器配对存根

通常,我们需要对带有副作用的代码进行单元测试,这些副作用通过抽象与Swift中的协议与系统的其他部分进行交互。 有很多方法可以验证它是否按预期工作:打桩,监视,伪造等。总的来说,工程师将这些形式称为模拟 ,即使“ test double”也是合法名称。 仅供参考,“测试双倍”的名称来自电影行业中的“特技双倍”。 在Swift中编写测试双打(例如存根或模拟)是一个无聊的过程,开发人员经常尝试使用Sourcery / SwiftyMocky之类的工具自动生成它。 但是,如果您希望进行更精细的控制,或者不想在构建过程中引入新的步骤,则可以使用一个技巧来快速(至少更快)实现双重测试。 如果您知道存根和模拟的工作原理,则可以轻松地跳过以下两章,跳至下一章或直接跳至解决方案。 首先,让我们区分存根和模拟之间的区别是什么,因为它们非常相似。 根本区别在于验证过程: 对于存根,测试用例必须手动调用一些方法以验证是否发生了预期的副作用 模拟使用预定义的配置自动进行验证 让我们用伪swift代码进行比较: 与CounterStub相反, CounterMock是在初始化期间进行预配置的,在CounterStub中,在验证步骤中,我们需要将一些addCalledTimes属性与3进行显式比较。实现这两个测试对addCalledTimes的方式是实现细节。 一般的经验法则是, 验证可以区分我们是使用存根还是模拟(或混合混合)。 让我们先不进行理论讨论,然后再回到地面。 存根实际上如何在Swift中实现? 我们想要创建一个符合协议的对象,并有机会1)验证是否已使用期望的参数调用了给定的函数,以及2)控制函数返回了值。 有许多方法可以做到这一点,最简单的方法就是引入想要跟踪到存根中的行为一样多的属性。 例如,如果要在给定的时间调用该函数,请添加一个计数器,在函数中对其进行递增,然后在测试后验证其值-如上面的代码段所示。 但是,一种替代方法是添加一个附加变量,该变量提供一个函数占位符 (具有与该函数几乎相同的签名类型),并在遵守协议时调用它。 我写这本书几乎是因为如果测试用例完全希望忽略给定的功能,我们将其设为可选只是为了方便。 在此博客文章中,我们将讨论协议功能,因为变量相对于存根而言相对简单-仅通过引入实例即可。 为了这篇文章的缘故,让我们考虑一下最简单的协议,该协议将用户名同步保存到数据库中,并返回一个布尔值来通知过程是否成功。 它的模拟看起来像这样: 对于函数addUser ,我们引入了一个变量addUserAction -每次调用addUser时addUser对其求值的函数。 然后,在测试场景中,您可以1)验证被测系统(测试代码)确实调用了该函数,并且2)模拟数据库的响应方式(无论返回true还是false ): 一般而言,通过引入与函数参数和返回类型匹配的addUserAction变量,我们让测试用例定义协议相关函数的主体。 顺便说一句,如果您不喜欢addUserAction属性的可选性,则可以继续执行等效的实现: 在上面显示的存根中,我们必须显式提供一种addUserAction变量。 对于短函数来说,这似乎是一件容易的事,但对于涉及多个参数,闭包, (re)throws , @autoclosure ,最终可能会导致您和编译器之间的较量。 为了克服这种麻烦,我们可以利用Swift的类型推断系统。 解决方案涉及一个全局函数,该函数返回与参数类型相同的nil值: 起初,它看起来像一个胡说八道的函数,但我们只会用它来拉出T类型,而不是它的值。 函数是Swift中的一等公民,因此我们可以将函数作为参数传递给asNil以获取Wrapped类型与函数类型匹配的nil实例。 在下面的示例中,我们将变量addUserAction初始化为与协议功能相同类型的nil值。 那正是我们以前必须手动写下的内容: 需要将此变量标记为 lazy 因为引用 addUser 隐式依赖于 […]

Swift 3中的协议简介

嗨,Apple,什么是协议? 协议定义了适合特定任务或功能的方法,属性和其他要求的蓝图。 – 苹果 在我看来: 再次阅读定义,并称之为一天。 – 苹果 因此,我正在写这篇文章来澄清问题。 同时使事情变得有趣。 稍后,我们将在我们的协议中使用UFC战斗机示例,希望最后一切都会有意义。 协议是什么 协议是继承标题的先决条件列表。 那是正式的定义。 如果有一件事可以帮助您记住协议是什么,那就是黑帮的定义: 一个协议就是您需要这个,这个和这个。 被称为这个。 您需要喝酒,聚会和拖延才能被称为刻板印象的大学生。 这就是我记得并向人们解释什么是协议的方式。 协议语法 语法结构类似于类/结构/枚举。 UFC战斗机协议 一天。 醒来。 您只想成为UFC战士。 您上了达纳·怀特(UFC主席),您问我如何成为UFC战斗机? “没问题。 让我们谈谈先决条件,属性和方法。” —达娜·怀特 让我们从properties开始。 要成为UFC战士,您需要做的事情。 您需要有一个确定的名称和一个可选的昵称。 这是什么意思 这意味着您在设置名称后便无法更改它。 但是,您可以在设置昵称后对其进行更改。 昵称也可以为nil。 现在让我们谈谈方法 。 成为UFC战士需要做的事情。 您绝对需要能够在UFC中拳打脚踢。 Aka知道基本知识。 您还可以选择垃圾留言。 这是什么意思 这意味着说垃圾话可能是UFC战斗机的能力。 但是,您不必拥有它。 您可以直接战斗。 我觉得您已经在使用UFC协议了。 如果没有,到最后您会感到更多。 我们已经定义并解释了我们的规格。 现在让我们看看如何定义协议。 定义协议的步骤 1.结构和命名协议 协议UFCFighter { } […]

通过应用内消息传递为iOS加速装备iOS应用

随着移动革命席卷电子商务领域,移动应用程序已成为每个在线卖家的必需品。 拥有美观,高性能的iOS应用程序对您的企业来说是个好主意。 但是,只有在应用保留用户,转换用户并使他们成为您的品牌忠实拥护者的情况下,投资才需要支付。 雇用最好的iPhone应用程序开发公司还不够。 您需要寻找创新的方法来与用户互动,并使他们与应用保持互动。 用户参与度是任何在线业务成功与否的关键参数,因为它与转化直接相关。 应用内消息传递是实现此目的的最有效工具之一。 了解应用内消息传递 应用内消息传递,顾名思义,是指当客户在应用程序上活动时在应用程序内发送的消息。 使用该应用程序时,它看起来像手机屏幕上的弹出窗口。 应用内消息是内容营销策略的一部分,包含文本,图像或两者的组合。 这些消息可用于其他各种目的,例如,注册新用户,引入新的应用程序功能以及推动促销活动。 它通常包括一个号召性用语,并带有一个链接,该链接会将客户带到将要完成该操作的目的地。 应用内消息也可用于提供虚拟客户支持,其中应用用户会受到关注。 iOS9应用程序开发人员创建了聊天机器人或虚拟销售助理,以与买家互动并提供个性化的购物体验。 最好的部分是,即使这些消息来自虚拟来源,它们也具有人性化的感觉。 聊天机器人配备了人工智能,使他们能够了解用户的行为和偏好并进行相应的交谈。 在移动应用程序中拥有此功能可以增加其价值,因为它可以执行各种转化驱动任务,例如: *通过与用户建立直接联系来吸引用户 *浏览所需的内容,例如产品建议和评论以及应用程序的新功能 *鼓励用户提供反馈并采取行动以做出所需的更改和改进 *与推送通知相比,引起更多客户关注 *使用直接互动与买家建立更紧密的联系以建立长期品牌 这些优势使应用程序内消息成为商务移动应用程序的关键要素。 因此,大多数卖家都希望将其作为iOS应用开发的一部分。 应用正确的应用内消息传递策略 尽管应用内消息传递为在线业务带来了巨大的机会,但是用它们轰击用户是不可行的。 遵循明确的策略将使您能够充分利用此功能。 这是您需要遵循的计划: 有一个明确的目标 拥有清晰,明确定义的目标对于获得理想的结果很重要。 尽管与客户互动是所有应用内消息的基本目的,但它可能会针对其他目标,例如品牌推广和促销。 把握时机 在正确的时间发送应用内消息非常重要。 例如,可以发送提醒消息以触发对废弃购物车的操作。 同样,与启动新功能,快速销售和新闻更新有关的消息旨在推动用户的有时限操作。 进行用户细分 根据受众特征,偏好和行为对用户进行细分是应用于应用内消息传递的另一种智能策略。 它使您能够传递特定于用户的消息,以使用相关消息来定位正确的用户组。 自动化消息 处理分段后,您必须采用自动化技术来确保在正确的时间传递消息。 创建良好的内容 内容是应用程序内消息的灵魂,因为它实际上可以驱动用户进行操作。 因此,您应该确保内容副本清晰但简洁,并且具有可操作的CTA来支持它。 在美学方面,例如文本,颜色和格式,它也应表现出色。 在线卖家可以使用应用内消息传递作为功能强大的工具,将自己的业务推向新的高度。 应用内消息传递就像是在线企业成功的多渠道营销计划的基础。 在正确的时间发送给正确的用户的相关消息可以赢得他作为忠诚客户的机会。 最初发布在http://kasynoweb.net/

如何在2019年购买iOS App简短评论

App Store是一个数字分发平台,由Apple Inc.开发和维护,用于移动应用程序。 操作系统是iOS。 它允许用户浏览和下载应用程序。 App Store于2008年7月10日启动。 对于开发人员而言,在应用商店中获得正面评价很难。 应用程序评论的重要性不可低估。 确实,正面的应用评论确实有助于在顶部图表中运行您的应用。 它还可以让您获得更多的下载和安装,因为用户倾向于下载或安装具有许多正面评价的应用程序。 他们通常会检查评论,以了解其他人对应用程序的体验,然后再决定是要安装该应用程序还是远离该应用程序。 良好的评论可能会导致许多用户下载您的应用,并自动在应用商店中排名第一。 不仅如此,您的应用程序还将在搜索结果中具有较高的知名度。 Apple App Store中总共有220万个iOS应用,其中有数十种与您相似的应用。 评分的数量和平均值以及评论的数量,对您的应用在应用商店搜索结果和推荐中的排名有很大的影响。 当人们在应用商店中搜索时,更多评论将使您的应用的知名度更高。 如果您想了解购买iOS应用评论是否安全,对我来说,我认为这取决于您使用哪种平台。 如果您从销售真正应用评论的可靠服务提供商那里购买,那将是安全的。 在购买或使用出售应用程序评论的平台之前,您需要检查一些事项。 您需要检查的最大的第一件事是该平台是否使用机器人。 首先检查这一点非常重要。 如果平台使用漫游器或假冒用户,则会增加您被禁止进入App Store的风险。 您可以从信誉良好的网站(例如AppSally)获得优质的iOS应用程序评论 。 他们仅使用真实用户进行评论,而完全不使用漫游器。 如果收到的服务不令人满意,他们还提供保修。 他们将为您提供高质量的评论。 AppSally保证安全,并将为您提供最佳服务。

创建一个iMessage贴纸包

这是一种为iMessage创建艺术,模因,自定义表情符号(例如thonks)或其他任何您想要的自定义贴纸包的方法! 这些类似于电报贴纸,但适用于iMessage。 我自己没有使用过电报贴纸,但是在iMessage贴纸中,可以将其覆盖在现有消息上并进行动画处理! 另外,据我所知,除了512kb之外没有大小限制,而电报贴纸必须为500x500px。 新项目模式p.1 接下来,创建一个新项目。 您可以通过菜单栏(文件->新建->项目)或热键(⌘+⇧+ N)来执行此操作。 从那里您将获得许多选择。 从顶部的平台列表中选择iOS,然后选择“ Sticker Pack应用程序”。 单击“下一步”后,将收到一个小表格。 “产品名称”只是您的贴纸包装的名称。 对于“团队”,如果您没有添加帐户,则将其保留为“无”,否则选择您的帐户。 “组织名称”可以是您想要的任何名称,但是建议您使用您的名字或类似名称。 在“组织标识符”下,输入您唯一的标识符。 有一些约定,看起来几乎像一个反向网站名称,但是您不必为此担心。 捆绑包标识符是根据组织标识符和产品名称自动生成的。 经过一会儿的编译和复制,Messages应该会在您的iOS设备上启动。 多田! 就像魔术一样,现在您在设备上拥有自己的贴纸包! 但是,可能并非全部都是魔术。 如果您在左侧栏中查看,则可能会看到警告/错误。 您可以放心地忽略有关“推荐设置”的任何警告,但是在这里,您会收到有关无法发送到设备的任何贴纸的通知。 您应该调整这些大小,然后尝试稍后添加,或者找到其他方法来解决此问题。 如果仅安装到自己的设备,则可以在这里停止! 如果您想将此贴纸包提交到应用商店,则应该熟悉此过程,并添加了应用图标等。 但是,如果您要打包此文件并将其发送给某人的iOS设备,并且无法物理访问该设备,则情况会有些棘手。 有两种方法可以执行此操作-都遵循类似的例程,但是部署不同。 此时,您将需要将目标构建为“通用iOS设备”。 这与您的手机和模拟器在同一个菜单中。 从这里转到“产品”菜单,然后选择“存档”。 右键单击创建的存档,然后“在Finder中显示” 从那里,右键单击.xcarchive文件,然后单击“显示软件包内容” 在“产品”文件夹下将是“应用程序”文件夹,在该文件夹内是“ .app”文件。 这个应用程序在Mac上无法运行( duh!) 。 而是将其拖动到桌面或其他位置。 在旁边创建一个名为“ Payload”的文件夹,然后将“ .app”文件夹移动到该文件夹​​。 然后,右键单击“有效负载”并进行压缩。 您最终将得到一个.zip文件。 通过“获取信息”菜单将扩展名重命名为“ .ipa”。 此“ .ipa”文件对下一步至关重要。 如果您拥有付费开发人员帐户,并且已将用户的UDID添加到您的帐户,或者用户在其设备上具有AppSync(越狱),那么您可以按照此处的精彩教程通过野生动物园将其部署到他们的设备上:https:// medium.com/@alexdimango/在五分钟内分发Dropbox ios-10- ipa-空中五分钟-579fcdc7a0bb 否则,您可以简单地使用Cydia […]

视频原型:Fooducate

本周,我致力于为Fooducate创建视频宣传,这是一个移动应用程序,可让您通过搜索和扫描功能来比较您可能食用的食物的整体健康状况。 我选择Fooducate是因为它看起来像是我会真正使用的东西,因为它具有许多很酷的功能来帮助您了解食物并选择健康的东西,例如类似等级的评分系统和查看替代品的能力。 制备 拍摄之前,我想知道如何宣传视频,以及想讲什么样的故事。 我开始考虑可以使用的不同环境。我最初希望促销活动显示2个人使用该应用程序来发现有关1个人正在吃的食物的更多信息。 该视频将向一个人展示使用该应用程序的条形扫描功能,然后向另一位用户展示他所吃的食物不健康,他可以使用其他食物。 这是此视频宣传的第一版:https://www.youtube.com/watch?v=XTxtL9AIVi8 批评与最终切入 我向一群同事展示了该视频,并获得了一些非常有价值的反馈。 主要的批评是,视频感觉更像是喜剧的草稿,应用程序内塞了牛角,而不是促销视频,这可能与两个主要用户的互动有关。 这很有道理,尤其是因为很难想象人们会像在我的视频中那样使用该应用程序。 我得到的另一个批评是,当其中一个用户实际使用它时,很难在屏幕上看到正在发生的事情。 我同意这一点,我觉得这与使用不良的摄像机,拍摄时的晃动以及从屏幕上观看的角度有关。 这些批评导致视频宣传的最终切入面发生了许多变化。 对于视频的最终计划,我开始朝着更加“生活中的一天”的方向发展。 它会显示一个正在做饭并试图选择更健康选择的人。 它将显示他们直接查看他们的食物选择,然后食物将成为查看应用程序(包括其评分)的结果。 然后,用户将根据该应用做出决定并完成烹饪。 我还租了一个更好的相机和三脚架,这使视频更清晰了。 这是我视频的最终剪辑:https://www.youtube.com/watch?v=oeKUALTR9ac。 我试图在视频中利用一些有趣的角度和摄影技术,例如在声音和声像上使用火柴。 我也尝试在iMovie中使用某些功能,我非常不熟悉该程序。 我能够添加一些标题和字幕,以及带有Fooducate应用程序徽标的一些图像叠加层,尽管我觉得有更多的经验,我本可以更干净地提取这些添加项。 总的来说,我对最终剪辑如何显示应用程序的主要功能感到满意,但我觉得我将不得不更多地练习电影制作技能,以便将来获得真正强大的视频推广。