Tag: 移动

iOS应用内购买tanımlama101

应用程序购买中的Uygulamanıza(UygulamaİçiSatınAlma)özelliğieklemekçokkolay。 TanımladığınıIAP’yi应用商店’daçıkmadanöncekolayca测试edebilirsiniz。 Ancakbazıadımlarıatlarsanız,测试ederkenbazıhatalar ilekarşılaşabilirsiniz。 Adımadımnasılyapılacağınabakalım。 甜菜 developer.apple.com” giriyoruz。 证书,标识符和配置文件altında应用程序ID的sekmesine giriyoruz。 Burada Uygulama ID’miziseçtiğimizde,应用服务的高级专员。 Bu Alanda IAP已“启用”olmalı。 “ Disabled” ise en alttaki编辑按钮。 iTunes连接 itunesconnect.apple.com’dauygulamamızıseçip,功能为altındaIAP ekliyoruz。 4个IAP变量: 1-耗材,kullanıldığındatekraralınmasıgereken IAP 2-非消耗性的,可再生的IAP 3-自动续订,belili bir periyodlasınırlıIAP,kullanıcıiptaletmedikçeotomatik yenilenir。 4-非续订订阅,otomatik yenilenmeyen IAP IAPtanımlarkenkafakarıştırannokta“产品ID”,但不提供IAP’nin id’siuygulamanızındeğil。 通用个人识别码IAPadıeklenerekoluşturulur,kullanımkolaylığıiçin。 Sizin id’niz tamamenfarklıbirşeyolabilir。 XCode整合 IAP’mizioluşturduktan声音IAP’yiuygulamamızaEntegre etmenin en kolay yolu SwiftStoreKitkütüphanesi。 bizz84 / SwiftyStoreKit SwiftyStoreKit –轻量级应用内购买iOS 8.0 +,tvOS […]

在2018年构建增强现实应用程序:技术不成熟

