Tag: MVP

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

在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和广告中使用的最有效的关键字,从而可能提高排名,下载量和收入。 现在,您可以停止浪费时间在无法获得实际结果的关键字上。 丢弃无效的文件,并获得所需的下载文件。 查看每个关键字的下载估算!

笨拙的UI是一个好的UI:在iOS中使用Swift的MVP

由Mohamed Iyad Tamer Agha撰写 在开发iOS应用程序时,Model-View-Controller是一种常见的设计模式。 通常,视图层由以编程方式定义或在xib文件中定义的UIKit元素组成,模型层包含应用程序的业务逻辑,而由UIViewController类表示的控制器层则是模型和视图之间的粘合剂。 这种模式的一个很好的部分是将业务逻辑和业务规则封装在模型层中。但是,UIViewController仍然包含与UI相关的逻辑,这意味着: 调用业务逻辑并将结果绑定到视图 管理视图元素 将来自模型层的数据转换为UI友好格式 导航逻辑 管理UI状态 和更多 … 承担所有这些责任,ViewController经常变得庞大,并且难以维护和测试。 因此,现在该考虑改进MVC来解决这些问题了。 我们将此改进称为模型视图演示者MVP。 MVP模式是由Mike Potel于1996年首次提出的,多年来讨论了多次。 Martin Fowler在他的GUI体系结构文章中讨论了这种模式,并将其与其他用于管理UI代码的模式进行了比较。 MVP有很多变体,但它们之间的差异很小。 在这篇文章中,我选择了似乎在当今的应用程序开发中最常用的通用示例。 此变体的特征是: MVP的视图部分同时包含UIViews和UIViewController 该视图将用户交互委托给演示者 演示者包含处理用户交互的逻辑 演示者与模型层进行通信,将数据转换为UI友好格式,并更新视图 演示者不依赖于UIKit 视图是被动的(转储) 以下示例将向您展示如何实际使用MVP。 我们的示例是一个非常简单的应用程序,它显示了一个简单的用户列表。 您可以从此处获取完整的源代码:https://github.com/iyadagha/iOS-mvp-sample。 让我们从一个简单的用户数据模型开始: [js] struct用户{ 让firstName:字符串 让lastName:字符串 让电子邮件:字符串 年龄:整数 } [/ js] 然后,我们实现一个简单的UserService,它异步返回用户列表: [js] 类UserService { //服务延迟交付模拟数据 func getUsers(callBack:([[User])-> Void){ let users = [User(firstName:“ […]

iOS开发:The Woost Way™

在Woost,我们的承诺是在一个月内生产出最低可行的产品。 我们相信(几乎)每个新概念的核心都可以在该时间范围内构建。 我们帮助我们的客户找到核心,定义目标和假设,并缩小范围,直到一个月之内即可完成开发。 我们为网络(响应式)和移动(本地Android,本地iOS)构建。 为了能够加快速度并快速交付,我们拥有用于大多数项目的标准工具集和标准项目设置。 在本文中,我将向您介绍我们用于iOS项目的内容。 当然,随着每天都会出现新的最佳实践和新框架,这可能会发生变化。 警告:技术性越来越强😉 可可豆 其他人已经做了很多工作。 如果您知道如何珍惜他人*的工作,则可以节省大量时间,并避免通过使用轮子来重新发明轮子。 *: 这个很重要! 您应用的性能和稳定性至关重要。 CocoaPods是Swift和Obj-C项目的程序包/依赖性管理器。 您可以将CocoaPods集成到项目中,以轻松添加,删除或更新外部软件包。 我们主要使用CocoaPods,有时使用Carthage,但发现前者更易于使用。 我们或多或少的标准Podfile看起来像这样,已经使您了解了我们使用的工具: 吊舱“ RxSwift” 豆荚“ RxCocoa” pod’SwiftyJSON’ 吊舱“翠鸟” pod’PureLayout’ 吊舱“ R.swift” 豆荚“面料” pod’Crashlytics’ pod’Firebase / Analytics’#或’GoogleAnalytics’ 在设置Pod时,请确保还检查gitignore.io来创建一个漂亮的.gitignore模板! 我们通常从这一点开始。 接收 RxSwift是ReactiveX for Swift的一个版本(RxCocoa通过Reactive magic扩展了Cocoa API)。 ReactiveX简化了异步调用(避免了回调地狱 ),使代码更具功能性,可读性且不易出错。 我们主要将其用于API调用和用户界面绑定。 有关为什么使用Rx的更多信息,请查看RxSwift不错的页面。 Ray Wenderlich有一个很好的Rx入门教程。 SwiftyJSON 尽管Swift对JSON有一些基本的了解,但是使用SwiftyJSON可以使代码更整洁,类型更强,代码更短,更好理解。 翠鸟 有很多用于缓存图像的库,但是我们发现Kingfisher是最简单,最方便的使用方法。 PureLayout AutoLayout在情节提要板上可以很好地工作,但是如果您想在代码中添加布局约束,则原始API相当冗长且难以阅读。 PureLayout是一个很好的API,可以解决此问题。 凭借其方便的类型推断,尤其是使用Swift的短点语法,PureLayout的工作非常简洁。 SnapKit是一个不错的选择,我们尚未尝试。 […]

