作者:AppCoda,原文链接,原文日期:2015-12-22
译者:BigbigChai;校对:walkingway;定稿:CMB

每一代 iOS 都会为全球的开发者们带来新鲜的“小玩意儿”和对现有技术进行提升。显然,最新的 iOS 9 也不例外,开发者们拥有了全新的框架和 APIs 以方便调用、这可以显著地提升应用程序的水平。Core Spotlight 框架就是其中之一,它包含了许多优秀 APIs,开发者可以很方便地应用在工程中。

Core Spotlight(CS)框架属于一个更大的 API 集合 Search APIs,它让开发者们可以地将应用变得更容易被发现,以及访问起来更加便利。这在以前的 iOS 版本里是不可想象的。Search APIs 让用户和应用之间的联系更加紧密。用户可以更迅速地访问应用,同时应用也能更主动及时地响应用户。除 Core Spotlight 以外,iOS 9 其他新的搜索功能还包括(仅供参考):

  1. NSUserActivity 类的新方法和属性(负责保存应用的状态以便稍后恢复)。
  2. web markup 让网页的内容在设备上可被搜索。
  3. universal links 允许从网页内容里的链接直接打开应用。

我们不会在这篇文章里讨论以上三项,但会详细地介绍 Core Spotlight 框架。但开始之前,我们先来搞清楚这个框架的用途。

Core Spotlight 框架让应用里的数据在 Spotlight 可搜索,然后把与应用相关的搜索结果与系统返回的其他结果一同展示出来。这令人印象深刻并具有革命性,因为这是用户首次可以搜索到除 Apple 官方应用外、任意应用中的数据,然后与之进行交互。用户可以与自定义应用的相关搜索结果进行交互的意思是:不但在搜索结果项被选中时会自动启动应用,而且开发者们也能引导用户跳转到特定视图控制器,用来展示 Spotlight 中被选择的数据。

从开发者的角度看来,集成 Core Spotlight 框架和使用它的 API 并不复杂。正如本教程随后会介绍的那样,只需要几行代码就能搞定。整个过程的重点在于开发者需要“请求” iOS 去索引他们应用里的数据,并且这些数据必须预先以特定的方式来表示。

鉴于这是一篇关于 Core Spotlight 框架的教程,我不打算在简介部分过于详细。如果你有兴趣学习如何实现一些我个人觉得非常棒的功能,那么请继续阅读。我相信,当你读完之后,就能很轻松地让你的应用支持 Spotlight 搜索。

阅读全文

作者:iAchieved.it,原文链接,原文日期:2016-06-2
译者:pucca601;校对:靛青K;定稿:CMB

有许多小伙伴对在他们的树莓派 3 上构建 Swift 3.0 感兴趣,这篇教程献给那些勇敢的灵魂!

在开始之前你需要准备好以下东西:

显然这是可以做到的;而且我们已经做到了,并且还有其他小伙伴也对基于 ARM 的设备上构建 Swift 程序作出了贡献。所以别放弃。不过就算你放弃了我们也不会说什么,直接下载我们的 prebuilt Swift 3.0 package for the Raspberry Pi 2 and 3 吧。

阅读全文

作者:Natasha The Robot,原文链接,原文日期:2016-07-25
译者:Lanford3_3;校对:千叶知风;定稿:CMB

上周我出席了 iOSDevCampDC,并有幸参加了 @ayanonagon 关于测试的演讲,你们可以到这儿获取样例代码。

让我惊讶的是,出于测试的目的,她为一个协议(protocol)实现了默认的 Equatable,类似这样:

protocol Rectangle: Equatable {
var width: Double { get }
var height: Double { get }
}

// 所有遵循这个协议的对象
// 现在都有了基于协议属性的默认相等性判断
func ==<T: Rectangle>(lhs: T, rhs: T) -> Bool {
return lhs.width == rhs.width &&
rhs.height == lhs.height
}

之所以说让我感到惊讶,是因为我从未想过让遵循某个协议的所有对象都拥有一个像这样的默认实现。这确确实实地让我陷入了思考!当然,对于 Ayaka 的例子来说这样做很合理——她完全是出于测试的目的添加了这样的代码。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-04-21
译者:Darren;校对:Cee;定稿:CMB

如果说 log 是一种时尚,那你就是时尚设计师。

我本来没打算写这个系列的第三部分的,但是在前两部分的读者的回复中我得到了一些反馈信息,我觉得看一看人们是怎么建议的是一个很好的阅读和练习的方式。

如果你还没看过前面的部分,你可以回头看看第一部分第二部分

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-02-23
译者:wiilen;校对:小锅;定稿:CMB

在 2009 年,我第一次下定决心要学习如何开发 App。那时候 iOS 3 才刚刚发布,之后,App Store 就成了那些开发 to-do 列表、笔记记录以及其它无聊应用的开发者们的金矿。

