Tag: 移动

进入Swift 3

刘承 银 , Paul Kompfner 和 Michael Bachand 自从该语言诞生以来,Airbnb就一直在使用Swift。 使用这种现代的,安全的,社区驱动的语言,我们已经看到了许多好处。 直到最近,我们的大部分代码库都在Swift 2中。我们刚刚完成向Swift 3的迁移,正好赶上了放弃Swift 2支持的Xcode版本。 我们希望与社区分享我们的迁移方法,Swift 3对我们的应用程序的影响以及我们在此过程中获得的一些技术见解。 “不破坏发展”的方法 我们有许多用Swift编写的模块和几个第三方库,其中包括成千上万的文件和成千上万的代码行。 似乎这个Swift代码库的大小不足以挑战,Swift 2和Swift 3模块无法相互导入这一事实使迁移过程变得更加复杂。 即使导入Swift 2库的正确Swift 3代码也不会编译。 这种不兼容使并行化代码转换变得困难。 为了确保我们可以逐步转换和验证代码,我们首先创建了一个依赖关系图,该关系图对36个Swift模块进行了拓扑排序。 我们的升级计划如下: 将CocoaPods升级到1.1.0(以支持必要的Pod升级) 将第三方Pod升级到Swift 3版本 按拓扑顺序转换我们自己的模块 通过与已经完成迁移的其他公司交谈,我们了解到冻结开发是一种常见策略。 我们希望尽可能避免代码冻结,即使这对于进行迁移的人员来说也增加了一些难度。 由于转换工作将不容易并行化,因此“多手协作”方法效率低下。 另外,由于很难估算转换所需的时间,因此我们希望确保在迁移期间可以继续发布新版本。 我们有3个人从事迁移工作。 有两个人专注于代码转换,而第三个人则专注于协调,与团队沟通和基准测试。 最后,包括准备工作,我们的实际项目时间表如下所示: 1周:调查和准备(一个人) 2.5周:转换(两人),分析转换的影响以及与较大团队的沟通(一个人) 2周:质量检查和错误修复(质量检查小组+各种iOS功能所有者) Swift 3的影响 尽管我们对Swift 3的新语言功能感到兴奋,但我们也想了解该更新将如何影响我们的最终用户和整体开发人员体验。 我们密切监视了Swift 3对发行IPA大小和调试构建时间的影响,因为到目前为止这是我们最大的两个Swift痛点。 不幸的是,在尝试了不同的优化设置之后,Swift 3在两个指标上的得分仍然略差。 发行IPA大小 迁移到Swift 3之后,我们看到发行版IPA增加了2.2MB。 一点挖掘表明,这几乎完全是由于Swift的库的大小增加了(我们自己的二进制文件的大小几乎没有变化)。 以下是一些我们发现未压缩二进制大小增加的示例: libswiftFoundation.dylib:增长233.40%(3.8 […]

保存您最喜欢的MightySignal搜索

现在,您只需点击一下鼠标,即可进行最常见的EXPLORE搜索 假设您已经是MightySignal的EXPLORE功能的高级用户。 您每天都在使用它来产生潜在客户-筛选出数百万个移动应用程序,以找出最适合销售给哪些应用程序。 这就像在大海捞针中寻找针头一样,但是使用EXPLORE,只需几秒钟即可找到针头。 例如,如果您是移动广告网络的销售人员,则通常希望运行的一些过滤器是: 哪些应用程序正在Facebook上做广告并使用一个或多个归因SDK(在Facebook上进行广告意味着它们更有可能希望在其他网络上做广告,而拥有归因SDK则意味着它们在广告发布方面非常精通) 哪些应用程序正在使用您的竞争对手,但即将与竞争对手签订合同(这意味着抢购并窃取帐户的时机非常合适) 哪些应用程序是未开发的—没有竞争对手在场(您可以在其他任何人之前将其出售给这些新的热门应用程序) 您已经生成了所有这些很棒的过滤器,这些过滤器将有助于为您的团队带来销售,但是您只是 希望有一个简单的方法来保存所有这些过滤器。 介绍保存的搜索 现在,您可以在MightySignal平台上的“探索”部分中轻松保存搜索! 要保存搜索 ,请设置自定义过滤器,然后只需点击“ 保存的搜索”下拉菜单,然后选择“ 保存新的搜索” 。 要加载“保存的搜索” ,只需单击您以前保存的任何搜索。 要删除“保存的搜索” ,将鼠标悬停在要删除的搜索上 ,然后单击垃圾图标。 开始保存! 我们希望这项新功能使我们的客户在日常工作中变得更加轻松,从而在激动人心的移动应用程序世界中工作。 让我们知道您是否有任何反馈!

iOS模拟器不可知快照测试

随着每款配备更高分辨率屏幕的闪亮新设备的首次亮相,开发和测试iOS应用程序的用户界面变得越来越苛刻和耗时。 对于每个视图,它仅代表应用程序的一小部分,取决于它所使用的数据,可能会有几种边缘情况和状态。 与领域逻辑代码相反,如何正确测试视图的视觉方面并不明显。 自从Facebook工程师发布了一个用于UIView / CALayer快照测试的内部工具– FBSnapshotTestCase已有一段时间了(如果您不熟悉此工具,我建议您检查一下!)。 提出的方法简化了视图的多种配置的测试,并防止在用户界面中引入意外的更改。 大小很重要😉 当涉及到视图控制器时,我们通常要确保它们在每个支持的方向上在一组各种现有设备上保持视觉质量。 这可以通过在许多iOS模拟器变体上运行测试套件来实现。 这种方法将导致多次模拟器重新启动,从而延长了测试套件的总执行时间。 在开发过程中为每个UI代码更改付出如此高的代价绝对是不可接受的。 为了解决这种不便,我们开发了FBSnapshotTestCase扩展,特别喜欢在其自然栖息地中测试视图控制器。 认识SnappyTestCase 使用SnappyTestCase构建的快照测试不依赖于运行模拟器或设备的上下文。 而是为用于验证或记录快照的每个验证语句定义上下文。 通过传递一组采用Snap协议的对象来指定上下文,该对象定义了测试环境参数,例如设备标识符 , 帧大小 , 屏幕比例和方向 。 为了方便起见,我们准备了一组定义现实生活中的iOS设备的对象,准备在您的测试中使用。 在这里,我们正在测试带有Snap ExampleViewController ,该Snap表示4英寸肖像模式iPhone的上下文: 自己尝试 所描述的工具当然是开源的code-代码和安装信息可以在我们的GitHub上找到。 我们已经准备了一个演示应用程序,其中包含一些示例测试和相应的参考图像。 欢迎反馈和贡献!

Onet-我很高兴成为获胜团队的一员

当然,我已经(或者说是我所参与的团队)提供了许多出色的产品,但是这一产品与众不同。 更具挑战性。 我们想要创建一些特别的东西,真正满足波兰内容消费者的需求,并为更多应用程序的发展做准备。 成功的衡量标准 发布后,我问自己一个问题:我们成功了吗? 当然,该应用程序很棒。 我们学到了很多东西,尤其是关于Swift的知识,以及Xcode对它的支持程度。 而且还涉及到我们自己,以及与如此多的团队合作可能带来的挑战。 我们开始了公司的伟大事业。 我们表现​​出了极大的合作精神,专业知识以及开发人员相互学习和快速学习的谦虚态度。 是的,我们成功了。 我们为自己感到骄傲。 经过适当的庆祝和回顾性会议之后,我们为未来得出了一些重要的结论: 重构。 学习。 实验。 要谦虚。 团队合作是一切。 要求您的组织帮助您删除阻碍项目进度的事情。 几个月后,发生了一件我没想到的事情:Onet应用程序被提名为INMA全球移动最佳使用奖。 竞争似乎非常稳固。 我们赢了! 我不需要奖项就可以使我的工作有意义,但是,嘿,它们是赞赏的很好的象征,尤其是在媒体行业。 不仅对开发人员而言,对所有相关团队:产品,市场营销,社论,UX,业务,甚至还有更多。 不要提及我们执行董事会提供的支持。 团队合作是一切。 有什么更好的? 2017年INMA全球大奖并不是授予Onet应用的首个享有盛誉的奖项。 2017年3月,它在波兰最大的移动和新技术会议期间举行的“移动趋势奖”竞赛中被评为最佳移动应用程序。 2017年4月,Grupa Onet-RAS Polska获得了广告代理商协会颁发的创新媒体类奖项。 — RAS新闻稿,2017年5月24日 如果你说波兰语 如果您确实会说波兰语,或者只是想看看这个应用程序真的很好,请帮助自己。 如果您更喜欢Android手机,则可以从iOS的AppStore或Google Play下载它。 来吧,试试。 并在Twitter上关注我。 我的推文可以是🇵🇱或🇬🇧。

Apple App Analytics 101(更新)

了解App Analytics并正确使用它 我们更新了此帖子以反映2017年5月上旬的最新更改和资源来源,因此仍为最新信息! 我们到过那里:您刚刚完成您的应用程序,将其上传到iTunes Connect,甚至可能通过审核获得了它。 现在到了关键时刻:人们会真正下载您的应用程序吗? App Store是一个拥挤的地方,这不是秘密。 App Store上有超过220万个应用程序,每天有1000多个新应用程序。 因此,最大的挑战不仅在于制作高质量的应用程序,还在于获得知名度 ,吸引人们下载和使用它。 这就是为什么您应该花费大量时间进行PR,创建启动策略并将其与营销计划捆绑在一起的原因。 启动策略/营销计划的很大一部分应该是应用商店优化 (ASO),因为它会直接影响您应用的排名和搜索可见性(主要是通过关键字和应用标题)。 但是ASO还主要通过应用程序预览/预告片,屏幕截图和说明来处理转换率,还可以通过评级和评论的“管理”来解决转换率。 特别是Apple的App Analytics可以为您提供极大帮助的部分,因为它为以前的“未知”领域提供了一些启示。 在本简介中,我们将了解App Analytics的实际含义,为什么要使用它以及如何最大程度地利用它。 什么是App Analytics? 涵盖基础 App Analytics是Apple自己的分析平台。 它位于iTunes Connect内部。 它于2014年夏季在WWDC上宣布,终于在2015年春季推出,并于最近(2017年5月)添加了有关发现应用的新指标。 有人可能会说只是“另一种”分析平台,例如来自Flurry / Yahoo Mobile,Google或Facebook的免费解决方案,但App Analytics最终提供了其他人无法提供的可靠数据(扰流器:App Store印象,引荐网站,归因) 在您太兴奋之前,这里有几个小警告: 显示的所有数据仅来自运行iOS 8和tvOS 9及更高版本的设备; 平均而言,您会错失5%的iOS用户 苹果有三种不同的指标类型:“应用商店”,“使用情况”和“销售”。 客户可以选择退出应用使用情况数据,但不能退出销售和商店数据 报告最多可能延迟72小时 App Analytics包含四个部分: 概述 ,这是您的App Analytics“信息中心”,可为您提供快速概述 指标 ,App Analytics的核心,您可以在其中深入研究数据 来源 ,向您显示推荐率最高的应用程序,网站(仅通过Safari)和自定义广告系列链接 保留率 ,同类群组分析(仅适用于加入) 指标 […]

iOS 10的应用程序组和iMessage扩展– Tack Mobile –中

Messages应用程序的可能性几乎是无穷无尽的,我很高兴看到iOS 10的发布在接下来的几个月中提出了其他独立或捆绑的创造性应用程序。对于我一直在从事的项目在过去的6-7个月中,我们希望通过Messages扩展程序使事情变得简单。 没有新功能,只有现有应用程序的简单功能扩展到了Messages,可以与当前没有该应用程序的人共享。 对于没有订阅功能的付费应用程序,新用户的招聘对于赚钱至关重要,这是创建Messages扩展的主要目标。 本质上,我们希望为用户提供一种更轻松的共享方式,从而通过消息向非用户推广。 第一步是创建一种在现有包含应用程序和Messages应用程序之间共享数据的方法。 本文底部已链接了有关创建App组以通过NSUserDefaults和Core Data共享数据的出色教程,我在创建Messages应用程序时引用了这些教程。 这篇文章是关于使用应用程序组通过NSFileManager共享iMessage扩展的数据。 我们已经在使用NSFileManager将要共享的数据写入磁盘。 本质上,我们遵循将数据托管在服务器上的通用模式,该服务器可根据需要提取并在本地写入/删除/读取。 由于我们已经使用NSFileManager写入文档目录,因此我使用NSFileManager与我们的消息应用程序共享数据。 就我的目的而言,Core Data可能会过大。 第一步是创建iMessage扩展。 从现有容器应用程序中,选择文件->新建->目标。 这将弹出此窗口: 选择“ iMessage扩展”,然后选择一个名称。 您可以稍后更改显示名称,并且显示名称可以与您的容器应用程序相同,这是我们选择执行的操作,因为扩展名旨在驱动用户购买容器应用程序。 要开始共享数据,您需要在“目标”功能中打开应用程序组。 这应将com.apple.security.application-groups添加到YourProject.entitlements文件,并在project.pbxproj文件中启用com.apple.ApplicationGroups.iOS。 需要明确的是,您并没有更改这些文件,当您在“目标”->“功能”中打开“应用程序组”时,它应该只显示在源代码控件中。 在新启用的“应用程序组”部分中,单击加号图标,Xcode将弹出一个视图,显示“添加新容器”。 这必须是唯一的,因此我遵循推荐的group.com.YourCompanyName.YourProjectName.container命名约定。 除不创建新容器外,还请按照消息目标中的这些相同步骤进行操作,只需选择刚刚创建的容器即可。 它是两个应用程序之间的共享容器。 确保两个目标都选中了您创建的容器,并且选中了“步骤:”下面的三个标记。 现在,您已经在两个目标中都启用了应用组,就可以开始编码了。 我做的第一件事是创建用于访问共享容器的辅助方法,因为它是我用于创建共享目录,写入数据和删除数据的路径。 您将要使用您在“项目设置”中“应用程序组”下创建的确切字符串。 我将其设置为常量,并使用NSFileManager方法containerURLForSecurityApplicationGroupIdentifier:创建了一个返回容器路径的方法,并传入了App Group常量。 在消息扩展之前,我们使用NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)将数据写入NSDocumentDirectory; 然后选择返回的第一个路径。 我更新了所有我们使用共享应用程序组容器的地方。 基本上,在使用此标准NSDocumentDirectory的任何地方,都需要对其进行更新以使用容器路径。 主要是在这里NSFileManager写入数据,获取数据和删除数据。 我们还有一个可用的磁盘空间检查,在这里我们检查attributeOfFileSystemForPath:并检查NSFileSystemFreeSize对象以查看剩余的磁盘空间,并且我还更新了此路径以检查容器路径而不是NSDocumentDirectory路径。 仔细检查文件管理器的工作并确保全面更新非常重要,因为您可以想象如果更新以将数据写入新容器但仍从NSDocumentDirectory等删除数据时可能会遇到的错误。 ,在初始化下载管理器时,我检查了共享路径中的目录是否存在,如果不存在,则使用createDirectoryAtPath:withIntermediateDirectories:attributes:error创建了该目录,然后再次传递了共享容器路径。 您需要执行此步骤,因为NSDocumentDirectory已经存在,但是需要创建容器目录。 既然您已使容器应用程序从共享应用程序组中写入,读取和删除数据,那么您也应该可以在iMessage扩展中自由使用它了! 当然,您的扩展程序需要数据的用途可能千差万别,但对我来说,仅对viewWillAppear进行一次检查/更新以查看文件管理器中的数据就足够了。 自从我在Swift中编写扩展名以来,我就使用了FileManager.default,并且再次使用了相同的containerURLForSecurityApplicationGroupIdentifier方法,该方法在Swift中被命名为forSecurityApplicationGroupIdentifier。 同样,您需要在“应用程序组”部分中传递确切的字符串。 然后,我过滤了结果以仅查找带有m4a文件扩展名的项目,并将这些文件保存在用于填充CollectionView的array属性中。 根据您要写入文件管理器的数据类型,这可能会变得很复杂。 但是对于我的使用,仅从写入共享应用程序组的文件和文件名中,我就能获得编写简单但有意义的扩展名所需的信息。 要考虑的一个潜在问题是您的用户在现有版本上更新到新的应用程序版本。 该应用程序的较旧版本将把数据写入NSDocumentDirectory,并且在尝试在新的应用程序组容器中查找数据时将失败。 为了获得无缝的体验,并且不让用户再次下载他们已经拥有的项目,您需要将数据从NSDocumentDirectory迁移到新的应用程序组容器。 在初始化下载管理器时,我在m4a文件格式的documents目录中添加了对项目的检查,并将其复制到共享应用程序组中,然后从NSDocumentDirectory中删除。 链接到有关使用应用程序组将NSUserDefaults共享到扩展的教程,该扩展对我有所帮助:http://www.atomicbird.com/blog/sharing-with-app-extensions

