Tag: ios

了解您的下载,按关键字关键字

在Quora的ASO线程中,我们看到有人问,Google Play或iOS App Store中是否有一个工具可让您查看每个应用程序有多少下载? 可悲的是,所有答案基本上都说:“不,但那不是很棒”。 令人高兴的是,我们很自豪地说“是”-实际上,有一个工具可以帮助您做到这一点。 昨天,我们在您的信息中心宣布了“每个关键字的下载估算值”功能。 要查看其工作原理,请看上面的示例应用程序VPN Hero Shield。 他们为其排名的一些关键字包括“ vpn”,“ vpn free”和“ proxy”。 现在,只需转到信息中心,您就可以确定哪些关键字为您带来了最多的下载量。 惊喜,惊喜—“ vpn”获得了VPN Hero Shield下载量的64%。 另一方面,“代理”的表现很差。 现在,我们知道您可能会遇到一些问题,即“如何将这种出色功能应用于我自己的应用程序?”。 让我们跳进去。 您的数据向导如何计算每个关键字的下载估算值? 好吧,我们无法透露所有信息,但是由于过去两年中我们拥有超过400万个应用程序的深层数据,并且每天都会更新每个基准测试-我们的敬畏而辛勤的数据科学家使用现有信息并通过我们的算法对其进行了过滤,从而得出以这些百分比。 这是真实数据吗? 不,这是一个估计,但是是一个非常准确的估计(请参阅Incipia上个月关于移动操作被评为最准确的ASO工具排名第一的研究)。 不幸的是,没有人可以提供您实际的数据,但这是次要的事情! 在哪里可以找到它? 要使用每个关键字的下载估算值,请转到ASO Intelligence下的“关键字分析”部分。 向下滚动,直到到达关键字列表,它是第三个标签。 瞧! 或者-您可以单击此链接。 如何将估算数据应用于自己的应用? 这将有助于找到您应在ASO和广告中使用的最有效的关键字,从而可能提高排名,下载量和收入。 现在,您可以停止浪费时间在无法获得实际结果的关键字上。 丢弃无效的文件,并获得所需的下载文件。 查看每个关键字的下载估算!

VIPERtasarımpaterni nedir?

吉里斯 Apple iOS的MVC模式,可以帮助您解决MVC的问题。 1996年MVC足球比赛将在MUL 1996举行。 Microsoft网络模型Web窗体Web窗体MVC模式2009年窗体的窗体。 iOS的MVC模式的MVC模式的ihtiyaçlarıkarşılamamayabaşladı。 位置视图控制器的位置已过时。 业务逻辑模型业务模型模型业务层数据库—数据模型sade hale getirildi。 她的母亲是孩子,是孩子,是孩子,是孩子,是孩子,她的孩子,孩子,孩子,孩子,孩子,孩子,孩子,孩子,孩子。 an MVC haricinde MVP,MVVM和VIPERtasarımpaternleri var。 在iOS上的应用程序在VIPER上运行的时候,会出现inceleyelim。 VIPER mimarisi nelerdenoluşur? VIPER mimarisiadını视图,交互者,演示者,实体路由器(线框)’ılkharflerindenalıyor。 Bukavramlarınneolduğunakısacabakalım。 视图: VIPER mimarisinde视图被动演示者演示者被动演示。 HangiiçeriğingösterileceğiView’ebağlıdır。 Kullanıcıactionlarıpresenter’ayönlendirir。 交互器:业务逻辑işlemlerininyapıldığıkısımdırveuygulamanınomurgasınıoluşturur。 Bu katmandayapılanişlemlertamamen UI danbağımsızolmalıdır。 主持人:主持人esas olarak查看il ilgili logic’iiçerenkoduiçerir。 用户交互作用的用户数据查看用户交互作用。 查看ile Interactorarasındabirköprügörevigörür。 Bu katmanda视图ile ilgili veyauygulamanın商业kurallarıylailgili kodbulunmamalıdır。 实体:交互模型tarafındankullanılan模型nesneleriniiçerir。 Entity’lerin sadece Interactortarafındankullanılmasıçokönemlidir。 Interactor asla演示者层’实体模型lerinigöndermez。 路由器: Hangiekranlarınne zamangösterileceğinibelirlendiğiuygulamageçişakışınbulunduğukatmandır。 […]

