在 iOS 中分析 Assets.car 文件

Posted

技术标签:

【中文标题】在 iOS 中分析 Assets.car 文件【英文标题】:Analysing Assets.car file in iOS 【发布时间】:2014-03-25 09:34:35 【问题描述】:

我试图减小我的 ios 应用程序的整体大小,目前为 48MB。当我分析子文件夹时,我发现 Assets.car 占用了 41MB。我无法打开并查看哪个占用了这么多空间。

我找不到任何关于 Assets.car 文件的好文档。有人可以建议如何查看内容吗?

【问题讨论】:

What is Assets.car file in .app?的可能重复 @borrrden,这不能回答我的问题。我正在寻找分析哪个部分占用更多内存。 @rajeevprasanna 我认为这个文件也包含 iphone 6 的放大图像! 【参考方案1】:

此工具可以提取 .car 存档:https://github.com/steventroughtonsmith/cartool

提取存档的步骤:

从 github 下载 zip 后,在 Xcode 中编译它以生成命令行工具。然后展开Products 组并右键单击cartool 文件并在finder 中找到它。然后您可以像这样运行该工具:

打开终端 cd /path/to/cartool ./cartool /path/to/Assets.car /path/to/outputDirectory

【讨论】:

我下载了这个工具但是不知道怎么用?输出文件在哪里? 我在答案中添加了一些额外的信息以及简短的运行说明。也许如果你让它工作,你可以为其他人更新 readme.md。 我确实按照您的指示进行操作,但它说:cartool:无法执行二进制文件。请指教。谢谢。 几个问题。 1) 它列出了Assets.car 中包含的文件,但最后output folder 为空。 2)你重新运行命令,它会给你Segmentation fault: 11 此工具不适用于较新的 .car 文件(来自 ios11 SDK)【参考方案2】:

运行苹果的assetutil:

xcrun --sdk iphoneos assetutil --info Assets.car

您将获得文件中每个项目的 JSON 描述。像这样的:

  
    "Height" : 60,
    "Scale" : 1,
    "RenditionName" : "D3801CE9-19F1-4CE9-97C6-7E1EFFFCAE89",
    "AssetType" : "Vector",
    "SizeOnDisk" : 10822,
    "Name" : "mailbox",
    "Idiom" : "universal",
    "Width" : 99
  ,

注意"SizeOnDisk" : 10822 这一行。

此工具执行有限的 .car 操作,请运行 man assetutil 了解详情。


Assets.car 似乎是 Apple 的专有存档,最早出现在 iOS 7 中。一些实用程序能够使用 CoreUI 框架的私有类 CUICatalog 提取其内容:

acextract ThemeEngine iOS Asset Extractor Asset Catalog Tinkerer

还有一个读取.car文件的应用:crunch9$,15天试用

运行strings Assets.car返回

@(#)PROGRAM:CoreUI  PROJECT:CoreUI-475.1.1
IBCocoaTouchImageCatalogTool-9.0

在 Xcode-beta 中运行 find 返回 /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Overlays/IBCocoaTouchImageCatalogTool,这是一个模拟器可执行文件 (i386 + x86_64)。没有进一步调查,但我敢打赌,如果你在模拟器中运行这个工具,它可以打开 .car 档案。

【讨论】:

【参考方案3】:

如果你想浏览和提取资产目录,也可以使用我的appAsset Catalog Tinkerer

【讨论】:

当我使用发行版 2.3 打开 xCode 构建的 .car 文件时崩溃,版本 8.0 beta 6 (8S201h) Assertion failed: (tokenCount < maxCountIncludingZeroTerminator - 1), function CUIRenditionKeySetValueForAttribute, file /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreUI/CoreUI-366.1/CoreTheme/ThemeStorage/CUIThemeRendition_Support.m, line 228. @igrek 请在 GitHub 上打开一个问题并包含一个示例文件。谢谢。 很抱歉,这是一个商业项目。您认为这与它的资产有什么关系吗?我试过 .cartool(***.com/a/29468398/907692) 也有同样的问题 文件可能有一些特定的东西导致了这个问题。没有文件,我无能为力... @GuilhermeRambo 我可以通过尝试打开位于 Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Versions/A/Resources 下的 Xcode 8 的 Assets.car 文件来遇到确切的错误【参考方案4】:

打开 Assets.car

[Assets.car file]

您可以尝试online tool(Assets.car Asset Extractor Online),或者在 Mac 上使用 QLCARFiles QuickLook plugin

并使用assetutil工具仔细检查它

xcrun --sdk iphoneos assetutil --info <path_to_Assets.car>

【讨论】:

【参考方案5】:

Guilherme Rambo 说的是正确的,不是 Lewis42。

假设 Asserts.car 中有一个 pdf 文件('a.pdf')。

如果使用cartool,你会得到三个png文件(a.png/a@2x.png/a@3x.png),文件格式已经改变。

但是,如果您使用 AssetCatalogTinkerer,您可以预览 a.pdf 文件(文件格式未更改)。

【讨论】:

但是如果您尝试提取它们被转换为PNG的资产,有没有办法将它们提取为PDF?【参考方案6】:

通用二进制文件似乎包含每个屏幕密度的多个图像分辨率。

应用上传到 App Store 后,文件大小将小于您的通用二进制文件,因为每个设备只会获得适当的图像密度。

您可以在此处查看文件大小:iTunes Connect > My Apps > Your App > Activity > Your Build > App Store file-size

【讨论】:

以上是关于在 iOS 中分析 Assets.car 文件的主要内容,如果未能解决你的问题,请参考以下文章

解压Assets.car获取App中的图片资源

如何打开Assets.car文件

Mac 如何导出ipa文件中Assets.car包中的切图

如何从启用优化(发布模式)构建的二进制文件中分析故障转储?

如何在 Xcode 中分析应用程序的 IPS 文件?

在 Visual Studio 中分析故障转储