【问题标题】:xCode: Release version of app has bug that identical developer build does notxCode:应用程序的发布版本具有相同的开发人员构建不存在的错误
【发布时间】:2016-02-16 23:38:04
【问题描述】:

我今天发布了一个应用程序,我认为我已经进行了积极的测试。一位朋友提醒我,作为应用程序的关键部分的标签栏控制器根本无法工作,就好像用户交互被禁用了一样。点击其他选项卡不会显示该选项卡的视图控制器。标签栏项目图标甚至没有改变,就像它们在被选中时应该改变的那样。他们只是停留在第一个视图控制器上。

最奇怪的部分是当我拿走了我朋友的 iPhone 和我的 iPhone(她的 5S,我的 5C),然后在这两个设备上重新下载了应用程序。这个错误仍然存​​在于她的身上,但标签栏在我的身上完全正常工作。其他人也抱怨过同样的错误,但我无法在自己的手机上复制它。我什至无法在多个版本的 Xcode Simulator 中复制它。我以前从未见过。

我已经提交了一个新版本,我不得不强制标签栏控制器在 didSelect 方法下显示适当的标签,但在审查委员会接受之前,我的应用程序基本上会被破坏。

是什么原因造成的?

编辑:新上传的构建仍然无法正常工作。即使是无害的更改也不会生效。我已经在两部手机上下载了新版本——我的在右上角显示了新的导航栏按钮,但另一部手机仍然有旧按钮。而且它们都运行相同的版本。

【问题讨论】:

    标签: ios objective-c xcode uitabbarcontroller release


    【解决方案1】:

    该错误可能与由于不同的优化器设置而在调试和发布模式之间编译的代码不同。

    主要有两大类:

    1. 未初始化变量的使用:未初始化变量的值在技术上是未定义的,但在调试版本中它可以非常“稳定”(例如,由于变量的位置,它总是等于零在内存中以及之前在该位置的内容)。当您在 Release 中编译并且变量的位置发生变化或初始化顺序发生变化时,您的变量现在具有不同的值并且代码行为会发生变化。
      幸运的是,对于这类错误,Xcode 可以提供帮助。从“产品”菜单中选择“Analyze”,并密切注意所有标记为蓝色的错误。

    2. 计时错误:通常,Release 中的代码运行速度更快,因此如果您正在执行任何异步/多线程操作,您可能会触发 Release 中与计时相关的错误,而这些错误在 Debug 中并不明显。我不确定这是否与您的情况相关,但我可以想象一些时序错误可能导致视图弄乱内部状态的场景。不看你的代码很难说。

    请注意,改变架构(5S 是 64 位,5C 是 32 位)也是上述两个类别的一个因素。

    【讨论】:

    • 发行版的工作出于以下两个原因之一或两个原因:我将优化级别更改为无,并解决了每个分析问题。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2021-01-25
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多