当我不知道Salesforce时,如何构建连接到Salesforce的iOS应用?

每隔一段时间我就会感到沮丧。 我仍然想念Parse。 它使构建移动后端变得如此容易,而且我敢说它很有趣。 是的,是的,我明白了。 昆顿,过一辈子。 继续。 像许多伟大的技术一样,不幸的是Parse不得不消亡。 不是Facebook杀死了它。 解析从未将后端连接到公司。 正是这种联系使公司能够与他们的移动应用程序客户建立关系。 没有此连接,移动应用程序就像玩俄罗斯轮盘赌。 一会儿一切都好,然后ba! 最终,这个对业务至关重要的应用最终以致命的一击沉入了应用商店DEAD中。 作为我在Salesforce工作的一部分,我与许多企业讨论了如何构建移动应用程序,从而避免了断开连接的应用程序的命运。 到目前为止,大多数人都知道我们称为App Cloud的平台。 他们可能为员工构建了自定义应用程序,但是在构建本机应用程序时,他们没有内部技能。 现实情况是,除非该公司是旧金山湾区的一家科技公司,否则他们可能没有一支消费移动应用程序专家团队。 他们将这类工作外包。 Salesforce到底是什么? 我是本地人,主要关注Apple生态系统平台:iOS,MacOS,TVOS和WatchOS。 我们使用诸如Xcode,Cocoapods之类的工具,并且喜欢Swift(虽然泰勒·斯威夫特确实写了一首吸引人的歌曲,但他并不喜欢泰勒·斯威夫特的综艺)。 将客户线索添加到Salesforce 抓住Leads-SDK cocoapod,在情节提要中添加一个按钮,将其类型更改为LeadsButton,然后询问客户其Salesforce组织ID(不用担心,他们会知道您在说什么。) 豆荚“ leads-sdk” 然后捕获客户信息: var d:Dictionary = [String:String]() //填充标准字段 d [Leads.StandardFields.FIRST_NAME] =“奎顿” d [Leads.StandardFields.LAST_NAME] =“墙” d [Leads.StandardFields.EMAIL] =“ quinton@here.com” d [Leads.StandardFields.COMPANY] =“ Salesforce” d [Leads.StandardFields.CITY] =“旧金山” d [Leads.StandardFields.STATE] =“ CA” myLeadButton.formFields […]

