无效的可执行文件大小 - 来自 iTunes Connect

2024-03-29

我正在 iTunes 上上传我的 iOS 应用程序。我正在使用 MonoTouch 编译 iOS 版 LibGdx 游戏。在 Android 中几乎不到 7-8mb。但是当我上传到 iTunes AppStore 时,它​​的大小就变成了 78 mb。我不知道为什么?请告诉我。

我也收到了来自 Apple 的此错误。

亲爱的开发者,

我们发现您最近交付的“熊猫快跑:赛车”存在一个或多个问题。要处理您的交货,必须纠正以下问题:

可执行文件大小无效 - 72037504 字节的可执行文件大小超过了允许的最大大小 60 MB。


很难给一个definite回答没有更多细节。有一个lot可能影响应用程序大小的因素。让我们从basic.

您应该检查什么:

  • 首先,确保您的应用程序是not正在构建不要链接。这将创建非常大的应用程序,因为您将进行 AOT'ingnearlyXamarin.iOS 提供的完整 .NET 框架;

  • 其次,确保您正在构建单一架构 (ARMv7)。 FAT 二进制文件(例如 ARMv7 和 ARMv7s)构建两次,需要两倍的空间;

  • 第三,确保您尚未启用Debug构建(可以在发布构建中执行此操作,它是一个复选框)。这将创建更大的二进制文件以支持调试;

  • 第四,确保您正在使用LLVM编译器。编译需要更多时间,但会生成更好(且更小)的代码;

这些初步检查非常容易完成,并且是最常见的获得非常大的二进制文件的原因。

要了解大小从何而来,您需要了解应用程序的构建方式。

  • The mainAndroid 和 iOS 版本之间的区别在于 iOS 上不允许 JIT'ing(即时编译)(Apple 的规则)。

  • 这意味着代码必须经过 AOT(提前编译),并且该过程会创建更大的可执行文件(因为 IL 比本机代码更紧凑);

  • 如果您的代码是泛型的,那么最终的二进制文件可能会变得相当大,因为它将需要本机编译每个泛型的可能性(许多情况可以共享,但值类型不能)。

您可以采取哪些措施来减小尺寸:

  • 首先尝试减少你的managed代码大小。执行此操作的简单方法是在每个程序集上启用链接器,即链接所有程序集在您的项目选项中。

许多人认为不值得链接自己的代码 - 因为他们知道在运行时需要它(因此链接器无法删除它),否则他们就不会编写该代码。

这话对了一半。链接器might无法删除大部分应用程序代码but如果您使用第 3 方程序集,它们可能不会 100% 被使用。链接器可以删除该额外的代码(并且还可以从 SDK 中删除为支持该不需要的代码而保留的所有代码)。越多shared您拥有的代码越多,链接器可以为您提供的帮助就越多。

更少的 IL 代码意味着更快的 AOT 时间,这意味着更快的构建and较小的最终二进制文件(包括可执行文件大小)。

注意:有很多文档和博客文章介绍了如何控制链接器跳过某些程序集、某些类型或方法来处理/删除。

  • 第二次尝试减少你的native尺寸。如果您正在构建本机库,请再次查看它们,因为它们将是静态地(不是动态地)链接到最终的二进制文件(iOS 应用程序的另一条规则)。其中一些可能不值得(功能方面)在最终二进制文件中的权重(并且可能有lighter备择方案)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无效的可执行文件大小 - 来自 iTunes Connect 的相关文章

