Ruby脚本batch_build.rb第83行字符串转整数TypeError错误咨询
错误原因解析
咱们先拆解一下这个报错:no implicit conversion of String into Integer (TypeError),它直接指向你代码里的第83行IO.open(...)调用。
核心问题:用错了Ruby的IO方法
IO.open这个方法的设计初衷是打开文件或者操作已存在的文件描述符,它的第一个参数要么是整数类型的文件描述符(比如标准输入的0、标准输出的1),要么是包含文件名和模式的参数组合。但你现在把一整段xcodebuild的shell命令字符串传给它,Ruby会误以为你传的是文件描述符,试图把字符串转成整数,自然就失败了,抛出这个类型转换错误。
正确的做法
如果你想要执行外部shell命令并读取它的输出内容,应该用IO.popen方法。这个方法专门用来创建子进程执行命令,并建立管道来和子进程通信,刚好符合你这段代码的需求——执行归档命令,同时检查输出里有没有错误信息。
修改后的核心代码大概是这样:
IO.popen("xcodebuild -scheme Runner archive -archivePath '/tmp/#{BUILD_DIR}' -UseNewBuildSystem=NO -allowProvisioningUpdates") do |io| io.each_line do |line| hasError = true if line.downcase.include? 'error' end `xcode /tmp/#{BUILD_DIR}/Runner.xarchive` end
补充一句:你代码里的BUILD_DIR变量定义是没问题的,报错和它无关,就是IO.open的用法错误导致的。
内容的提问来源于stack exchange,提问作者Kokizzu
相关产品推荐
相关产品推荐