iOS应用内购买和订阅

真的很简单。 看一下下面的代码。 让我们来看看它。 一些关键概念是: SKPaymentQueue : 保留所有事务以进行进一步处理的队列 SKProduct :在Itunes中声明的产品与所有可用信息联系在一起 SKPayment :购买产品的意图 SKPaymentTransaction :有关SKProduct的事件 SKProductRequest :请求获取有关提供产品ID的SKProducts的信息 SKProductResponse :包含所需产品的响应。 它由两个列表组成:产品和invalidProductIdentifiers。 第一个将包含成功获取的SKProducts,第二个将包含未能与SKProduct相关的所有标识符。 如果您获得无效的标识符,这是一个故障排除列表,可以帮助您。 确保合同,税务和银行信息已完成 确保正确拼写ProductID 确保AppID是显式的(没有通配符(*)) 确保配置文件是正确的配置文件 确保在产品说明中启用了待售清算选项 确保产品处于批准状态 确保不拒绝对App Store的最后一次App评论 现在,首先,通过以下几行,您可以轻松地创建一个SKProductRequest。 let request = SKProductsRequest(productIdentifiers:productIDs) request.delegate =自我 request.start() 由于以下方法是回调,因此请确保实现SKProductsRequestDelegate。 func productsRequest(_请求:SKProductsRequest,did接收响应:SKProductsResponse) 在那里,您将获得适用于您的应用程序的所有SKProducts。 要进行购买并创建SKPayment。 让付款= SKPayment(产品:产品) SKPaymentQueue.default()。add(付款) 确保在允许用户进行购买之前,始终要获取产品。 这些SKProducts将在其中局部化价格,因此您应该显示它。 这样可以确保您始终将应用程序中的数据始终保持最新,因为应用程序中的价格错误可能会导致Apple将其从App Store中删除。 您可能还会在流程中注意到“ 外部事件”部分。 交易可以在您的应用程序外部发生。 假设您的用户在系统设置中更改了其订阅类型,或者您的延期交易获得了用户父母的批准,那么除非您期望它们,否则您将无法告知。 因此,始终在AppDelegate中,在您的应用程序开始时,将该应用程序订阅到PaymentQueue。 这样,您将确保您不会错过任何事件。 现在,有时该帐户将无法使用。 […]

Swift 3.0中的Any vs.AnyObject

当我在第一次解析JSON数据时遇到这两个类型别名时,我不知道如何正确区分或实现它们。 那是什么 Any和AnyObject是Swift中的两个特殊类型,用于处理非特定类型。 根据Apple的Swift文档, Any 可以代表任何类型的实例,包括函数类型和可选类型。 AnyObject 可以代表任何类类型的实例。 好的,很简单-所有类型都使用Any ,Class类使用AnyObject ,对吗? 为了了解它们在代码中的实际行为,我决定在Playground中与它们一起玩。 任何人都允许我使用不同类型的混合函数,包括函数和非类类型,例如Int,String和Bool。 根据文档,此数组中的元素是作为值类型的Structs,因此从理论上讲, AnyObjec t在这些情况下不起作用。 为了验证这一点,我尝试使用AnyObject包括String和Ints,这是Swift中的值类型。 不出所料,编译器向我抛出一个错误,指出元素与数组中的AnyObject类型不符 。 知道了! 然后,当我尝试遵循编译器的建议时,发生了一件奇怪的事情: 刚刚发生了什么?! 如何通过将每个元素显式转换为AnyObject来在整数和字符串上使用AnyObject ? 然后,我将anyObjectArray打印到控制台中。 在我看来, Hi元素显然看起来像是一个字符串,但是在Swift中却没有像普通的String值一样引号! 接下来,我使用for-in循环打印每个元素,以检查其实际类型,而不是AnyObject的强制类型。 首先,我使用了is运算符来查看元素是否为Swift Struct类型。 它是String类型的! 那么如何将其转换为AnyObject呢? 同样,Swift中的字符串是结构,而不是类类型。 因此,从理论上讲,我不应该将它们转换为AnyObject 。 我完全感到困惑,决定对它做更多的实验。 这次,我使用了Objective-C类型的NSNumber和NSString来检查每个元素的类型。 等等, 嗨也是NSString,数字元素是NSNumber! 而且……它们是Objective-C中的引用类型! 这是为什么Hi在控制台上没有引号的原因吗? 我写了一些下面的代码,看我的假设是否正确。 🔎 已确认! 现在, 转换为数组中AnyObject的元素是Objective-C的类类型:NSString和NSNumber。 那么……幕后到底发生了什么? 我继续深入研究该主题,并从文档“ 将Swift与Cocoa和Objective-C(Swift 3.0.1)”中找到了最合理的答案。 作为与Objective-C互操作性的一部分,Swift提供了使用Cocoa框架的便捷高效的方法。 Swift会自动将某些Objective-C类型转换为Swift类型,并将某些Swift类型转换为Objective-C类型。 可以在Objective-C和Swift之间转换的 类型 称为 […]

