Xcode 14 和 Bitcode 禁用后应用程序大小增加(几乎翻倍)

Sri*_*nth 26 xcode ios swift bitcode xcode14

Apple 已弃用 Bitcode,并不再接受从 Xcode 14 开始使用启用 Bitcode 的应用程序的任何提交。我们 PhonePe 禁用了Bitcode并将应用程序上传到 App Store,通过 Xcode 14 连接,现在看到应用程序大小大幅增加。189 MB从(启用 Xcode 13 和 Bitcode)到使用 Xcode 14 ,应用程序的大小几乎增加了一倍342 MB

\n

有没有人面临类似的问题或有任何解决方案来减小应用程序的大小?

\n
\n

弃用

\n
    \n
  • 从 Xcode 14 开始,watchOS 和 tvOS 应用程序不再需要位码,并且 App Store 不再接受来自 Xcode 14 的位码提交。

    \n
  • \n
  • 如果项目显式启用位码,Xcode 不再默认构建位码并生成警告\n消息:\xe2\x80\x9cBuilding with\nbitcode 已被弃用。请更新您的项目和/或目标设置以禁用位码。\xe2\x80\x9d 使用位码构建的功能\n将在未来的 Xcode 版本中删除。包含位码的 IPA\n将在提交到 App\nStore 之前删除位码。过去提交的位码的调试符号仍然可供\n下载。(86118779)

    \n
  • \n
  • 由于位码现已弃用,因此 iOS、tvOS 和 watchOS 的构建\n默认情况下不再包含位码。(87590506)

    \n
  • \n
\n
\n

Sri*_*nth 23

提供了修复它的方法。我们的应用程序大小已恢复正常。

因此,当我们启用 Bitcode 时,Apple 会从我们的 IPA 中剥离符号,从而帮助我们缩小应用程序的大小。但是,当我们禁用 Bitcode 时,默认情况下不会删除符号。Apple 没有任何文档建议我们从禁用位码的应用程序的二进制文件中删除符号。删除符号将使您回到之前的应用程序大小,一切正常。

要去除符号,我们可以使用此命令。

strip -rSTx Binary -o StrippedBinary

T 标志告诉 strip 删除 Swift 符号,其他标志删除调试和本地符号。

执行步骤:

生成后xcarchive,转到Show package Contents -> Products -> Applications -> YourAppName.app -> Show package contents. 你会有YourAppName文件。运行strip -rSTx YourAppName -o YourAppName以剥离符号。

如果您的应用程序中捆绑了其他框架,请转到Frameworks文件夹并对所有这些框架文件运行上述 strip 命令。

这是我编写的一个小脚本,它将帮助您一次性完成此任务。请更换yourAppName

#!/bin/bash

yourAppName=PhonePe
appFolder="$yourAppName.app"

echo "$appFolder"
cd $appFolder

strip -rSTx $yourAppName -o $yourAppName

cd Frameworks

for d in */ ; do
    IFS='. ' read -r -a array <<< "$d"
    newname=${array[0]}1
    
    strip -rSTx $d/${array[0]} -o $d/${array[0]}
done
Run Code Online (Sandbox Code Playgroud)

上述脚本或剥离过程完成后,您可以照常将应用程序分发到 App Store。Apple 完成对您的构建的处理后,您将看到应用程序大小大幅减少。