我使用ARKit 2.0和Swift开发适用于iOS的AR应用程序。 在 第1部分中, 我探讨了在2018年开发增强现实应用程序的实际问题。这就是我对即将到来的移动AR未来的想法。 上周,我讨论了2018年开发,测试和使用基于iOS和ARKit构建的AR应用程序的一些日常基本问题。这些问题范围很广(您不能坐下来测试AR应用程序,也不能在黑暗中,也没有对几何体的某种记忆)(对于共享的AR体验进行测试是复杂而笨拙的)。 这些实际问题可能会在产品生命周期的不同阶段导致重大问题,但其中许多问题与支持该早期版本的ARKit和iOS上的移动增强现实的技术有着内在的联系。 当Apple在1-5年内向支持ARKit的下一代传感器和基础技术转移时,其中的一些故障(无法在弱光下工作以及必须扫描区域进行必要的移动)可能会消失。 但是我遇到了更多有趣的问题,这些问题说明了当前状态下增强现实开发的粗糙边缘。 这些缺点并不是底层硬件的故障,而是iOS AR工具和开发的新影响。 我预计这些缺陷和差距将在未来1-2年内由Apple通过软件和ARKit 3.0 / 4.0的发布或由第三方工具,库和产品解决: 低保真持久性 一般来说,ARKit 1.0的明显遗漏之一是,一旦关闭应用程序,放置,扫描或创建的所有AR对象都将消失。 AR应用程序只是一个会话事务。 ARKit 2.0引入了Persistent AR Experiences,这意味着您现在可以保存花费十分钟创建的客厅的新布局和设计,并在下个月重新打开该确切的设计。 持久性似乎应该是桌面赌注,并且一开始就存在,这样人们就不会失去进度或位置,但这是我们使用移动AR软件的早期程度的另一个指标。 但是,即使在持久性方面使用Apple的第一个刺探,也有许多不足之处。 ARKit的核心功能是扫描您周围的世界并找到飞机。 这些平面可以是地面,桌子,台面或墙壁。 一旦识别出这些平面,ARKit便可以将3D对象放置在这些平面上或3D空间中,或AR应用程序功能所需要的任何其他功能。 然后,理想情况下,持久性将确切地记住这些平面的位置,因此当您在餐桌中间放置一个虚拟花瓶时,关闭该应用程序,然后重新打开该应用程序,该花瓶正好位于您离开的位置。 花朵没有漂浮在桌子上方6英寸处,并且距离桌子中心的偏移量也不是3英寸:这正是您将其留在了那里。 实际上这还没有发生。 我已经发布了一些演示代码,这些代码可以可视化检测到的平面,然后允许您在同一会话中重新加载场景,以比较持久性的准确性,也可以在此处演示该演示的视频演示。 该应用程序只是一个技术演示,旨在突出显示一般的平面检测和内置持久性的准确性(或缺乏准确性)。 虽然持久性精度对于在建筑物内进行寻径来说可能不错(例如,“遵循杂货店地板上的AR箭头以查找Mountain Dew”或“遵循路径以在活动空间中找到特定的会议室”),测试它不够精确,无法持久保存我家的3D表示。 扫描并重新加载房间后,有时甚至只是绕圈走了几圈而没有重新加载,有时虚拟墙将被脚踩掉,或者虚拟架子会从实际架子的实际位置偏移6英寸。 这不是在应用程序中使用持久性的决定性因素,但在设计产品及其功能时需要考虑到这一重大限制。 我怀疑在接下来的一两年内,持久性准确性将大大提高。 我遇到了一些初创公司,它们使用在当前硬件上运行的自定义软件来扫描和持久保存AR对象,其保真度要比ARKit高得多,因此Apple和Google在改进软件本身或招募有能力的人方面都不会落后。 能够准确地将对象或位置准确地扫描并重新加载到最接近的英寸(然后是毫米)的能力,并不会给普通公众留下深刻的印象,但是基于这些进步而构建的应用程序,产品和公司却可以。 缺乏标准AR UI元素 构建只存在于您的手机上且无需与服务器对话的应用程序的准系统框架就很容易,它无需从社交网络或其他任何地方获取图片。 如果您想创建2019年全球最大的独立计时器应用程序或非云同步日记应用程序,则可以立即开始学习iOS开发并在下周准备原型。 制作简单应用程序如此容易的一个重要原因是,Apple提供了基本的UI构建块来拼凑您的产品。 Apple提供了基础,因此您可以在1秒钟内向应用程序添加按钮。 或将以有组织的方式显示一些数据的表。 它们还提供了一些模块,可轻松实现从相机胶卷中检索图片,在地图上发现自己或在社交网络中发布内容的功能。 并非所有这些构建块都在2008年App Store的第一天就出现了-随着移动平台的成熟,这些年来已经添加了这些构建块。 虽然ARKit提供了快速访问惊人技术的途径,但是开发人员现在只能使用的是该基本技术,而在此之上几乎没有构建块。 苹果公司的人机界面指南针对所有不同类型的UI / UX及其相应的“执行”和“不执行”提供了76页的指南。 增强现实是这些指南中的单个页面。 […]

为什么现在需要本地化移动应用程序

