无效的捆绑包,捆绑包包含不允许的嵌套捆绑包,包含不允许的文件'框架'

时间:2015-05-20 23:08:45

标签: ios cocoapods watchkit

我添加了一个共享框架,用于在app和watch扩展程序之间共享代码。后来我删除了共享框架,因为它会导致很多问题。我可以建立 并在iphone上运行我的应用程序并观看。但是当我提交到app store时,我看到了这两个错误:

错误ITMS-90205:"无效的捆绑包。在' xxx WatchKit Extension.appex' 包含不允许的嵌套包。"

错误ITMS-90206:"无效的捆绑包。在' xxx WatchKit Extension.appex' 包含不允许的文件'框架'。"

我已经尝试了stackoverflow上提到的所有解决方案(thisthisthis)这些解决方案都不适用于我。我该如何修复错误?来自苹果的错误信息确实无法说明我应该做些什么。

7 个答案:

答案 0 :(得分:12)

我仍然不完全明白导致这个问题的原因,但我偶然发现了一个最终为我解决问题的答案。

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

答案 1 :(得分:6)

此帖子中解决了“ITMS-90206”错误:Validation Error: Invalid Bundle. The bundle at ... contains disallowed file 'Frameworks'

需要在WatchKit扩展程序的Build选项中将设置从Yes更改为No:

Embedded Content Contains Swift Code: No

答案 2 :(得分:6)

以上对我没有用。

Embedded Content Contains Swift Code: NO

我真的没有为我做任何事情。

我使用动态框架遇到了这个问题。 我的动态框架包含其他动态框架,这使得它没问题 拥有:

Embedded Content Contains Swift Code: YES

而是让其他动态框架将其设置为No。 但我不得不设置

Always Embed Swift Standard Libraries: NO

在Build Phases下。

将此项设置为YES会导致frameworks文件夹导致上传到ITC失败。

答案 3 :(得分:2)

我有一个今天的扩展,它使用我实现的自定义框架。

我尝试了所有解决方案,但对我没有任何帮助。

我仅在今天的扩展中需要自定义框架,因此我仅在今天的扩展中链接并嵌入了该框架。

错误所代表的是:

该捆绑包包含不允许的框架

今天的扩展不应嵌入任何框架,而应链接到该框架。

因此,我从今天的扩展程序中删除了该框架,并将其添加到了父应用程序中。

请注意:

父应用程序应使用此框架,因为已将其添加到其中,导入将完成此工作。

答案 4 :(得分:0)

我有一个使用以下构建设置构建的框架:

Always Embed Swift Standard Libraries: YES

Allow Non-Modular includes in Framework Modules: YES

所以我将两者都更改为NO并再次构建框架。

Always Embed Swift Standard Libraries: NO

Allow Non-Modular includes in Framework Modules: NO

我在项目中添加了新的框架版本,因此它成功上传到iTunes Connect。

答案 5 :(得分:0)

我将一个 swift 包,它是动态库,添加到子项目和我的主项目中。上传到 TestFlight 时,我也遇到了这个问题。

如图,我把子项目的Embed & Sign改为Do Not Embed,然后这个问题就解决了。

它为我的主要项目保留了 Embed & Sign。但在子项目中,我将它们更改为 Do Not Embed

enter image description here

答案 6 :(得分:0)

在主目标中添加:

cd "${CODESIGNING_FOLDER_PATH}"
find ./PlugIns -type d -name Frameworks | xargs rm -rf

问题是在同一个项目的多个目标上添加 SPM 包会重复依赖项。这个扩展的框架可能是主要目标,所以这应该足够了。否则,请在主要目标上使用以下完整脚本,如果需要,将通过将框架移至应用程序来消除重复框架。


不要在你的扩展目标中添加这个,因为它会在框架被复制到扩展之前运行。

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

我在一个使用 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

该脚本的大部分来自于 forums.swift.org 上的用户 pewe:Swift packages in multiple targets results in duplication of library code