很奇怪人们在进行最终构建并提交到App Store之前已经学到了什么?除了从Debug切换到Release&评论对NSLog的调用我们应该注意哪些基本的和/或不那么基本的东西?
答案 0 :(得分:31)
这是一个很好的问题,我想重申一些答案并添加一些我自己的答案。我已经回答了社区Wiki,随时可以添加它。
从您的设备中删除该应用,关闭WiFi,关闭手机数据,现在安装并测试应用。它是否正常工作(尽可能没有互联网)?它是否至少告诉用户需要网络连接(如果是)或是否崩溃?
如果您使用CLLocationManager:删除应用程序,全新安装并运行,但不允许应用程序拥有位置数据。该应用程序表现良好还是崩溃?它是否至少告诉用户它没有位置数据就无法运行(如果这是一个要求)?它是否适用于仅使用WiFi执行所有地理位置的iPod Touch?
在模拟器中运行应用程序,并为每个视图控制器执行以下步骤:(a)从iPhone模拟器菜单中选择“硬件” - > “模拟内存警告”,(b)现在将您的应用程序导航到其他视图控制器,看看是否一切正常,(c)重复测试另一个视图控制器。
如果您支持较旧的固件(即:iOS 3.1.3),请在运行3.1.3的设备上安装您的应用程序并在那里进行测试(如果您没有,请使用3.2模拟器)。 / p>
在通话时或个人热点处于活动状态时启动您的应用。是否所有屏幕布局都正确(状态栏是40px而不是20)?视图的底部20px是否被推离屏幕或是否正确调整大小?
在您的应用中接听电话,是否已重新启动并正常恢复?您的应用中的声音是否在通话期间停止播放?
播放音乐时启动应用,音乐会继续播放吗?您的声音是否正确混合或适当地淡化音乐?
在内存有限的较慢devices上测试性能,例如:iPhone 3G(128MB RAM,412Mhz CPU)或iPod Touch(第一代或第二代)。
运行Clang静态分析仪并修复(或至少理解)每个警告。
确保环境变量中的NSZombiesEnabled为NO(注意:不确定这是否仍然存在问题)
答案 1 :(得分: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性能明显更好,您可能会错过一些重要的性能问题。
在网络或位置适用时,使用以下配置测试您的应用:
答案 2 :(得分:8)
我没有切换到Release,而是切换到“Distribution”。它是Release的副本,但这就是我通过一些Apple doc和iPhoneDeveloperTips教授的。
重点:
在最终构建之后,但在您急于拉上应用程序之前,请使用Finder的“显示包内容”打开该包。由于MacOS中的一些错误,我在Snow Leopard之前的版本(它可能仍然在那里),如果你拉得太快(使用Finder的压缩或存档菜单项),一些资源还没有被刷新到文件中。当您执行显示包内容时,内容会更新。您会注意到这个问题的方法是,压缩应用程序的大小将介于预期大小的五分之一到十分之一或更小。你可能会想,“嘿,拉链实用程序真的可以很好地压缩”,但事实并非如此。此问题将在此时发生而不是在测试期间,主要是因为您正在执行“全部清理”构建,并且应用程序包的所有资源和内容都开始为空,然后由Xcode填充。并且出于某种原因,即使在Xcode完成创建文件之后,如果你压缩,内容仍然不存在,但是如果你看它们就会在那里(有点反向海森堡)。当心。
我花了很多时间的另一个方面是在我向SVN提交所有最新更改,创建新分支并标记文件之后,对源进行了很好的备份。我也希望我的版本号与我的SVN构建/提交号匹配,所以我总是知道哪个SVN版本与我的版本匹配。我在info.plist中有这两个版本号,当他们点击 i 获取信息时,可以由应用用户提取。例如,当前的info.pist包括:
<key>CFBundleShortVersionString</key>
<string>2.0a1</string>
<key>CFBundleVersion</key>
<string>346</string>
关于如何使用CFBundleVersion有不同的想法。这是我的方式。命令行实用程序 agvtool 也很有用。
构建应用程序后,压缩后您实际上并未对压缩版本进行任何更改,请检查应用程序文件并确保使用正确的分发证书进行签名,而不是使用您的adhoc签名。学习使用命令行实用程序 codesign ,有助于这种检查和调试。通过首先制作压缩副本,您可以确保您不会以任何方式更改Xcode提供给您的最终副本,并且如果一切顺利,您将上传到itunesconnect。
要记住的其他事项是应用程序图标,iTunes商店所需的各种其他图标和图形,info.plist,以及当应用程序上传失败时出现含有错误的错误消息的事实,它通常具有处理正在构建的压缩文件中缺少其中一个部分(属于应用程序包中的那些部分)。
答案 3 :(得分:0)
查看此核对清单文件@ Github