Objective-C 是我决定要全身心投入学习的第一门面向对象的语言,那时候这门语言与现在有很多区别。过去几年我们见证了它的发展,与此同时苹果还发布了令人印象深刻的 Swift 语言。

如今开发者们认为 ARC(自动引用计数)是理所应当的存在,特别是那些在 iOS 5 发布(2011年)之后学习 Objective-C 的人,或是学习 Swift 的人。

阅读全文

作者:Anddy Hope,原文链接,原文日期:2016-04-14
译者:Darren;校对:Cee;定稿:CMB

如果说 Log 是一种时尚,那你就是时尚设计师。

上一篇文章中,我聊到了如何通过在打印的日志中使用 emoji 表情来帮助你从冗杂的信息中减少认知负荷。然而,我给的糟糕的实现并不会让你对在自己的代码中使用 emoji 产生强烈的意愿。

这篇文章我将会实现承诺,告诉你如何使用比 print 函数 稍微 复杂的方法轻量地实现带 emoji 表情的日志。

阅读全文

作者:Soroush Khanlou,原文链接,原文日期:2016-6-27
译者:X140Yu;校对:Crystal Sun;定稿:CMB

有一些刚刚开始编程的人会问我,如何才能从写代码转变成写漂亮的代码,为此,我会推荐一些书,对于刚开始编程的菜鸟来说,这些书非常赞。对于像我这种已经有几年编程经验的老鸟来说,仍能从中学到东西。这些书有很大一部分都是用其他语言如 C、Ruby 或者 Java 写的,读这些书可能是个不小的挑战。还好在大多数情况下,任何编程语言都可以清晰表达编程思想,况且早点培养多语言编程技能也不是一件坏事。

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016-07-07
译者:粉红星云;校对:aaaron7;定稿:千叶知风

你好,
我想知道针对下面这个在 Swift 中出现的特定情况是否有更优雅的解决方法 – 假设你想要在继续执行后续的代码前,检测一个特定的变量是否为空;通常是会做相反的事情(检测变量是否为有值)。我一般是这么写的:

guard thing == nil else {
if let thing = thing {
doSomething(withThing: thing)
}
return
}

有没有一个更好的方式来实现呢?我是可以使用 if 语句,但是我喜欢 guard 语句确保验证不通过不执行下面代码。逻辑上如果强制解包也可以,但是。。。(耸肩)

阅读全文

作者:Erica Sadun,原文链接,原文日期:2016/06/28
译者:Cwift;校对:pmst;定稿:Cee

昨晚我发了一条推特邀请开发者们参与一个问题的调查。相当一部分人问我这个调查是怎么回事。

Swift 标准库中一些类型转换相关的协议,Matthew Johson 和我观点相同,认为命名非常糟糕。标准库中大约存在 80 个古怪的协议,其中大约 15% 都与类型转换相关。

因此我们递交了一份有关重命名的提案,不过最终被否决了。标准库团队倾向于使用新的 Syntax 命名空间,而我们的提案侧重于命名方面的指导。他们的答复是具体问题具体分析,在不违背哲学的前提下,Swift 的革新提案需要着眼真实世界进行设计,而不是单纯的理论指导。我和标准库团队没能达成共识,不过讨论还在持续,因为 WWDC 过后这些问题还是没能得到解决。最近 Matthew Johson 已经在起草一份新的提案了。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016/07/20
译者:冬瓜;校对:Darren;定稿:千叶知风

↑ ↑ ↓ ↓ ← → ← → B A

无论 Swift 是你的第一门开发语言,还是从 Objective-C 转来,Swift 这门强大的语言都值得我们去学习和使用,但是 Swift 语法的不断迭代更新可能会令你畏惧。本文将会列举一些常见的语法,来帮助你提高 Swift 语言能力,精炼代码。

闭包(Closure)

() -> Void

有些文章中也会称作匿名函数(unnamed functions),类似于 C 或 Objective-C 中的 block ;闭包是一个很轻量但是功能十分强大的函数,常用于类间的值传递,闭包通常作为函数的参数来使用,当然也可以作为变量。

阅读全文

作者:Reda Lemeden,原文链接,原文日期:2016-04-28
译者:wiilen;校对:bestswifter;定稿:CMB

这篇文章是 构建 iOS 界面 系列的第四篇,本篇重点介绍:在没有原生系统编程经验的情况下,如何实现 iOS 的设计 —— 这对 Web 设计师及开发者们来说是极好的。这里也提供前面几篇文章:第一部分 - 第二部分 - 第三部分

上一篇文章中,我们交替使用 Interface Builder 和 Swift,实现了一个自定义的按钮 —— 如果你一遍又一遍重复这个过程,除非你开发的是一个手电筒 App,UI 上只有一个按钮,不然这项工作很快就会让人心累。即便不谈无聊的重复工作,如果只更新一点功能上的细节,也需要对每一个按钮的实例进行修改,这种做法也是不靠谱的。下面我们将介绍一种更好的方法。

