<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jjgod / blog &#187; sdk</title>
	<atom:link href="http://blog.jjgod.org/tag/sdk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jjgod.org</link>
	<description>Random notes &#38; thoughts by Jiang Jiang.</description>
	<lastBuildDate>Mon, 16 Jan 2012 11:08:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>State of iPhone Open Application Development (1)</title>
		<link>http://blog.jjgod.org/2008/07/27/state-of-iphone-open-application-development/</link>
		<comments>http://blog.jjgod.org/2008/07/27/state-of-iphone-open-application-development/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 08:03:51 +0000</pubDate>
		<dc:creator>jjgod</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://blog.jjgod.org/?p=229</guid>
		<description><![CDATA[七月关于 iPhone 的消息一直围绕着 2.0 firmware, iPhone 3G, official SDK 1.0 这几个关键词，而非官方关心的也只是 Pwnage Tool 2.0，却对没有 iPhone Developer Program 的开发进展甚少介绍，我想在这里做一点记录。 随着 SDK 1.0 的正式发布 (遗憾的是，因为 NDA 的存在，甚至它都算不上发布..)，iPhone 2.0 firmware 和 App Store 的上线，在 Apple 监视下的 iPhone OS/Cocoa Touch 程序开发的局限性暴露得越来越明显，saurik, NerveGas 等开发者坚持开发 Open Toolchain 的重要性也越来越明显。为什么在拥有一个如此完善的 SDK 的情况下我们还需要 Open Toolchain 和相关工具？因为: Apple 严格限制了第三方应用对 API 的使用，非 Apple 自己开发的应用程序不能使用许多极为有用的 Private API，否则就是违反 [...]]]></description>
			<content:encoded><![CDATA[<p>七月关于 iPhone 的消息一直围绕着 2.0 firmware, iPhone 3G, official SDK 1.0 这几个关键词，而非官方关心的也只是 Pwnage Tool 2.0，却对没有 iPhone Developer Program 的开发进展甚少介绍，我想在这里做一点记录。</p>

<p>随着 SDK 1.0 的正式发布 (遗憾的是，因为 NDA 的存在，甚至它都算不上发布..)，iPhone 2.0 firmware 和 App Store 的上线，在 Apple 监视下的 iPhone OS/Cocoa Touch 程序开发的局限性暴露得越来越明显，<a href="http://www.saurik.com">saurik</a>, <a href="http://zdziarski.com/">NerveGas</a> 等开发者坚持开发 Open Toolchain 的重要性也越来越明显。为什么在拥有一个如此完善的 SDK 的情况下我们还需要 Open Toolchain 和相关工具？因为:</p>

<ul>
<li>Apple 严格限制了第三方应用对 API 的使用，非 Apple 自己开发的应用程序不能使用许多极为有用的 Private API，否则就是违反 SDK 的授权协议，所以第三方应用始终只能是“二等公民”。</li>
<li>App Store 的发行方式要求每次更新软件都要由 Apple 审核才能出现，而列出应用的页面对于用户 feedback 和开发者交流的功能也非常局限——毕竟这个模式根本就是 iTunes Music Store 改头换面了一点点，Album 到 Application 其实并不能做到一一映射。所以我们需要更自由的 iPhone OS 软件发行方式。</li>
<li>软件分发要求所有只开发 Open Source/Free 应用程序的开发者都必须至少缴纳 $99 年费，这极大打击了 Open Source 开发/移植者的积极性，在 Pwnage Tool 的大环境支持下，我们完全可以跳过这个限制，自行分发软件。</li>
</ul>

<p>因为上面这些原因，我一直非常关注 open toolchain 的开发，到了 4 月份的时候，有半个月的时间一直在跟踪 saurik 在这方面开发的结果，其结果是这篇 <a href="http://www.saurik.com/id/4">Upgrading the iPhone Toolchain</a>，可惜的是因为 saurik 一直不满意用 git 来跟踪上游代码的修改，所以这篇文章其实相当难付诸实施，不过，考虑到 SDK 1.0 的发布后上游代码应该有一个相对稳定期，所以希望 saurik 能够尽快整理出更新的文档和代码来吧。</p>

<p>不过 saurik 在他的 Cydia repo 里提供了 iPhone 上完整的 toolchain，你可以在自己的 iPhone/iPod Touch 上用 gcc 编译，用 gdb 调试&#8230;. 当然考虑到有限的硬件资源，这种方式对很多人来说太 geeky 了，包括我。</p>

<p>然而，目前用官方 SDK 提供的编译器和调试器来给编写在 pwn 过的 iPhone 上免费分发的应用程序已经完全可行了，详情可以参考 saurik 的 <a href="http://www.saurik.com/id/8">Bypassing iPhone Code Signatures</a> 和 <a href="http://www.246tnt.com/iPhone/">246tNt</a> 的说明。未 pwn 的 iPhone 因为目前事实上只有通过 App Store 一条路安装应用程序，所以谈怎么分发也是没有意义的。</p>

<p>简单的说，这种方式是因为 pwn 过的 iPhone 的内核已经被打上了 patch，弱化了签名校验——不再要求非要有 Apple 的签名了，可是签名校验依然存在，要完全去掉不大现实，所以现在你可以通过 Apple 自己提供的 codesign 工具来给应用自行签名，或者在别的平台下用 saurik 开发的 <a href="http://svn.telesphoreo.org/trunk/util/ldid.cpp">ldid</a> 签名工具来保证通过 iPhone 的签名检查。对于大部分 Mac 开发者而言，这也只是在 Xcode 的项目中，新增一个 Build Phase 的事情，所以不会增加什么工作量。</p>

<p>而 246tNt 进一步延展了 saurik 的工作，分析了 entitlements 文件在签名后的 iPhone App 中对安全控制的作用，使得这种自签名的应用程序也能像有 Dev Program 的应用一样，可以用 Xcode 自带的 gdb 进行远程调试。此外，246tNt 还找出了办法对 iPhone OS 中的 SpringBoard 和 MobileInstallation 打上补丁，使得我们可以直接把应用程序用 Xcode Organizer (或者 Build and Go!) 上传到 iPhone 上，并自动开始调试。</p>

<p>感谢这些开发者的工作，目前我们获得的<em>开发环境</em>和支付了 $99 美元的 Dev Program 开发者毫无二致了。可是，<em>分发环境</em>还是有区别，假定我们的程序并没有做任何逾越 SDK 授权的事情，如果还希望通过 App Store 分发，那还是只能去购买 Dev Program。不过毫无疑问，对于开放的应用程序而言，Cydia 应该是更好的分发方式，考虑到因为 Pwnage Tool 2.0 的包含，Cydia 几乎已经成为了标准的应用分发方式。</p>

<p>(待续)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jjgod.org/2008/07/27/state-of-iphone-open-application-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

