在 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
提取其内容:
还有一个读取.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 文件的主要内容,如果未能解决你的问题,请参考以下文章