添加了一个运行
的构建脚本步骤ibtool ./Mobile/Base.lproj/MainStoryboard_iPad.storyboard --generate-strings-file ./Mobile/Base.lproj/MainStoryboard_iPad.strings
这无法构建
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.ibtool.errors</key>
<array>
<dict>
<key>description</key>
<string>Interface Builder could not open the document "MainStoryboard_iPad.storyboard" because it does not exist.</string>
</dict>
</array>
</dict>
</plist>
Command /bin/sh failed with exit code 1
首次清理项目然后构建项目时,它将首次成功。
我试图在示例项目中复制它,但无法复制它。我们真正的项目要复杂得多......有6种语言,项目有两个目标(一个用于企业构建,一个用于商店构建)。许多课程和两个大型故事板。
是否有人建议尝试做些不同的事情来找出导致问题的原因,以确定它是否是工具错误?
答案 0 :(得分:4)
我在使用Xcode 5和常规xib文件时遇到了同样的问题。 ibtools随机工作。使用sudo终于为我做了诀窍。
以下是一个例子:
$ibtool --generate-strings-file en.lproj/MyVC.strings en.lproj/MyVC.xib
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.ibtool.errors</key>
<array>
<dict>
<key>description</key>
<string>Interface Builder could not open the document "MyVC.xib" because it does not exist.</string>
</dict>
</array>
</dict>
</plist>
每次使用sudo都有效,尽管它有时会抱怨'用户域将会不稳定'
$sudo ibtool --generate-strings-file en.lproj/MyVC.strings en.lproj/MyVC.xib
2013-10-01 10:04:35.943 Interface Builder Cocoa Touch Tool[1717:303] CFPreferences: user
home directory at file:///var/root/Library/Application%20Support/iPhone%20Simulator/User/ is unavailable. User domains will be volatile.
$
答案 1 :(得分:1)
ibtool正在错误的目录中运行。始终使用ibtool的绝对路径,而不是相对路径。
这很奇怪,绝对是一个错误;可能是ibtool实际上正在告诉正在运行的Xcode副本来完成工作。
如果您使用ibtool --output-format human-readable-text
,则错误消息包含它尝试打开的实际路径,这会显示问题。
这是一个很难排除的问题,因为OSX缺少基本工具 - 没有strace,而dtruss只能以root身份运行。
答案 2 :(得分:0)
我知道这是一个老问题,但我遇到了与故事板类似的问题并更新了我在互联网上找到的脚本,该脚本在调用ibtool时使用了故事板的完整路径。您将在下面找到脚本
#!/bin/sh
# Update storyboard string files
#
# by 2013 André Pinto andredsp@gmail.com
# based on http://forums.macrumors.com/showthread.php?t=1467446
storyboardExt=".storyboard"
stringsExt=".strings"
newStringsExt=".strings.new"
oldStringsExt=".strings.old"
localeDirExt=".lproj"
baselprojName="Base.lproj"
# Find Base internationalization folders
find . -name "$baselprojName" | while read baselprojPath
do
# Get Base project dir
baselprojDir=$(dirname "$baselprojPath")
# Find storyboard file full path inside base project folder
find "$baselprojPath" -name "*$storyboardExt" | while read storyboardPath
do
# Get Base strings file full path
baseStringsPath=$(echo "$storyboardPath" | sed "s/$storyboardExt/$stringsExt/")
# Get storyboard file name and folder
storyboardFile=$(basename "$storyboardPath")
storyboardDir=$(dirname "$storyboardPath")
#Get the full path of the storyboard and the temporary string files. This is the fix for ibtool error
storyboardFullPath=$(echo $(echo `pwd`)$(echo "$storyboardPath" | cut -c2-))
newBaseStringsFullPath=$(echo `pwd`"/Main.strings.new")
echo "Full path of the storyboard $storyboardFullPath"
echo "Full path of the temporary string files $newBaseStringsFullPath"
# Get New Base strings file full path and strings file name
stringsFile=$(basename "$baseStringsPath")
# Create strings file only when storyboard file newer
newer=$(find "$storyboardPath" -prune -newer "$baseStringsPath")
[ -f "$baseStringsPath" -a -z "$newer" ] && {
echo "$storyboardFile file not modified."
continue
}
echo "Creating default $stringsFile for $storyboardFile..."
ibtool --export-strings-file "$newBaseStringsFullPath" "$storyboardFullPath"
iconv -f UTF-16 -t UTF-8 "$newBaseStringsFullPath" > "$baseStringsPath"
rm "$newBaseStringsFullPath"
# Get all locale strings folder with same parent as Base
ls -d "$baselprojDir/"*"$localeDirExt" | while read localeStringsDir
do
# Skip Base strings folder
[ "$localeStringsDir" = "$storyboardDir" ] && continue
localeDir=$(basename "$localeStringsDir")
localeStringsPath="$localeStringsDir/$stringsFile"
# Just copy base strings file on first time
if [ ! -e "$localeStringsPath" ]; then
echo "Copying default $stringsFile for $localeDir..."
cp "$baseStringsPath" "$localeStringsPath"
else
echo "Merging $stringsFile changes for $localeDir..."
oldLocaleStringsPath=$(echo "$localeStringsPath" | sed "s/$stringsExt/$oldStringsExt/")
cp "$localeStringsPath" "$oldLocaleStringsPath"
# Merge baseStringsPath to localeStringsPath
awk '
NR == FNR && /^\/\*/ {
x=$0
getline
a[x]=$0
next
}
/^\/\*/ {
x=$0
print
getline
$0=a[x]?a[x]:$0
printf $0"\n\n"
}' "$oldLocaleStringsPath" "$baseStringsPath" > "$localeStringsPath"
rm "$oldLocaleStringsPath"
fi
done
done
done
答案 3 :(得分:0)
我也收到一条消息,例如“Interface Builder无法打开文档”YourStupid.xib“因为它不存在。”
对我有用的是设置默认的Xcode。我的系统上有两个版本的Xcode,虽然我从不使用旧版本,但它仍然存在。我从下载页面安装了我的Xcodes,而不是通过App Store。我在这里谈论Xcode 5.0。要设置要使用的默认Xcode,请使用sudo运行以下命令。 xcode-select需要sudo才能运行。
sudo xcode-select -s /Applications/Xcode.app
之后我的ibtool再次工作。对我来说,它没有这里提到的sudo解决方案。
我觉得在安装文档集后出现了这个问题。在阅读了这里的一些帖子并思考发生了什么变化后,我想到了我过去使用的第一个Jenkins安装,Xcode和权限(sudo命令)时遇到的问题,并回到了这个命令。
到目前为止,这对我有用,从那以后我没有看到任何问题。您的里程可能会有所不同。