• Navigation-Based应用程序iPad模板

    准备为iPad写一个Navigation-Based程序,却发现XCode 3.2中根本没有iPad的Navigation-Based程序的模板。Apple推荐在iPad下使用Split-View程序,但我并不想这样做,原因是我的iPad程序以后可能要放到iPhone中去,所以我需要一个Universal版。如果我在iPad下使用Split-View,那么这两个版本相差太大,所以我觉得都使用Navigation-Based程序。


    试了半天想修改iPhone的Navigation-Based程序的模板到iPad下,却没有成功,在网上搜了一下,终于找到一个别人做好的。下面是下载地址。可以使用如下命令将其加到XCode的模板中:

    mkdir -p “$HOME/Library/Application Support/Developer/Shared/XCode/Project Templates/My Templates”

    cd “$HOME/Library/Application Support/Developer/Shared/XCode/Project Templates/My Templates”

    git clone git://github.com/benellingson/Universal-Navigation-based-Application.git

    rm -rf “Universal-Navigation-based-Application/.git”



    或者下载zip文件,在创建了目录后,将zip解压其下。

     
  • 访问外部网页

    实际上有两种方法,第一种是:

    1
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com"]];



    这种方法将会退出当前程序,用Safari打开url。我有好几个朋友都问到这个问题,实际上非常简单,可以使用UIWebView在当前程序中打开网页(假定你的UIWebView实例为webView):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         NSString *urlAddress = @"http://localhost";
           
        //Create a URL object.
        NSURL *url = [NSURL URLWithString:urlAddress];
           
        //URL Requst Object
        NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
           
        //Load the request in the UIWebView.
        [webView loadRequest:requestObj];
     
  • 都是Backgrounder惹的祸 – 解决“越狱”真机调试的问题

    我的iPhone越狱后,在用Xcode进行调试时出现以下错误信息:


    warning: Unable to read symbols for “/Library/MobileSubstrate/DynamicLibraryies/libstatusbar.dylib” (file not found).

    Program received singal: “SIGUSR1″.


    上网查了一下原来是Backgrounder在作怪,最简单的解决方法就是在Backgournder的overrides设定中,禁止要调试的程序以background模式运行即可。


    想要知道具体原因,请参见:Backgrounder vs. Build and Run

     
  • iPhone上通过http传递JSON数据




    本教程介绍了在iPhone程序中怎样访问JSON web service的详细步骤。


    读文章 »

     
  • IAP(程序内购买): 完全攻略

    第一印象觉得In-App Purchase(简称IAP)非常简单。Apple提供的大量文档应该让开发者很快熟悉地熟悉。那么,为什么在你的应用中集成IAP特性就如此令人生厌呢?


    这是因为在开发过程中不可避免会出现一些错误。而但这些错误发生的时候,你就抓瞎了。虽然Apple提供了有关IAP的大量文档,但他们并未提及集成IAP的详细步骤。而且对StoreKit集成过程中出现的问题也没有一个核对清单。另外对于为什么诸如产品ID非法之类的问题也没有提供NSError之类的对象来告诉你原因。


    在试用了各种可能的解决方案后,你只能身心疲惫,彷徨无助。


    为了提高你的效率和减少你的痛苦,我觉定利用此文来介绍一下实现IAP的详细步骤。本文很详细,有点长。甚至可能太长了,但不像Apple的文档,它提供了为实现IAP的每一个步骤。


    废话少说,我们直入主题吧。


    读文章 »

     
  • 以密码方式显示UITextField文本

    很简单,如下:

    1
    textField.secureTextEntry = YES;


     
  • iPhone用Expat XML解析器

    xml的解析运用的十分广泛,我以前也介绍过使用ticpp(tinyxml的c++版本)进行简单的xml解析,见跨平台代码分享之三–xml解析器,它是采用DOM进行解析。iPhone SDK中自带的NSXMLParsers也可进行xml解析,但是对于解析web server下载的大型文件时效率不够高,有一个第三方的objective c expat wrapper 采用expat(SAX方式)进行解析,效率非常高。据有人测试,其效率相对于NSXMLParsers约提高了70-80%。


    下面是其下载地址



     
  • 调试教程 – 使用UIRecorder Instrument将测试自动化

    (注:这是我以前收集的一篇文章,找不到出处了,稍作修改在此发布)


    如果你发现程序的bug,但每次进行测试都需要许多步骤才能重现问题,那么本教程适合你。通常,测试和调试是非常繁琐的事情,iPhone程序的开发尤其如此。

    读文章 »

     
  • 不通过App Store发布程序

    在一些情况下,我们需要不通过App Store发布程序,比如:


    1. 发布前的测试
    2. 企业内部自用软件,不需要发布到App Store


    非正规的做法当然是“越狱”,但是更为正式的做法是使用Ad-Hoc。至于怎样创建Ad-Hoc provision文件,不在本文讨论的范围内。本文讨论的是怎样安装Ad-hoc发布的程序。通常的做法是:


    1. 开发者将Xcode编译的Ad-Hoc程序.app文件压缩后与.mobileprovision一起传给用户。
    2. 用户拖动.mobileprovision文件到iTunes下的资料库应用程序
    3. 将压缩的.app文件解压,然后将整个.app文件夹拖动到iTunes下的资料库应用程序


    通常这对于Mac用户没有什么问题,但有时Windows用户会遇到一些问题。所以更好的做法是将.app制作成.ipa与.mobileprovision文件一同寄给用户。下面是制作ipa的步骤:


    mkdir Payload
    cp -rp MyApplication.app Payload/
    zip -r MyApplication.ipa iTunesArtwork Payload
    


    需要注意的是这里使用的是zip命令而不是Find中“Compress”选项,因为它会添加一些额外的内容。另外iTunesArtwork是一个512×512的png文件(注意无后缀),它将在iTunes中增加一个图标,所以这并不是必需的。

     
  • 使用Javascript和PHP检测iPhone/iPod的使用

    这与iPhone编程无关,不过当你的网站需要为iPhone/iPod进行优化时,可能会需要使用下面的技术:


    使用Javascript检测是否正在使用iPhone 和 iPod


    如果你的网页需要支持iPhone和iPod Touch,首先你必须检测到是否正在使用iPhone和iPod Touch,这样你才可能为其使用特定的代码或样页式。下列代码段使用Javascript来检测iPhone/iPod Touch的使用,从而将网页重定向iPhone相关的网页。


    1
    2
    3
    4
    5
    6
    <br />
    if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {<br />
        if (document.cookie.indexOf("iphone_redirect=false") == -1) {<br />
            window.location = "http://m.espn.go.com/wireless/?iphone&i=COMR";<br />
        }<br />
    }<br />

     

    使用PHP检测是否正在使用 iPhone 和 iPod


    有时在iPhone上,Javascript被禁止使用。为检测到iPhone/iPod Touch的使用,你需要使用下列PHP代码:


    1
    2
    3
    4
    5
    <br />
    if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod')) {<br />
        header('Location: http://yoursite.com/iphone');<br />
        exit();<br />
    }<br />