客户端程序是这个项目的一个组成部分,这个项目能将目的地的坐标发送给无人机上绑定的电话。 整个过程是个很简单的任务,而其中又不乏有趣的部分,例如使用新的( iOS7 上的)Multipeer Connectivity API 和 NSSecureCoding。
在这篇文章中,我们将把前面提到过的内容组织起来构成我们的导航器应用,这个 iPhone 应用将装载在我们的的无人机上,你可以在 Github 下载应用的源码,尽管这个应用是计划在没有直接的交互操作下来使用的,但在测试过程中我们做了一个简单的 UI 界面来显示其无人机状态并方便我们手动操作。
AR Drone 无人机是一台小型的 Linux,当我们加入它提供的 WiFi 热点的时候,我们就可以通过 192.168.1.1 来访问无人机。用户数据报协议(UDP)无人机的通讯采用了 UDP 协议,UDP 是至今沿用并占有主导地位的传输层协议之一,而另一个是 TCP 协议。
初始计划我们第一个想法是利用蓝牙信号在室内去操控飞行器。在这个飞机器上搭载 iPhone,这样可以通过获取从室内发送来的一些信号转化为三维坐标来获取它的当前位置。然而,我们第一实验是用信号的强弱来测量信标和 iPhone 之间的距离,但是结果令人失望。当测量到两到三米多的距离(大约 6 到 10 英尺)的时候发现信号和正常准确的信号相差太远。
欢迎来到 objc.io 第八期2014,新年快乐!这期和以往的有点不同。这是个假期 issue,我们决定花上几天时间搞个小而有趣的项目,然后再写出来。我们想针对飞行器做点什么,但是还没有具体的方案。当我们开始这个项目时,才知道硬件是多么的复杂。最后,为了能在这几天里搞出一个相对完整的项目,我们不得不砍掉一些点子。
当我们处理自然语言(相对于程序语言而言)的时候会遇到一项挑战,即涵义模棱两可。程序语言是被设计成为有且只有一个可能解释的语言,而人类语言可能由于模糊性和不确定性衍生出很多问题。这是由于有时候你并不想确切地告诉别人你对某事物的想法。在社交场合这完全没有问题,但是当你试图使用计算机来处理人类语言的话,就会非常痛苦。词法标识(token)就是一个简单的例子。
我们希望有一种快速的一次性的解决方案,可以把数据格式化为一种易读的格式。Foundation 框架中的就有 NSFormatter 可以很好地胜任这个工作。另外,在 Mac 上,Appkit 已经内建了 NSFormatter 的支持。内建格式器Foundation 框架中的 NSFormatter 是一个抽象类,它有两个已经实现的子类:NSNumberFormatter 与 NSDateFormatter。现在我们先跳过这些,来实现我们自己的子类。
每个应用或多或少都由一些需要相互传递消息的对象结合起来以完成任务。在这篇文章里,我们将介绍所有可用的消息传递机制,并通过例子来介绍怎样在苹果的框架里使用。我们还会选择一些最佳范例来介绍什么时候该用什么机制。
Key-value coding (KVC) 和 key-value observing (KVO) 是两种能让我们驾驭 Objective-C 动态特性并简化代码的机制。在这篇文章里,我们将接触一些如何利用这些特性的例子。观察 model 对象的变化在 Cocoa 的模型-视图-控制器 (Model-view-controller)架构里,控制器负责让视图和模型同步。这一共有两步:当 model 对象改变的时候,视图应该随之改变以反映模型的变化;
在这篇文章里,我们会看看如何用 Objective-C 写值对象 (value objects)。在编写中,我们会接触到 Objective-C 中的一些重要的接口和方法。所谓值对象,就是指那些能够被判等的,持有某些数值的对象 (对它们判等时我们看重值是否相等,而对是否是同一个对象并不是那么关心)。通常来说,值对象会被用作 model 对象。
NSArray, NSSet, NSOrderedSet 和 NSDictionary基础集合类是每一个 Mac/iOS 应用的基本组成部分。在本文中,我们将对”老类” (NSArray, NSSet)和”新类” (NSMapTable, NSHashTable, NSPointerArray) 进行一个深入的研究,探索每一个的效率细节,并讨论其使用场景。作者提示:本文包含一些参照结果,但它们并不意味着绝对精确,也没有进行均差分析及多次的测试。
欢迎来到 objc.io 第七期!这个月,我们选择了 Foundation 框架作为我们的主题。Foundation 框架的起源,可追溯到 NeXTSTEP 的时代, 到现在大概有 25 年的历史了,涵盖了很多的内容。本期不会描述太多关于 Foundation 框架的细节,而是重点会选取几个话题来进行讨论。
你是否曾经试着为 iOS 项目搭建一台支持持续集成的服务器,从我的个人经验而言,这可不是一个轻松的活。首先需要准备一台 Mac 电脑,并安装好全部所需的软件和插件。你要负责管理所有的用户账户,并提供安全保护。你需要授予访问仓库的权限,并配置所有的编译步骤和证书。在项目运行时期,你需要保持服务器的稳健和最新。
CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具。利用 CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。CocoaPods 背后的理念主要体现在两个方面。首先,在工程中引入第三方代码会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。
我们用 Xcode 构建一个程序的过程中,会把源文件 (.m 和 .h) 文件转换为一个可执行文件。这个可执行文件中包含的字节码会将被 CPU (iOS 设备中的 ARM 处理器或 Mac 上的 Intel 处理器) 执行。本文将介绍一下上面的过程中编译器都做了些什么,同时深入看看可执行文件内部是怎样的。实际上里面的东西要比我们第一眼看到的多得多。
编译器做些什么?本文主要探讨一下编译器主要做些什么,以及如何有效的利用编译器。简单的说,编译器有两个职责:把 Objective-C 代码转化成低级代码,以及对代码做分析,确保代码中没有任何明显的错误。现在,Xcode 的默认编译器是 clang。本文中我们提到的编译器都表示 clang。
近些日子我们被宠坏了 -- 我们只需要单击 Xcode 中的一个按钮(这个按钮看起来有点像是在播放一些音乐的动作),过几秒钟之后,我们的程序就会运行起来了,除非遇到一些错误,这非常的神奇。在本文中,我们将从更高级别的角度来解读 Build 过程,并探索一下在 Xcode 界面中暴露出的 project setting 信息与 Build 过程有什么关系。
欢迎来到 objc.io 的第六期!本月我们迎来了第一个小里程碑 —— objc.io 半岁啦!在这个特别的时刻,我们对 objc.io 做了一些改变,同时增加了一些东西。你可能已经注意到了,我们美化了网站的外观。现在每一期主题都有一个漂亮的封面,同时我们让网站的排版更清晰以便准备迎接以后的内容。另外,objc.io 可以在 iPhone 和 iPad 上通过报刊 App 的形式,按月来订阅。
在 WWDC 上看到 iOS 7 系统的发布后,我们重新审视了自己的应用 Grocery List,并且意识到:iOS 7 对于开发者来说是一个全新的开始,就像七年前 iPhone 首次发布一样。现在仅仅简单地改变设计是不够的,我们不得不重新思考并重构整个 app,从而让它适合 iOS 7 全新的环境。我们也的确是这么做的。
当 iOS 7 刚发布的时候,全世界的苹果开发人员都立马尝试着去编译他们的 app,接着再花上数月的时间来修复任何出现的错误,甚至从头开始重建这个 app。这样的结果,使得人们根本无暇去探究 iOS 7 所带来的新思想。除开一些明显而细微的更新,比如说 NSArray 的 firstObject 方法——这个方法可追溯到 iOS 4 时代,现在被提为公有 API——还有很多隐藏的技巧等着我们去挖掘。
关注时代Java