阅读全文

作者:Mike Ash,原文链接,原文日期:2016-02-19
译者:littledogboy;校对:Cwift;定稿:CMB

本周最大的科技新闻是 FBI 正试图迫使苹果公司解锁一个嫌疑人的 iPhone。有趣的是,涉案手机的型号是老款的 iPhone 5c。新款的 iPhone 中加入了苹果的 Secure Enclave(安全区域)技术,用来防止手机被暴力破解,甚至连苹果自己都无法破解。这件事过后许多朋友都在问一个问题:什么是 Secure Enclave?它扮演了什么角色?

在我开始写之前声明一下: 我平时写文章的习惯是一直深入到比特和字节,然后再讨论发生了什么。但这次必定有所不同,因为我这种凡夫俗子是触及不到安全区域的本质的。因此本文中大部分的知识来自苹果 iOS 信息安全指南,又添加了一些通用的理论。参考指南中安全区域的相关信息,解释并且思考它们的含义。这篇文章建立在苹果提供了准确信息的假设上,因为从外部没有可行的方法来检测这些信息的真实性。因此最终检测结果将基于苹果文档的准确性,和我自己的理解,这点读者需要注意。

而且,此文章是为了调研本案的技术和安全区域技术。对 FBI 的要求,苹果的回应,任何其他政治问题,没有任何意见和暗示。如果你想在此讨论政治问题,出门右转。

找准了方向,让我们开始吧。

阅读全文

作者:Ole Begemann,原文链接,原文日期:2016-07-29
译者:钟颖;校对:小铁匠Linus;定稿:CMB

更新:
2016-08-02
为 Xcode 8 beta 4 更新代码

本系列其他文章:

(1) Measurements 和 Units 概览

(2) 乘法和除法(本文)

(3) 内容提炼

感谢 Chris EidhofFlorian Kugler 帮助我想出这个解决方案。

上篇文章结束时,我就计划实现一个通用的、声明式的方案来描述物理量间依赖关系的解决方案,例如 速度 = 长度 / 时间。现在,让我们来具体实现这个想法吧。

阅读全文

作者:Natasha,原文链接,原文日期:2016-07-24
译者:粉红星云;校对:aaaron7;定稿:CMB

上周,我参加了 iOSDevCampDC 并发表了演讲,在这里很荣幸的听到了 @atomicbird 关于 StackViews 的演讲。我之前写过一篇文章,向大家介绍了使用 StackViews 来做简易动画的有多方便,更被使用 StackViews 能够非常简单地完成横竖屏的切换所震惊。

例如,下面这个简单的有着一张图片和一些文本的视图。它在竖屏下看起来挺好的,但是一旦屏幕旋转了,就不那么好看了…

阅读全文

极少数应用程序很“奢侈”的只支持最新版本的 iOS。 设置一个较低的部署目标以及基于特定 iOS 版本的代码分支通常是很有必要的。虽然苹果公司的信息有些矛盾,还是有各种办法来完成这个。最近在这条 tweet上看到有人警告说,不要这样做:

#define IsIOS7 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=7)

GitHub 搜索显示,有超过 8000 的结果调用了 substringToIndex:1 。所有这些代码碰到 iOS 10 就“懵逼”了。因为 iOS 10 会被检测成 iOS 1 了,估计只有在越狱的应用中才会出现吧。

又是同样的老故事。Windows 9 变成 Windows 10 是因为有太多代码通过 if (name.startsWith("windows 9")) 来检查 Windows 95 和 98 了。

阅读全文

作者:Andyy Hope,原文链接,原文日期:2016-04-06
译者:Darren;校对:pucca601;定稿:CMB

如果说 Log 是一种时尚,那你就是时尚设计师。

Swift beta 版一出世,社区中最具好奇心的开发者们立刻上了这班车,对新版语言的特性进行试验,并撰文讨论他们从中获取的经验。
关于 Swift, 有太多提到 Tailor Swift 的 Twitter 了以至于我没办法列举出最好的, 但直到现在这也很有趣,没有人知道为什么😂。另一个人们讨论得很多的话题是 Swift 代码中可以使用 emoji 表情了。

func combinedWeatherConditions(lhs: Int, _ rhs: Int) -> Int {
return lhs + rhs
}
let 🌨 = -10, 🌤 = 10, 💧 = 0
if combinedWeatherConditions(🌨, 🌤) == 💧 {
print(“😔 — No 🏂 Today.”)
}

我纯粹是因为表情功能而开始写 Swift 的。—— 没有人这样说

这是一个非常新颖的特性,尽管你也许永远不会需要在你的代码里使用 emoji 或者用在打印语句中。但是既然我们讲到了打印语句,在新的控制台上 print 语句相比古老的前身 NSLog 已经被优雅地简化了。

阅读全文