有没有iOS app大小检查工具?

Is there any iOS app size inspection tool?

我正在使用 iOS 应用程序,它同时使用 objective-c 和 swift 代码。当前应用 IPA 大小变大。某些资源包含在 Release IPA 中,但可能不会使用。我想找出应该删除哪些资源以及哪些资源使我的应用程序大小不必要地增加。我想知道是否有任何这样的工具或 xcode 分析器可以分析。

首先,您使用的是最新的Xcode版本吗? Xcode 8.3 生成的二进制文件比 Xcode 8.2 大 2-3 倍,Apple 在 8.3.1 中修复了这个错误。

此外,您可以查看 On Demand Resources,它可以让您将大量资产上传到 App Store,但不会捆绑在应用程序中 - 当用户下载您的应用程序时,iOS将自动下载正确 运行 应用程序所需的资产。

您可以更改 .ipa 文件以具有 .zip 扩展名并将其解压缩。您稍后可以使用未归档的 .zip 文件的简单检查(例如 Disk Inventory X)和 看看那里发生了什么。

此外,您可能正在查看 App Store 提交 .ipa,其中将包含必要的 dSYM 文件和其他杂项数据。

您可以按照 .

中的步骤检查应用程序针对不同设备的 App Store .ipa 大小。

最后但并非最不重要的一点是,查看 Apple 的 this Q&A 以减小应用程序的大小。

到目前为止,我找到的最好的工具是 https://github.com/tinymind/LSUnusedResources

LSUnusedResources

一个 Mac 应用程序,用于查找 XCode 项目中未使用的图像和资源。它深受 jeffhodnett 的 Unused 的影响,但是 Unused 非常慢,结果也不完全正确。所以做了一些性能优化,搜索速度比Unused更快。

导出未使用的资源列表

使用此工具并将 unused/unreferenced 资源列表导出到 unused.txt

从 Xcode .pbxproj 文件中删除引用

使用下面的 python 脚本从 project.pbxproj 文件中删除引用:

    file = open("unused.txt","r")
    data = [line.rstrip('\n') for line in open("project.pbxproj", 'r')]
    newFile = open("project2.pbxproj","w")
    
    def removeLine(imageName):
            temp = data 
            for line_s in temp:
                    if line_s.find(imageName) != -1:
                            data.remove(line_s)
                    else:
                            continue        
             
    for line in file:
            if (len(line) > 5):
                    tokens = line.split("/")
                    len_a = len(tokens)
                    imageName =  tokens[len_a-1]
                    removeLine(imageName.rstrip('\n'))
    
    for line in data:
            newFile.write(line)
            newFile.write('\n')

还有一个替代脚本,在 bash 中:

    #!/bin/bash

    UNUSED_ASSETS_FILENAME="unused-images.txt"
    XCODEPROJ_PATH="zilly.xcodeproj/project.pbxproj"

    while read LINE; do
      FILENAME="$(basename "$LINE")"
      if [[ $FILENAME =~ (png|jpeg|jpg|gif)$ ]]; then
        echo "Removing '$FILENAME' references from $XCODEPROJ_PATH"
        sed -i '' "/$FILENAME/d" $XCODEPROJ_PATH
      fi
    done < $UNUSED_ASSETS_FILENAME

推荐一个分析App Size的有效工具:

WBBlades

优点:

  1. 链接后直接测量.a或.framework的大小,无需反复编译
  2. 清楚地显示两个版本之间的差异,帮助您控制增加的大小。
  3. 有效检测未使用的代码(ObjC & Swift)
  4. 广泛应用于五霸公司的应用