Way*_*hao 19 ios cocoapods watchkit
我添加了一个共享框架,用于在app和watch扩展之间共享代码.后来我删除了共享框架,因为它会导致很多问题.我可以在iphone上构建和运行我的应用程序并观看.但是当我提交到app store时,我看到了这两个错误:
ERROR ITMS-90205:"无效的捆绑包.'xxx WatchKit Extension.appex'的捆绑包含不允许的嵌套捆绑包."
ERROR ITMS-90206:"无效的捆绑包.'xxx WatchKit Extension.appex'包含不允许的文件'Frameworks'."
我已经尝试了stackoverflow上提到的所有解决方案(这个,这个,这个)它们都不适用于我.我该如何修复错误?来自苹果的错误消息实际上并不能说明我应该做些什么.
cgo*_*ain 13
我仍然不完全明白导致这个问题的原因,但我偶然发现了一个最终为我解决问题的答案.
https://github.com/CocoaPods/CocoaPods/issues/4203
具体来说,迈克豪斯于2015年10月12日发布的帖子就是问题的解决方案.
将以下运行脚本添加到所有嵌入式扩展目标.在我的情况下,我不得不将运行脚本作为构建阶段添加到我的Today扩展和Apple Watch App扩展.
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
Run Code Online (Sandbox Code Playgroud)
以上对我不起作用.
Embedded Content Contains Swift Code: NO
没有真正为我做任何事情.
我使用动态框架遇到了这个问题.我的动态框架包含其他动态框架,这使得可以:
Embedded Content Contains Swift Code: YES
而是让其他动态框架将其设置为No.但不是我必须设置
Always Embed Swift Standard Libraries: NO
在构建阶段.
将此设置为YES会frameworks导致导致上载到ITC 的文件夹失败.
小智 6
此帖子中解决了"ITMS-90206"错误:验证错误:无效的捆绑包.在...包含不允许的文件'框架'
需要在WatchKit扩展的Build选项中将设置从Yes更改为No:
Embedded Content Contains Swift Code: No
Run Code Online (Sandbox Code Playgroud)
在主要目标中添加:
cd "${CODESIGNING_FOLDER_PATH}"
find ./PlugIns -type d -name Frameworks | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
问题在于,在同一项目的多个目标上添加 SPM 包会重复依赖项。此扩展上的框架可能位于主要目标上,因此这应该足够了。否则,请在主目标上使用下面的完整脚本,如果需要,它将通过将框架移动到应用程序来删除重复框架。
不要将其添加到您的扩展目标中。它尝试删除重复的框架,但没有任何效果,因为它在框架复制到扩展之前运行:
# this has no effect if you add it to your extension target
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
Run Code Online (Sandbox Code Playgroud)
我在一个项目中遇到了这个问题,该项目在主要目标、框架和扩展中使用 Rx 作为 SPM 包。如果您有相同或类似的问题(例如Firebase),您可以在主目标中使用以下脚本修复它:
if ! [ "${CONFIGURATION}" == "Release" ] ; then
echo "early exit"
exit 0
fi
cd "${CODESIGNING_FOLDER_PATH}/Frameworks/"
# copy frameworks to TeamworkProjects.app/Frameworks
for framework in *; do
if [ -d "$framework" ]; then
if [ -d "${framework}/Frameworks" ]; then
echo "Moving embedded frameworks from ${framework} to ${PRODUCT_NAME}.app/Frameworks"
cp -R "${framework}/Frameworks/" .
rm -rf "${framework}/Frameworks"
fi
fi
done
# remove leftover nested frameworks
for framework in *; do
if [ -d "$framework" ]; then
if [ -d "${framework}/Frameworks" ]; then
echo "Removing embedded frameworks from ${framework} to ${PRODUCT_NAME}.app/Frameworks"
rm -rf "${framework}/Frameworks"
fi
fi
done
# Remove Frameworks from PlugIns
cd "${CODESIGNING_FOLDER_PATH}"
find ./PlugIns -type d -name Frameworks | xargs rm -rf
# codesign for Debugging on device
if [ "${CONFIGURATION}" == "Debug" ] & [ "${SDKROOT}" != *Simulator* ] ; then
echo "Code signing frameworks..."
find "${CODESIGNING_FOLDER_PATH}/Frameworks" -maxdepth 1 -name '*.framework' -print0 | while read -d $'\0' framework
do
# only sign frameworks without a signature
if ! codesign -v "${framework}"; then
codesign --force --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --preserve-metadata=identifier,entitlements --timestamp=none "${framework}"
echo "Added missing signature to '${framework}'"
fi
done
fi
Run Code Online (Sandbox Code Playgroud)
该脚本的大部分内容来自 forums.swift.org 上的用户 pewe:多个目标中的 Swift 包会导致库代码重复。
| 归档时间: |
|
| 查看次数: |
9366 次 |
| 最近记录: |