• 开始学习iPhone编程之五 – Objective C / Cocoa / iPhone的内存管理

    随着iPhone SDK的发布,iPhone/iPod Touch被售出数以百万计(作者注:这是一篇以前的文章,现在iPhone/iPod Touch的销售数量远大于此数)而且App Store广受欢迎,越来越多的开发者开始进行iPhone及Cocoa Touch的开发。SDK设计精良而且很容易入门,最大的障碍来自于Apple选择作为OSX和iPhone开发的独特语言(其前身为NextStep):Object C。初看时,Object C非常丑陋而且与人们常用的基于C的语法(C, C++, ActionScript, JavaScript, Java, C#, GLSL等)并不相似。但一旦对其有所研究后,你会喜欢上它并明白其语法为何如此。

     

    大部分人初次接触Objective C/Cocoa开发时的最大困难是内存管理 – 当你最终理解了它是多么简单(尽管这可能需要通过几个项目)时,你就会明白这一切实际上是多么漂亮。实际上,我发现其非常实用,所以编写了一个C++类来实现类似功能(http://code.google.com/p/ofxmsaof/wiki/ofxObjCPointer).

     

    读文章 »

     
  • iPhone项目使用静态库的最佳方法

    由于Apple禁止在iPhone中使用外部框架或动态链接库,所以要重用代码(第三方库或自己的代码)只能选择如下方法:

    1. 直接将代码加入项目。这种方法有点笨。例如,你的一段代码被五个项目共享,如果你发现一个小bug,那么你需要更改五个地方。够麻烦吧?
    2. 使用静态库。这是我经常使用的方法。但Xcode并未为iPhone提供静态库的模板。有两种解决方法:

    读文章 »

     
  • 跨平台代码分享之五 – 字符串转换

    严格地说,本文主题与跨平台代码无关。但是由于在iPhone上,通常界面程序还是由Objective-C编写的,经常需要用到STL string和NSString之间的转换。下面是转换的代码:

     

    NSString -> std::string

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +(std::string)getString:(NSString*)theString
    {
        int size = [theString length]*sizeof(char);
        char *buffer = (char*) malloc(size+1);
        memset(buffer, 0, size+1);
        [theString getCString:buffer maxLength:size+1 encoding:NSASCIIStringEncoding];
        std::string str(buffer,size);
        free(buffer);
        return str;
    }

     

    std::string -> NSString

    1
    2
    3
    4
    +(NSString*)getNSString:(const std::string&)theString
    {
        return [NSString stringWithCString:theString.c_str()];
    }
     
  • Flash游戏,iPhone用户准备好了吗?

    (译者批:本人并不看好此公司。因为Adobe即将推出最新beta版的flash cs5。谁愿意分一杯羹给别人呢?特别是这杯羹是如此之大 – 50%的净收入)

     

    iPhone引领的休闲游戏复兴的风潮似乎已经过热。感谢早些时候Adobe发布的新Flash开发软件beta版,一个新启动的公司OneAppAtATime允许开发者使用Flash开发iPhone程序。从本周开始,此公司为Flash游戏开发者打开了一道大门,他们提供将Flash游戏转换为iPhone游戏并使其获得App Store批准的服务,作为回报他们将收取35%的收入。(也就是说在Apple拿走30%后与开发者平分剩下的70%。)

     

    OneAppAtATime 是Evan “Rabble” Henshaw-Plath的杰作,他们以前曾为源于Yahoo Brickhouse的卫星服务公司Fire Eagle以及传播Twitter的播客公司Odeo工作。

     

    Henshaw-Plath,位于乌拉圭的蒙得维的亚,宣称希望每月生产“数十甚至数百个游戏“。他们的目标是许多Flash游戏的兼职开发者以及由于网上用户不希望付费过去有困难从他们的项目中赚到钱的开发者。

     

    但是在iPhone平台上,人们通常是需要付费的,Henshaw-Plath希望将这些游戏的价格定在$2.99。而且尽管Adobe宣布 计划在2009年底发布Flash专业CS5的公众beta版,OneAppAtATime在竞争中已经抢先一步。Henshaw-Plath宣称他通过乌拉圭大量的Flash开发者获得了先机。

     

    不像它的名称,OneAppAtATime希望成为一个工厂,能够大量生产出尽可能多的程序,但是,Henshaw-Plath特别希望能够改编利用了iPhone特性如重力计,GPS,罗盘和地址簿的程序。例如,一个公司的游戏利用Atari经典的Breakout游戏允许玩家通过前后移动设备来控制他们的摇杆。(由于这些程序还没有通过Apple的批准,你现在还不能玩这个游戏。)

     

    Henshaw-Plath通过其Ruby on Rails顾问公司Cubox注资。他希望通常需要“数百甚至数千美金”开发的每个Flash游戏只需花几天时间转换。

     

    OneAppAtATime正在释放一个怪物;目前已经有大约100,000 iPhone程序,而且有远超此数的Flash游戏存在。具有如此之多的竞争,维持生意并不是件容易的事情。Henshaw-Plath说他的程序将在与其他iPhone程序的竞争中胜出因为用户在购买之前可以通过Flash进行测试。而且他还并不具有对游戏的独家许可证,这样Flash开发者在认为他们可以做得更好时有权与OneAppAtATime竞争。并且公司保证为每个游戏提供大量的公共市场宣传和广告。

     

    原文见:iPhone Users, Get Ready for Flash Games
     
  • 瑞典人苹果总部扎营事件

    (蛮搞笑的事件)

     

     

    简直疯了。一些瑞典人“入侵”Cupertino苹果总部等待Steve Jobs出现。他们是SVT TV频道 – 相当于BBC – broadcasting live now -瑞典版的雇员。原因是:

     

    读文章 »

     
  • 越狱iPhone上的蠕虫病毒

    “澳大利亚的越狱iPhone用户发现他们的iPhone上的墙纸被蠕虫改为了80年代流行明星Rick Astley的图像”。这是世界上首例Apple iPhone上发现的蠕虫病毒。根据Sophos报导,此蠕虫利用用户安装了SSH及没有修改默认密码的漏洞 猎取其他脆弱的iPhone并进行感染。用户被奉劝使用非默认密码来保护他们的iPhone。Sophos还提到蠕虫并无害,除了其涂鸦式的图片:‘不经允许访问他人电脑设备和修改他们的数据在许多国家是违法的 – 这些涂鸦的代价是需要花时间对受影响的iPhone进行清理。 … 其他好奇的黑客在读到世界上首例iPhone蠕虫的消息也会禁不住尝试。另外,更邪恶的黑客可能利用ikee编写的代码用在更严重的情况下。’”

     
  • iPhone上的传感器

    像其他智能手机一样,iPhone上具有各种传感器:摄像头,重力感应器,GPS,接近检测器,磁力计(数字罗盘)。从网上找到一些介绍和代码。

    pdf

    播客

    示例程序

     
  • 第二部分:数字有效吗?每天一百美金的生意

    (译者注:虽然此文与iPhone无关,但却是有关开始生意的一些考量。如果你打算通过编写iPhone程序开始自己的事业,值得参考一下。)

     

    生意的基本原则是利润,即收入减去成本。试着将固定成本想象成比率 – 特别是每天或每小时的比率 – 然后再研究一下。你会发现你将对现有的生意或潜在的新的风险投资的成功具有更深刻的理解。

     

    读文章 »

     
  • 不需要越狱或Push运行iPhone后台程序

    (译者注:虽然不提倡本文的方法,但还是向此文作者的创造性致敬!)

     

    有一种试验性的方法实现iPhone上运行后台程序/守护进程。到目前为止,iPhone SDK 并不允许在iPhone OS上(其本身是基于 Darwin Unix的)开发“真正的” Unix方式的后台进程(守护进程)。

     

    本方法涉及了一些高级编程课题,例如 shellcode,因此要求一些基本的汇编经验,Unix系统调用以及最好具有一些ARM 经验。

     

    读文章 »

     
  • 跨平台代码分享之四 – 开源跨平台C++库介绍

    做项目时发现一个开源C++库,称为POCO(POrtable COmponents – 可移植元件),非常方便好用。

     

    特性:

     

    * 线程,程序同步及多线程编程高级抽象
    * 流及文件系统访问
    * 共享库将类加载
    * 功能强大的日志和错误报告
    * 安全及加密
    * 网络编程 (TCP/IP 套接字, HTTP客户端和HTTP服务器, FTP, SMTP, POP3, 等)
    * XML解析 (SAX2 和 DOM) 及生成
    * 配置文件及选项处理
    * SQL数据库访问(ODBC, MySQL, SQLite)

     

    可以运行的平台包括:

     

    * Windows
    * Mac OS X
    * iPhone OS
    * (embedded) Linux
    * HP-UX
    * Tru64
    * Solaris
    * QNX