问题标签 [release-builds]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
391 浏览

loops - ARC 似乎过度释放了在循环中创建和调度的块中引用的对象

我正在尝试使用 dispatch_async 在后台线程上进行一些复杂的计算,但是我在块中使用的对象似乎被过度释放了。我正在使用 ARC,所以我认为我不必太在意保留和释放,但在我的情况下,要么我错过了一些重要的东西,要么 ARC 过度释放了对象。

仅在以下情况下才会出现问题

  • 我调用 dispatch_async 在 for 循环中创建一个块
  • 我在块外创建的块中引用了一个对象
  • 循环至少进行两次迭代(因此至少创建了两个块并将其添加到队列中)
  • 使用了 RELEASE 构建配置(因此它可能与一些优化有关)

这似乎无关紧要

  • 无论是串行队列还是并发队列
  • 使用什么样的对象

这个问题不是关于在 RELEASE 配置中释放的块(如在iOS 5 块中仅使用 Release Build 崩溃),而是在块中引用的对象被过度释放。

我使用 NSURL 对象创建了一个小示例:

不在 for 循环中的第一个块将毫无问题地工作。如果循环只有一次迭代,第二个也是如此。然而,在给定的示例中,它会执行两次迭代,如果使用 RELEASE 配置运行,则会崩溃。在方案中启用 NSZombie 会输出以下内容:

URLByAppendingPathComponent调试器在 for 循环块中的调用处停止。

当使用并发队列时,失败的调用实际上是release调用堆栈中带有 _Block_release 的调用:

但这可能只是由于时间略有不同。

我认为这两个错误都表明引用的 NSURL 对象theURL被过度释放。但这是为什么呢?我错过了什么,还是 ARC 和块组合中的错误?

我期望发生的是,在dispatch_async调用之前或在执行dispatch_async(无论如何:在for循环内,每次dispatch_async调用一次)块内引用的每个变量都被保留并在结束时释放(但是在)块。

实际上似乎发生的是,变量在代码中retain出现一次,但在块的末尾被调用,所以每当它被执行时,这会导致比循环中的调用更多的调用。dispatch_asyncreleasereleaseretain

但也许我忽略了一些东西。有更好的解释吗?我是否以某种方式滥用了块或 ARC 或者这是一个错误?

编辑:我尝试了@Joshua Weinberg 将引用变量复制到 for 循环内的本地变量的建议。它在给定的示例代码中工作,但在涉及函数调用时不起作用:

那么为什么它在一个案例中起作用,而在另一个案例中却不起作用呢?我看不出有什么区别。

0 投票
1 回答
275 浏览

visual-studio-2012 - Azure 打包失败 - 缺少程序集 - 根:解决方案无法在发布中构建

我刚刚将我的 MVC 应用程序移植到 Azure,将其添加为 Web 角色,但无法打包 Azure 项目。

它抱怨我位于解决方案文件夹中的解决方案中的工作流项目缺少程序集:

在首先确保相关程序集已Copy Local设置为之后,true我深入挖掘发现我无法Application.Workflows.Registration在发布模式下构建项目,这是我尝试将解决方案打包的模式。(调试构建工作正常。)

该警告会导致大量此类错误:

同样,该解决方案在调试中构建良好,我查看了配置管理器和调试/发布配置是相同的

0 投票
2 回答
704 浏览

ios - ARC 弱 ivar 在返回之前发布 - 构建发布时,而不是调试

我有一个懒惰地创建对象并将其存储为弱属性的类。其他类可能会请求这个对象,但显然必须保持对它的强引用以防止对象被释放:

当该方案设置为 Xcode 为 Debug 构建时,一切正常 - 一个对象可以调用objectManagerInstance.theObject并返回theObject

当方案设置为发布时,theObject返回nil

我的猜测是编译器正在优化我的代码,因为_theObject它没有在访问器方法本身中进一步使用,因此nil在返回之前将弱变量设置为。看来我必须在实际返回变量之前创建一个强引用,我只能认为使用块来做,但会很乱,我宁愿避免它!

是否有某种关键字可以与返回类型一起使用来阻止 ivar 这么快被取消?

0 投票
1 回答
5309 浏览

android - 是否可以从使用 Android NDK 构建的共享库中删除符号?

我正在使用 Android NDK 构建一个用于 Java 应用程序的共享库。用于readelf检查lib/armeabi-v7a/libXXXlib.so发布版本生成的文件,它似乎包含我本机 C/C++ 代码的所有符号(函数、变量名)。

实际上,对于调试和发布版本,共享对象文件似乎是相同的。(文件夹中输出的唯一区别libs是是否创建了gsb.setupandgdbserver文件。)我用APP_CFLAGS += -O3my中的 an 覆盖了 NDK 设置的优化Application.mk,但我不希望发布版本生成调试符号包括-g它所做的标志。

我在 SO 上找到了一条评论,指出“在调试和发布这两种情况下,它都会保留 -g 标志,因为引用评论,”我们生成二进制文件的符号版本,这些版本在被复制到最终项目时会被剥离libs/ 目录"',另一个声明:'如果 java 没有名称,JNI 找不到这些函数。'