就像有人说的那样,“世界每天都在变得越来越小”。 我们可能会生活在不同大陆的彼此保持联系。 这种交流环境引发了全球相互理解的问题。 对于一家公司来说,仅仅进入一个新市场还不够,更重要的是要保持与当地价值体系的融合。 简而言之,这是本地化的过程。 移动应用程序本地化对应用程序开发人员意味着什么? 应用产品迟早会成为国际IT市场的一部分。 对企业到底意味着什么? 这意味着当今的公司拥有最广阔的前景。 全球趋势让我们无处考虑-如果您的应用使用多种语言进行交流,绝对很酷。 我们提供有关本地化过程以及您将面对全球市场的收益的所有基本信息。 本地化应用程序的5个理由 在继续进行移动应用程序本地化的基本方面之前,这些是成功的应用程序应真正成为全球性的主要原因。 1.来自全球市场的新用户正在等待您 如果您有一个非常受欢迎的应用程序,那么可能会有更多的国家对您的本地市场抱有相同的期望。 不要迷失于试图取悦世界上所有客户的方式,首先从您比其他人更了解他们的需求开始。 一项新的仔细研究是您工作的源泉。 如果您想进入例如中国市场,让我们一起学习一些主要数据。 众所周知,中国是最大的应用社区。 根据《 全球移动市场报告》 ,到2020年,亚太应用市场的收入将增长到420亿美元。但是,无论您将应用本地化为Android还是iOS平台,您都将面临不同的障碍。 中国没有Google Play,因此还有200家Android应用商店可以使用。 另一方面,Apple的规则与世界其他地方的规则相同。 也许这就是为什么中国现在是苹果的第一市场,以及为什么使用中国iPhone比其他智能手机更容易的原因。 这些是您考虑新市场时的第一步。 无论您是否选择了中国,事实都是应用程序国际化不可避免地将您吸引到新的消费者。 2.您专注于销售潜力 明智的投资决策可能会导致快速的全球销售。 在这方面最聪明的例子是《神奇宝贝Go》。 这款游戏在少数几个市场取得了第一个巨大的收入。 根据VentureBeat的数据 ,到2016年年中,任天堂的下载量达到3,000万,获得了3500万美元的收入。 这些数字可以实现更广泛的本地化,这使《Pokémon》成为了一种全球现象。 即使您还不是一家大型游戏公司,也可以对成功的本地化做出决定。 这可能是您全球进步的开始。 3.您正在寻找新的竞争优势 您当然需要在竞争激烈的移动应用程序市场上赢得更多积分。 当前,各种各样的移动产品使用户越来越严格。 四年前,Compuware发布了一份报告,该报告指出, 只有16%的用户尝试打开某个应用程序会遇到两次失败的情况。 如今,应用程序运行速度更快,开发人员可以通过自定义设计来创建无缺陷的软件,但这对如此激烈的市场竞争几乎没有限制。 借助应用本地化所带来的机会,您可以在全球范围内赢得客户的忠诚度并获得最大积分。 4.您希望在用户眼中 当您的产品具有针对新市场的所有必需的采用功能时,您将在Google Play和App Store中获得更好的可见性。 可见性方面取决于您事先使用的关键字。 在这种情况下,可靠的ASO(苹果商店优化)策略与本地化策略紧密结合。 ASO让更多的外国用户看到您的工作结果,并获得更多的下载。 5.您希望有效地利用投资 我们希望在任何情况下都能获得正的ROI(投资结果)。 在这种情况下,本地化似乎是最安全的解决方案,因为它几乎总是可以保证结果。 首先,应用程序适应过程似乎成本很高,尤其是在需要应用程序本地化服务(例如专业翻译)的情况下。 […]

Realm移动平台-探索实时数据同步功能

自2016年9月发布以来,Realm移动平台一直是人们期待已久的技术,它于2017年1月首次稳定发布证明了其价值。 它具有允许Realm Object Server与客户端数据库之间以两种方式进行数据同步的能力以及事件处理能力,这使得开发未来的移动应用程序成为可能。 Realm是一个精明的移动平台,是在充分了解最新的移动应用程序开发挑战之后开发的。 它还具有扩大开发人员对即将到来的移动趋势的视野的能力。 以下是其一些强度特征: 托管的自由:Realm Mobile Platform可以在本地和云上托管 基于对象:领域是基于对象的; 因此对象本身反映了数据库。 开发人员可以轻松避免与ORM相关的困难 脱机优先功能:由于设备上嵌入了Realm Mobile数据库,因此Realm可以提供广泛的脱机优先体验 易于集成:可轻松与现有基础架构集成 它支持服务器端业务逻辑 我们创建了一个Hello World移动应用程序,使用户能够绘制任何草图或使用虚拟铅笔书写文本。 我们将通过它探索Realm移动平台的实时数据同步功能。 我们的应用程序“ Hello World”正被位于不同地理位置的两个iOS用户使用他们的iOS设备>>他们正在通过在其各个设备上用虚拟铅笔绘制草图来共享草图>>一位用户正在其设备中绘制草图,其他用户可以实时查看草图开发过程(相同的形状和颜色代码对其他人可见)。 领域对象服务器配置 领域应用程序用户身份验证 实时同步过程 下载“ Mac OS捆绑软件”或“ Linux OS捆绑软件” 打开“ realm-mobile-platform”文件夹,然后双击文件“ start-object-server.command”,启动“ Realm Object Server”。 这将打开一个终端窗口并启动Realm服务器。 它将自动打开仪表板,如下图所示。 该仪表板是基于浏览器的应用程序,它提供一些必需的信息,例如:仪表板,领域,用户,功能等。 5.您可以在此处创建所需的用户数 现在运行该应用程序。 在应用程序中,我们通过向他们的应用程序提供凭据来验证用户连接领域服务器。 认证过程已在下面用技术术语进行了描述。 -(无效)登录 //基本服务器路径 NSURL * authURL = [NSURL URLWithString:[NSString stringWithFormat:@“ http://%@:9080”,kIPAddress]]; //通过`start-object-server.command’运行Realm […]

