回想1995年5月26日。史蒂夫•乔布斯(Steve Jobs)在沙漠中游荡,与一家名为皮克斯(Pixar)的公司打交道,这家公司制作了关于跳舞台灯的动画电影,并为next制定了下一步计划。比尔·盖茨统治了计算机世界,并写了一份著名的备忘录,宣布微软在互联网的统治地位上严重落后,盖茨确信这将是一股“浪潮”。Microsoft control was slipping and he could feel it.
我的大脑不断回到盖茨意识到控制世界的创造冲动是困难的那一刻——因为我一直在拨弄我的拇指,等待苹果批准我的书《免费给所有人》(Free for All)的iPhone应用版本。
[有许多有价值的生产力应用程序你不会在应用程序商店找到。看到“21应用程式苹果不希望在您的iPhone”。)
很久以前的三月,我制定了一个简单的计划。我将把我关于开源运动的书的原始文本转储到HTML中,在iPhone屏幕上呈现HTML,并分发副本。为了让读者笑一笑,我还会为这本书写一个新的转发,叫它金色版,每本收费1美元,并将所有收入捐给保护记者委员会,一个如今似乎值得拥有的慈善机构。
这是一个简单的想法,不需要了解很多iPhone API的复杂部分,比如加速度计或摄像头。它只需要调用几个UIWebView对象,它是实现WebKit HTML渲染引擎的iPhone OS的一部分。轰——完成了。
这个计划的编程非常简单,但是分发几乎不可能。苹果的应用程序商店是与世界共享你的应用程序的唯一途径,它被一个神秘的守卫团队控制着,他们致力于维护对平台的控制。在过去的四个月里,我几乎没有花时间在应用程序本身上,而几乎所有的时间都在等待苹果的回应。
一个男人,一个计划,一个应用商店如果你想把你的应用程序给一个朋友,你可以跳过App Store,但即使这样也需要得到苹果的批准。在启动任何二进制代码之前,iPhone想要看到它的母亲以加密方式签署的便条。特别分发机制严格限制了100份拷贝,并要求每一部iPhone的唯一识别码拷贝与数字签名捆绑在一起。任何认为密码学将解放世界的人都大错特错了。
[如果您无法看到本文中的图像,请点击这里。]
苹果还有一个企业计划可能会对企业有所帮助,但它只是一个围绕同样的基本限制设计的网站:除非苹果允许,否则iphone不会做任何事情。此外,还有一些非常有才华的人致力于破解iPhone的安全层,并完全控制iPhone,他们称之为这个过程。”越狱,但这个选项对大多数用户或大多数开发人员来说并不实际。
所以每个人都被App Store困住了。在过去的三个月里,我向苹果提交了十几次与我的电子书阅读器版本略有不同的版本,但代码只通过了两次。
如果这数听起来有点粗略,这是因为它是。在准备这样的文字,我才发现,原来在itunesconnect.apple.com一个数据库,告诉我,我的应用程序的金色版本遭到拒绝。但是我前两天收到的电子邮件笔记只是说,这是“需要审查意想不到的额外的时间。”它是拒绝还是我只是在等待审阅来自开会回来?其他开发人员证实,像这样的笔记是等同于马赛说,上岸休息一个水手“我会打电话给你。”
我的两个应用程序之一——没有新转发的免费版本——在遭到几个月的拒绝后被应用商店接受并发布。我认为这是一个胜利,即使慈善版的新前锋被拒绝了大约同一时间。唯一的区别是多了一段文字。它甚至不是HTML——只是ASCII。不知怎么的,在丝绒绳酒吧巡逻的保镖们决定,不能让一个头发稍微蓬乱一点的双胞胎加入另一个。
[如果不是iPhone,那又是什么?看到“如何选择一个移动开发平台”、“从开发者的角度看智能手机平台“和”跨平台的选项:Web应用程序的智能手机”。)
即使是这样的成功也让我感到沮丧,因为一些用户开始抱怨我用JavaScript实现的滚动机制。我喜欢在屏幕的顶部或底部轻轻点击就能让HTML向上或向下滚动的想法。新用户发现的问题从来没有在测试中出现过,毫无疑问,因为测试人员对应用程序太熟悉了(记住,特别的分布规则使得招募测试人员很麻烦)。
还有其他问题。如果我在分发软件,我可以直接与客户沟通。bug报告会传到我的耳中。两者之间会有直接的联系。不过,苹果控制着所有的交互。用户的投诉只出现在产品评论中。商店中列出了支持的URL,但顾客归苹果所有。
所以我猜测了一点,重复了一些用户的问题,并迅速修复了一些错误。不过,没有必要着急,因为App Store团队花了大约两周时间来批准我添加到应用程序中的十几行新代码。怎么耽搁了?谁知道呢,但是用户还是很沮丧,我不能把新代码发给他们,即使我知道他们是谁。其他开发人员报告相同的问题试图修正错误。
即使你看起来轻松自在,其实不然。在第一次接受版本的两个月后,在批准1.0.2版本的几周后,神秘的保密大师们认定代码中有一些非常糟糕的东西。应用程序商店再次拒绝了该应用程序。我不知道现在是什么情况。
新的,新的在审批过程中的瓶颈是通过在App Store股Craigslist的一个奇怪的结构效应被放大。最新的应用程序获得在App Store上的头版最玩,所以每个人都有动机经常上传新版本成为可能。这是很清楚的是,iPhone用户花费的时间浏览最新的应用程序名单上的很多;得到一个新的版本,批准导致销售一阵。(忘记了论文的“长尾”。)Craigslist的不打扰过滤,但在App Store的确,这只是意味着在门口的壮汉更多的工作。每个人都在疯狂地试图让重新核准,所以工作量是无止境的。
一些开发商认为,审查人员推迟审批是为了减少这种呼吁关注的影响。这与我经常在提交应用程序后几乎整整一周就收到拒绝通知的做法是一致的。我个人的阴谋论是通过统计数据对审批团队进行评级,比如有多少申请在提交后一周内得到了处理。但也许是别的什么。我们知道了迪克·切尼在中央情报局的计划,但有些秘密得到了更好的保护。
如果应用商店的决定最终能被理解和预测,我会对它们感觉更好,但它们似乎反复无常,经常是完全错误的。一些拒绝信声称我滥用了UIWebView。他们引用了协议的第3.3.1条:“应用程序只能按照苹果规定的方式使用已发布的api,不得使用或调用任何未发布的或私有的api。”
我的应用程序只是在UIWebView中倾倒纯HTML。当我回了信,并显示来自苹果的文档是使用的API以完全相同的方式的例子,我什么也没听到。苹果没有“认为不同”时,它创建了客户服务团队,为iPhone开发人员。该公司只是借用了来自世界上最糟糕的官僚机构(比如,俄罗斯DMV从苏联时代)的标准作业程序。然后,它把过程背后的电子邮件墙,给异想天开的法西斯没有与他们的猫玩具接触任何操作的能力。至少在“别人的生活”老苏联时代的官僚只好眼睁睁地看着他们的比赛的影响。
有些延迟是因为我选择在一个名为PhoneGap的开源项目上构建我的应用程序。这个项目是UIWebView对象的一个薄包装。你用HTML和JavaScript编写你的应用程序,代码将它加载到UIWebView。它省去了构建所有Cocoa代码的麻烦。
您可能认为苹果会欢迎像PhoneGap这样的工具包,因为这样的开源项目可以减少开发人员在一开始遇到的许多常见bug——但这并不是很多人的体验。虽然苹果并没有明确禁止使用PhoneGap,但很明显,他们拒绝了很多——但不是所有——使用它的项目。许多PhoneGap用户报告说他们在拒绝信中收到了和我一样的文字:PhoneGap是一个“外部框架”,这些是被禁止的。
一些PhoneGap开发者已经取得了一些成功,并与其他人分享了这些成果。在帘子后面的男男女女只看连接的桌子看物体的名字。所以有人写了一个Python脚本,用你自己创造的包名来代替单词“PhoneGap”。瞧,它经常起作用。
但要确保你删除的话就像从你的HTML“差距”太大,因为苹果公司强大的抗PhoneGap的工具(grep的)可以嗅出出来。当我固定我的代码摆脱外部框架,我无意中留在HTML页面中使用谢谢消息到PhoneGap的团队。哎呀。这个文件很快就被标记出来。所以我删除了感谢信并定居下来的等待几个星期的时间。
最新的转折是,我的申请再次被拒绝(在批准几周后),因为PhoneGap现在被官方禁止了。尽管如此,还是有希望的,因为苹果公司表示正在与Nitobi的PhoneGap组织者进行沟通。当我向Nitobi的员工询问时,他们告诉我PhoneGap是100%符合要求的,他们正在致力于教育苹果。但苹果除了提醒他们注意规则外,几乎没有告诉他们什么。
学校的规则在所有这些过程中,我几乎没有从苹果那里得到任何指导。每当我询问需要多长时间进行评测时,我都会收到一封礼貌但毫无价值的电子邮件,上面说“每个提交给苹果的应用程序都有不同的功能、特点和复杂性,这意味着每个应用程序的评测时间都不同。”一旦申请审核过程完成,你将收到一封电子邮件通知。”
如果我问深刻的问题 - 就像他们为什么认为开放源代码是必须禁止的外部框架 - 我没有答案。我开始开玩笑说,iPhone的发展就像是小学。你必须做的所有工作自己。想都别想复制一些Apache的代码的方法,因为这可能被视为的“私有API。”(是的,我知道,苹果的很多那儿剽窃的OS X在iPhone上运行来自BSD项目,但这又是像小学,教师可以复印的工作表,但学生需要自己做的一切。)
还有其他不解拒绝说明。而我要做的就是在一个UIWebView转储HTML,一周时间在App Store魔术8球骂我,“一个应用程序本身可以不安装或以任何方式启动其它可执行代码,包括但不限于通过使用插件架构的,调用其他框架,其他API或以其他方式没有解释的代码可以被下载并在除了代码是解释和苹果公司发布的API上运行,并内置解释(S)应用程序中使用“。
任何花了很多时间试图理解计算机科学的哲学方面的人都会对这种不可能的区别感到惊奇。在最抽象的模型中,程序和数据之间没有区别。提供餐馆地址的数据可以看作是绘制地图的紧凑程序,反之亦然。虽然我确信每个人都同意“好”就是“好”,“坏”就是“坏”,但是我也确信没有保证的方法来检测一个程序是下载好的数据还是一个坏的程序。
不用说,对于应用程序开发人员来说,这阻塞了许多有用的机制。您不能下载旧错误的新修复程序,甚至不能在应用程序中包含小部件之类的功能。它还阻止了一些很好的应用程序,比如旧Commodore 64游戏的模拟器。我为那些显然费了很大劲才得到一个有效的准将执照却被一个不太可靠的规则拒绝的开发者感到遗憾。
苹果公司在这一点上非常不一致。像AdMob和管理Medialets一些广告公司似乎没有问题发布预编译的代码,从互联网上下载的广告精良。这些程序是明确设计的事实后改变自己的行为,想必对苹果的规则,但不知何故管理Medialets已经成功地使用iPhone互动1十亿倍。还有一个最重要的原因是:Mac和PC用户可以一直依靠自动更新的应用程序生存。
一点后,我开始困扰着大家,我知道谁在苹果工作过,告知他们的整个过程中如何能任意和真气是。有几个很有礼貌,但他们似乎被要求捆绑起来要像优秀的企业公民。