如何使用ASO为iOS 11做准备

开发人员应注意并做好重新设计App Store的准备,以确保其应用程序可以吸引其目标受众。 这些更新不应掉以轻心。 必须花时间创建App Store Optimization(ASO)策略,以成功更新其应用程序的元数据,为iOS 11做准备。 更改产品页面 每个元数据都有增加可见性,转换用户和驱动下载的能力。 借助iOS 11,开发人员将有更多机会执行所有这些操作,并通过额外的预览视频和新的文本字段展示应用程序。 与当前布局略有不同。 在当前的App Store iOS 10.3.3中,页面顶部会向用户显示:应用程序图标,应用程序名称,星级(用小写字母标明)以及开发者/发布者的名称。 在下面,用户将看到预览视频和屏幕截图,使他们可以立即访问以查看实际应用。 平均而言,用户会在3-5秒内观看预览视频和屏幕截图。 这使他们有足够的时间向下滚动产品页面并阅读说明。 App Store中新的iOS11产品页面的设置与此类似,但用户受到欢迎:应用程序图标,应用程序名称,字幕,星级,类别等级和年龄等级。 屏幕截图和预览视频将显示在下方,类似于当前布局。 很大的变化是,将显示多个预览视频; 开发人员和用户都可以期待的变化。 在 此外,Apple现在允许开发人员为每个应用程序最多提交三个预览视频。 除了其他预览视频外,iOS 11还将引入另一个新的文本字段,称为促销文本。 该文本字段将直接出现在说明的顶部,并且可以随时更新。 通过了解每个更新并利用开发人员将受益 的新功能,以确保他们的应用能够获得可见性并转化用户。 成功为iOS 11做准备的唯一方法是实施ASO策略。 ASO和iOS 11 开发人员不应使用不稳定的元数据进入iOS 11。 他们需要通过制定ASO策略来确保其元数据得到充分优化并以受众为目标。 虽然每个元数据都是自己制作的,但它们都很重要 帮助应用在App Store中变得更加可见。 1.应用名称 应用名称在用户发现新应用方面起着至关重要的作用。 应用程序名称(最多30个字符)必须简单易记。 开发人员还可以包括标题标签,这些标题标签是可以快速解决应用程序核心功能的大量关键字。 标题标签可帮助用户更快地确定哪个应用程序可以满足其需求,同时保留品牌名称和核心功能。 2.字幕 字幕是iOS 11中引入的全新文本字段之一,出现在应用程序名称的正下方,并且限制为30个字符。 可以将字幕看作是补充性的描述符集 标题标签。 由于开发人员的空间有限,因此字幕必须引人注目且简洁明了很重要。 它需要简要总结该应用程序,同时突出其核心功能。 3.预览视频 由于用户倾向于简短地浏览产品页面,因此开发人员需要确保其预览视频易于理解且引人入胜。 […]