iOS Swift:MVP架构

苹果公司采用MVC作为iOS的官方架构模式。 哪里: view:是一个xib文件(或UIView子类)。 Controller:UIViewController子类,该子类从视图接收动作和事件并对其进行更新。 和Models:这是数据的表示形式。 有问题的: MVC最初打算将应用程序组件分布在不同的部分中。 但通常结果是: 缺乏分配 :控制器最终完成了所有工作。 从处理用户交互到设置视图。 进行网络调用,数据解析等等…… 这也称为Massive View Controller。 测试覆盖率低 :除了违反单一责任原则。 控制器与视图生命周期紧密相连。 测试视图控制器成为一项艰巨的任务。 MVP作为替代: 然后,MVP体系结构可以改善这种情况。 通过添加主要组件Presenter 。 稍等一下 ! 我知道这看起来像MVC,但有一个关键的区别: 现在, viewController被视为一个view 。 这意味着它将仅包含与视图相关的代码,仅此而已。 并且所有逻辑都将在演示者中实现。 然后,组件说明如下: 视图 :现在,视图既包含视图又包含视图控制器,以及所有UI设置和事件。 演示者 :演示者将负责所有逻辑,包括响应用户操作和更新UI(通过委托)。 最重要的是,我们的演示者将不会依赖UIKit 。 意味着隔离良好,因此易于测试 模型 :模型角色将完全相同 请务必注意, MVP使用被动视图模式 。 这意味着所有操作都将转发给演示者。 这将使用委托触发ui更新。 因此该视图将仅传递动作并收听演示者更新。 别再说话了。 让我们弄脏双手! 让我们快速创建一个单页项目,我想你知道怎么做know 然后,我们将创建模型。 一个简单的结构称为Traffic Light,它具有两个属性。 一个用于颜色名称,另一个用于描述其交通状况。 最后是我们的traficViewController […]

iOSをMVC,MVP,MVVM,清洁架构で実装してみた

何番煎じだよって感じですが,アーキテクチャに対する考チャに対する方は割と正解がなくて,自分の中に一つ落とし込んでおいて损はないと感じたため,补充という形で记事にさせていただきます。 アーキテクチャとは? 一言でいうと, アプリケーションを绮丽丽装するための设计方法! アーキテクチャを考虑しない设计でコードを书いていると以下のようなスにぶち当たります。 一つのクラスの肥大化(iOSで言うところのFatViewController) ロジックが烦雑になる 同じ处理を使い回せない チーム开発で役割分担しにくい テストがしにくい 属人化が进み,引き継ぎが难しくなる 机能の追加,修正が困难 等等… 正直まだまだあるとは思いますが,とにかく设计はこだわってないと后で地狱を见るということさえ伝わればOKです。 示例应用 アーキテクチャを语る上で叩き台にするアプリがいるなーと思ったので作りました。 阅覧するときは,见たいアーキテクチャのチャランチ(master / mvc / mvp / mvvm / clean-architecture / clearn-architecture + mvvm)に切り変えてください。 https://github.com/rockname/ArchitectureSampleWithFirebase Firebaseでユーザーの登录/登录,投稿のCRUD处理をする,ものすごくシンプルなアプリです。 FatViewController ブアーキテクチャのない世界をみなさんにはお见せしましょう。(ブランチはmasterです) 投稿一覧シーンであるListViewControllerを见てもらうとわかりますが,こんなに単纯なアプリにもかかわらずすでにコードが123行あります。 ViewControllerがすべての役割を担わされていることがわかりますね。 非常に胖な状态です。 役割 ViewController UIのレイアウト UIの更新 ユーザーのアクション通知 データの处理 データの更新通知 ビジネスロジック 评価 いいところ🙆‍ 思考停止でコーディングできる(これはいいところなのか…?) UIKitの恩恵を最大に享受できる 悪いところ🙅‍ それ以外すべて 模型视图控制器(MVC) Webアプリケーションフレームワークでよく闻くやつですね。 Appleの公式ドキュメントでもiOSアプリ开発はMVCが一般的みたいな书き方がされています。 https://developer.apple.com/jp/documentation/CocoaEncyclopedia.pdf しかし,iOSのUIフレームワークであるUIKitはViewとControllerが密接に系がっており(ViewControllerというクラスがあるくらい),iOSのMVCはよくMassiveViewControllerだなんて皮肉を言われています。。 […]

