将命令行工具转为Automator应用后运行报错求助
问题分析与解决办法
核心问题
- 路径写法错误:AppleScript里的命令开头多了个
.,把绝对路径写成了相对路径,导致外部运行时找不到目标文件 - 环境变量不匹配:Automator导出的应用不会继承Terminal的环境变量,你的工具依赖
swift-argument-parser,运行时可能找不到对应的依赖库 - DerivedData路径不稳定:该目录名由Xcode自动生成,后续编译操作会改变这个路径,不适合作为长期运行工具的固定路径
具体修复步骤
1. 修正AppleScript路径
把AppleScript里的命令改成正确的绝对路径(去掉开头的.):
on run {input, parameters} do shell script "/Users/Cerd/Library/Developer/Xcode/DerivedData/myTool-dfdgrdkzualylcafzgfduhdjfkrtk/Build/Products/Debug/myTool param1 param2" return input end run
2. 给Shell Script补全环境变量
在Shell脚本里导入Terminal的环境变量,确保工具能找到依赖:
#!/bin/zsh # 加载zsh的环境配置 source ~/.zshrc # 直接用绝对路径运行工具 /Users/Cerd/Library/Developer/Xcode/DerivedData/myTool-dfdgrdkzualylcafzgfduhdjfkrtk/Build/Products/Debug/myTool param1 param2
3. 更稳妥的方案:打包独立可执行文件
DerivedData里的Debug版本依赖Xcode开发环境,建议打包成独立可执行文件:
- 打开Xcode,选择
Product > Archive - 归档完成后点击
Distribute Content,选择Built Products,导出到固定目录(比如/Applications/MyTools/) - 之后在Automator中使用这个固定路径的可执行文件,就不用担心DerivedData目录变化的问题了
4. 查看详细报错信息
如果还是无法解决,可以添加日志输出定位问题:
- AppleScript版本:
on run {input, parameters} try do shell script "/Users/Cerd/Library/Developer/Xcode/DerivedData/myTool-dfdgrdkzualylcafzgfduhdjfkrtk/Build/Products/Debug/myTool param1 param2 2>&1" error errMsg number errNum display dialog "错误信息:" & errMsg & "(错误码:" & errNum & ")" end try return input end run
- Shell Script版本:
#!/bin/zsh /Users/Cerd/Library/Developer/Xcode/DerivedData/myTool-dfdgrdkzualylcafzgfduhdjfkrtk/Build/Products/Debug/myTool param1 param2 > /tmp/myTool运行日志.log 2>&1
之后前往/tmp/目录查看日志文件,就能获取具体的错误细节
内容的提问来源于stack exchange,提问作者Cerd
相关产品推荐
相关产品推荐

