• iPhone 3.0新特性系列教程之四 – 临近监测

    去年当Google发布了一款iPhone应用程序时引起了一段辩论:他们的程序使用了未公开的API来检测是否电话靠近说话者的耳朵。

     

    而在iPhone 3.0 SDK中,此API可以被任何程序使用了。本文展示怎样使用此API:

     

    读文章 »

     
  • 开始学习iPhone编程之二 – 有关开发的基本问答

    有一个印度的朋友向我询问了几个有关iPhone开发的问题,下面是我的回答。

    1) 我目前还不是注册的开发者,我将在2,3天内注册,我不能完成代码签名的原因是不是这个?
    要进行代码签名,有两种方式,一种是正确的方式,一种是错误的方式。正确的方式是使用Apple开发者许可证,错误的方式是使用Cydia。我推荐你使用正确的方式。所以,再多等2,3天,你就可以安装应用程序到你的设备上了。

    2)注册后怎样获取证书…?(代码签名证书…)可以告诉我详细的步骤吗?
    一旦你获得了许可证(apple会email你), 你就可以开始访问 http://developer.apple.com/iphone的Program Portal。从那里可以获取证书(certificate)。

    译者注:实际上获取签名证书的步骤相当繁复,不知有无apple中文网站是否有说明。英文说明翻译工作量十分大,不知感兴趣的人多不多。

    3) 怎样发布我的应用程序…(可以不需要App-store进行程序发布吗?)
    你应该知道,数以百万计的iPhone用户中的80%到90%是通过Apple store下载程序的。 但是如果你的目标对象是“越狱”用户,你需要通过Cydia。(译者注:或者通过Icy)。如果你使用的是Apple官方SDK,那么你可以同时在Cydia和Apple store 上发布你的应用程序。

    4) 总共有多少证书?(像代码签名证书之类)
    有两种类型的证书:
    1. 开发者证书,你可以用来在Xcode调试器中测试程序。.
    2. 发布证书,用来发布给你的应用程序给客户或发送给客户。

    译者注:实际上又有两种情况,一种是发布给App Store,另一种叫Ad-hoc发布,仅限于注册了iPhone UUID的用户使用,便于测试。

    5)  我是否不进行注册而让我的程序运行在设备上(“越狱”的设备)?
    你可以在“越狱”的设备上运行程序,你需要的只是Apple开发者许可证或通过Cydia安装程序。

    原文见:Basic Questions before You start iPhone Development
     
  • 跨平台代码分享之三 – XML解析器

    XML格式使用越来越广泛,不论是游戏还是普通应用软件都有使用。而我喜欢用xml作为配置文件。XML解析的方法实在很多,最根本的两种是SAX和DOM。SAX需要一边读取文件一边解析,速度较快;而DOM采用树状结构保存解析文件,使用方便。iPone自带的XML解析器一则无法跨平台,一则使用不便,还有一些bug(我是指SDK 2.0,新版本SDK 3.0的XML解析器没用过,所以没有发言权),所以我决定使用其他开源XML解析器。开源的XML解析器也有很多种,比如libxml2,TouchXML(iPhone版),tinyxml等。其中tinyxml简单易用,如果你不要求诸如DTD等功能,那么tinyxml绝对应该是你的首选。我采用的是ticpp(tinyxml的cpp版本,采用DOM方法)。

     

    读文章 »

     
  • 从地址簿提取联系人信息

    介绍:

    本教程将介绍怎样通过代码从地址簿中获取联系人信息。在iPhone上这实际上比你想象的更容易。你可以提取任何存储于地址簿中的信息,如图片(照片),email地址。注意: iPhone提供了简易的用户联系信息的提取方法但附加了编辑限制。你的程序可以访问所有信息但不允许修改。本教程中,我将介绍提取用户联系信息的简单步骤,最终输出如下所示:

    Picture 13 iPhone Tutorial for Retrieving Contact information from AddressBook
    图11. 最终输出

    读文章 »

     
  • iPhone 3.0新特性系列教程之一 – 使用UIPasteboard复制/粘帖

    今天的主题是怎样读/写粘帖板。

     

    读文章 »

     
  • 用户是上帝?

    这几天有朋友向我抱怨Apple Development Center循环登录问题(即输入用户名和密码后又进入登录页面,无任何错误提示),这让我回忆起去年在一段悲惨遭遇,有感而发。

     

    去年我在国内使用铁通网络,遇到过此问题,找ISP,人家一句话就打发我了,你其他网站都可以登录,那一定是Apple的网络问题了。我一想也是,至少Apple会知道在什么情况下会发生这种现象吧。于是乎赶紧联系Apple中国的客服,这一联系不要紧,接连三个月的拉锯战,让我深深体会了当年秋菊打官司的艰辛。说句实话,我并没打算Apple真能给我一个完美的解决方案(实际上我通过代理还是可以登录的,虽然十分之麻烦,而下载SDK此类的工作根本是无法进行的了),但他们每次email的回复都不竟让我怀疑他们是不是把每个客户当成了脑残(对不起,并非歧视残疾人)。通篇的废话,虚假的客套,每次都是诸如“请使用其他浏览器,请清除cache或重启电脑……”的回答,让我最后不得不放弃“讨个说法“的念头。实际上据我所知,这不光是Apple中国独有的问题,我在Apple开发者论坛上也看到一些老外遇到同样的问题,至今也无法解决。

     

    商场如战场,每个人特别是Steve Jobs这种商场中的精英更是深谙此理。那么,“用户是上帝”这句放之四海皆准的道理,为什么就被Apple置之脑后了呢?我想可能因为我们是开发者,而不是最终用户吧?当然,生活还要继续,如果我们还打算通过Apple Store赚钱的话,也只有忍下去了,谁让我们有五千年”谦和忍让“的文化熏陶呢?

     
  • 在UIAlertView中加入UITextField

    Screen shot 2009-11-09 at 8.12.11 AM copy

     

    这个简单的教程将介绍怎样在UIAlertView中加入UITextField。它只包括几行代码。你将学到CGAffineTransform和UITextField编程。

     

    读文章 »

     
  • 运行系统应用程序

    iPhone集成了许多应用程序,比如说浏览器,email,电话拨号等,但怎样在你的应用程序中调用这些程序呢?简单的方法是使用openURL。方法如下:

    1. 打开网页:

    1
    2
    [[UIApplication sharedApplication]
        openURL:[NSURL URLWithString:@"http://www.iphone-geek.cn"]];

    2. 拨号:

    1
    2
    [[UIApplication sharedApplication]
        openURL:[NSURL URLWithString:@"tel://13788102299"]];

    3. SMS:

    1
    2
    [[UIApplication sharedApplication] openURL:
        [NSURL URLWithString:@"sms:13312345678"]];

    4. Email:

    1
    2
    3
    [[UIApplication sharedApplication]
        openURL:[NSURL URLWithString:
        @"mailto:emailAdress?subject=你好&body=我的邮件"]];
     
  • 开始学习iPhone编程之一 – 开始前要知道的五件事

    在开始学习iPhone编程前,你必须知道的五件事:

     

    1. 你需要一台安装了mac os x( mac mini, mac book 或 mac pro, 译者注:甚至是一台x86 pc)

    2. 申请Apple开发者许可证(99美元)

    3. 免费下载SDK,你生成的应用程序可以免费在模拟器上运行。但若想在iPhone/iPod touch上运行并提交到apple store,那么你必须拥有一个开发者许可证。

    4. 为测试你的程序,你必须拥有iPod 或 iPhone,因为模拟器和真机的某些特性如内存是不同的。(译者注:另外像重力感应等在模拟器上是不好测试的)。

    5. 编程语言是Objective – C,它十分类似于 C/C++,甚至于像我这样的Java开发者也不需要花很多时间学会Object-C。

     

    原文见:five-things-you-should-know-for-building-iphone-applications
     
  • 最简单的获取文档目录的方法

    应该不需要解释了吧。见以下代码:

    1
    2
    NSString * docs = [NSHomeDirectory()
           stringByAppendingPathComponent:@"Documents"];