对建立我们的初创企业MVP的早期见解

这篇文章的最初重点是详细介绍我们在构建Availo iOS App初始版本时采用的过程。 这是一个相当普遍的话题,因此我想将其重点放在我们在较浅的文章中采用的实践。 经验告诉我们,在任何类型的开发项目中进行少量规划都会大有帮助,在开发初始产品版本或MVP时更是如此。 如果一切都按计划进行,那么您的第一个版本将随着功能的增长而发展。 考虑到这一点,重要的是要事先计划-没有人可以安全地押注其产品将在几英里之外的地方,因此,从一开始就考虑这些演变是很重要的。 在Availo,我们的开发团队来自在各种规模的组织中从事多种类型项目的多年经验,以下只是我们用于创建初始版本的过程的一小部分见解。 大辩论 从Availo的角度来看,我们始终会使用IOS进行初始版本发布-我们的创建团队由IOS开发人员组成,众所周知,IOS开发可以在Android和Android中更快地进行开发,这将大大减少我们针对发行版的测试过程。 在最终发布的前3到6个月内,Android才是我们的发展路线,所以请不要担心! 管理期望 就像任何好的项目计划一样,团队的想法也可能是巨大的,路线图很长,并且对潜在用户的期望不断提高,因此,保持一切正常并专注于关键命题功能是根本。 在早期的团队会议中,我们讨论并强调了我们可以看到的关键领域,涉及到各个业务领域,而对于开发方面,向我们展示潜在合作伙伴和投资者的进展非常重要。 这些人对顶级功能和您的路线图感兴趣-他们对早期的细节不感兴趣-可以在MVP之后建立类似的领域。 当您在项目中设置发布的关键日期时,找到功能丰富和无错误之间的平衡非常重要。 设定焦点 对于Availo,我们能够将应用程序划分为两个关键区域,即用户个人资料和消息传递。 即将出现一些重大更新,但这始终是Availo早期的重点-向自由职业者展示并允许用户尽可能轻松,轻松地开始交流。 现在,对于未经训练的人来说,这似乎是一个很小的功能集,在只有2个权利之后? 但是请稍等…一旦我们中断了用户旅程,我们需要满足许多情况。 这就是发挥敏捷开发方法之美的地方-在sprint中工作并确定关键的用户故事/旅程。 目前,我们还没有一个功能全面的消息传递平台可与WhatsApp和Facebook Messenger等竞争,我们可以在其中发送gif,视频和群聊等,这些都是我们可以轻松传递给将来版本的详细信息。 设置项目 作为项目的唯一开发者有时可能会很棒,尤其是在像我们这样的地方开始的时候,通常它会由一个在每个领域都有专家的小团队组成(例如,设计,管理,开发),但是有时候我们每个人都需要一点在我们的生活中进行互动,并使之尽可能地无痛,这对于灵魂来说是非常重要的。 编码标准,文件夹结构,创作证书和服务器选择都是您进行决策所需要的所有方面。 任何一支优秀的团队,无论大小,都会有一套清晰的编码风格指南(我们都看过“ Spaces or Tabs”辩论情节)。 编码标准使团队知道如何以一种结构来编写其代码,该结构可确保以一致的方式对大型项目进行编码,这种方式更易于理解,还使新开发人员可以看到如何编写代码库。 如果一切按计划进行,那么您的团队将需要发展,没有人喜欢脾气暴躁的开发人员。 依赖管理 在Availo,我们非常喜欢Cocoapods的依赖性管理。 对于尚未签出的任何iOS开发人员,请务必查看。 CocoaPods由EloyDurán在2011年创建,旨在解决依赖关系并下载所需的源代码。 从最高级别的角度来看,这是管理您可能在应用程序中使用的任何第三方库的一种非常快捷简便的方法-从内部管理的角度来看,根据需要轻松添加,删除和更新库它们在提交中没有git子模块的痕迹。 什么……没有情节提要? 经过数年的应用开发,我们的团队对有无故事板的应用构建方式有了很好的了解。 故事板非常适合通过自动布局可视化应用程序的结构和视图的布局。 使用Availo,我们选择使用完全基于代码的界面-没有Storyboard或Xib,都采用手工编码,尽管我们确实使用了第三方软件(例如PaintCode和QuartzCode)来实现复杂的动画和视觉效果。 随着应用程序变得越来越复杂,以及视觉效果和交互的要求变得越来越复杂,情节提要很容易变成一团糟的视图和话题,仅提供概述布局的指示。 每个人在职业生涯的某个时候都必须处理情节提要合并冲突,将节或视图拆分为情节提要是与多个开发人员合作时解决此问题的最佳方法,但如果不迅速向开发人员表示赞同,这不是防弹方案。他们正在处理应用程序的哪个区域。 随着iOS 8中的Adaptive Layout和Size类的引入,许多开发人员开始采用Storyboard概念,但感觉就像我们现在返回了完整周期一样。最终,开发人员在编码时可以更有效地工作。 检查深度并在“界面”构建器中查找隐藏的视图,因为有人在可见框上打了勾,这只是其中之一,我们都希望花更少的时间挠头。 这里还有一些其他值得考虑的问题,对不起您的大脑…… •如果您使用它进行编码,则与切换和退出Interface Builder相比,您将更快地学习Swift / Obj-C。 •您无法像在代码中那样“查找并替换” •如果您只需要学习代码,则将项目移植到Android会容易得多 […]