关于两个图书馆的故事

这不是关于您的典型库的故事,而是关于编程中的库的故事。 在这种情况下,库是程序可以使用的预编译模块的集合-无论是函数,变量,类还是数据结构。 通常,库对于存储经常使用的模块很有用,因此当程序运行所述模块时,并非每个程序都必须显式链接某个模块。 有两种类型的库,静态库和动态库。 在深入探讨关键区别之前,对您来说,重要的是要了解程序(在这种情况下为C程序)的编译方式。 编译分为四个步骤,其中最后一个阶段是链接器。 链接器采用在上一步中创建的程序的目标代码以及该函数使用的函数的所有其他目标文件,并创建一个可执行文件。 让我们看一下包含静态库的程序和包含动态库的程序的链接阶段的两个示例。 示例—静态库 您创建了一个程序calculation_static.c ,该程序运行函数get_product(int a, int b) 。 编译后的汇编程序短语之后,您的函数现在将转换为目标代码。 作为链接阶段的第一步,链接器将使用calculation_static.c的目标代码,并使用该目标代码生成可执行文件。 但是等等,链接器将在所有库中搜索get_product(int a, int b)函数。 链接器找到它后,它将复制get_product(int a, int b)的目标代码,并将其粘贴到get_product(int a, int b)为get_product(int a, int b)创建的可执行文件中。 优点:静态链接的最大特点是可执行程序,如果它是第一次运行,它将始终运行。 该代码不会被破坏。 缺点—例如,如果有多个函数,假设我们的calculation_static.c包含100个函数,而我们包含另一个C程序calculation2_static.c ,其中包含200个函数,那么您需要在其中包含所有300个函数的目标代码。您的可执行文件。 假设您是通过静态链接生成可执行文件的,而用户则将这个可执行文件用于其程序。 几个月过去了,包含get_product(int a, int b)函数的库的创建者完全更改了该函数。 这就是问题所在,用户几个月前使用的可执行文件具有旧的get_product(int a, int b)函数,而不是新版本。 用户将不得不使用该库再次编译原始C程序,并获取该可执行文件以更新其版本。 本质上,每次更新库时,您都必须重新编译程序。 如何创建-要创建静态库,最基本的工具是名为“ ar”(档案)的程序。 该程序可以修改静态库中的目标文件,列出目标文件的名称以及其他各种内容。 ar rc libraryName.a filename.o filename2.o filename3.o […]

Discore.io-这是什么,为什么我们要这样做?

