如何在存储空间不足的情况下安装 Xcode - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sbilly
V2EX    Xcode

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

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

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

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

    精简前:Xcode_13.xip 9.9G / 安装后 >35 G 精简后:Xcode_13.tar.gz 3.6G / 安装后 8.1G (只保留 maOS 相关 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     Solana     5145 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 01:28 PVG 09:28 LAX 17:28 JFK 20:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86