随机推荐

  • Time.advance 记录在哪里?

    在网上查了一下 我发现 RubyTime班级有Time advance 这是在哪里记录的 我在 Ruby API 文档中没有看到任何提及它here http apidock com ruby Time API 文档的搜索功能表明 任何地方都
  • 将进程附加到远程 PC 上正在运行的进程

    我正在开发一个 C 应用程序 该应用程序在远程 PC 上运行 我有 VPN 连接并使用 RDP 会话 我可以登录到该计算机 在那台计算机上 在正在运行的进程旁边 还有两个 msvsmon exe 进程 在任务管理器中具有以下 命令行 条目
  • 尝试让 libmecab.dll (MeCab) 与 C# 一起使用

    我正在尝试使用日本形态分析仪MeCab http mecab sourceforge net 在 C 程序 Visual Studio 2010 Express Windows 7 中 编码出现问题 如果我的输入 粘贴到文本框中 是这样的
  • Pymongo 如何正确使用 $push 更新现有文档

    我做错了什么或者我不明白 push 可能不明白 无论如何 我有以下文件 id ObjectId 501c83051d41c8753e000000 node denver enc environment production classes
  • RSpec - 模拟(或存根)重写 mixin 方法

    我有这样的情况 module Something def my method return some symbol end end class MyClass include Something def my method if xxx o
  • 从 LAN 中的其他计算机使用 ASP.NET Web Api 服务

    我用谷歌搜索了这个问题 但找不到任何可以解决我的问题的东西 我是 ASP NET Web Api 的新手 我构建了一个 ASP NET Web Api 当我在本地计算机上从 Visual Studio 运行它时 一切都运行良好 在这两种情况
  • 从redux中的reducer获取ID

    我是个新手 正在尝试使用 React 和 Redux 构建一个简单的书签应用程序 我无法解决这个问题 用户可以创建一个书签并将其添加到多个文件夹 所以我派了一个addMark bookmark 行动 然后addMark folder or
  • Pandas:添加具有最新值的列

    我有两个 pandas 数据框 两个数据框都带有日期时间条目的索引 这df1具有非唯一的时间索引 而df2有独特的 我想添加一栏df2 a to df1通过以下方式 对于中的每一行df1带时间戳ts df1 a应包含最新值df2 a其时间戳
  • 如何从 Laravel 5 中的 AJAX 调用返回视图?

    我正在尝试获取一个 html 表以在 ajax 调用中返回 route Route post job userjobs JobController userjobs ajax调用页面 function getUserJobs userid
  • Google 地图、PHP 和 MySQL 上的附近位置搜索

    我正在构建一个网络应用程序 只是为了好玩 xD 您可以在其中告诉它您在哪里以及您想去哪里 然后您可以搜索您可以乘坐的巴士列表 我的数据库是这样的 buses id bus number bus description routes id b
  • 客户端列表的 MVC 自定义验证

    我正在尝试编写一个在客户端工作的自定义验证器 用于验证所有复选框是否已被选中 这是模型的声明 DeclarationsAccepted ErrorMessage You must tick all declarations public I
  • 德国 UI 文化 de-DE 小数更改为 asp.net 中的逗号值问题

    我在我的 ASP NET 应用程序中使用德国 UI 文化 我正在根据下拉列表中选择的语言更改应用程序的 UI 文化 在下拉列表中选择的索引更改时我正在使用此代码 Thread CurrentThread CurrentCulture new
  • 比较两个数组中的对象并根据 JavaScript 中的匹配返回

    我为此使用 React 但概念是在 javascript 中 因此 为了简单起见 我希望我可以省略 React 代码 我有两个需要过滤掉的数组 我的目标是映射一个数组并检查该对象的属性是否与另一个数组的对象中的属性匹配 第一个数组如下所示
  • 是否可以通过 ssh 查看张量板?

    我正在 ssh 服务器上远程运行张量流代码 例如 ssh X 电子邮件受保护 cdn cgi l email protection 在远程服务器上 它说You can navigate to http 0 0 0 0 6006 在这种情况下
  • 如何在Python中仅调用一次函数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这里我想在整个程序中只调用一次Web服务函数 如何做到这一点有人建议我 import sys os def web service maci
  • 适合许多glm模型:提高速度

    我正在编写一个函数来适应许多glm楷模 为了给您提供一些有关该函数的想法 我包含了一小部分代码 在几个 SO 用户的帮助下 该函数现在可以用于我的分析目的 然而 有时 特别是当样本量相对较小时 可能需要相当长的时间才能完成整个过程 为了减少
  • “sys.settrace”在 Python 3.5 中可以正常工作,但在 Python 3.6 中不能正常工作吗?

    在尝试回答另一个问题时 我突然意识到 当理论上您不应该拥有控制权时 您可以在线程中随时运行代码 CPython 有一个settrace用于在代码中注册跟踪函数的函数 为了通过使用类来测试这个想法 编写了以下代码 问题是跟踪似乎没有发生 并且
  • 如果表为空,CodeIgniter result_array() 出现布尔错误

    我的里面有这个功能Carros model php用于带来最后的插入并将其显示在仪表板中 public function select all limit 3 this gt db gt select marca nome marca co
  • 在 Android Studio 中,ADB 仅对 Flutter 失败,但对 Android 失败?

    这很奇怪 但是在安卓工作室 on my 伴侣Ubuntu 18 04 当我创建 Android 项目 时 AMD 处理器 ADB 运行良好 但是一旦我创建 Flutter 我就会出错Error initializing ADB Androi
  • 无效的可执行文件大小 - 来自 iTunes Connect

    我正在 iTunes 上上传我的 iOS 应用程序 我正在使用 MonoTouch 编译 iOS 版 LibGdx 游戏 在 Android 中几乎不到 7 8mb 但是当我上传到 iTunes AppStore 时 它 的大小就变成了 7