Capacitor在 xcode 打包 iOS 应用发布的时候出错: Command PhaseScriptExecution failed with a nonzero exit code
总体说,capacitor 还是比较完善的,整个过程不需要做什么,只需要根据它提供的文档执行需要的指令即可。比 uniapp 强多了。
·
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 强多了。
不过在安装环境的时候,需要外网环境,不然可能无法正常安装完成。
更多推荐



所有评论(0)