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大小