我们在2016年发现了碟式高尔夫,而我们的第一场比赛就是练习掷球。 那时我们很高兴能将光碟放入篮中不到五次! 但是,玩的越多,我们越想保存分数并将其与我们的朋友进行比较。 我们开始使用Skoorin.com,但很快就意识到该程序非常脆弱, 移动版本不是用户友好型的,很难找到您自己的历史得分,而且我们认为很多重要的功能缺失(例如,得分图,社交功能和独自玩耍的动机)。 作为一个IT团队,我们在一个周末聚会,并创建了即将成为终极光盘高尔夫应用程序的第一个Beta版本,我们现在将其称为Discore。 创建Discore.io的目的是为碟形高尔夫球爱好者提供更好的用户体验,并在少数几种可用的碟形高尔夫球记分卡应用程序中提供新的选择。 在Thorgate,我们重视出色的用户体验,因此我们竭尽全力确保Discore直观,健壮和有用。 我们的目标是无论身在何处,都能轻松自发播放。 为此,我们创建了快速搜索功能以查找最近的课程,选择要玩的朋友(或添加新朋友)的简便方法以及输入分数的超级简便方法。 由于碟式高尔夫是一种社交游戏,我们让Discore记住了您上一次玩过的朋友,因此您不必每次都进行搜索,只需从建议列表中添加即可。 我们还尝试了各种输入分数的方法,以找到一种非常用户友好的方法。 我们的第一个想法是: 当我们去Nmmme的碟形高尔夫球场进行测试时,我们真的很喜欢站在森林里拿着自己的应用程序🙂但是,我们很快就知道,输入结果的方法并不舒服。 现在,我们依靠传统的数字键盘。 到目前为止,我们已经开发了以下功能: 创建游戏-课程和玩家选择,输入分数 邀请新用户(尚未使用Discore.io的用户) 游戏统计信息,包括得分图 您自己的统计数据 评分(尽管目前用户看不到它们)。 我们尝试使用两种不同的评分系统:PDGA评分和ELO评分-两者相辅相成,并且相结合时,会给游戏带来更多刺激。 每个课程的前十名排行榜 如果您可以尝试https://discore.io并提供宝贵的反馈意见,我们将不胜感激。 我们还有一个iOS应用程序,您可以从此处下载:https://itunes.apple.com/us/app/discore/id1160143224?mt=8

应用启动板

我尝试了AppLaunchpad,上传了五个HyperBowl屏幕截图。 五,因为AppLaunchpad会生成一组屏幕尺寸的iPhone样机图像,并带有用于App Store的标题(五是App Store显示的最大屏幕截图数量)。 从这个意义上说,它很有用,因为它可以为所有iPhone屏幕尺寸生成图像,尽管不同的iPhone 4纵横比是一个问题,因为您可以看到此处的保龄球明显变平了。 其他限制:我看不到对横向或iPad屏幕的任何支持,尽管提供了几种颜色组合,但仍然找不到我喜欢的颜色。 尽管如此,我认为它在HyperBowl(itch.io)页面上看起来不错,并且我可能会在App Store上尝试一下,至少可以生成iPhone 6/7 +大小的屏幕截图。

iOS中的导航器– Marc StevenCoder –中

