在为App Store构建最终版本之前的预发布清单

Mel*_*emi 34 iphone cocoa-touch app-store

好奇人们在进行最终构建并提交到App Store之前已经学到了什么?除了从调试发布到发布和注释掉对NSLog的调用之外,我们应该注意哪些基本的和/或不那么基本的东西?

pro*_*rmr 31

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

  1. 从您的设备删除应用程序,关闭WiFi,关闭移动数据,现在安装和测试应用程序.它是否正常工作(尽可能没有互联网)?它是否至少告诉用户需要网络连接(如果是)或是否崩溃?

  2. 如果您使用CLLocationManager:删除应用程序,全新安装并运行,但不允许应用程序拥有位置数据.该应用程序表现良好还是崩溃?它是否至少告诉用户它没有位置数据就无法运行(如果这是一个要求)?它是否适用于仅使用WiFi进行所有地理位置的iPod Touch?

  3. 在模拟器中运行应用程序,并为每个视图控制器执行以下步骤:(a)从iPhone模拟器菜单中选择"硬件" - >"模拟内存警告",(b)现在在您的应用程序中导航到其他视图控制器和看看是否一切正常,(c)重复测试另一个视图控制器.

  4. 如果您支持较旧的固件(即:iOS 3.1.3),请在运行3.1.3的设备上安装您的应用程序并在那里进行测试(如果您没有,请使用3.2模拟器).

  5. 通过电话或个人热点处于活动状态时启动应用程序.是否所有屏幕布局都正确(状态栏是40px而不是20)?视图的底部20px是否被推离屏幕或是否正确调整大小?

  6. 在您的应用程序中接听电话,它是否已重新启动并正常恢复?您的应用中的声音是否在通话期间停止播放?

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

  8. 在具有有限RAM 的较慢设备上测试性能,例如:iPhone 3G(128MB RAM,412Mhz CPU)或iPod Touch(第1代或第2代).

  9. 运行Clang静态分析仪并修复(或至少理解)每个警告.

  10. 确保环境变量中的NSZombiesEnabled为NO(注意:不确定这是否仍然存在问题)


Chr*_*ett 17

一些东西:

我实际上建议不要像Apple指定的那样创建一个名为"Distribution"的构建配置,因为我经常为beta测试人员创建临时构建.我创建了两个构建配置,一个名为Ad Hoc,另一个名为AppStore,所以我不会感到困惑.两者之间的唯一区别是存在Ad Hoc构建的Entitlements.plist文件.这样我就可以尽可能地测试我将提交给Apple的内容.

大多数开发人员都乐观.这就是为什么我们周末工作来创建一个我们刚才知道会让我们成为百万富翁的应用程序.在提交之前,做一个悲观主义者.想象一下可能出错的一切,并仔细检查一下.

不要假设任何事情.不要认为你对应用程序做的那么微小的改变不会影响其他任何东西.墨菲定律说,这个微小的变化会导致你的应用程序在所有iPod Touch上崩溃.在最终代码编辑和Appstore提交之间进行彻底的测试,测试和测试.如果你必须做出微小的改变,那么重复直到它完美无缺.

请记住,如果应用程序没有为99.9%的用户造成崩溃,那么每1,000次下载中就有1次会导致1星级的严厉审核.

我在开发过程中使用了Clang静态分析器,Leaks和Object Allocations,但是在提交之前我会额外运行这些工具以防万一.

如果您没有旧设备,请购买一台,因为3GS性能明显更好,您可能会错过一些重要的性能问题.

在网络或位置适用时,使用以下配置测试您的应用:

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


mah*_*udz 8

我没有切换到Release,而是切换到"Distribution".它是Release的副本,但这就是我通过一些Apple doc和iPhoneDeveloperTips教授的.

重点:

在最终构建之后,但在您急速压缩应用程序之前,请使用Finder的Show Package Contents打开该包.由于MacOS的一些bug,这之前雪豹咬了我的版本(和它仍然会在那里),如果你拉上过快(使用Finder的压缩或存档菜单项),部分资源还没有被刷新到文件中.当您执行显示包内容时,内容会更新.您会注意到这个问题的方法是,压缩应用程序的大小将介于预期大小的五分之一到十分之一或更小.你可能会想,"嘿,拉链实用程序真的可以很好地压缩",但事实并非如此.此问题将在此时发生而不是在测试期间,主要是因为您正在执行"全部清理"构建,并且应用程序包的所有资源和内容都开始为空,然后由Xcode填充.并且出于某种原因,即使在Xcode完成创建文件之后,如果你压缩,内容仍然不存在,但是如果你看它们就会在那里(有点反向海森堡).谨防.

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

<key>CFBundleShortVersionString</key>
<string>2.0a1</string>
<key>CFBundleVersion</key>
<string>346</string>
Run Code Online (Sandbox Code Playgroud)

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

构建应用程序后,在压缩之后您实际上没有对压缩版本进行任何更改,请检查应用程序文件并确保使用正确的分发证书进行签名,而不是使用您的adhoc签名.学习使用命令行实用程序,协同编码,有助于这种检查和调试.通过首先制作压缩副本,您可以确保您不会以任何方式更改Xcode提供给您的最终副本,并且如果一切顺利,您将上传到itunesconnect.

其他要记住的事情是应用程序图标,iTunes商店所需的各种其他图标和图形,info.plist,以及当应用程序上传失败时出现含有错误的错误消息的事实,它通常与您正在构建的压缩文件中缺少其中一个部分(属于应用程序包中的那些部分).