validation错误:无效的包。 包中包含不允许的文件'Frameworks'

我试图提交一个应用程序与Xcode6通用汽车,我得到validation这个错误。 该应用程序有一个动作扩展和dynamic框架,扩展和应用程序本身之间共享。

我没有一个名为“框架”的文件在项目的任何地方,所以我真的不知道这是什么意思。 有没有人得到这个问题或有任何想法? 这里是错误的样子

原来这个错误与使用Swift有关(应用程序和扩展都使用了Swift)。

对于应用程序,我必须设置:

Embedded Content Contains Swift Code: YES 

并为了扩展:

 Embedded Content Contains Swift Code: NO 

Xcode 8和9

看起来这已经改名为Always Embed Swift Standard Libraries在Xcode 8和9 Always Embed Swift Standard Libraries 。所以,对于应用程序:

 Always Embed Swift Standard Libraries: YES 

并为了扩展:

 Always Embed Swift Standard Libraries: NO 

我唯一的解决scheme是将这个运行脚本添加到应用程序扩展目标:

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

在这里输入图像描述 来源: https : //github.com/CocoaPods/CocoaPods/issues/4203

所以需要3个步骤来解决这个从构build设置

  1. 容器应用程序: Embedded Content Contains Swift Code: YES
  2. 扩展名: Embedded Content Contains Swift Code: NO
  3. 扩展名:运行pathsearchpath= @executable_path/../../Frameworks

在我的情况下,我刚刚升级到CocoaPods 1.0.1,这似乎是一个新的错误。

Pod更新将一个运行脚本添加到我的扩展程序的目标,该目标创build了框架文件夹。 我发现这是因为我正在添加@ Roman的运行脚本来删除它。

解决scheme是从我的扩展的构build阶段删除这个脚本。 这是需要去的那个…

在这里输入图像描述

删除已在其标题中embed单词的扩展程序的每个构build阶段

另外:

  • embedded的内容包含Swift代码必须设置为Yes的扩展目标。

上面的答案都没有为我工作。 这是因为错误不是由父应用程序引起的,而是由它的扩展引起的。 而是其中一个链接库是错误的。

要确认,首先使用Xcode进行存档,然后使用Organizerselect条目并使用Show in Finder进行定位。 这将显示.xcarchive文件。

select该文件并select“显示包装内容”。

在Products / Applications文件夹中select.app,然后再次select“Show Package Contents”。

在Frameworks文件夹中find有问题的模块。 例如,如果错误是:

 ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'." 

然后在Frameworks/MyLib.framework中可能会看到以下内容:

 ../Frameworks/libswiftContacts.dylib ../Frameworks/libswiftCore.dylib ../Frameworks/libswiftCoreData.dylib ../Frameworks/libswiftCoreGraphics.dylib ../Frameworks/libswiftCoreImage.dylib ../Frameworks/libswiftCoreLocation.dylib ../Frameworks/libswiftDarwin.dylib ../Frameworks/libswiftDispatch.dylib ../Frameworks/libswiftFoundation.dylib ../Frameworks/libswiftLocalAuthentication.dylib ../Frameworks/libswiftObjectiveC.dylib ../Frameworks/libswiftPassKit.dylib ../Frameworks/libswiftUIKit.dylib ../Frameworks/libswiftWebKit.dylib 

这是因为父应用程序包含的链接库或模块具有EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

在Xcode中find依赖模块并更新标志:

在这里输入图像描述

请注意,如果已经解决了该问题,该应用可能仍会被来自iTunes Store的解释性电子邮件拒绝:

 Invalid Swift Support - The Watch OS application has Swift libraries at both... 

这又回到了EMBEDDED_CONTENT_CONTAINS_SWIFT标志。 确保只有父应用程序将此设置为YES 。 WatchKit应用程序和扩展都必须将此标志设置为NO 。 这在@ Mike的上面的答案中有详细描述。

如果embedded脚本框架脚本和罗马脚本都存在于同一个目标中。

请检查Embed Pods Frameworks是否位于另一个之前。 如果没有,只要把罗马的脚本移到最后。

在我的情况下,解决scheme是从我的扩展的embedded式二进制文件中删除我的框架,并将其添加到我的扩展的链接框架和库。 (这两个都可以在扩展的常规选项卡中find。)

在我的情况下,有一个CocoaPod库“Blockly”,指定“是Always Embed Swift标准库”为Yes。 在为选项作出否,它的工作。 在这里输入图像描述

  1. 容器应用程序:构build设置 – >embedded式内容包含Swift代码:
  2. 扩展名:Build Setting – >embedded式内容包含Swift代码: NO
  3. 扩展:构build阶段 – >添加了下面的运行脚本

cd“$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /”if [[-d“Frameworks”]]; 然后rm -fr Frameworks fi

  1. (重要)扩展:构build阶段 – >将运行脚本移动到最后 (embedded脚本框架脚本之后)

我无法findEmbedded Content Contains Swift Code任何设置,但我能find一个设置Always Embed Swift Standard Libraries并将其设置为否为我的框架确实解决了这个问题。

我第一次使用XCode 7.1.1为我的应用程序提供了一个Today Extension(在我的项目中没有Swift)。 脚本( https://github.com/CocoaPods/CocoaPods/issues/4203 )不适合我。

将cocoapods降级到版本0.39.0.beta.3,运行pod install ,然后重新归档解决了这个问题。

如果您使用CocoaPods,我会考虑删除有问题的目标(扩展名)上的Embed框架构build阶段,这为我解决了这个问题。