iOS 存档大小差异:命令行与 Xamarin Studio

Posted

技术标签:

【中文标题】iOS 存档大小差异:命令行与 Xamarin Studio【英文标题】:iOS Archive size difference: command line vs. Xamarin Studio 【发布时间】:2015-03-13 22:17:05 【问题描述】:

如何让 mdtool 构建与 Xamarin Studio 的菜单选项(构建 > 存档)一样小的 ios 存档?

我有一个从脚本生成的项目存档,该存档比 Xamarin Studio 从菜单命令手动生成的要大得多。

步骤

对于 Xamarin Studio,我只是将其设置为 AppStore|iPhone 并点击 Build > Archive 菜单项。

对于命令行,这里是 RAKE 脚本对 mdtool 的命令行调用:

.../mdtool -v archive \"--configuration:AppStore|iPhone\" -p:SomeProject.iOS SomeSolution.sln

他们都使用的“AppStore|iPhone”构建配置在 iOS 构建项目设置下设置为“仅链接 SDK 程序集”。

当命令行归档运行时,它肯定会在控制台输出的MTouch Task 部分打印LinkMode: SdkOnly

生成的档案

在给我带来麻烦的项目中,生成的 xcarchive 文件对于命令行为 102MB,对于 Xamarin Studio 为 66MB(差异:36MB),Xcode 估计 App Store 大小分别为 69MB 和 35MB。

在 xcarchive 文件中,它变得更加混乱。有两个文件不同,这两个文件相差约 60MB(与上述差异不匹配):

dSYM 文件:17kb 与 29.2MB(奇怪) [在 .app 文件中] 应用程序可执行文件:30.1MB 与 65.7MB(我预期的差异)

【问题讨论】:

【参考方案1】:

请注意,mdtool 大部分已被弃用(仍用于经典应用,而非统一应用),因为 Xamarin.iOS 已转而使用 msbuild 作为其构建系统。

dSYM 文件:17kb 与 29.2MB(奇怪)

前者是错误的。注意:最近修复了一个错误,您可能需要重建,而不仅仅是构建,以获得正确的 .dSYM。

这是符号目录大小。这不是作为您的应用程序的一部分交付(给客户)的东西。但是存档很重要,因为它将用于象征您的应用程序的任何崩溃报告(来自客户)。

30.1MB 与 65.7MB

如果第一种情况看起来是 thin(例如仅 ARMv7)二进制文件,而后者是 fat(例如 ARMv7 + ARM64)应用程序。对于新应用程序,Apple 将在 AppStore 上接受胖应用程序(即 32 位和 64 位)。

Xcode 估计

由于文件被压缩,估计可能非常错误。它甚至更复杂,因为 Apple 的 DRM 将加密应用程序的可执行部分 - 并且加密的数据不能很好地压缩(或者它是一种非常糟糕的加密;-)。

【讨论】:

我没有找到其他地方说 mdtool 对于 iOS 版本已弃用。当然,所有样本都来自很久以前,但它仍然在continuous integration docs in the Xamarin Guides 中。如果我确实需要切换,那是 Mac 上的 xbuild(/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild/12.0/bin/xbuild.exe 和/或/usr/bin/xbuild)吗? xbuild 或 msbuild 需要什么参数来触发 iOS 归档? “deprecated”这个词不太合适,更像是“不必要的” 基本上,mdtool 是 MD/XS 构建系统的命令行界面。对于使用 xbuild/msbuild 引擎的项目,mdtool 实际上是 xbuild 的包装器,因此没有必要,因为您可以直接使用 xbuild。但是,对于使用旧的内部构建引擎的项目,例如 iOS Classic 项目,mdtool 仍然是必需的。 @mhutch 你能指出一个使用 Xcode 归档的示例 xbuild 调用的正确方向吗?还是应该在 xbuild AppStore 构建之后直接使用一些 Xcode 命令行工具?

以上是关于iOS 存档大小差异:命令行与 Xamarin Studio的主要内容,如果未能解决你的问题,请参考以下文章

由于“缺少所需的图标文件”,无法分发 Xamarin iOS iPad 存档

7.xamarin.android 发布签名与控制apk大小

Xamarin 表单轮播视图 - Android 和 iOS 差异

iOS - 存档的 IPA 大小与应用商店报告的大小不匹配

Xamarin iOS 权利未发布

SQL:StartTime 列的当前行与 EndTime 列的上一行之间的差异