Capacitor在 xcode 打包 iOS 应用发布的时候出错: Command PhaseScriptExecution failed with a nonzero exit code

一、问题描述

Capacitor https://capacitorjs.com/docs/getting-started
Capacitor 是一个可以运行 Web 应用的框架,包含 iOS、Android ,可打包 web 生成 iOS、Android 安装包运行,其内部还是运行的 Web,并不是转成了原生 iOS、Android 代码。就是个运行 Web 应用的壳子。
但这个壳子给你提供了一些可以调用系统资源的 API ,像拍照、本地通知等。

之前用 Capacitor 做了个浏览器框架,它可以打包成 安卓、iOS 两种 app 外壳,里面其实是跑的纯 web。
在做 Android 的时候可以,非常正常,iOS 上也非常顺利,按照官方文档就走下来了。

在这里插入图片描述

直到最后一步,iOS app 在发布到商店之前需要执行 Xcode 中的 Product -> Archive 的时候出错了。

错误信息如下:

Showing All Messages
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/kyle/Library/Developer/Xcode/DerivedData/App-extvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/IntermediateBuildFilesPath/App.build/Release-iphoneos/App.build/Script-9592DBEFFC6D2A0C8D5DEB22.sh (in target 'App' from project 'App')
    cd /Users/kyle/Documents/Work/taiwu/web-emp-app-capacitor/ios/App
    /bin/sh -c /Users/kyle/Library/Developer/Xcode/DerivedData/App-extvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/IntermediateBuildFilesPath/App.build/Release-iphoneos/App.build/Script-9592DBEFFC6D2A0C8D5DEB22.sh

mkdir -p /Users/kyle/Library/Developer/Xcode/DerivedData/App-Eextvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/BuildProductsPath/Release-iphoneos/App.app/Frameworks
Symlinked...
rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Capacitor.framework" "/Users/kyle/Library/Developer/Xcode/DerivedData/App-extvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/InstallationBuildProductsLocation/Applications/App.app/Frameworks"
building file list ... rsync: link_stat "/Users/kyle/Documents/Work/taiwu/web-emp-app-capacitor/ios/App/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Capacitor.framework" failed: No such file or directory (2)
done

sent 29 bytes  received 20 bytes  98.00 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/4b66fb3c-7dd0-11ef-b4fb-4a83e32a47e1/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]
Command PhaseScriptExecution failed with a nonzero exit code

mkdir -p /Users/kyle/Library/Developer/Xcode/DerivedData/App-extvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/BuildProductsPath/Release-iphoneos/App.app/Frameworks

Symlinked...

rsync --delete -av --filter P .*.?????? --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Capacitor.framework" "/Users/kyle/Library/Developer/Xcode/DerivedData/App-extvwtpnkwafokejvfoydhklnfmf/Build/Intermediates.noindex/ArchiveIntermediates/App/InstallationBuildProductsLocation/Applications/App.app/Frameworks"

building file list ... rsync: link_stat "/Users/kyle/Documents/Work/taiwu/web-emp-app-capacitor/ios/App/../../../IntermediateBuildFilesPath/UninstalledProducts/iphoneos/Capacitor.framework" failed: No such file or directory (2)

done



sent 29 bytes  received 20 bytes  98.00 bytes/sec

total size is 0  speedup is 0.00

rsync error: some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/4b66fb3c-7dd0-11ef-b4fb-4a83e32a47e1/Library/Caches/com.apple.xbs/Sources/rsync/rsync/main.c(996) [sender=2.6.9]

Command PhaseScriptExecution failed with a nonzero exit code

错误截图:

在这里插入图片描述

二、解决问题

搜了下所产生的错误,找到一个答案,试了下,就好了。

Stackoverflow: https://stackoverflow.com/a/75939925/8086267

解决方案是:

1. 找到名为 Pods-App-frameworks.sh 的文件

2.

将脚本中的这部分

source="$(readlink "${source}")"

替换成

source="$(readlink -f "${source}")

在这里插入图片描述

3. 再执行原来要执行的 Product -> Archive 就能执行成功了

4. 这个在每次执行 npx cap run ios 之后都都需要操作一遍,因为上面那个文件会在刷新内容的时候被更新成初始值

三、结果

就能成功执行 Archive 了

在这里插入图片描述

四、总结

总体说,capacitor 还是比较完善的,整个过程不需要做什么,只需要根据它提供的文档执行需要的指令即可。
比 uniapp 强多了。
不过在安装环境的时候,需要外网环境,不然可能无法正常安装完成。
在这里插入图片描述

Logo

一站式 AI 云服务平台

更多推荐