<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.5.1" -->
<rss version="0.92">
<channel>
	<title>Cocoa China 苹果开发中文站</title>
	<link>http://www.cocoachina.com</link>
	<description>苹果Mac OS X开发 iPhone开发 Cocoa以及Cocoa Touch</description>
	<lastBuildDate>Sun, 07 Sep 2008 15:32:28 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>Cappuccino 和 Objective-J官方介绍</title>
		<description><![CDATA[9月5日，Cappuccino和Objective-J正式放出。做为新一代Web技术的革命，相信这个新的框架会很快流行起来。Cocoachina的读者都具备一定的Mac开发经验，对于Objective-C有一定程度的了解。cocoachina联系了Cappuccino的开发者280 North，得到了中文版Cappuccino文档翻译的授权。以下是官方的Cappuccino和Objective-J的介绍文档，本站将它翻译过来提供给国内的读者。
原文地址：http://cappuccino.org/learn/

Cappuccino是一个开源的应用程序框架，它的目的是让使用者开发出观感和桌面程序相同的Web应用程序。
Cappuccino建立于JavaScript等标准的Web技术之上，它实现了的大部分GNUstep和Cocoa框架。当您使用Cappuccino的时候，无需考虑那些复杂的传统网络技术，像HTML、 CSS ，甚至DOM等。那些烦复的跨浏览器的事情，这个框架已经完全将它们抽象出来了。
Cappuccino采用了一种新的的叫做Objective-J的编程语言，这是以Objective-C为蓝本，完全构建于JavaScript。 用Objective-J编写的程序在客户端中被解释，所以无需编译和任何插件。Objective-J与Cappuccino同时发布，基于LGPL授权。

为应用程序设计
没有人会否认，一个网站和一个桌面应用之间存在着明显区别。同样，我们也认为静态网页和功能全面的Web应用程序之间存在有很大的区别。Cappuccino是专门为开发应用程序而设计，而不是针对开发网站。
Cappuccino尽可能在客户端上完成大部分工作，而不是在服务器上。一个标准的Web应用程序并不会重新载入，而是用传统的AJAX技术发送和接收数据，并将数据展示在客户端上。 280 Slides是第一个使用Cappuccino开发的应用程序，它展示了使用这个新的框架能够开发出什么样的程序。
开发者们可以仅仅关注特定的问题，诸如支持PowerPoint、集成Twitter，或是任何可以让程序变得独特和具有吸引力的事情，完全无需考虑那些诸如如何实现拖拽、复制粘贴文本和对象、 撤消和重做，文件存储，跨浏览器的绘制复杂图形图像等其他功能。
如何比较cappucino其他框架？
Cappuccino不是为建设网站而设计的，也不是为了让现有的网站看起来更&#8220;动态化&#8221;。我们认为，这些目标对于一个独立的框架来说有点远了。像Prototype和jQuery这些框架来做这些工作就足够了，但是由于它们的本质，开发人员只能在开发过程中对它们进行低效的使用。
另外，对于Sproutcore这种现有的框架技术，虽然Sproutcore与Cappuccino的目标类似，但是它的做法与Cappuccino完全不同，仍然依赖于HTML，CSS，JavaScript，Prototype，和一套完全独立的API。另外它还需要特殊的开发软件和麻烦的编译步骤，我们认为这种做法是错误的。
使用Cappuccino，你不需要了解HTML。你一行CSS也不需要写，甚至完全无需和DOM进行交互。我们只要求开发者了解一个技术：Objective-J和一套API。另外，众所周知，这些技术已经存在了很久，并且被广泛地了解。开发者们可以利用几十年的开发和协作经验，加快开发富Web应用程序的步伐。
如果你想建立一个富Web应用程序，您还是需要了解一些新知识的。很多人认为它会是JavaScript2，或HTML5，或是一些新的标准。问题是，正如我们逐渐意识到的，标准的建立工作过于缓慢。Cappuccino现在就可以使用，而不是理论上的未来。Objective-J本质上是JavaScript 2 ，但是可以在当今的任何浏览器上使用。因为我们仅仅依靠最核心的网络技术，做出的提升并不会受浏览器和标准的限制。
支持的浏览器
Cappuccino和Objective-J可以在任何流行的Web浏览器上运行，包括：&#160;

Internet Explorer 6和Internet Explorer 7&#160;
Firefox 2和Firefox 3&#160;
Safari 3 / WebKit
Google Chrome
Opera 9

&#160;
致谢
很明显，和其他开源项目一样，我们很感谢一些项目对我们的帮助，以下是致谢名单：
GNU Step
Cocotron&#160;
Angel Marin&#8217;s SHA-256
&#160;
更多信息
您可以查看我们的教学或是阅读在线文档，以了解更多关于使用Cappuccino 和 Objective-J的信息。
&#160;
如果您希望和大家讨论关于Cappuccino及Objective-J的看法，可以访问讨论区与大家探讨。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_264.html</link>
			</item>
	<item>
		<title>快讯：Cappuccino和Objective-J终于放出</title>
		<description><![CDATA[今天280North终于放出了Cappuccino和Objective-J，基于LGPL授权。除了使用Objective-J开发的幻灯片程序，还自带了两个Demo，一个是类似SproutCore的照片程序，另一个是基于iPhone的小游戏Demo。
关于Cappuccino和Objective-J的后续介绍本站将在未来的几天内进行更新。
关于Objective-J的相关说明可以参考本站的两篇文章：[1] [2]
尝鲜版地址为：http://cappuccino.org/
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_263.html</link>
			</item>
	<item>
		<title>支持Cocoa的ActiveRecord</title>
		<description><![CDATA[如果你对Ruby On Rails有一点了解的话，一定会知道ActiveRecord的大名。ActiveRecord对于存取数据库的操作简单到飞起，开发者再也不用去考虑麻烦的SQL查询，而是把记录当做对象来用就是了。
Ruby On Rails热，ActiveRecord自然也就有人学着做，各种版本各种语言模仿ActiveRecord的到处都是，如果你的数据库程序没用上ActiveRecord，都不好意思出门&#8230;&#8230;
苹果疯子们自然不甘示弱，有人也写了一个Objective-C版的ActiveRecord。

这个版本的ActiveRecord是ninja kitten写的，授权为BSD License，支持以下几个特性：
它支持两种很热很流行的数据库：

SQLite 3
MySQL 5.0

还支持4种很爽很简单的数据库关联关系：(下面的比如抄自fleaphp）

Has many &#160;比如&#160;每一篇文章都有多个（0-n）评论
Has one 比如&#160;每一个公民都有一个身份证号码
Has and belongs to many 比如&#160;每一位作者都写了多本（0-n）书籍，而每一本书籍都有多个（1-n）作者
Belongs to 比如&#160;每一个评论都属于一篇文章

另外，这个ActiveRecord可以用在iPhone上（不过并不支持MySQL，只支持SQLite，但是那样也很好了），作者提供了一个iPhone的模板供开发者使用。
用法同样简单到飞起，在数据库建表，然后建一个跟表名相同的Model类，继承于它自带的ARBase类，直接find出来的就是一个对象了。
如果你很喜欢这种数据库的操作方式，而不想累自己的话，那快点去这个地址下载这个Cocoa版本的ActiveRecord吧。
另外，如果你只用SQLite，那么这里还有一个另外的选择，同样实现了ActiveRecord的功能。
&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_262.html</link>
			</item>
	<item>
		<title>XCode鲜为人知的php编辑功能</title>
		<description><![CDATA[最近一直在做些web相关的事情，因此经常需要写一些php脚本。Mac上的一些编辑器好归好，但也各有缺点。
TextMate很好用，不过讨厌的地方也很明显，中文的显示就算通过改字体的方法进行修改，显示出来的也是半个字大小的长条字，难看的紧。相比之下，BBEdit要好很多，不过有个小小问题，目录结构的项目管理窗口是浮出的，总是需要通过command+`来回切换。Coda的感觉更好些，语法高亮，语法提示一应俱全，不过无法分析整个项目的类和函数，所以语法提示的也只是php内置的语法。
于是突发奇想，想看看XCode是否可以编辑php。

&#160;
默认XCode并没有出现在php文件的打开菜单中，建了一个空的项目之后，把php脚本整个目录拽到了新建的项目里。语法高亮有了，不过感觉关键字少了些，只有function，foreach等内置的关键字起到了高亮作用。
不过用了一会就发现，XCode可以分析整个php项目里的类和方法，还可以通过语法提示显示出来。
下面这张图就是XCode做的语法提示：

再往后面用，更发现一个比较有趣的功能，XCode还可以自动完成php的语法：

用习惯了XCode，自然感觉相比其他编辑器更加熟悉。既然XCode也可以进行php的编辑，何不就用它了呢？
XCode支持的其他语言的语法高亮还有很多，下面是一个列表：

]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_261.html</link>
			</item>
	<item>
		<title>iPhone GUI的PSD分层图</title>
		<description><![CDATA[Macgood的infopower提供了一个iPhone GUI的PSD素材。本站曾经介绍过OmniGraffle的iPhone模板，今天这个PSD素材正好可以和上次的模板配合使用。

下载地址在这里，需要注册一个Macgood的帐户。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_260.html</link>
			</item>
	<item>
		<title>两个Objective-C的收发Email代码</title>
		<description><![CDATA[前些天有读者提出需要在iPhone中开发Email的程序。在iPhone的SDK中除了使用mailto的方式发送邮件之外暂时还没有其他更好的方法。
这里介绍两个基于Objective-C的Open Source的Email代码，理论上来说经过微小的修改就可以用于iPhone中，不过需要注意的是请注意这两个代码的授权方式。


Pantomime是一个用于开发邮件程序的完整框架，而且有相当多的基于Mac的桌面程序都使用了这个框架。在功能方面，支持MIME编码和解码，完全支持IMAP和POP3协议，并支持本地邮件发送或使用远程SMTP发送，支持SSL/TLS安全发送及接收邮件机制。
它的大部分代码都是使用Objective-C写成，只有一小部分需要性能的代码用c写成，另外它还使用了一点eml代码。它既可以用于Mac OSX，还可以在GNUStep下编译。
Pantomime的使用非常简单，而且下载包中也提供了完善的使用例子，仅仅使用很短的代码就可以实现邮件的接收、发送以及密码验证等功能。
如果你希望开发一个完整的电子邮件程序，相信Pantomime是最好的选择。下载地址在这里，版本为1.2.0pre3。
另外一个代码的名字叫做MailCore Framework，由Matt Ronge开发（感觉做Mac开发的人叫Matt的好多&#8230;&#8230;）。同样非常好用，也自带了两个简单清楚的例子。
用MailCore Framework发送邮件非常简单：
&#160;



CTCoreMessage *testMsg = &#91;&#91;CTCoreMessage alloc&#93; init&#93;;


&#91;testMsg setTo:&#91;NSSet setWithObject:&#91;CTCoreAddress addressWithName:@&#34;Monkey&#34; email:@&#34;monkey@monkey.com&#34;&#93;&#93;&#93;;


&#91;testMsg setFrom:&#91;NSSet setWithObject:&#91;CTCoreAddress addressWithName:@&#34;Someone&#34; email:@&#34;test@someone.com&#34;&#93;&#93;&#93;;


&#91;testMsg setBody:@&#34;This is a test message!&#34;&#93;;


&#91;testMsg setSubject:@&#34;This is a subject&#34;&#93;;



设置好之后就可以直接发送：



CTSMTPConnection sendMessage:testMsg server:@&#34;mail.test.com&#34; username:@&#34;test&#34; password:@&#34;test&#34; port:25 useTLS:YES shouldAuth:YES&#93;;


&#91;testMsg release&#93;;



需要注意的是MailCore并不支持多线程，另外MailCore将所有信息都保存在内存中，因此需要开发者自己手写保存的代码了。不过虽然如此，它还是一个非常简单易用的邮件接收发送代码，建议读者下来看看。
MailCore的下载地址在这里，其中包括了文档和例子。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_259.html</link>
			</item>
	<item>
		<title>挺逗的，鸽子玩iPhone的TTR</title>
		<description><![CDATA[放上一个挺好玩的视频，一个鸽子玩iPhone上的Tap Tap Revenge&#8230;

这里还有个日本的iPhone广告……甚至还有MGS里的snake出场。

]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_258.html</link>
			</item>
	<item>
		<title>国内iPhone开发人员也可以加入iPhone Developer Program了</title>
		<description><![CDATA[感谢hustmobile提供的信息，苹果中国已经提供了中国开发人员加入iPhone Developer Program的方法，只是$99的版本要卖到748元人民币。不过不管怎么说，还是感谢苹果中国提供了一个快捷的途径，让中国开发者也可以参与到App Store的开发中来。
需要特别注意的是汇款之后不要忘记将信息提交给苹果中国的联系人。
官方汇款信息的地址如下：
http://developer.apple.com.cn/tobemember_idp.html
8月15日update: 以上地址今天已经无法访问。如果苹果中国在中国用户加入iPhone Developer Program方面有后续动作，本站将跟踪报道。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_257.html</link>
			</item>
	<item>
		<title>Cocoa的单态(singleton)设计模式</title>
		<description><![CDATA[如果你准备写一个类，希望保证只有一个实例存在，同时可以得到这个特定实例提供服务的入口，那么可以使用单态设计模式。单态模式在Java、C++中很常用，在Cocoa里，也可以实现。
由于自己设计单态模式存在一定风险，主要是考虑到可能在多线程情况下会出现的问题，因此苹果官方建议使用以下方式来实现单态模式：




static MyGizmoClass *sharedGizmoManager = nil;


&#160;


+ &#40;MyGizmoClass*&#41;sharedManager


&#123;


&#160; &#160; @synchronized&#40;self&#41; &#123;


&#160; &#160; &#160; &#160; if &#40;sharedGizmoManager == nil&#41; &#123;


&#160; &#160; &#160; &#160; &#160; &#160; &#91;&#91;self alloc&#93; init&#93;; // assignment not done here


&#160; &#160; &#160; &#160; &#125;


&#160; &#160; &#125;


&#160; &#160; return sharedGizmoManager;


&#125;


&#160;


+ &#40;id&#41;allocWithZone:&#40;NSZone *&#41;zone


&#123;


&#160; &#160; @synchronized&#40;self&#41; &#123;


&#160; &#160; &#160; &#160; if &#40;sharedGizmoManager == nil&#41; &#123;


&#160; &#160; &#160; &#160; [...]]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_256.html</link>
			</item>
	<item>
		<title>基于php的类Cocoa框架：PHOCOA</title>
		<description><![CDATA[看名字，这不就是php和cocoa的结合嘛&#8230;&#8230;事实也是这样的。自从Java出现了一些支持MVC的Web开发框架，并且越来越流行之后，在Web服务端实现MVC也变得越来越流行了。
Phocoa是一个挺有趣的框架，php本身并不是实现MVC很好的语言，估计作者对Cocoa中毒颇深，因此也想把Cocoa搬到php上。实现了不少东西，支持MVC模型，支持binding，单点入口，支持KVC、KVO，同时又提供了开发工具（当然是Mac Only）。
另外，Phocoa完全支持Smarty模板，并且完全整合到MVC的V（View）中。还有，它还为流行的Web 2.0做了准备，内建支持很多流行的Ajax框架：YUI、Prototype，还有FCKEditor等等。
最好的部分是，这个框架是MIT License，意味着你可以在它基础上做更多开发并用到自己的项目中。
建议读一读它的代码，下载地址在这里。另外，在首页还有一个演示如何使用的视频，建议观看。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_254.html</link>
			</item>
	<item>
		<title>也许火星了：iPhone SDK的DashCode是可以做iPhone的Web App的</title>
		<description><![CDATA[
最近一直对iPhone SDK本身以及Toolchain关注较多，缺忽略了这样一个事实：iPhone SDK中自带的DashCode也是更新过的版本，支持iPhone的Web App开发。
一直以来的印象DashCode都是用来做Widget的，刚刚发现新版的DashCode其实同样支持iPhone的Web App，而且非常方便。在DashCode的模板里，同时还附带了不少用于制作iPhone特效的Javascript。这样一来，制作iPhone的Web App可以不用IUI，而直接用这些JS提供的效果就可以了。
另外，DashCode的使用方法苹果官方是提供了中文版的文档的，可以参阅这个地址。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_253.html</link>
			</item>
	<item>
		<title>使NSImage支持在图片上添加倒影效果</title>
		<description><![CDATA[

Mac上一直比较流行的图片设计思路是在一个图片上面增加一个倒影，使其看起来的感觉像是放在一个透明的桌子上。最流行的就是iTunes中的CoverFlow。这个思路后来也被众多的Web 2.0公司的Logo设计者们普遍使用。
NSImage Reflection这段小代码是NSImage的category，专门用来在图片上添加倒影。你可以直接用它在图片上添加倒影效果。
代码可以在这里下载，用法也非常简单：
因为这个代码扩展了NSImage，所以要在某个NSImage图片上添加倒影，只需要使用[NSImage reflectedImage: amountReflected:]方法就可以了。很容易看明白，reflectedImage参数直接带上一个NSImage图片，amountReflected参数则是倒影的深度，用浮点数表示。
另外，代码使用了CTGradient类，如果你只想在Leopard中使用，也可以改改代码，直接使用NSGradient就可以了。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_252.html</link>
			</item>
	<item>
		<title>Cocoa教学：Windows OOP与Cocoa MVC之对比</title>
		<description><![CDATA[封装不封装，这是个问题。&#160;
今天我在看Cocoa开发者邮件列表的时候，看到一个帖子，求助如何在两个View之间互相通信的问题。做Windows程序员的时间长的我都不好意思说了，我意识到，这个问题在我刚刚接触到Mac上的Objective-C时也遇到过。
我现在可以提出这个问题的简化版：&#8220;我有一个对话框，获取了一些用户输入的数据。我现在需要从我那个对话框中把这个数据提取出来以供主窗口使用。如何才能从主窗口获取到对话框里的数据呢？&#8221;

本文作者是强悍的Matt Long，作者首发于cimgf，由cocoachina翻译给广大读者。原文地址在这里。文中的&#8220;我&#8221;指作者。
在Windows里，尤其是C# .NET，你可以通过添加一个Form对象来创建新的窗口，而且还可以简单地在设计窗口中添加一些不同的&#8220;控件&#8221;。这些操作是非常容易的。不过一旦窗口创建好之后，你需要在主窗口的代码中建立刚才新建的窗口的实例，然后提供公共变量在两个窗口之间设置或者获取数据。窗口类是由Windows Form模板写好直接交给你使用的，这当然可以使代码看起来清晰干净，但是它打破了MVC的惯例，所以大部分Windows的程序员会花费不少时间提升他们思考的方式也就不足为奇了。
我用VS2008做了一个demo程序，截图大概是这样的：
&#160;
看一下主窗口的代码：



public partial class Form1 : Form


&#123;


&#160; &#160; Panel p;


 


&#160; &#160; public Form1&#40;&#41;


&#160; &#160; &#123;


&#160; &#160; &#160; &#160; InitializeComponent&#40;&#41;;


&#160; &#160; &#160; &#160; p = new Panel&#40;&#41;;


&#160; &#160; &#160; &#160; p.Show&#40;&#41;;


&#160; &#160; &#125;


 


&#160; &#160; private void btnChangeText_Click&#40;object sender, EventArgs e&#41;


&#160; &#160; &#123;


&#160; &#160; &#160; &#160; p.OutputText = this.tbInputText.Text;


&#160; &#160; &#125;


&#125;



&#160;
注意看我声明了一个Panel的对象，这是我们需要在上面设置文字的第二个窗口（view）。下面是Panel类的代码：
&#160;



public partial class Panel : [...]]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_251.html</link>
			</item>
	<item>
		<title>制作iPhone PXL安装包的方法</title>
		<description><![CDATA[以下是如何制作iPhone中PXL安装包的方法。另外，如果你希望制作自己的Installer安装源，可以参照本站的文章《如何搭建自己的iPhone Installer软件源》。
详细内容请点击标题察看。



1.新建一个PXL的文件夹
2.在PXL里面新建一个PxlPkg.plist
&#160;
里面复制下面代码
&#160;
&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?>
&#60;!DOCTYPE plist PUBLIC &#34;-//Apple Computer//DTD PLIST 1.0//EN&#34; &#34;http://www.apple.com/DTDs/PropertyList-1.0.dtd&#34;>
&#60;plist version=&#34;1.0&#34;>
&#60;dict>
	&#60;key>CFBundleIdentifier&#60;/key>
	&#60;string>Hexin&#60;/string>
	&#60;key>RDPxlPackageFiles&#60;/key>
	&#60;array>
		&#60;dict>
			&#60;key>destination&#60;/key>
			&#60;string>/Applications/HexinIphone.app&#60;/string>
			&#60;key>overwrite&#60;/key>
			&#60;true />
			&#60;key>permanent&#60;/key>
			&#60;false />
			&#60;key>source&#60;/key>
			&#60;string>app&#60;/string>
		&#60;/dict>
	&#60;/array>
	&#60;key>RDPxlPackageDesc&#60;/key>
	&#60;string>HexinIphone&#60;/string>
	&#60;key>RDPxlPackageURL&#60;/key>
	&#60;string>HexinIphone&#60;/string>
	&#60;key>RDPxlPackageFormat&#60;/key>
	&#60;integer>HexinIphone&#60;/integer>
	&#60;key>RDPxlPackageIcon&#60;/key>
	&#60;string>app/icon.png&#60;/string>
	&#60;key>RDPxlPackageName&#60;/key>
	&#60;string>HexinIphone&#60;/string>
	&#60;key>RDPxlPackageVersion&#60;/key>
	&#60;string>0.8&#60;/string>
	&#60;key>RDPxlPackagerName&#60;/key>
	&#60;string>HexinDB&#60;/string>
	&#60;key>RDPxlPackagerContact&#60;/key>
	&#60;string>Hexin@kf.com&#60;/string>
&#60;/dict>
&#60;/plist>
&#160;
&#160;
&#160;
3.在PXL里面新建一个app文件夹， 把你写好的 XXX.app（包括程序里面所有图片，文件等等）文件夹放到app里面 （当然你可以在）&#60;key>source&#60;/key>&#60;string>app&#60;/string>里面把app改为自己喜欢的文件夹名称，只要和你新建的文件夹对应就行。
&#160;
&#160;
4.其他信息自己就按照自己喜欢填吧
&#160;
5.然后到mac上用命令（xp安装了完全的cygwin应该可以，我没有测试）
chmod -R 755 ./*
zip -R /NAME.pxl ./*
&#160;
6.OK 用IBUS安装吧
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_250.html</link>
			</item>
	<item>
		<title>Installer 4开发进度</title>
		<description><![CDATA[虽然目前破解的iPhone 2.0中带入了Cydia，不过新版的Installer还在开发中。俄国人今天放出了新版Installer的截图，目前开发已经接近尾声，正在将后台程序和前台界面整合。
几天之内，他们就会联系主要的软件源来加入，同时开始进行测试。
下面是一些新版Installer 4的截图：




更多关于Installer的信息，可以查看Rip Dev Blog的主页。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_249.html</link>
			</item>
	<item>
		<title>在iPhone 2.0（非App Store）上执行程序的方法</title>
		<description><![CDATA[以下方法是housisong发现，并通过sharen24的程序进行测试，已经验证可行。
首先要在你的iPhone上升级2.0版本，并安装Cydia安装包。然后按照以下步骤进行：

&#160;



ssh root@iphone



apt-get update; apt-get install odcctools



以上这一步也可以使用Cydia的GUI来做。
接着
首先要对你的程序创建一个数字签名，名字比如叫iPhone，签名方法可以参考这里。
然后在XCode中，Target里选择Add New Build Phase, New Script Build Phase, 然后添加下面的脚本



CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate codesign -s iPhone -f ${TARGET_BUILD_DIR}/${EXECUTABLE_FOLDER_PATH}/${EXECUTABLE_NAME}



如果使用iPod Touch需要做相应的修改。
接着就可以连接到iPhone了（前提是iPhone中先安装了ssh）



scp -r MyApp.app root@iphone:/Applications



&#160;


ssh root@iphone



&#160;


cd /Applications/MyApp.app



&#160;


ldid -s MyApp



&#160;


kill -HUP (springboard进程)



 即可刷新Spring Board。另外，这里有一个mac版的ldid程序可供下载。
如果你希望直接ssh登录到iPhone中调试程序，可以使用Erica Sadun的launch程序，当然首先要把launch程序也用ldid -s加一个签名，然后使用launch来执行程序，就不会执行几秒就被SpringBoard直接杀掉了。
另外，Cydia中还包括一个支持2.0的Toolchain工具，可以直接在iPhone上编译toolchain程序，使用之前需要先把分区调整到至少1G，然后执行：



$ apt-get install ldid



&#160;


$ gcc -o program program.c



&#160;


$ ldid -S program



&#160;


$ ./program



这样就可以直接在iPhone 2.0上面编译程序了。
更多详细资料可以参考这里。
如果你希望和大家讨论关于在iPhone 2.0上执行程序的方法，可以在这里进行讨论。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_248.html</link>
			</item>
	<item>
		<title>将iPhone toolchain 1.x移植到toolchain 2.x</title>
		<description><![CDATA[这可能算是今天最大的消息了: Cydia的作者Saurik发表了如何将toolchain 1.x的应用程序移植到2.x的方法。这个方法有点复杂，下面先介绍一下toolchain从1.x到2.x转变时API的一些变化。

LayerKit -> CoreAnimation
&#160;
基本上LayerKit的所有内容都被搬到QuartzCore里了。LayerKit在1.x中就是CoreAinmation, 现在基本上所有LK*都已经变成了CA*。不过名字也不是都完全一样，比如LKCurrentTime编程了CACurrentMediaTime。
&#160;
（cocoachina.com注：通过这点可以看出，open toolchain和官方的SDK也是越来越像了）
&#160;
CG/GS*Ref到UIFont / UIColor的转变
&#160;
字体和颜色分别由GraphicsServices和CoreGraphics各自处理。在1.x中曾经直接在UIKit中可以直接使用。(比如setColor:方法，从前直接跟CGColorRef参数）。不过新的UIKit直接将这两个打包进了UIFont和UIColor。它们之间的互相转换明显很容易。
&#160;
使用PrivateFrameworks
&#160;
为了防止开发者在他们的应用程序中使用后端API（比如经常可能修改的API或者会将系统变得不正常的API），苹果将这些API移到了/System/Library/PrivateFrameworks里，并不包含在链接路径中。要使用这些API，你需要直接将这些Framework用gcc -F参数添加。
&#160;
使用未公开的UIKit
&#160;
首先要了解的是UIKit是苹果几乎完全没有修改的API。由于一些未知的向下兼容性，他们保留了大部分1.x的类，这意味着使用UIKit的大部分1.x代码只需经过微小的命名改动就可以支持新的平台。（感谢大拿Jonathan Zdziarski指出这个问题）
&#160;
命名的改动如下：
UIAlertSheet - UIActionSheet
UIButtonBar - UIToolbar
UISliderControl - UIOldSliderControl
UISwitchControl - _UISwitchSlider
UIWebView - UIWebDocumentView
&#160;
警告对话框/动作对话框的关闭
&#160;
基本上所有关于对话框的使用都和在一个buttonClicked:事件之后关闭有关系。苹果把这个事件命名为didDismissWithButtonIndex: 使用-(void)dismiss方法就可以关闭对话框。
&#160;
双字与单字
&#160;
虽然大部分情况下，苹果都会使用浮点数做为参数，但是在从前UIKit库中的某些函数里，苹果使用了双字。这些地方已经被修改了。比如说：
[UIProgressBar setProgress:(float)]
&#160;
自动键盘支持
&#160;
苹果显然已经意识到，让开发者在用户点击输入框时来手动控制键盘的显示是很愚蠢的事情，我必须同意这一点。（cocoachina.com注：真的很愚蠢，从前要显示键盘，先要创建一个键盘，设定显示的大小和位置，不用的时候还要隐藏掉&#8230;&#8230;连飞出的动画都要自己做才行）不过不幸的是这意味着从前手工创建键盘的代码现在必须要改，否则屏幕会飞出两个软键盘，而且只有一个能用。
&#160;
CoreGraphics和ImageIO
&#160;
大部分希望在屏幕上画东西的程序都不需要从图形缓冲中进行复杂的数据输入/输出。所有关于图形缓冲方面的东西大概都需要吃掉太多的内存，所以它们从CoreGraphics里分到了另一个叫做ImageIO的库里。比如从前的CGImageDestination/Source函数。
&#160;
UIApplicationMain(Class)
&#160;
从前，UIApplicationMain()函数是从UIApplicationMain中继承的类型的元类对象中被传递的（这句话翻着真费劲），然后再被实例化。现在这个函数可选地加入了名字参数，来实现UIApplication的不同功能。如果你将从前类的名字做为参数传递进这两个参数的话，你会得到明显一样的结果。
&#160;
mprotect(), NX,和max_prot
&#160;
这个信息并不适用于破解的设备，但是了解一下苹果已经开始着手防止未经认证的代码执行还是很必要的。在代码签名之外，一旦内存页面设置为可写，就无法执行了，意味着不可能有JIT编译器（在执行时将代码转换为本地代码）或者动态的弹簧床指针的机制了。（cocoachina.com注：这表示Java不可能出现在iPhone上了？）这个问题已经在破解补丁中排除出了kernel。
&#160;
使用新版toolchain的方法还是比较麻烦的，英文版的方法在这里，我们择日再推荐给大家。如果读者对新的toolchain有什么见解和看法，欢迎您在下面发表评论或者在这里和大家讨论。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_247.html</link>
			</item>
	<item>
		<title>iPhone 2.0被正式破解的一点思考</title>
		<description><![CDATA[&#160;

(点击放大)
这个周日，iPhone 2.0正式被破解。这意味着在非AT&#38;T的其他网络也可以使用最新版本的iPhone 2.0版了（实际版本为1.2 5A347），而且可以看到并使用苹果的iPhone版&#8220;移动梦网&#8221;：App Store了。
但是在电话中的国家选择为中国之后，App Store中有不少免费软件和几乎所有收费软件都无法下载。最新的破解工具中取消了从前为大家熟知的Installer，替换为基于apt的Cydia安装工具。

其实对于中国的iPhone开发者来说，这暂时算是一个好消息。虽然已经破解，但是未经签名的官方SDK编译的程序仍然无法在真机运行，相信在不远的将来会有解决方案。希望尽快出现支持iPhone 2.0的toolchain开发工具包。
对于国外的开发者来说，开发针对国外用户的iPhone应用程序，App Store应该是非常好的选择，大部分应用程序使用官方SDK比使用toolchain要好，要方便，还会有一笔收入进帐。但是由于App Store中的软件尚未对中国用户发布，所以对于国内的开发者来说还是一件很头疼的事情。
对大部分国内开发者来说，国外市场并不是他们熟悉的，想法、开发能力和竞争力很难强过国外的iPhone软件开发者，加之对国外用户的使用习惯，喜好都不是很熟悉，希望在国内开发针对国外用户的App Store中的应用程序并从中获取不小的收益，并不是非常好的办法。国内的潜在市场才是他们相对于国外开发者的优势所在。而这些开发者们之前针对国内用户使用toolchain为1.1.4版本开发的软件，要移植到目前还没法使用的官方SDK还有不小的工作量，与此同时，支持iPhone 2.0的toolchain还没有放出，所以现在是一个比较难受的时期。
希望这一切能够在iPhone 2.0的toolchain出现之后解决。至于App Store多久才能进入国内，就要看移动梦网和App Store哪个更强势以及收益如何分配的问题了，按照苹果以往与运营商的谈判和现阶段中国移动的强大看，这个谈判还是很难很快就能够达成。在没有结果之前，对于国内的开发者会是比较难熬的时期：是继续等待和使用toolchain开发非正规渠道发布的软件，还是使用官方SDK不管好坏开始申请App Store，有收入算没收入就扛着，这是一个问题。
如果在国内正式发售的iPhone中，内置的是App Store的话，无疑是一个绝好的消息，但是如果在国内正式发售的iPhone中内置的是移动梦网的话&#8230;&#8230;大家自己琢磨吧&#8230;&#8230;
&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_245.html</link>
			</item>
	<item>
		<title>最全的获取苹果机器硬件类型的方法</title>
		<description><![CDATA[下面的方法可以将&#160;sysctl hw.model 获取的苹果电脑硬件型号转换为容易看懂的形式。
1 复制下面的代码，将其保存为Macintosh.dict:
&#160;




&#123;


&#160; &#160; &#34;ADP2,1&#34; = &#34;Developer Transition Kit&#34;;


&#160; &#160; &#34;iMac,1&#34; = iMac; 


&#160; &#160; &#34;iMac4,1&#34; = &#34;iMac (Core Duo)&#34;;


&#160; &#160; &#34;iMac5,1&#34; = &#34;iMac (Core 2 Duo)&#34;; 


&#160; &#160; &#34;iMac6,1&#34; = &#34;iMac (24-inch Core 2 Duo)&#34;;


&#160; &#160; &#34;M43ADP1,1&#34; &#160;= &#34;Development Mac Pro&#34;;


&#160; &#160; &#34;MacBook1,1&#34; = &#34;MacBook (Core Duo)&#34;;


&#160; &#160; &#34;MacBook2,1&#34; = &#34;MacBook (Core 2 [...]]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_244.html</link>
			</item>
	<item>
		<title>App Store的同质化, 关于iPhone游戏开发的创新</title>
		<description><![CDATA[
配图：iPhone的数独游戏
App Store出来了，开发者们欢呼雀跃。iPhone是如何开创手机互联网的一个新时代自然不用说，但是摆在开发者眼前的，显然是做点什么的问题。

cocoachina.com专稿，如要转载请先联系。
多数开发者都不约而同地选择了iPhone上的游戏开发。的确，iPhone是个好平台。目前手持游戏机可以拿来说事的只有两个：任天堂的NDS和索尼的PSP。作为一个新的手持游戏平台，iPhone有自己独特的地方：
首先iPhone提供给游戏厂商的SDK和个人/小公司的开发者的SDK是完全一样的，至少使他们站在了同一起跑线。
另外，iPhone具备优于NDS的触摸屏。大家知道NDS的屏幕是上下两个，下面的是笔触式触摸屏。这样，诸如钻石迷情、数独、甚至摸摸瓦里奥这类的游戏，同样可以在iPhone上玩，甚至玩的更好。而PSP则不具备触摸屏。
接下来，三轴的重力感应，这是NDS和PSP都不具备的地方，iPhysycs很好地解释了用它能够做出什么样的游戏来。
再一个iPhone和NDS类似的地方，iPhone同样带有麦克风。玩过NDS上的迷失蔚蓝的开发者，应该会对捧着NDS对着麦克风狂吹以点燃火苗这一情节印象颇深。麦克风用好了，同样可以开发出有新意的东西来。
在3D的表现上，iPhone自然是优于NDS，和PSP基本处于类似档次。这在dr watson放出的iPhone版超级猴子球的截图上就能看出来：画面要比NDS要好很多。而更大的存储空间（8G、16G硬盘）自然不会输于PSP的UMD和NDS的卡带。
上面说了这么多，有意思的事情来了：看看上面的配图：iPhone的数独游戏。这么多游戏说的都是一个事情，把几个数字连起来&#8230;&#8230;
NDS销量遥遥领先于PSP的一个主要原因就是，虽然NDS在硬件性能上不如PSP，但是在NDS上面有很多独特的游戏，这些游戏都很有新意，又很好玩，而开发者将NDS的触摸屏（代表作：摸摸瓦里奥、应援团）、麦克风（代表作：迷失蔚蓝、塞尔达）这两种独特的硬件应用的淋漓尽致，十字手柄无需发挥太大作用。
既然苹果放出了官方的SDK，那么App Store中游戏的同质化一定是不可避免的。但是同时，iPhone中的独特硬件性能一定可以让广大游戏开发者做出更多有新意的游戏来。在开发iPhone游戏的选材过程中，开发者们是不是应该打开思路，不要再做那么多数独、俄罗斯方块了？就算做，也要做出创新，做出与众不同的东西，这才是游戏价值的体现。
我有一个预感，有了Tap Tap Revolutionary，iPhone上面的音乐游戏可能会越出越多&#8230;&#8230;太鼓达人版、吉他英雄版、DDR版、劲舞团版、劲乐团版、QQ音速版、QQ炫舞版&#8230;&#8230;拜托千万不要把iPhone变成另一个&#8220;泡菜&#8221;。
&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_243.html</link>
			</item>
	<item>
		<title>最新AC New Soul 苹果广告欣赏</title>
		<description><![CDATA[
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_242.html</link>
			</item>
	<item>
		<title>WebKit的基本用法</title>
		<description><![CDATA[WebKit是苹果开发中比较常用的浏览器引擎，Safari使用的正是WebKit引擎。WebKit基于KDE的KHTML加以再开发，解析速度超过了以往所有的浏览器。这里简单记录一下WebKit的基本用法。

WebKit由下面的结构组成：

DomCore
JavaScriptCore
WebCore

一般浏览
要打开网页，可以这样做：



&#91;&#91;webView mainFrame&#93; loadRequest:&#91;NSURLRequest requestWithURL:&#91;NSURL URLWithString:urlText&#93;&#93;&#93;;



DomCore
DomCore用于处理DOM文档，包括：

DOMDocument
DOMNamedNodeMap
DOMNode
DOMNodeList

要获取一个DOMDocument，可以这样做：



DOMDocument *myDOMDocument = &#91;&#91;webView mainFrame&#93; DOMDocument&#93;;



要用于HTML处理，可以使用DOMHTMLDocument（Mac OS X 10.4之后），获取方式相同：



DOMHTMLDocument *myDOMDocument = &#40;DOMHTMLDocument*&#41;&#91;&#91;webView mainFrame&#93; DOMDocument&#93;;



方法定义：
苹果的WebKit更新说明
JavaScriptCore
在WebKit中执行脚本的方法：



WebScriptObject *myscript = &#91;webView windowScriptObject&#93;;


NSString *script = @&#34;alert(&#39;hello&#39;);&#34;;


&#91;myscript evaluateWebScript script&#93;;



&#160;
参考：
http://www.macgood.com/thread-24636-1-1.html
http://www.cocoadev.com/index.pl?WebKit
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_241.html</link>
			</item>
	<item>
		<title>在Cocoa中使用Lua</title>
		<description><![CDATA[Lua是一种非常好的脚本语言，最常用的是在游戏中。目前最强悍的MMORPG：World of Warcraft魔兽世界的UI插件便是用Lua写成。
LuaCore是一个Objective-C框架，专门用于在Cocoa中使用Lua脚本。同时，它还可以将Lua的数据直接转化成Objective-C的对象，更方便使用。
这里是一个例子，演示如何使用LuaCore：
&#160;




#import &#60;foundation /Foundation.h&#62;


#import &#60;luacore /LuaCore.h&#62;


&#160;


int main &#40;int argc, const char * argv&#91;&#93;&#41; &#123;


&#160; &#160; NSAutoreleasePool * pool = &#91;&#91;NSAutoreleasePool alloc&#93; init&#93;;


&#160;


&#160; &#160; LCLua *lua = &#91;LCLua readyLua&#93;;


&#160; &#160; &#91;lua runBuffer:@&#34;print(&#39;hello world&#39;)&#34;&#93;;


&#160;


&#160; &#160; &#91;pool release&#93;;


&#160; &#160; return 0;


&#125;


&#60;/luacore&#62;&#60;/foundation&#62;



&#160;
这里还有一个简单的Lua Bridge实现，如果有兴趣也可以看一下。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_240.html</link>
			</item>
	<item>
		<title>CubicMan Deluxe最新视频欣赏</title>
		<description><![CDATA[
&#160;下面是dr_watson的游戏CubicMan Deluxe正式版在iPhone 2.0上的视频欣赏

&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_239.html</link>
			</item>
	<item>
		<title>iPhone的特殊URL</title>
		<description><![CDATA[在iPhone中，可以直接用UIApp打开URL地址。如下所示：



&#91; UIApp openURL: &#91; NSURL URLWithString:@&#34;http://www.apple.com&#34; &#93; &#93;;



或者：



&#91; UIApp openURL: &#91; NSURL URLWithString:@&#34;mailto:apple@mac.com?Subject=hello&#34; &#93; &#93;;



&#160;
与此同时，iPhone还包含一些其他除了http://或者mailto:之外的URL： 
sms:// 可以调用短信程序
tel:// 可以拨打电话
itms:// 可以打开MobileStore.app
audio-player-event:// 可以打开iPod
audio-player-event://?uicmd=show-purchased-playlist 可以打开iPod播放列表
video-player-event:// 可以打开iPod中的视频
以上是optimo发现的。
如果你还发现了其他特殊URL，欢迎在评论中提出。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_238.html</link>
			</item>
	<item>
		<title>读取和写入plist文件</title>
		<description><![CDATA[plist文件是标准的xml文件，在cocoa中可以很简单地使用。这里介绍一下使用方法：
以下代码在Mac和iPhone中均适用。

写入plist文件：



NSMutableDictionary* dict = &#91; &#91; NSMutableDictionary alloc &#93; initWithContentsOfFile:@&#34;/Sample.plist&#34; &#93;;


&#91; dict setObject:@&#34;Yes&#34; forKey:@&#34;RestartSpringBoard&#34; &#93;;


&#91; dict writeToFile:@&#34;/Sample.plist&#34; atomically:YES &#93;;



&#160;
读取plist文件：



NSMutableDictionary* dict = &#160;&#91; &#91; NSMutableDictionary alloc &#93; initWithContentsOfFile:@&#34;/Sample.plist&#34; &#93;;


NSString* object = &#91; dict objectForKey:@&#34;RestartSpringBoard&#34; &#93;;



&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_237.html</link>
			</item>
	<item>
		<title>iPhone上的AppStore更多截图</title>
		<description><![CDATA[周五苹果发布了AppStore，用于让用户购买和下载iPhone上的软件及游戏。下面是AppStore的更多截图：




]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_236.html</link>
			</item>
	<item>
		<title>在程序中关闭iPhone</title>
		<description><![CDATA[首先在程序中引用
#include &#60;sys/reboot.h>
然后使用
reboot(RB_HALT);
就可以直接将iPhone关机。
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_235.html</link>
			</item>
	<item>
		<title>大消息！iPhone的App Store终于登场！</title>
		<description><![CDATA[将这个地址贴进Safari，即可在iTunes中看到App Store。

App Store的iPhone软件分类包括18个大类，同时可以看到最受欢迎的还是iPhone上的游戏软件。
为Cocoachina的读者写了数个iPhone游戏开发教学的强人dr_watson的游戏大作CubicMan Deluxe也在游戏列表中出现。更多详情还是看截图：


这真是一个振奋人心的消息，广大iPhone开发者终于堂而皇之地通过官方渠道将自己开发的软件发布到iPhone用户手中了。不过随之而来的问题是，苹果什么时候才可以和中国移动达成协议，在中国发布App Store呢？
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_234.html</link>
			</item>
	<item>
		<title>在Cocoa中使用JSON</title>
		<description><![CDATA[JSON是一种新的用于在互联网上进行数据交换的标准格式。由于它的冗余、可读性和可解析性都比XML要好，因此JSON这种数据交换格式越来越广泛地运用于Web应用，尤其是Ajax应用中。
在Cocoa中使用JSON也很简单，目前有两个JSON的框架，都很容易使用，而且都对NSDictionary进行了扩展，您可以选择其一将JSON&#8220;揉&#8221;到您的Cocoa应用程序里。

一个叫做BSJSonAdditions， 由Blake Seely开发。将NSDictionary对象转成JSON字符串只需要进行如下转换：
[dict jsonStringValue]; 
就可以返回一个NSString的JSON格式。
反过来如果希望将JSON字符串转成NSDictionary，只需要进行如下转换：
&#160;
[NSDictionary dictionaryWithJSONString:jsonString]
&#160;
就可以返回NSDictionary的对象了。
&#160;
另一个叫做json-framework，参考了BSJSonAdditions，并且以framework的方式提供。
&#160;
json-framework的用法同样类似，使用NSDictionary或者NSArray的JSONRepresentation方法来获取JSON的NSString字符串，用NSString的JSONValue方法来获取转换后的NSDictionary或者NSArray对象。
&#160;
]]></description>
		<link>http://www.cocoachina.com/index.php/archives/cocoachina_233.html</link>
			</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 8.249 seconds -->