iOS上的KEA Place是一款出色的AR应用程序,但其成功还有更多

自2013年以来,宜家就一直在尝试让客户使用App将家具放置在自己家里的方法。自iOS 11和ARKit发布以来,宜家App一直被视为该技术的展示。 宜家的“地方”应用程序很棒,但并非出于您可能认为的原因…… 技术栈 IKEA Place使用ARkit来检测地板的水平平面以放置家具,并利用Core Motion和视觉惯性测距法。 它不是唯一使用这些技术的应用程序。 他们已将其与Unity引擎(支持ARKit)配对。 宜家似乎已经充分利用了自己作为早期技术适配器并将其应用于AR的经验,这似乎仍然是未来的巨大机遇。 但是在2019年,感觉这已经不是曾经的移动设备的创新应用了。 宜家还做了哪些工作才能使Place变得更好? 下载MNC应用 宜家允许从Apple的任何App Store中安装该应用程序,并在安装后更改语言和本地化选项,并包括宜家运营的所有地区。 即使您使用的不是母语,设置页面也易于使用。 更改语言时,界面不会在更新时被锁定。 这意味着我无需更改App Store即可看到SGD(新加坡元)的价格; 精彩! 不仅如此,对语言的更改不需要重新启动,甚至允许用户在语言更改时继续使用该应用程序。 这些功能使下载应用程序的摩擦降低,并使卸载率保持较低。 这不是他们所想的。

