第一个 iPad 程序

总算把巨无霸 xcode 以及 ios 的 sdk 装了上去,安装程序巨傻,说要关掉 iTunes,我都关了但是还是不继续装下去,也没搞明白为啥。后来怒了,ps 看了一眼,居然有个叫 iTunesHelper 的进程,杀掉之后就开始正常的安装了下去(省略骂人字样若干)。

启动 Xcode,创建新的项目,选择 iOS 里面对应的程序,如 view 类型之后,xcode 纠缠生了一个基本的模板,可以运行,我们只需要点上面的开始按钮,xcode 就会启动编译器、连接器进行编译链接,末了还会启动模拟器。由于我们在界面上什么都没写,所以打开模拟器之后是这样的:

hello 项目运行起来之后的样子。

按一下 home 按钮,这个模拟器居然跟真的 iPad 一样会回到桌面。

由于没有进行任何设置,hello 的图标也是全白的。

可能细心的人已经看见这里 iOS 的版本号了,虽然我的 iPad 是 5.0.1 的 iOS,我却无法使用最新的 xcode 和 SDK,这是因为犯贱的 apple 认为那个只能在 Lion (Mac OS X 10.7)下运行,虽说 Xcode + iOS SDK 是免费的,但是 Lion 却不便宜。

Xcode 里面列出来了一些 source code,那些都是苹果设计 GUI 的理念的体现,我们这里只是简单的熟悉一下使用的 objective C 语言。因此从 hello world 开始好了。objective C 是 C 的扩展,扩展的启发来自 smalltalk,现在用的主要是 Apple 在 2007 年搞的 objective C 2.0。讽刺的很,apple 当初发布 iPhone 并没有给开发者 native API,而只是希望有人为 safari 开发一些基于 web 的应用。正如 chrome OS 到现在都一直没见到什么起色一样,当时的 iPhone 应用也是一潭死水,直到 apple 发布了基于 object C 的这个 SDK。为什么是 Object C?这大概是苹果的“历史包袱”,Jobs 出走阶段去了一个叫 NeXT 的公司,他们做了一个 NeXT 风格的界面,后来被苹果收购。其实这个玩意很早的时候还接触过其 GNU 版本,那就是集成在 window maker 里面的 GNUStep 界面:

GNUStep 的界面

这个 NeXT 系的都是使用 Objective C 写成的,在此之上 apple 现在使用的 Cocoa 界面也是 objective C 写的。和 C++ 的老祖 simula 不同,objective c 的祖先是 smalltalk,里面一些比较细节可以参考 wiki。objective C 是靠 message 实现成员方法调用,而且 message 是运行时自动 binding 上的,这跟 C++ 崇尚编译时 binding 的思路完全不同。

#import <Foundation/Foundation.h>

int
main (int argc, const char* argv[]) {
  NSAutoreleasePool* pool
    = [[NSAutoreleasePool alloc] init] ;

  NSLog (@"Hello World!") ;
  [pool drain] ;
  return 0 ;
}

不要惊讶于以上程序与 C 代码非常之象,因为 objective C 是 C 的 superset,完全兼容 C 的语法。同时我们也不难理解其中中括号部分,那就是 message,这里的字符串前面加 at 是为了标明这不是一个 C-style 的字符串,而是一个 NSString。编译也很简单,

$ make hello LDFLAGS+="-framework Foundation"
cc   -framework Foundation  hello.m   -o hello
$ ./hello
2011-11-21 08:17:33.331 hello[72422:903] Hello World!

这里的 framework 和动态链接库类似,只是是 objective C 写的。其实像 Qt 提供的 framework 估计也就是提供了类似的 binding?后面我们熟悉了更多关于界面设计以及 object C 的细节以后会详细的介绍更多的东西。

——————
And they said one to another, Go to, let us make brick, and burn them thoroughly. And they had brick for stone, and slime had they for mortar.

Advertisements
第一个 iPad 程序

一个有关“第一个 iPad 程序”的想法

  1. hxtang 说:

    后面我们熟悉了更多xxx的细节以后会详细的介绍更多的东西。

    这个句式好像在你的很多文里面看到,然后我就理解成是系列了,不是的么。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s