在iOS中,存在从ScreenA到Screen B的基本数据流。 您的ViewController A可能具有以下内容: override func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath) { let detailsData = tableData[indexPath.row] let detailViewController = ViewControllerB() detailViewController.data = detailData navigationController?.pushViewController(detailViewController,animated:true) } 您的viewcontrollerB可能有这样的东西: init() { navigationItem:rightBarButtonItem = UIBarButtonItem(title:”Go to ViewController c!”,style:.plain,target:self,action:#selector(didTapGoButton)) } func didTapGoButton() { let followingViewController = ViewControllerC() navigationController?.pushViewController(nextVC,animated:true) } 但是,这有什么问题呢? 大多数开发人员每天都会以标准动作编写此代码。 ViewController的作用: 1,父母 2,孩子 3,老板 在ViewControllerA中,有很多工作要做。 有什么问题? ViewController不是独立的 viewController依赖n有可以做某些事情的父母 ViewController做得太多(流程,演示等等) 解决方案v1:委派 []() […]

ARKit 1.5 —墙上的另一块砖头♪(什么墙?)

故事作者: nomtek的 iOS开发人员 Przemek Olszacki 具有iOS 11.3的Apple正在更新其AR平台-ARKit。 正如我们可以在他们的网站上阅读的那样,它添加了一项重要的新功能-垂直表面检测。 “除了桌子和椅子之类的水平表面之外,ARKit现在还可以识别虚拟物体并将其放置在垂直表面上,例如墙壁和门(…)” 苹果 如果这个新功能与检测水平表面一样好,那可能真是太好了! 想象一下所有允许您在不绘制墙壁轮廓的情况下装饰墙壁的应用程序。 想知道该挑选哪个壁纸? 没问题,会有一个应用程序可以向您显示墙壁的外观。 它还可以改善现有AR应用程序中的用户体验。 让我们举一个例子,如我们在上一篇文章中所描述的应用程序-Room Scanner。 目前,您必须四处走动才能获得准确的测量结果。 如果ARKit能够检测到墙壁,则进行测量就如同将设备指向墙壁的方向一样简单。 让我们对其进行测试! 为了测试新功能,我编写了应用程序,使我能够查看检测到的平面(水平和垂直)。 对于每个检测到的平面,它都会绘制一个网格,大致显示ARKit如何看到该表面。 足够的理论。 这是我制作的视频,因此您可以亲眼看到它的运行状况: 失望了吗 我也是… 期望与(增强)现实 在苹果公司的网站上阅读该笔记时,我们大多数人期望垂直表面的检测至少与水平表面一样好。 不幸的是,事实并非如此。 经过测试,我得出的结论是,它仅适用于具有明显特征的表面(例如,悬挂照片,文字或艺术品)。 如果表面是平整的(如单色的墙壁)或只有很少的小特征,则不会检测到。 这意味着大多数墙对于ARKit都是不可见的。 伤心。 您如何看待ARKit更新? 对你起作用吗? 在评论中分享您的经验! 伙计们,让我们保持联系!

FileMaker 17平台有哪些新增功能?

快速回顾 发展历程 事半功倍 主从布局 —利用新的门户增强功能创建常见的设计模式,如主从布局。 通过消除创建自联接关系和其他脚本的需要,节省了宝贵的开发时间。 组对象选择 —轻松修改,重新定位或调整组中单个对象的大小,而无需首先取消所有对象的分组。 重新设计的版面模式 -体验更简化的环境来创建版面。 通过文档窗口内的方便窗格,可以更方便地发现“检查器”,“字段”选项卡和“对象”选项卡。 分别隐藏或显示窗格。 默认字段 -添加新表时,将自动创建显示记录创建信息的字段。 这些字段包括主键,创建日期,修改日期以及创建或修改该字段的人。 可以根据需要自定义默认字段,也可以预先配置默认字段。 脚本增强功能 —通过增强的脚本步骤创建更多可重用的代码。 在输入字段中添加变量,以在“ 显示自定义对话框”中填充和检索支持变量的文本。 在“ 执行脚本”步骤中,使用新的“指定的”选项从列表中选择一个脚本或通过计算指定脚本名称。 我的应用程序窗口 -从一个方便的窗口中启动任何自定义应用程序。 轻松导航至“最近”选项卡以查找最近打开的文件,然后导航至“创建”选项卡以查找新的Starter应用程序。 多个电子邮件附件支持 -将多个文件附加到电子邮件中,可以更灵活地与客户或团队进行沟通。 复制和粘贴自定义菜单 -通过在您创建的其他应用程序中重复使用自定义菜单来节省时间。 只需复制菜单集,菜单和菜单项,然后将它们粘贴到另一个文件中即可。 流动性 随时随地做更多 感官感知 —无论您是在洞穴中速降,乘坐云霄飞车还是进行其他类型的田野研究,都可以使用新的传感器支持功能在iPad和iPhone上自动收集数据。 使用新的计算功能,移动应用程序可以从iPad或iPhone设备中的iOS传感器捕获信息,包括位置,气压,加速度计,磁力计,陀螺仪,气压计和电池电量。 自动完成 -使用文本字段中的自动完成功能,在FileMaker Go中更快,更准确地输入数据。 输入一个或两个字母,并立即查看与您键入的内容匹配的下拉列表。 键盘快捷键 -使用iOS设备的外部键盘(例如,智能键盘)现在支持的键盘快捷键来提高效率。 拖放 —在运行iOS 11的iPad上的应用程序之间进行文本,照片和文件的拖放(至少),可以更快地进行操作。 新的FileMaker数据迁移工具 导入大数据集时,从几天到几小时,或者从几小时到几分钟。 此新的省时命令行工具可帮助您立即更新已部署的自定义应用程序。 可通过FileMaker Developer Subscription获得数据迁移工具。 改进的iOS App SDK 连接到其他数据源,并从FileMaker应用中获取更多信息 改进的iOS […]