ndk-build肯定会从文件中删除一些东西obj/armeabi-v7a/libXXXlib.so,因为它比最终在 中创建的要大得多libs,但它似乎仍然将我所有的函数和变量的名称完整地保留在文件中。

JNI是否需要我的所有函数名称(而不仅仅是本机代码的入口点)?

如果没有,如何删除不需要的符号?

0 投票
1 回答
2653 浏览

c# - Visual Studio 发布版本不工作

我在 C# 中创建了一个自定义控件,其模板在 Themes/Generic.xaml 中定义。控件(连同 Themes/Generic.xaml)在输出到 DLL 的项目中定义。我不确定这是否重要,但控件位于子文件夹中。

当我从主可执行文件中引用该控件时,OnApplyTemplate()该控件的 C# 从未被调用,并且该控件显示为未应用任何样式信息。

这只发生在发布版本中;调试构建工作正常。

如果我在托管控件的控件(例如 Window.Resources)的资源中重新定义模板,则控件可以正常工作。似乎 Visual Studio 没有将 Themes/Generic.xaml 链接到控件。

0 投票
2 回答
417 浏览

ios - 应用提交失败,但在 Corona SDK 的调试模式下无法重现错误

我们遇到了与在 iOS 上提交我们的应用程序相关的奇怪问题。基本上,当我们构建(使用开发人员配置文件)和测试(通过测试飞行)时,即使使用最广泛的测试用例,一切都按预期工作。

但是,当构建(使用 iOS 分发配置文件)并提交给苹果时......在审查过程中,由于我们无法重现的错误,它未能通过。

所以,我最好的猜测是错误/错误只发生在发布版本中(可能是由于代码优化)..但如果我无法重现,我什至不知道在哪里寻找什么?

到目前为止,我已经两次提交了该应用程序(可能猜测和修复)并且两次都返回相同的错误。

如何使用发布版本测试甚至查看日志?(到目前为止,DTS 没有提供任何有用的信息)

/已编辑/

更多背景信息:这是一个使用 Corona SDK 制作的游戏应用程序。如果您熟悉 corona sdk,那么您就会知道场景是什么。

所以基本上,

  1. 我有一个“家庭场景”我的场景上有一个“打开”按钮。

  2. 我点击打开按钮,一个微调器显示出来->应用程序读取一个 json 文件->进入下一个场景。

苹果在审查过程中看到的是:单击“家庭场景”上的“打开按钮”后,微调器出现并且它没有做任何进一步的事情。因此,该应用未能通过苹果的审核流程。

请注意:这只发生在发布模式(使用分发配置文件构建)而不是调试模式(使用配置文件构建)......因此我无法重现。

0 投票
2 回答
2323 浏览

ios - 为动态框架创建发布版本

我正在使用 Xcode 6.4 开发一个动态框架。我能够为其生成调试版本,该版本可在组下的Debug-iphoneosandDebug-iphonesimulator文件夹中找到Products。但是,我无法为同一框架生成发布版本。我尝试编辑该方案,但没有奏效。

另外,我不想使用存档选项,因为它仅适用于非模拟器设备。我希望发布版本适用于模拟器和非模拟器设备。因此,我希望在Release-iphoneosRelease-iphonesimulator文件夹中生成发布版本,类似于调试版本。

生成框架的发布版本的过程是什么?

如此屏幕截图所示,我的Release-iphoneosRelease-iphonesimulator文件夹仍然是空的。我希望我的构建在那里输出。

0 投票
1 回答
592 浏览

android - Android Proguard:发布构建强制关闭

我通过启用 minifyEnabled 属性生成了发布版本,当我尝试运行发布版本时,它会强制关闭并显示以下日志。请帮我调试一下

这是我的方法 onCreateOptionsMenu 的代码

0 投票
2 回答
66 浏览

apache-flex - Flex Release 版本不包括导出版本中的所有文件和文件夹

我正在尝试导出项目的发布版本,其中包括资产、VO、控制器、模型和视图的文件夹。当我导出发布版本时,发布版本不包括 flex builder 中项目根目录中的所有文件和文件夹。它只包括主要的 flex 应用程序文件以及 assets 和 controllers 文件夹。有没有办法解决这个问题?

0 投票
2 回答
350 浏览

ios - Apache Cordova Visual Studio 2015 Remotebuild iOS 版本 > Http 404:安装失败:检查您的配置文件

在使用 Apache Cordova for Visual Studio 2015 为 iOS 构建发布模式时,使用 remotebuild mac 服务器,我收到以下错误:

2>Http 404:安装失败:检查您的配置文件

我的 XCode 帐户具有配置文件,并且我确保已将“ios_distribution.cer”(安全证书)添加到钥匙串中。

XCode 配置文件
证书

我使用 XCode 7.2 和 cordova CLI 4.3。我有一个 iOS 9.2 的 iPod Touch 插入 mac 远程服务器。我在构建调试时没有问题。

有没有其他人遇到过这个问题,并找到了解决方案?