MVP,MVC,MVVM和VIPER。 什么对iOS开发更好?

Same like every house has a solid basement, every software project, has an software architecture it is built on, and each project has its own app structure. The types of architectural patterns may vary, but there are 4 most commonly-used ones – the ones whole IT world continuously criticizes but keeps using at the same […]

iOS:Tiendeo应用程序中的MVP清洁架构

Tiendeo移动部门在2017年面临着巨大挑战:从头开始重新制作该应用程序。 我们的旧版应用程序创建于2013年。它是使用简单的MVC架构,Objective-C(当然)构建的,它使用RestKit,AFNetworking和许多其他Pod …经过多年的开发和一些开发人员,它变得庞大,不可扩展,不稳定,具有大量的视图控制器,大量的AppDelegate,一些新功能都在Swift中进行了编码,还包含一些重构的部分,因此我们很少有Swift-Objective-C桥,……这是一个为孩子们吃早餐的怪物。 考虑到所有这些问题以及业务方向的一些变化,该公司与移动部门一起决定重新制作该应用程序。 ✨ 因此,尽管我们为旧版应用程序提供了少量维护,但我们开始同时为Android和iOS两个平台构建新的应用程序。 这个事实标志着我们将使用的架构。 干净的建筑 我认为,根据我的经验,现代应用程序体系结构必须健壮,稳定,可扩展,可测试,适应更改和可维护。 我认为干净的架构可以提供所有这些功能。 基本上,干净的体系结构使用依赖规则将代码构建在同心层中: 内圈中的任何人都无法完全了解外圈中的任何事物。 特别是,在内圈中的代码不得提及在外圈中声明的名称。 其中包括功能,类。 变量或任何其他命名的软件实体。 只有一条规则! 太酷了! 👌内部层包含业务逻辑,中间层包含控制器和用例,外部层包含UI,框架,DB等。 当系统的任何外部部分(例如数据库或框架)变得过时时,都可以通过这种方式构造代码,您可以用最少的麻烦替换那些过时的元素 。 存档的一些关键技术优势包括: 实现的抽象 单一责任原则 关注点分离 解耦代码 在进行了这一简短介绍之后,让我们回到我们的故事! MVP +清洁架构 我们决定在两个平台上都使用ReactiveX来应用MVP和干净的体系结构。 我们还尝试在两个平台上保持相同的类和函数命名。 以这种方式保持两个平台同步对我们来说真是太棒了,因为当我们计划新功能或讨论错误等时,两个团队都在谈论相同的组件,相同的结构,几乎相同的方法名称,即使一个开发人员想要切换到在另一个平台上,这种方式要容易得多。 构成我们的体系结构的层是: UI层 域层 资料层 这是体系结构的方案: 让我们来研究一下: UI层 我们将MVP用于UI层。 我们使用依赖注入将依赖项注入到Presenter中,例如:用例,自定义对象等。 Presenter在用例和视图控制器之间居于中间。 它处理用户交互,启动适当的业务逻辑并将响应发送到视图控制器。 Presenter不会导入UIKit类以使其更具可测试性。 UI层具有与域实体不同的自己的视图实体。 域层 业务逻辑层。 每个用例都是执行特定业务逻辑的可重用且独立的组件。 域层对其他层一无所知,只是从定义为协议的存储库中获取数据并返回结果。 域层具有其自己的域实体,不同于视图数据实体。 资料层 它使用存储库模式(+ info)。 基本上,存储库模式在数据源上添加了一个抽象层,用例从中获取数据。 使用存储库模式,您只需一个入口即可查询来自不同数据源(核心数据,领域,Web服务器等)的模型对象。 业务逻辑不应该知道数据来自何处。 […]