创建一个UITabBarController框架

导航(如果不是)是任何应用程序中最重要的方面之一。 选择用户如何在不同的屏幕之间导航对于您的应用程序成功至关重要。 随着AppStore的兴起,人们非常清楚什么是最受欢迎的导航方式。 汉堡菜单,滑动菜单,侧边栏,无论您想称呼它们如何。 这种导航形式成为应用程序的代名词。 我个人发现补充工具栏有很多缺陷。 但是由于我不是UX设计人员,因此您可以在本文中阅读更多有关面向设计的评论。 正如您可能从这篇文章的标题中得出的那样,我最喜欢的应用程序导航形式是UITabBar。 如果我们看一下心爱的Apple的大多数应用程序,则在大多数应用程序中都普遍使用UITabBar。 App Store,手表,时钟和音乐-都使用UITabBar进行导航。 要了解有关使用它的UX好处的更多信息,请查看此文章。 为什么要创建框架? UITabBar已经非常容易在Swift中使用UIKit实现。 那么创建整个框架有什么需要? 标准的UITabBar对我来说有点无聊,我想为组件增加更多个性。 另外,最好创建一些可重用的东西,无需更改太多代码即可对其进行样式设置和动画处理。 在本文中,我不会介绍创建CocoaTouch框架所需的步骤。 要开始创建可重用的框架,请阅读Alec O’Connor的这篇很棒的文章,我将其用作参考。 既然我们已经讨论了为什么要建立一个框架并列出我们想要实现的目标,那么让我们开始CODE😎! 我们希望我们的框架遵守一些原则和概念。 原理与概念 固体 面向协议 先决条件 作为先驱,我建议您熟悉以下原则: 访问修饰符 数据源和委托 程序限制 这些是设计和开发框架架构时应牢记的核心原则。 当我们在代码中遇到它时,我将进一步扩展每个概念。 至此,您已经为框架项目创建了一个很酷的名称,例如MDVTabBarController。 首先,一些小组结构👷‍♀️。 TabBarController基本上是三种类型的组件的组合。 它们是:代表每个选项卡的TabBarItems,容纳项的TabBar,最后是一个顾名思义的TabBarController,它控制上述组件。 我们将从最小的组件开始,然后从那里构建我们的框架。 最后,我们希望有一个框架来利用插件动画。 MDVTabBarItem 创建一个名为MDVTabBarItemable的文件,将其放置在“ 协议”组中,然后创建一个名为MDVTabBarItem的文件,并将其放置在MDVTabBar组中。 MDVTabBarItemable是我们希望所有TabBarItem都遵守的协议。 我们将用UIView替换标准的UITabBar和UITabBarItem,因为我相信它将提供更大的灵活性。 该协议定义了两个方法configure ,用于设置TabBarItem和setState。 最后一个将TabBarItem设置为选中或未选中。 类型别名 MDVTabBarContainer定义了动画师要使用的接口。 MDVTabBarItem接收带有图像的UITabBar项,并创建一个以图像为中心的UIView。 目前,MDVTabBarItem将不处理标题标签,但是可以通过创建UILabel并将其放置在UIView中来轻松添加。 您会注意到尚未执行所需的初始化 。 这是情节提要用于初始化组件的初始化程序。 我们将不会使用情节提要,因此无需实施。 MDVTabBar […]

键盘包装

如果您不想编写多行代码来获取有关键盘在屏幕上可见的信息,则可以将所有脏代码包装在一个类中。 现在在ViewController中只需创建Keyboard对象 当视图出现时注册 并在视图消失时注销 如果您更喜欢委托而不是闭包,则可以在视图控制器中实现适当的协议 摘要 当然,它们是像IQKeyboardManager这样的库 但是对于较小的问题,您不想用大锤砸破螺母。 资源 sayler8182 /键盘 通过在GitHub上创建一个帐户来为sayler8182 /键盘开发做出贡献。 github.com 感谢您的阅读! 如果您喜欢这篇文章,请鼓掌,以便其他人也可以阅读。 下一篇文章我也会有更多动力。🙂您还可以查看其他文章,也许您会找到适合您的东西。 如果您有任何问题或建议,请发表评论。