在iOS上设计POS策略时应考虑什么?

POS系统是您业务运营的基础。 但是,选择POS系统可能立即变得不知所措。 因此,Mobiloitte在这里为您找到适合您中小企业的正确POS系统。 由于时间已经改变,请不要使用传统的POS系统,而在为iOS平台设计POS应用时需要制定策略。 最好的POS应用程序价格适中且易于使用,还应具有其他节省时间的功能,例如人员管理,库存管理,任务自动化,客户信息收集以及更多功能,使其更轻松并平稳地进行业务运营。 在为iOS设计POS时,请牢记以下几点:– 自定义功能 :每个POS应用程序都应具有自定义功能,因为根据要求,您可以更改/添加产品及其信息。 使用此选项,组织可以随时随地更新其项目/产品。 24/7支持 :如果您想从客户角度创建应用程序,那么请始终牢记,您的POS应用程序可以提供24/7客户支持,实时聊天,社区论坛,社交媒体支持等等。 它有助于吸引客户并增加业务销售。 更好的外观 :这可能是设计POS应用程序时最重要的因素。 如今,公司支付了大量的用户体验设计。 在大多数情况下,您会看到外观和感觉不好的优质POS应用程序会遭受后果,因为消费者确实在乎应用程序的外观。 包裹有诱人的优惠 :必须为您的POS应用程序提供优惠和折扣。 这是轻松定位目标受众的最佳方法。 必须向现有客户和新客户提供大量折扣,积分系统,优惠券和更多活动。 如果要为iOS平台创建POS应用,则在设计POS策略时需要考虑所有上述几点。 让我们轻松地与我们联系。 相关文章:通过POS集成最大程度地利用iOS应用 像这样: 喜欢加载中……