V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sbilly
V2EX  ›  Xcode

如何在存储空间不足的情况下安装 Xcode

  •  
  •   sbilly · 2021-10-11 18:10:54 +08:00 · 3529 次点击
    这是一个创建于 1138 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何在硬盘不足的情况下安装 Xcode

    Xcode 对磁盘空间要求越来越高了,有 40G 的磁盘空间都无法完成升级,相当不友好。本文主要是介绍一下如何在 macOS / Linux 下对 xip 文件进行精简后安装。

    精简前:Xcode_13.xip 9.9G / 安装后 >35 G 精简后:Xcode_13.tar.gz 3.6G / 安装后 8.1G (只保留 macOS 相关 SDK )

    Xcode 占空间比较大的主要是一堆平台的 SDK 和模拟器。Xcode 提供的是不是典型的 dmg 文件,而是一个 xip 文件。本文基本思路就是解压缩 xip 文件,删除一堆平台的 SDK 和模拟器再安装。后续需要时,可以重新下载安装删除的 SDK 和模拟器。

    0x00 获取 XCode 的 xip 文件

    登录 Apple Developer (需要认证),访问下面链接,下载 Xcode 的 xip 文件

    https://developer.apple.com/download/all/
    

    0x01 解压缩 xip 文件

    使用 macOS 解压 xip 文件

    xip -x Xcode_13.xip
    

    使用开源软件解压缩 xip 文件

    xar 编译并安装 xar。在 Linux 环境下需要参考 #18 issue 修改 configure.ac,将 AC_CHECK_LIB([crypto], [OpenSSL_add_all_ciphers], , [have_libcrypto="0"]) 修改为 AC_CHECK_LIB([crypto], [OPENSSL_init_crypto], , [have_libcrypto="0"])

    pbzx 编译并安装 pbzx,编译命令为:

    ## Linux
    gcc -I /usr/local/include pbzx.c -o pbzx -llzma -lxar
    
    ## macOS
    gcc -llzma -lxar -I /usr/local/include pbzx.c -o pbzx
    

    使用 xar 解压缩 Xcode_13.xip 文件到指定目录

    xar -xf Xcode_13.xip -C /path/to/extract/to
    

    使用 pbzx 解压缩 Content

    pbzx -n Content | cpio -i
    

    0x02 精简 Xcode 文件

    在解压出来的 Xcode.app 中删除不必要的平台

    # rm -rf Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform
    # rm -rf Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform
    # rm -rf Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
    # rm -rf Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform
    # rm -rf Xcode.app/Contents/Developer/Platforms/WatchOS.platform
    # rm -rf Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform
    
    # 把 Xcode 重新打包
    tar vfcz Xcode_13.tar.gz Xcode.app/*
    
    # 对比 Xcode 大小
    # ls -alF Xcode*
    # .rw-r--r-- who cares 3.6 GB Tue Oct  1 01:43:51 2021 Xcode_13.tar.gz
    # .rw-r--r-- who cares 9.9 GB Mon Oct  1 15:19:25 2021 Xcode_13.xip
    
    # 安装 Xcode
    cd /Application
    tar vfxz Xcode_13.tar.gz
    
    # 安装后 Xcode 大小
    # 8.1G    /Applications/Xcode.app
    du -H -d 0 /Applications/Xcode.app
    
    

    0xFF 参考

    4 条回复    2021-10-12 19:47:31 +08:00
    agagega
        1
    agagega  
       2021-10-11 18:45:04 +08:00 via iPhone   ❤️ 1
    Xcode 应该是 universal binary,把自己不需要的那部分删掉应该也能省下不少空间
    yzwduck
        2
    yzwduck  
       2021-10-11 18:52:00 +08:00 via Android
    我用这个命令打包的,无需解包完整 Xcode 到磁盘。

    pbzx Xcode.xip | bsdtar --exclude '*.simruntime' --exclude 'DNTDocumentationSupport.framework/Versions/A/Resources/external' -cf - @- | xz -c9v > Xcode.tar.xz
    sbilly
        3
    sbilly  
    OP
       2021-10-12 10:27:16 +08:00
    @agagega 怎么操作?我印象中下载 Xcode 是选择了 CPU 类型的。看了一下 xcode 可执行文件才不到 1M,安装完各个目录占空间如下(大一点的都是各类 Framwork 和 Toolchain ):

    171M /Applications/Xcode.app/Contents/_CodeSignature
    4.4G /Applications/Xcode.app/Contents/Developer
    172K /Applications/Xcode.app/Contents/MacOS
    1.7M /Applications/Xcode.app/Contents/OtherFrameworks
    2.6G /Applications/Xcode.app/Contents/SharedFrameworks
    357M /Applications/Xcode.app/Contents/PlugIns
    233M /Applications/Xcode.app/Contents/Resources
    624K /Applications/Xcode.app/Contents/Library
    804K /Applications/Xcode.app/Contents/XPCServices
    81M /Applications/Xcode.app/Contents/Applications
    84M /Applications/Xcode.app/Contents/SystemFrameworks
    288M /Applications/Xcode.app/Contents/Frameworks
    8.1G /Applications/Xcode.app/Contents

    @yzwduck 你提供的那个命令在我的环境中 pbzx 报错。你的 pbzx 是从 https://github.com/NiklasRosenstein/pbzx 这里获取的吗?
    yzwduck
        4
    yzwduck  
       2021-10-12 19:47:31 +08:00   ❤️ 1
    @sbilly 是基于你提到的仓库,但需要加一行代码。
    while (strncmp((path = xar_get_path(f)), "Payload", 7) && 后面填上:
    strncmp((path = xar_get_path(f)), "Content", 7) &&
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2915 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:02 · PVG 16:02 · LAX 00:02 · JFK 03:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.