简化iOS软件设计的四个规则

在1990年代后期,在开发极限编程时,著名的软件开发商Kent Beck提出了简单软件设计的规则列表。 根据肯特·贝克(Kent Beck)的观点,优秀的软件设计: 运行所有测试 不含重复 表达程序员的意图 减少类和方法的数量 在本文中,我们将通过提供实用的iOS示例并讨论如何从中受益,来讨论如何将这些规则应用于iOS开发领域。 运行所有测试 软件设计可以帮助我们创建一个按预期运行的系统。 但是,我们如何验证系统最初将按照其设计预期运行? 答案是通过创建验证它的测试。 不幸的是,在iOS开发中,大多数时候都避免进行Universe测试……但是,为了创建设计良好的软件,我们在编写Swift代码时应始终牢记可测试性。 让我们讨论两个可以简化测试编写和系统设计的原理。 它们是单一责任原则和依赖注入。 单一责任原则(SRP) SRP指出,一门课程应该只有一个,只有一个改变的理由。 SRP是最简单的原理之一,也是最难解决的原理之一。 责任分担是我们自然而然的事情。 让我们提供一些很难测试的代码示例,然后使用SRP对其进行重构。 然后讨论如何使代码可测试。 假设我们当前需要从当前视图控制器中显示一个PaymentViewController , PaymentViewController应该根据我们的付款产品价格来配置其视图。 在我们的案例中,价格是可变的,具体取决于某些外部用户事件。 当前,此实现的代码如下所示: 我们如何测试此代码? 我们首先应该测试什么? 价格折扣是否正确计算? 我们如何模拟付款事件以测试折扣? 为此类编写测试会很复杂,我们应该找到一种更好的编写方法。 好吧,首先让我们解决这个大问题。 我们需要解开依赖关系。 我们看到我们有逻辑来加载产品。 我们有付款活动,使用户有资格享受折扣。 我们确实有折扣,折扣计算,然后再继续。 因此,让我们尝试将它们简单地转换为Swift代码。 我们创建了一个PaymentManager来管理与付款相关的逻辑,并创建一个单独的PriceCalculator ,它易于测试。 另外,数据加载器负责网络或数据库的交互,以加载我们的产品。 我们还提到,我们需要一个负责管理折扣的课程。 我们将其CouponManager并管理用户折扣优惠券。 然后,我们的“付款”视图控制器可能如下所示: 我们现在可以编写如下测试 testCalculatingFinalPriceWithoutCoupon testCalculatingFinalPriceWithCoupon testCouponExists 还有很多其他的! 通过现在创建单独的对象,我们避免了不必要的重复,并且还创建了易于编写测试的代码。 依赖注入 第二个原则是依赖注入。 从上面的示例中我们已经看到,我们已经在对象初始化程序上使用了依赖注入。 像上面那样注入我们的依赖项有两个主要好处。 它清楚说明了我们的类型所依赖的依赖关系,并允许我们在要测试时插入模拟对象,而不是真实的对象。 […]

在2018年构建增强现实应用程序:新生的生态系统

