这篇文章在书中的标题是App Thinning,这里我给翻译成了App 瘦身。

本文然然进行了一些语法的修改,很开心她为我修改这些东西。她说我转折只会用但是,被她这么一说想想还真是只是会用但是,嘿嘿。

iPhone经过这几年的发展,已经发生了很大的变化,例如屏幕变得更加多样,尺寸更多,内存变得更大,CPU的架构也在变化。伴随着iPhone的变化,iOS也在变化,例如AutoLayout、size classes、split view controller等。这些技术及设备的变化给我在开发的过程中也造成了许多的问题,不仅如此苹果通过不断推出新的技术,努力在帮助我们使用同一套代码开发适应多个设备的Universal的App。另一方面Universal App虽然在开发的过程中,方便了我们开发人员,可是对于用户来说就不那么友好了,由于需要适配多种设备,所以里包含所有设备的代码,但真正的在运行的时候,我们并不需要那么多相关的代码及资源。

例如下面的一张图,是一个App运行在iPhone 6+上,使用的各个资源相关的情况:

上图中对勾标出来的是在iPhone 6+上真实运行的时候使用到的相关的资源及代码,对比有对勾的部分,更多的是没有被对勾标出来的部分。可以想象我们下载了一个App(前提这个App是Universal的),然后至少一半的代码及资源是我们不需要的,白白占用着我们的空间。这样对用户体验也不好。为了解决这个问题苹果在iOS 9给出了新的解决方案:

Read More

这里首先说明一下:这篇文章由于一些限制,我也没有能够进行实验测试,只是尽可能的解释书中的一些知识,可能会有错误,等以后有条件了,我会实验这篇文章中的内容。但是作为了解内容还是不错的。

在iOS 9之前在iPhone上native和web之间,基本上算是独立的的两部分内容。但是Apple正在努力缩小两者之间的距离,使其越来越近。在iOS 9退出了universal links和web markup,使你能够提供deep links直接进入你的app和在Spotlight和Safari中能够搜索出来你的内容。

Getting started

这一章书中提供了两个工程,一个是APP端的,一个是Server端的,因为这个需要Server端修改一些东西。APP可以通过地址:https://itunes.apple.com/us/app/rwdevcon-tutorial-conference/id958625272?mt=8进行下载。APP截图如下:

Linking to your app

在真正开始前,先回顾一下universal link的前辈:deep links。通过这个回顾,了解一下deep links存在的一些问题。

在iOS 9之前我们可以给APP设置URL scheme,在Info.plist里面添加CFBundleURLTypes key。一般格式类似://。 另外应该也看到过Apple自己的URL scheme,类似tel://、sms://等。

Read More

本文为自己读书的一个总结,可能与原书有一定出入

iOS 9推出了搜索技术,能够让用户在Spotlight中搜索到APP内部的内容。苹果提供了三个APP Search API:

  • NSUserActivity
  • Core Spotlight
  • Web markup

下面简单的说一下我对于这三个API的理解:

  1. NSUserActivity:
    NSUserActivity在iOS8就已经提出来了,只是那时候提出来是用作HandOff。在iOS9中它可以用来搜索App中的内容。我们可以把一些想要在Spotlight中被搜到的东西,放到NSUserActivity中,然后就能在Spotlight中被搜到,但是这个有一点限制,就是只能搜索用户访问过得内容。因为UIViewController的userActivity属性继承自UIResponser,只有在UIViewcontroller访问的时候,才有机会设置userActivity属性。
  2. Core Spotlight:
    这个是在iOS9新推出的技术,能够将APP的内容在Spotlight中被搜索到。这个技术我理解:苹果给开发者提供了一个全局的index数据库,我们能够把我们想要能够在Spotlight中搜索的内容,按照苹果的要求放到数据库中,然后苹果就做了其他的事情,让其能够被搜索到。同样我们也可以删除我们存储到数据库中的内容。
  3. Web markup:
    Web Markup在网页上显示App的内容并编入Spotlight索引,如此一来即便没有安装某个App,苹果的索引器也能在网页上搜索特别的标记(markup),在Safari或Spotlight上显示搜索结果。具体会在下一篇文章中详细介绍。

