月度归档:2016年05月

两个不同的语言,都叫做Swift,而人们熟知的是苹果的Swift

2014年,苹果发布了Swift语言,随后大量的示例代码都改用Swift语言编写,许多新的iOS和Mac项目也都用了Swift语言。从2014年到2016年,Swift语言已经从1.0发展到了2.2版本,3.0也已经在roadmap上了。

然而,有多少人知道,其实,名称叫做“Swift”的语言,其实不止一个呢?
我们先看看Apple的Swift
https://swift.org/ – We are excited by this new chapter in the story of Swift. After Apple unveiled the Swift programming language, it quickly became one of the fastest growing languages in history.

我们在看看诞生更早的Swift语言。
http://swift-lang.org/main/index.php – A simple tool for fast, easy scripting on big machines.
Swift: A language for distributed parallel scripting (2011) [pdf]

我们不难发现,distributed parallel scripting的Swift,至少在2011年就已经在科学界广泛使用了。而苹果的Swift,至少在2014年以前还是未公布状况。

我们再来看看图标
Apple Swift
Swift logo_swift
图标中的雨燕是不是也很相似呢?一个向下飞,一个向上飞。

iOS应用的糟糕例子:口碑外卖的用户体验越来越糟,这是把用户往饿了么赶

最近几年,O2O,特别是外卖,已经形成了白热化的砸钱补贴营销的战场,外卖市场上,饿了么,美团,口碑和百度四家基本上成为外卖的主流平台了,外卖配送方面,百度自己做了配送,美团也有自己的专送,饿了么做了蜂鸟配送,此外,还有一个达达,也是做了配送,同时达达也做了一个叫做派乐趣的外卖平台。

大战已经进行了快两年了,百度外卖,饿了么,美团和口碑这四家,现在也变成了三家,即口碑和饿了么合并,口碑外卖事实上被阿里巴巴抛弃了。

为什么说口碑事实上已经被抛弃了呢。

打开了最新更新的口碑外卖客户端,第一个感觉就是,怎么全都变成H5页面了?口碑外卖底部的tab bar,只有“外卖”、“订单”和“我的”三个按钮,我在这三个tab之间切换的时候,明显感觉到tab bar会闪一下,然后整个app中间有一个浏览器在加载某个页面。这样的感受让人感到非常糟糕。

到口碑外卖的某个店里一看,发现这个店在口碑只有三个宝贝在卖,而在饿了么里,却有几十个,明显感觉到商家要放弃口碑的样子。

再看看近期的新闻
口碑APP订餐出现平台即将关闭提示 官方回应:商家理解有误 2016-05-03 http://www.admin5.com/article/20160503/661207.shtml
饿了么开送口碑外卖:被收购进入倒计时 2016-04-21 http://www.mnw.cn/keji/mi/1159677.html

在5月3日的新闻中,饿了么方面回应称,“商户的理解不太正确。口碑外卖的业务目前都由饿了么提供,只是如此而已。”

然而,从口碑外卖的最新的app的交互体验,以及口碑外卖在苹果的App Store的差评来看,其实饿了么和阿里巴巴都已经把口碑当成了一个弃儿,就让口碑自生自灭吧。

既然口碑外卖已经是一个弃儿,一个不值得投入资源的产品,那么,自然产品、研发、运营和测试等团队就应该从口碑撤离了。这也是为什么口碑外卖更新以后,居然成了完全的H5应用的原因。

口碑当年被阿里巴巴收购后,已经死了一次,后来做外卖,业界以为口碑又会活过来,没想到,其实口碑从来没有活过,只不过被阿里打了强心剂,回光返照一下,作了一回饿了么的陪练而已,而阿里巴巴仅仅是做了个口碑和饿了么打了一架,然后趁机投资饿了么而已。

阿里做口碑,不是为了把口碑做好,而是把口碑当做为了投资饿了么的一个资本布局的一个小棋子罢了。

如何用grep命令筛选,查找iOS的日志console log?

在iOS开发中,除了断点之外,一个最常见的调试方法就是查看iOS的log,我们在代码中经常会通过NSLog输出大量日志,然后查看日志,看看是否出现了什么异常情形。

然而,随着项目不断进展,iOS的log也越来越多,这导致我们常常需要在冗长的log中寻找需要的某几行log。令人感到遗憾的是,Xcode的Console只有一个find功能,其他功能都没有。

如果我们可以像在命令行一样用grep等工具对iOS的console进行筛选,那该多好啊。

我经过搜索,终于发现了这个工具https://github.com/rpetrich/deviceconsole

这是一个可以在Mac上显示iOS的console的工具,github上保存的是工具的源代码,编译后,你就得到一个名为deviceconsole的可执行文件,运行deviceconsole,它就将usb连接到Mac上的iphone的console输出到了当前的terminal中,我只要执行deviceconsole | grep “Hello World”,就可以只查看带Hello World文字的日志了。

此外,还可以deviceconsole > /tmp/console.log,这样子iOS的console就会重定向到/tmp/console.log了。

如果你希望只显示带“Hello World”的日志,你可以执行命令
tail -f /tmp/console.log | grep “Hello World”

如果你想要看之前输出的带有“Hello World”的日志,那么你可以执行命令
grep “Hello World” /tmp/console.log

CDN导致的App内图片有时候无法显示

最近,我发现了一个之前都没有发生过的问题。时不时就发现某个应该显示某张图片的地方,显示着placeholder image。难道我的代码哪里没写好吗?

调试后发现,应该是CDN的问题。

我在下载图片的代码处添加了一个条件断点,一旦error对象不为nil,就触发断点,最后发现,error对象的code都是404。

随后,我将image url复制出来,用curl -vvv命令进行下载。我发现,一般来说,第一次curl命令会输出404错误,往往第二次或者多次以后的curl,才会下载到正确的image数据。

通过观察curl返回的header数据,我发现了“Power-by-ChinaCache”字样,这说明,我司的CDN用的是ChinaCache的服务。

自此,真相大白了,首次下载的时候,CDN不知为何,直接给了404错误,而多次重试后,CDN更新了数据,就返回了200代码和image数据。