我使用ARKit 2.0和Swift开发适用于iOS的AR应用程序。 在 第1部分中, 我探讨了2018年开发增强现实应用程序的实际问题,在 第2 部分中,我回顾了限制当前iOS AR应用程序的一些技术限制。 这就是我对移动AR的未来展望。 第3部分:新生的生态系统 使用本地SDK(即Apple的ARKit或Google的ARCore)开发移动AR应用程序的能力已经存在大约18个月了。 回顾围绕移动AR开发的实际问题和更多技术问题,在发布了一些AR产品并认识到野外可用的工具,库和示例不足之后,空间的新颖性变得更加清晰。 鉴于与移动AR相关的一切都处于起步阶段,这不足为奇。 但是,经历将多种增强现实产品推向市场的过程,对于新创业公司或老牌运营商而言,都存在一些有趣的机会,他们可以针对这种新的开发模式来创建工具和产品。 这是我遇到的最明显的差距: 原型AR交互 似乎经过了十年的稳固发展,直到能够为移动应用程序提供强大的原型设计和线框图的工具。 我更喜欢在纸上画草图,然后直接跳入Xcode以使用实际代码“原型化”,但是在过去的几个月中,我也大量使用了Sketch,Figma和Invision。 还有另外二十种工具可用于促进构想,构思草图,对其进行框架化,设计应用程序的早期版本以及将像素完美的可点击原型组合在一起以进行“标准”移动产品的早期测试的阶段。 但是引人注目的AR产品结合了用户交互,用户独特的环境和动画/移动UI的组合来增强现实。 设计精美,构想精美的AR交互屏幕截图仍然是:静态屏幕截图。 屏幕截图无法传达响应用户输入的3D元素的精确动画。 屏幕截图也无法传达AR元素淡入地平线,检测到新平面或识别对象/位置时所需的过渡和行为。 所需要的是位于运动设计,图形设计,交互设计和用户体验设计的交集处的一些工具,可通过创建/导入3D模型来进行AR产品设计和AR交互设计,以轻松进行调整,参数化动画设计和常规原型制作。 由于我没有从事娱乐行业,所以我可能会遥遥领先,但是该行业的预可视化方法与AR产品原型之间可能存在一些相似之处。 previz公司进入AR市场可能会有一些捷径或机会。 另一个有用的模拟可能类似于Lens Studio提供的预览效果-我正在设想的假设性AR工具可能会受益于提供大量的模拟环境,这些环境可以评估进行中的AR交互在各种情况下的工作方式。 就目前而言,由于移动AR是一个新兴的利基市场,我不希望在2-5年内发布专用的AR消费类硬件并且市场急剧扩大之前,不会真正看到并测试这种产品。 AR记录 正如我之前多次抱怨的那样:测试AR产品非常困难。 我不认为在不久的将来会出现用于AR测试的逼真的渲染和有用的模拟环境。 因此,与此同时,我们必须寻找并依靠与模拟无关的改进的AR日志记录和测试工具。 在构建遗留代码或测试新功能时,有几次不正确的数学运算让我很想知道:我到底在看什么? 由于当今的原生ARKit开发是完全不可视的,而AR本质上是可视的,因此将单个代码元素偏离90º或以1为单位,并在相机后面渲染对象,或者意外地围绕其旋转是相对容易的。相机或其他不需要的地方。 Unity和Unreal本质上是视觉开发工具包,因此更适合显示“实时”场景的3D正交地图。 这些实时场景有助于以可探索的方式实时显示所有相机,物体,灯光等。 当您移动相机(即手机)时,映射的表示在Unity / Unreal场景中移动。 Xcode的视觉效果要差得多,可以在ARKit数据,场景,相机等的可视化中使用一些帮助。 这样的工具还可以记录与AR会话相关的其他数据,以促进更快的开发和调试。 我的希望是Reveal增加了与AR相关的功能,或者非常有前途的,刚刚起步的项目ARlog / ARInspector继续发展,因此,下次我面对复杂的ARKit项目的开发时,我可以选择。 我相信生态系统的这种演变将带来更好的体验,从而以更快的速度进入更多人的手中。 3D模型创建 最后,我们对ARKit开发的最深了解是:难以获得适合在您的应用程序中使用的3D模型。 由于AR从根本上讲就是3D体验,这意味着可靠的3D模型将在绝大多数AR体验中发挥某些作用。 尽管Apple和Xcode提供了一些基本的几何图形(例如,盒子,平面和球体),但要在本地ARKit应用程序中修改,编辑和放置这些几何图形却非常困难且费力。 与这两个开发平台相比,Unity和Unreal在Xcode本地开发方面提供了半步改进。 但是从我所看到的一切来看,如果您想要创建一个模型或角色,而不仅仅是彩色框(即,除了最可笑的“字符/模型设计”之外的其他任何东西),您就需要去其他地方并利用其他软件产品。 而且,一旦在其他地方生成了模型,就没什么好说的,无法正确格式化,导入和放置模型。 我来自具有Pro / […]

字符串,缩短了编译时间

