XCode通用库构建阶段-Lipo can';找不到文件
我已经阅读了一些关于如何让XCode创建通用库的教程和指南。基本上,您可以在bash脚本构建阶段添加一个聚合目标,以构建单独的目标并将它们组合在一起 我有自己的小脚本(这是因为我如何命名我的目标),但由于某些原因lipo找不到文件 致命错误: /Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/lipo: 无法打开输入文件: /Users/username/Projects/project/plugins/build/Release iphoneos/libproject plugins.a /Users/username/Projects/project/plugins/build/Release macos/libproject plugins.a (无此类文件或目录) 但是当我XCode通用库构建阶段-Lipo can';找不到文件,xcode,bash,mach-o,universal-binary,lipo,Xcode,Bash,Mach O,Universal Binary,Lipo,我已经阅读了一些关于如何让XCode创建通用库的教程和指南。基本上,您可以在bash脚本构建阶段添加一个聚合目标,以构建单独的目标并将它们组合在一起 我有自己的小脚本(这是因为我如何命名我的目标),但由于某些原因lipo找不到文件 致命错误: /Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/lipo: 无法打开输入文件: /Users/username/Projects/
ls
替换我脚本中的lipo
,文件就在那里xcodebuild
只在调用lipo之后创建文件(正如我第一次想到的那样)
剧本
targets=$(xcodebuild -list | sed -n '/Targets/,/^$/p' | grep -v -e 'Targets:\|all\|^$')
target_results=""
for target in $targets; do
xcodebuild ${ACTION} -target $target -configuration ${CONFIGURATION}
target_results="$target_results ${PROJECT_DIR}/build/${CONFIGURATION}-$target/libproject-plugins.a"
done
xcrun lipo -create "$target_results" -o "${PROJECT_DIR}/plugins-universal.a"
这是一个bash问题/错误。
您将所有文件名作为单个参数传递给
lipo
,因此它将查找名为/Users/username/Projects/project/plugins/build/Release iphoneos/libproject plugins.a/Users/username/Projects/project/plugins/build/Release macos/libproject plugins.a的单个文件
您应该使用数组作为文件名
- 用
()
而不是“
初始化它
- 添加带有
+=(…)
的元素,而不是=“$var…”
- 使用
“${var[@]}”而不是“$var”
将每个元素分别传递给lipo
应用于您的脚本:
targets=$(xcodebuild -list | sed -n '/Targets/,/^$/p' | grep -v -e 'Targets:\|all\|^$');
target_results=();
for target in $targets; do
xcodebuild ${ACTION} -target $target -configuration ${CONFIGURATION};
target_results+=("${PROJECT_DIR}/build/${CONFIGURATION}-$target/libproject-plugins.a");
done;
xcrun lipo -create "${target_results[@]}" -o "${PROJECT_DIR}/plugins-universal.a";
从技术上讲,这不是对你问题的回答。但我想建议你选择一个不同的选项,除非你真的需要这样做
以这种方式构建通用静态库是一种非常古老的方法,正如您所发现的那样,要使其正常工作非常复杂而且非常困难
一种更流行、更简单的方法(IMHO)是构建一个框架。XCode有用于框架的模板。框架更易于使用,并且不需要您对多个目标(bash和lipo)进行任何干扰
此外,您还可以将它们作为其他项目的依赖项进行管理,而只需花费很少的精力