Facebook发布Tweaks:让微调iOS应用变得更简单

假设,你正在开发一款iOS应用。
你的iOS应用有很多动画效果,而你(或你的设计师)希望让那些动画效果的持续时间恰到好处。那华丽的抽屉特效是应该耗时半秒钟,还是四分之三秒呢?
通常情况下,开发者会对合适的时间进行猜测,编译他们的应用程序,测试,修改,重新编译,清理,调整,周而复始。鉴于复杂的应用可能需要相当长的时间来进行编译,那些小小的变化就会开始吞噬你的时间,你开始痛恨进度条。
为什么要为了如此简单的东西进行重新编译呢?如果负责调整时间的人的角色更多的是设计师,而不是程序员,那会怎样呢?他们应该为了调整动画速度而去研究源代码吗?
当然了,这里面也有各种快捷方式。比如,你可以将动画速度的变量跟屏幕上的滑块进行关联,让那些测试应用预发布副本的用户可以实时进行调整——不过,你需要手动植入代码,并记得在正式发布前将之移除。这是完全有效的选择,但它不是很规范,而且你希望进行实时调整的每个地方都意味着额外的代码。这种事情可以更简单。
Facebook认为他们已经做到了。
该公司刚刚发布了一个名为“Tweaks”的库,让开发者可以方便地对特定事物进行标记——比如动画效果的时间,或者是按钮的颜色,或者是图片的透明度——并在使用设备实际运行应用时让开发者方便地进行实时调整。这个库把所有这些可调变量打包放到一个小小的隐藏设置页面上,等到正式发布应用时又将之全部清除。
正如Facebook说的那样:
改进一款应用的最好办法是每天使用它。虽然开发者可以提前把自己的想法构建成原型设计——比如使用Origami工具——但可能仍然需要一些时间来观察它在实际使用中的效果。
偶尔,应用在第一次尝试时即已完美。有时候,想法完全行不通。但更多的,开发者需要对应用进行一些微调。最后一种场景正是Tweaks的用武之地,它让那些细微的调整变得简单:不用更改代码,不用电脑,你就可以尝试不同的选项,并选出效果最好的设置。
当一款应用被编译到调试模式下,摇动手机可以弹出一个页面,让用户可以任意更改开发者开放出来的设置。当应用被编译成正常的“发布”模式(即它已经为在应用商店上架做好准备),Tweak的变量值就会被一个正常的、不可修改的值所替代,并且永久性地把配置页面隐藏起来。这样做你只需要添加非常少的额外代码,也不至于忘了将它们移除。
开发者在其代码中需要做的真正修改在于:他们不需要在源代码中写死变量值,而是将值设定成一个“Tweak”。在代码中,你不需要写成:
CGFloat animationDuration = 0.5
而是使用:
CGFloat animationDuration = FBTweakValue(@”Category”, @”Group”, @”Duration”, 0.5);
那么,这其中意义何在呢?
对开发者来说,这意味着可以使用更少的时间和代码对应用进行微调。而额外的好处是,它能够让那些不喜欢编码的设计师来帮助确定应用最佳设置,不需要他们深入源代码或是纠缠开发团队编译出众多新版本。大家都得到了好处!万岁!
Facebook已经在GitHub发布了Tweaks,开发者可以基于非限制性的BSD开源协议免费使用。(译:王灿均)
http://techcrunch.cn/2014/03/26/facebooks-new-tweaks-library-lets-developers-fine-tune-their-ios-apps-on-the-fly/
Facebook发布Tweaks:让微调iOS应用变得更简单的更多相关文章
- spring 第一篇(1-1):让java开发变得更简单(下)
切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...
- [翻译]Kafka Streams简介: 让流处理变得更简单
Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...
- Kafka Streams简介: 让流处理变得更简单
Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...
- 深入解析 Kubebuilder:让编写 CRD 变得更简单
作者 | 刘洋(炎寻) 阿里云高级开发工程师 导读:自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubern ...
- 快开宝PDA开单器出入库扫码:让批发零售变得更简单
快开宝PDA开单器出现前 批发商户是这样开单和管理的 ★员工痛苦:需要记客户.价格.库存等等,应对报错价.错漏单.盘错货等各种状况. ★老板麻烦:每天要守店.对单.核账,经常因错漏单.库存乱.积压货. ...
- 让全链路压测变得更简单!Takin2.0重磅来袭!
自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- Moq让单元测试变得更简单
[ASP.Net MVC3 ]使用Moq让单元测试变得更简单 前几天调查完了unity.现在给我的任务是让我调查Moq. 以下是自己找了资料,总结并实践的内容.如果有表述和理解错误的地方.恳请指正. ...
- Winform 让跨线程访问变得更简单
Winform 让跨线程访问变得更简单 前言 由于多线程可能导致对控件访问的不一致,导致出现问题.C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出 ...
随机推荐
- 05 使用bbed跳过归档恢复数据文件
5 使用BBED跳过归档 在归档模式下,缺失了一部分的归档日志文件,对数据文件进行恢复 1 开启归档 --shutdown immediate --startup mount --alter data ...
- 5分钟连续出现某现象+微信模板消息提醒 PHP
需求场景:用电插座电流连续出现5次电流过高(大于 3A)后停止用电服务,前四次发送电流过高提醒,最后一次发送结束用电服务提醒 思路: Redis key 设为:插座编号+user户编号 value ...
- python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- nginx 配置总结
可以选择在http{ }中设置:client_max_body_size 20m; 也可以选择在server{ }中设置:client_max_body_size 20m; 还可以选择在locatio ...
- SpringMvc错误:HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is n
HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemExc ...
- javascript数组排序和prototype详解
原型的概念::原型对象里的所有属性和方法 被所有构造函数实例化出来的对象所共享,类似于java中的 static 正因为共享所以单一的操作 就会影响了全局,因此使用时需注意 基于prototype:为 ...
- 懵圈了,面试官问一个 TCP 连接可发多少个 HTTP 请求?
作者:松若章 https://zhuanlan.zhihu.com/p/61423830 一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DO ...
- 什么是 Python 自省?
Python 自省是 Python 具有的一种能力,使程序员面向对象的语言所写的程序在运行时,能够获得对象的类 Python 型.Python 是一种解释型语言,为程序员提供了极大的灵活性和控制力.
- docker私有仓库部署
首先科普docker几种“仓库”概念,可分为:本地镜像,本地仓库,公有仓库(docker hub) 本地镜像:在把java程序打包成镜像,输出的镜像的位置就是本地镜像 公有仓库:一个叫docker h ...
- springboot通过继承OncePerRequestFilter,在拦截器中@Autowired 为null问题
springboot2版本以上环境 通过继承OncePerRequestFilter类,在重写doFilterInternal方法实现拦截的具体业务逻辑, 在实现的过程中,需要注入service方法, ...