构buildApp Store最终版本之前的发行前清单

好奇人们在最终构build并提交给App Store之前学到了什么实践? 除了从debugging切换到发布&注释掉调用NSLog什么其他基本和/或不那么基本的东西,我们应该注意什么?

这是一个很好的问题,我想重申一些答案,并添加一些我自己的答案。 我已经使这个答案社区Wiki,随时添加到它。

  1. 从设备上删除应用程序,closuresWiFi,closures手机数据,现在安装并testing应用程序。 它是否正常工作(尽可能没有互联网)? 它是否至less告诉用户需要networking连接(如果是)或崩溃?

  2. 如果您使用CLLocationManager:删除应用程序,全新安装并运行,但不允许应用程序具有位置数据。 该应用程序行为好还是崩溃? 它至less告诉用户,它不能没有位置数据运行(如果这是一个要求)? 它是否可以在只使用WiFi的所有地理位置的iPod Touch上运行?

  3. 在模拟器中运行应用程序,并为每个视图控制器执行以下步骤:(a)从iPhone模拟器菜单select“硬件” – >“模拟内存警告”,(b)现在浏览您的应用程序到其他视图控制器和看看是否一切正常,(三)重复testing另一个视图控制器。

  4. 如果您支持较早的固件(例如:iOS 3.1.3),请在运行3.1.3的设备上安装您的应用程序并在其中进行testing(如果您没有,则使用3.2模拟器)。

  5. 在打电话或个人热点处于活动状态时启动您的应用程序。 所有的屏幕布局是否正确(状态栏是40px高而不是20)? 视图的底部20像素是否被推出屏幕或是否正确resize?

  6. 在您的应用程序中接受电话,它是否会退出活动并正常恢复? 你的应用程序发出的声音是否在电话中停止播放?

  7. 在播放音乐时启动应用程序,音乐是否继续播放? 你的声音是否适当地混合或淡化音乐?

  8. 在有限内存的较慢设备上testing性能:iPhone 3G(128MB RAM,412Mhz CPU)或iPod Touch(第一代或第二代)。

  9. 运行Clang静态分析器并修复(或者至less理解)每个警告。

  10. 确保NSZombiesEnabled在环境variables中是NO(注意:不确定这是否仍是问题)

一些东西:

实际上,我build议不要像苹果指定的那样创build一个名为“Distribution”的构buildconfiguration,因为我经常为betatesting者创build专门的构build版本。 我创build了两个构buildconfiguration,一个叫Ad Hoc,另一个叫AppStore,所以我不会感到困惑。 两者之间唯一的区别在于Ad Hoc构build的Entitlements.plist文件的存在。 通过这种方式,我可以尽可能严密地testing我将要提交给苹果公司的内容。

大多数开发者是乐观主义者 这就是为什么我们在周末工作,创造一个应用程序,我们只是知道要让我们成为百万富翁。 提交之前,请做一个悲观主义者。 想象一下所有可能出错的地方,仔细检查一下。

不要假设任何事情。 不要以为你对应用程序所作的微小改变不会影响其他任何东西。 墨菲定律说,这个微小的变化将导致你的应用程序崩溃在所有的iPod触摸或东西。 在最终代码编辑和Appstore提交之间进行testing,testing,彻底testing。 如果你必须做一个微小的改变,那么重复,直到完美。

请记住,如果该应用不会为99.9%的用户崩溃,那么每下载1000次中就有1个会导致1星级的严重审查。

我在开发过程中使用了Clang静态分析器,泄漏和对象分配,但是为了以防万一,我在提交之前会额外运行这些工具。

如果您没有较旧的设备,请获得一个,因为3GS的性能要好得多,您可能会错过一些重要的性能问题。

networking或位置适用时,请使用以下configurationtesting您的应用程序:

  • iPod Touch
  • iPhone 3G
  • iPhone 3GS
  • iPhone处于飞行模式
  • iPhone与Wi-Fi
  • 带EDGE的iPhone
  • 在使用您的应用程序时拨打电话

而不是切换到释放,我切换到“分配”。 这是发行版的副本,但这是我得到了一些苹果文档和iPhoneDeveloperTips的教导。

重要的一点:

在最终构build完成之后,在您将应用程序压缩之前,请使用Finder的“显示包内容”打开该包。 由于MacOS中存在一些错误,在Snow Leopard之前的版本中(我们可能还在那里),如果你的压缩速度太快(使用Finder的压缩或归档菜单项),一些资源还没有被刷新到文件中。 显示包装内容时,内容会更新。 你会注意到这个问题的方式是,你压缩的应用程序的大小将在预期的大小的五分之一到十分之一之间。 你可能会想,“嘿,压缩实用程序真的压缩很好”,但事实并非如此。 这个问题会发生在这一点,而不是在testing期间,主要是因为你正在做一个“全部清理”的构build,应用程序包的所有资源和内容都是空的,然后由Xcode填充。 由于某种原因,即使Xcode完成创build文件后,如果压缩,内容仍然不存在,但是如果你看着它们(有点反向的海森堡),它们就会在那里。 谨防。

我花了很多时间在另一个领域做了一个很好的备份源,在对SVN进行了所有最新的更改之后,创build了一个新的分支,并对该文件进行了标记。 我也想让我的版本号与我的SVN编译/提交编号匹配,所以我总是知道哪个SVN版本与我的版本相匹配。 我的info.plist中有这两个版本号,当用户点击的信息时,它可以被应用用户拉起来。 例如,当前的info.pist包括:

<key>CFBundleShortVersionString</key> <string>2.0a1</string> <key>CFBundleVersion</key> <string>346</string> 

关于如何使用CFBundleVersion有不同的想法。 这是我的方式。 命令行实用程序agvtool也很有用。

一旦build立了应用程序,压缩之后你就不会对压缩版本进行任何修改,去检查应用程序文件并确保它是用正确的分发证书而不是你自己的。 学习如何使用命令行实用程序codesign有助于这种检查和debugging。 通过首先制作压缩的副本,确保您不会以任何方式更改Xcode提交给您的最终副本,并且如果一切顺利,您将上传到itunesconnect。

其他要记住的事情是应用程序图标,iTunes商店需要的各种其他图标和graphics,info.plist,以及当应用程序的上传失败并显示一条神秘的错误消息时,通常需要处理其中一个部分从您正在构build的压缩文件中丢失(那些属于应用程序包的部分)。

看看这个检查列表文件@ Github

https://github.com/bapu/AppReleaseCheckList