Read More

在iOS的开发中有时候会遇到这样的情况,在开发的过程中有两个界面,这两个界面使用UINavigationController串联起来,然后在第一个ViewController中不显示UINavigationBar,在第二个显示UINavigationBar。iOS在手势返回的时候默认情况下iOS的NavigationBar是固定的,然后再去做一些渐变位移等动画,但是如果我们在一个界面有NavigationBar,一个没有这样的动画就会很难看。这时候我们希望第二个界面手势返回的时候,NavigationBar跟着界面一起移动。 实现类似下面的效果:

Read More

Apple在前段时间开源了Swift,在iOS开发领域中又制造了一阵骚动,看了一眼Swift的开发路线图,计划在明年的秋天发布Swift 3.0。Apple现在在Swift上变得也更加的开发,鼓励社区贡献代码,也开始接纳社区的一些反馈了。苹果改变以往的封闭的姿态,表明了它对于Swift语言的重视,同时也说明了Swift语言苹果会加大力度去优化,所以现在对于我们iOS开发人员来说,是时候开始学习iOS了。
前段时间也面试了几个人,简历里面好几个都写了精通Swift,但是一问问题好多都答不上来,简历上真的。。。。。更多的人貌似没有开始学Swift,但是最后我都建议他们去学习一下Swift。
扯远了,回到正题,这篇文章是我的学习笔记,非本人原创内容,只是在看《iOS 9 by Tutorials》这本书时候的一些笔记,然后加上自己的一些理解而已。

Swift 2中加入了几个(作者认为)比较重要的改进,如下:

  • 新的控制流
  • (相对)完善的错误处理模型
  • 协议扩展
  • 模式匹配的增强
  • API可用性检测
  • 其他一些。。。。。。

控制流

在书中首先作者解释了一下控制流,感觉不错:程序中任何能够影响程序执行到不同的路径的结构或者关键字都可以叫做控制流,原文:any construct or keyword that causes the execution of your program to follow a different path can be considered “control flow”.

repeat…while

repeat…while是重复的意思,类似于其他语言中的do…while。其实在Swift 1.x中还是使用的do…while,在2.x中为了与do…catch区分,所以改成了repeat,但是语义上还是没有变化。这里多说一句,Swift的好多改进,都是为了让程序读上去更加明确,例如Optional、guard等也有这方面的考虑。

本例子中的代码都是在Playground中实现的

1
2
3
4
5
6
  
var x = 2
repeat {
print("x:\(x)")
x += 1 // Swift计划在3.0中移除 ++ -- 所以还是尽量少用吧
} while x < 10 // 这个地方可以添加括号

上面while后面可以不适用括号,这个也是Swift的一个改进,Swift中只有必要(即语义不明确)的时候才会要求必须加括号。

Read More

已经好久没有写过博客了,主要是因为懒了。
前几天无聊点进了阿里云的广告里面,无意中看到了域名查询,查了一下自己的名字的域名,发现还没有注册(我原来记的这个域名是已经注册的了),然后就花钱买下了这个域名。然后因为这个买到的域名引出了了后面搭建博客的这么一堆事。

我自己已经有一个博客了,是在CSDN的博客,博客地址:http://blog.csdn.net/mengxiangyue,那个博客维护了好久了,从大三开始吧。断断续续也写了好多年了,里面的文章我个人感觉水平也就一般。但是因为这些水平一般的文章,我也收获了很多,首先是收获了一个笔记吧,然后是申请成功了CSDN的博客(伪)专家,因为这个专家的身份,有时候会参加一些CSDN举办的活动。说到写博客,我个人感觉最重要的是技术的积累,我也跟很多人说过写博客这个事情,但是貌似听的人不是特别多。

好了貌似扯得有点远了,下面进入正题。
上面我已经说过我买了一个域名,那就大概梳理一下提纲吧:

  1. 购买一个域名
  2. 在github上面生成一个github pages的仓库
  3. 搭建Hexo环境
  4. 配置博客
  5. 部署博客

Read More