当Jobs宣称“iPhone SDK提供的是和苹果内部开发人员使用的相同的工具”时,他显然忘了在iPhone SDK发布之前几个月,就有人开始使用开源的Open Tool Chain工具进行iPhone软件的开发了。

官 方发布的iPhone SDK显然并非他们内部开发人员使用的工具,因为官方发布的SDK附加了相当多的限制:开发者必须付99美金获取代码签名、程序无法在后台运行(著名的经 常被人骂的One App at a Time)以及无法使用很多低级的API等等。虽然苹果宣称这种做法是为了提高安全性以及让开发者开发过程更简便快捷,但是无疑这也同样是被开发者诟病的 问题所在。

本文比较了官方iPhone SDK和开源工具链的区别以及与iPhone相关的一些数据分析,以便国内开发者更好地进行iPhone软件的开发。

如果你想为国内的用户开发一些基于iPhone的有用的应用软件,本文帮你分析了官方iPhone SDK和开源的工具链的区别,还帮你简单地分析了一下iPhone的市场及预测,以做为你进行iPhone开发前选择项目以及选择开发环境的参考,推荐阅读。

如果您想转载本文,请务必先联系本站(http://www.cocoachina.com)。

API比较

iPhone有两层不同的框架,分别是底层API和iPhone SDK。

底层API就是我们在iPhone 1.0和1.1中使用的“开源工具链”,苹果虽然自己在iPhone内置的软件中一直在使用这部分API,但是并没有在官方发布的SDK中附带这些API的定义。这部分API直接和底层的框架运行库对话。

“开源工具链”叫做“Open Source Toolchain”,是一些***及苹果爱好者通过对iPhone进行破解及修改,开发出的一套开发工具。这批***中的领军人物叫做Jonathan Zdziarski (http://www.zdziarski.com/) ,他开发了第一个iPhone上的任天堂红白机模拟器。

苹 果官方发布的iPhone SDK则将这部分底层API进行了包装,用户的程序只能和苹果提供的iPhone SDK中定义的类进行对话,而这些类再和底层的API进行对话。最明显的例子就是OpenGL ES,苹果官方发布的iPhone SDK中的OpenGL ES实际是和底层API中CoreSurface这个框架进行对话,来实现渲染功能。

苹果官方发布的iPhone SDK对底层API进行了很大的限制。官方的SDK是在某些底层API之上增加了一层针对开发者的类库,供开发者使用,而开源工具链则是使用class-dump (http://www.codethecode.com/projects/class-dump/) 等工具直接将iPhone手机中所有框架的类定义、分类和协议直接抠出来,这样开发者就可以通过抠出来的头文件定义直接与iPhone中的所有框架库进行对话。

官方的iPhone SDK和开源工具链的API定义大概有75%是相同的,而另外的25%左右则是苹果不希望开发者使用的比较底层的API。这样,通过一些修改,这两者的代码在某些级别上是可以互相兼容的。

进 行iPhone破解的开发者一直致力于试图将这两者结合起来。经过他们的一些辛勤努力,通过在官方SDK中增加工具链头文件定义的方法,目前使用过去 1.x工具链开发的iPhone软件,已经可以仅仅进行一些非常微小的修改,就可以在官方的SDK中编译通过了。主要的原因是苹果虽然一直在不断地修改官 方的SDK,但是对于底层API的修改确是非常的小,而由于工具链直接调用底层API,因此只要官方的SDK“认识”这些API的定义,就可以直接使用。

优缺点比较

开源工具链的优点:可以开发几乎一切苹果官方iPhone SDK能做的和不能做的程序;开发平台无限制:Leopard之前的版本、Windows、Linux都可以。

开源工具链的缺点:开发起来有点麻烦;目前不能使用Interface Builder制作界面;环境搭建相对麻烦。

苹 果官方iPhone SDK的缺点:CoreSurface(硬件显示设备)、Celestial(硬件音频设备)以及其他几乎所有和硬件相关的处理无法实现;无法开发后台运 行的程序;需要代码签名才能够在真机调试;只能在Leopard 10.5.2以上版本、Inter Mac机器进行开发。

苹 果官方iPhone SDK的优点:开发环境几乎和开发Mac软件一样:一样的XCode、Interface Builder、Instruments工具;最新版本的iPhone SDK可以使用Interface Builder制作界面;环境搭建非常容易;需要代码签名以避免恶意软件。

软件分发比较

使用开源工具链开发的软件使用一个第三方工具:Installer进行发布。软件开发者可以自己将软件上传到自己网站,用户可以在iPhone上直接通过Wifi下载安装软件。开发者无需经过苹果认可即可在任意网站发布软件。

使用官方iPhone SDK开发的软件需要经过苹果的认可,即可发布在苹果未来内置在iPhone中的App Store程序中。用户可以通过App Store直接下载或通过iTunes下载软件并安装到iPhone中。

iPhone相关数据

接下来介绍一些关于iPhone的数据供国内的iPhone开发者参考,这些数据并没有经过Cocoachina严格的调研,因此请不要将本文转载至其他网站或媒体。这里的数据仅供Cocoachina的读者参考:

1 几个重要日期:(苹果从来都在周二发布新产品)

2007年6月:iPhone正式发布。

2007年8月:iPhone被破解,开源工具链发布。

2008年3月7日:官方iPhone SDK发布Beta 1,当月又发布了Beta 2。

2008年4月9日:官方iPhone SDK发布Beta 3,同时发布iPhone OS 2.0 Beta3。

转载于:https://blog.51cto.com/rongbaohong/781554

官方iPhone SDK和开源工具链相关推荐

  1. devops 开源工具链_使用开源工具构建DevOps管道的初学者指南

    devops 开源工具链 DevOps已成为修复缓慢,孤立或其他功能不正常的软件开发流程的默认答案. 但是,当您不熟悉DevOps并且不确定从哪里开始时,这并不意味着什么. 本文探讨了什么是DevOp ...

  2. yocto(五)——构建SDK及添加工具链

    1 为什么使用SDK 在上一篇文章中讲解了如何添加自定义软件,整个过程还是较麻烦的,那若有一些软件是开源工具呢?比如某个性能测试工具,按上一篇文章添加方式添加太麻烦,并且标准工具也不需要修改,所以不需 ...

  3. 联盛德W800开发板|SDK|make menuconfig|工具链|本地命令行编译|Windows11|msys|清华源|(4)、联盛德W800开发板命令行编译指南

    目录 W800 芯片介绍: W800开发板 主要接口如下: 1 概述 2 准备工作 3.SDK目录结构如下: 4 W800编译固件编译 4.1 安装MSYS到本地: 4.2增加国内软件更新源 ​编辑4 ...

  4. 【STM32开发】win平台开源工具链开发STM32(二)编译器和下载器

    摘要: 继上节介绍完stm32的开发流程和文本编辑工具之后,本节将介绍工具链中最重要的两个工具:编译器和下载器. 一.编译器 百度百科对编译器的解释:编译器就是将"一种语言(通常为高级语言) ...

  5. RT-Thread GCC VSCode等开源工具链 在智能小车制作中的应用

    学 校: 山东大学(威海) 队伍名称: 海韵五队 参赛队员: 崔海勤.刘子晖.赵润萌 带队教师: 王小利 简 介: 社会的不断进步与发展,伴随的是对自动化技术需求的不断增加,同时自动化程序也呈现出任务 ...

  6. 一场关于开源芯片生态之语言与工具链的讨论

    一场关于开源芯片生态之语言与工具链的讨论 \\\插播一条: 自己在今年整理一套单片机单片机相关论文800余篇 论文制作思维导图 原理图+源代码+开题报告+正文+外文资料 想要的同学私信找我. 一.摘要 ...

  7. 深入理解工具链-自己搭建STM32编程IDE

    目录 一.前言 二.编译器组成与编译流程 2.1 编译流程概述 2.2 Gcc For Arm编译器 2.3 预编译 2.4 编译 2.5 汇编 2.6 链接 2.7 生成HEX镜像 2.8 通过Ma ...

  8. 使用 Android NDK 的交叉编译工具链移植 C/C++ 项目到安卓平台

    什么是 NDK? Android NDK 是一套可以让开发者在安卓应用开发中使用 C/C++ 实现特定模块的工具集,不是所有应用都需要用到,但是正确地使用可以有效提高应用运行效率和安全性. 为什么要在 ...

  9. Buildroot构建指南——工具链

    Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件.一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工 ...

最新文章

  1. Kubernetes 1.14 版本发布:正式支持Windows 节点,持久化本地卷进入GA
  2. linux 非阻塞 socket,linux 非阻塞式socket编程求助。。
  3. 交叉编译qt-everywhere-opensource-src-4.6.2需要的几个包
  4. FPGA逻辑设计回顾(8)单比特信号的CDC处理方式之Toggle同步器
  5. 栈和队列都是什么结构_数据结构与算法之初识栈与队列
  6. join 高性能_内置的数据无法实现高性能
  7. python基础(十三)
  8. android旋转角度,android 旋转角度总结
  9. Linux设备模型(4)_sysfs
  10. 管理感悟:如何看待培训
  11. 传RIM将黑莓BBM效力推行至Android和iOS
  12. 分享 | 视觉无监督学习新范式:MAE
  13. Riverbed助世界最大集装箱航运公司马士基实现数字化转型
  14. [深度学习概念]·声纹识别技术简介
  15. 伸缩自如的ElasticSearch——通过bboss操作和访问elasticsearch模式
  16. H5页面WebView在iPhoneX的适配
  17. 编程之美 之 程序理解和时间分析 与JOJ 2042
  18. CCS7.2的下载、安装及打开CCS3.3工程文件
  19. window7 下调试PTAM,PTAMM
  20. 交互式甘特图控件VARCHART XGantt .NET ,如何从v5.1升级到v5.2?

热门文章

  1. php下载提示保存,php利用header函数实现文件下载时直接提示保存_php技巧
  2. wpf popup 最前面_【第1988期】NutUI 组件 popup 源码分析
  3. 改进型 clock 页面置换算法实现_ID生成算法雪花算法介绍及实现
  4. 云原生安全的挑战与实践
  5. KALI LINUX文件名乱码,在kali linux之下 下载并解压的文件名呈现乱码 解决方案
  6. 【Java】牛客网 链表分割
  7. 第2关:实现一个链接存储的栈
  8. 关于使用JAVA中JDK安装和在命令行中编译和运行程序的一些总结
  9. php面向对象实践,【技术产品】PHP中的面向对象实践-基本实践案例
  10. 图论分析方法gretna_基于磁共振的多模态分析对血管性认知障碍患者脑网络的研究...