在Swift中优化构建时间是一个经常讨论的问题。 我找到了一篇很棒的文章 。 @泰勒·米尔纳 我注意到String插值的编译时间很长,因此我决定扩展这部分内容。 在上一篇文章中,我展示了String插值的执行时间。 现在,我将专注于构建时间。 但是如何检查编译花费了多少时间呢? 您可以轻松下载并运行特殊工具BuildTimeAnalyzer (但是,将需要干扰项目设置)或运行脚本(可以避免此问题) 添加插值字符串效率最低。 它比最快的String格式快70倍 。 您可以认为“ 只有19ms ” ,是19ms,但仍比最快的解决方案多70倍,而这仅仅是一行代码。 如果不止一个怎么办? 让我们检查一下! 我已将每行复制60次。 编译器已经猜到了如何处理第三个函数,但是现在最快和最慢之间的区别是280ms以上 。 我不得不承认,现在它的速度不是70倍,而是慢了24倍。 不要小看编译时间。 您可以低成本获得很多收益。 在某些情况下,仅更改几行代码即可将性能提高百分之几十。 感谢您的阅读! 如果您喜欢这篇文章,请鼓掌,以便其他人也可以阅读。 下一篇文章我也会有更多动力。🙂您还可以查看其他文章,也许您会找到适合您的东西。 如果您有任何问题或建议,请发表评论。

顶级iOS测试框架

您知道吗, 市场是2.5亿+? 发生崩溃后,有11%的iOS用户删除了该应用 发生崩溃后,有45%的iOS用户会删除付费应用 首次崩溃后,有69%的iOS用户将停止玩游戏并删除游戏 每秒售出6–7个iOS设备 随着iOS设备的逐年爆炸,iOS成功的边缘比以往任何时候都高。 越来越多的初创企业和中小型企业发现,购买具有不同操作系统版本和硬件规格的每台iOS设备在财务上都不可持续。 另一方面,由于效率和可伸缩性问题,手动测试应用或游戏不再是质量检查流程的理想选择。 尽管与Android相比,iOS仍然是一个更加封闭的操作系统,但是许多开放源代码测试自动化框架和工具都可以用来创建可靠的自动化测试。 借助基于云的测试解决方案,它使开发人员/测试人员能够以可扩展的方式更有效地验证应用质量,并使iOS测试任务更加轻松。 今天,我们今天将通过5个简单的示例代码来介绍5个广泛使用的iOS测试框架,以使您对开始进行iOS测试具有基本的了解。 如果您还对Android测试自动化框架感兴趣,请不要忘记查看前5个Android测试框架,其中还提供了代码示例。 阿皮 由于其在Android和iOS上的灵活性和可用性而广受欢迎,并且可以在本机,混合和Web应用程序上运行。 对于iOS测试,它使用JSONWireProtocol使用Selenium WebDriver与iOS应用程序进行交互。 为此,Appium确实很好地支持了移动Web测试,并且其用例非常相似,就好像Selenium将用于Web测试一样。 鸦片样本 driver.findElement(By.id(“ com.example.app:id/radio0”))。click(); driver.findElement(By.id(“ com.example.app:id/radio1”))。click(); driver.findElement(By.id(“ com.example.app:id/radio2”))。click(); driver.findElement(By.id(“ com.example.app:id/editText1”))。click(); driver.findElement(By.id(“ com.example.app:id/editText1”))。sendKeys(“简单测试”); driver.findElement(By.name(“ Answer”))。click(); //或使用 driver.findElement(By.id(“ com.example.app:id/button1”))。click(); XCTest与Xcode紧密结合,但仍可用于实际的iOS设备和模拟器。 XCTest允许开发人员为任何级别的组件编写测试,并提供UI测试功能的框架。 XCTest测试被分组为XCTestCase的子类。 使用XCTest编写任何测试对于iOS开发人员来说应该是微不足道的,因为XCTest与Objective-C和Swift完全兼容。 KIF(保持功能)是一个与XCTest测试目标紧密相关并使用XCTest测试目标的iOS集成测试框架。 可以在XCTestCase或任何子类中直接执行KIF测试。 KIF通过利用OS系统为视力障碍者提供的可访问性属性,轻松实现iOS应用程序的自动化。 带有目标C的代码示例 –(void)testClicksOnRadioButtons { [测试人员tapViewWithAccessibilityLabel:@“ Radio1”]]; [测试器tapViewWithAccessibilityLabel:@“ Radio2”]; [测试人员tapViewWithAccessibilityLabel:@“ Radio3”]]; [测试人员enterText:@“简单测试” intoViewWithAccessibilityLabel:@” editText1”]; [测试人员tapViewWithAccessibilityLabel:@“答案”]]; } […]