iOS的Menerapkan MVP

MVP merupakan sebuah设计模式yang merupakan singkatan dari模型视图演示者。 Selain MVP terdapat设计模式Yang Menurut Saya Cukup Bagus,Yaitu MVVM。 Mengapa kali ini saya membahas MVP? Alasannya Adalah karena saya sedang terlibat projek yang menerapkan MVP。 简单! 😀 阿帕杨膜MVP spesial?。 iOS用户界面UIViewController,UIViewController ini biasanya berisi barisan kode campuran antara kode UI,kode bisnis,dll sehingga membuat UIViewController berisi banyak sekali barisan kode。 MVP成员membuat pemisahan […]

MVP vs EVP:哪个最适合初创企业?

如今,将软件产品或基于应用程序的服务投放市场已经成为一种常态。 当然,这是一个小时的需求,然后每个崭露头角的企业家都希望能够像Amazon,Uber,Instagram一样成功,或者以它命名。 但是,那里的实际场景是什么? 随着新企业家的数量不断涌现,同样数量的新兴企业也在失败。 早些时候,将不断飙升的竞争归咎于新业务的失败及其生存状况是很合理的。 随着当今技术和框架的日趋成熟,它为每个人提供了平等的机会,只有他们可以正确使用技术,才可以在业务领域创造自己的空间。 刚结束业务或应用程序开发过程的新兴企业家人数正处于初始阶段。 为什么? 因为它们的应用程序无法快速推向市场。 当他们启动应用程序时,用户不再需要他们的应用程序。 甚至,许多研究和市场分析报告也证明了启动失败的主要原因是除其他20个原因之外,市场对应用程序的需求不足。 如果一家初创公司想要成功,他们必须使用MVP或EVP处理应用程序开发。 让我们深入探讨MVP和EVP,并了解它如何帮助将应用程序快速推向市场。 MVP :最小可行产品是公司采用的一种程序,用于启动应用程序的小版本,以尽早获得反馈和批评。 这就是所谓的启动应用程序的骨骼结构,以使用户对商业想法产生反应。 早期反馈可以帮助公司节省未来开发的时间和金钱,因为他们可以清晰地了解未来的发展,还可以帮助他们筹集资金。 EVP :卓越可行产品是一种应用程序开发过程,其中涉及“体面”类别的应用程序正在启动。 Moz的联合创始人Rand Fishkin建议初创企业执行EVP。 在EVP中,公司注重质量而不是范围。 它可以帮助初创企业获得有关产品假设的更清晰的反馈。 发行“最低”产品可能会吓到客户。 区别:EVP和MVP 1.快速上市 MVP是一种开发最小版本的应用程序并将其发布到市场上以尽早获得用户反馈的方法。 该方法最好是筹集资金以扩展应用程序开发。 EVP应用程序也包含较少的功能,但经过全面开发,可在市场上取得令人印象深刻的进入。 EVP可以帮助您不妥协用户体验。 2.应用版本 MVP提供了该应用程序的基本版本。 它的设计包括一个或两个基本功能。 使用MVP方法开发的应用没有其他用途。 使用EVP方法开发的应用几乎是完整的应用。 EVP旨在为用户提供高质量的产品体验。 3.谁来测试产品? 一家初创公司为客户启动了其MVP应用程序。 产品的实际受众对其进行测试并提供反馈。 EVP是一个完善的过程。 一家初创公司仅针对内部开发人员和一些忠实的客户发布该应用程序以进行测试。 应用的真实用户只有在内部团队和用户批准后才能使用该应用。 4.测试 初创公司在遵循MVP方法时会以不同的方式测试该应用程序,直到获得好的产品为止。 另一方面,EVP遵循测试和迭代实践,直到初创公司获得产品的完美版本为止。 MVP最适合应用程序开发的条件: 1.当您考虑验证应用开发想法时,MVP非常有用;当您希望提早进入时,MVP很有用。 2.关于您的经营理念,市场竞争很低。 3.MVP对于在您有有限时间和成本进行产品开发投资的情况下启动很有用。 4.当您专注于短期目标时。 5.当您是新市场并且在该市场中具有较低的知名度时。 EVP开发最适合初创企业的条件: 1.当您相信第一印象是最后印象。 客户体验可以成就或破坏您的应用成功。 2.当您对应用程序想法的竞争激烈,并且您负担不起缓慢而渐进的过程时。 […]