在编译一个通用的Framework A, 但A依赖的Framework B有个bundle, 这个bundle在真机上编译运行没问题, 但是在模拟器编译通过不了, 提示错误如下:
A/DerivedData/A/Build/Products/Debug-iphonesimulator/B/B.bundle" not found. Run 'pod install' to update the copy resources script
主要原因是模拟器下拷贝bundle文件失败,到build目录发现其实是bundle路径有问提, 但是这些都是pod install自动生成的, 我们可以在编译simulator时不去执行拷贝资源的脚本,有两种方案, 一种是直接修改'[CP] Copy Pods Resources', 一种是在这之前添加一个 run script, 我选择第二种, 脚本如下:
set -x
set -e
echo "executecheck-simulator.txt"
if [ "${EFFECTIVE_PLATFORM_NAME}" == "-iphonesimulator" ];
then
FILENAME="${SRCROOT}"/check-simulator.txt
cp -f "${SRCROOT}/Pods/Target SupportFiles/Pods-xxx/Pods-xxx-resources.sh""${SRCROOT}/Pods-xxx-resources.sh.tmp"
sed -i "" "3 r ${FILENAME}""${SRCROOT}/Pods-xxx-resources.sh.tmp"
cp -f "${SRCROOT}/Pods-xxx-resources.sh.tmp""${SRCROOT}/Pods/Target SupportFiles/Pods-xxx/Pods-xxx-resources.sh"
rm -f "${SRCROOT}/Pods-xxx-resources.sh.tmp"
fi
使用时根据自己情况将xxx替换为Framework名称
其中,有几个需要注意的点:
- 检测xcodebuild当前执行的设备, 可以通过EFFECTIVE_PLATFORM_NAME, 也可以通过PLATFORM_NAME, 其中PLATFORM_NAME表示当前Platform名称, 和Effective_platform_name一样, 但是没有-前缀
- 如何插入内容到shell script, 使用sed命令, 注意mac下需要加""
重新编译运行通过