【问题标题】:Validation Error: The bundle contains disallowed file 'Frameworks'验证错误:捆绑包包含不允许的文件“框架”
【发布时间】:2015-01-25 05:36:09
【问题描述】:

我遇到了与 this guythis guythis guy 相同的问题(注意,我实际上不确定他们是否都是男生)。

他们最终都找到了自己的解决方案,但没有一个适用于我的问题。我在我的 iOS 8 应用程序中使用 Xcode 6.1 并附带扩展。该应用程序和扩展程序都依赖于包含的框架。当我尝试将应用提交到应用商店时,我收到的验证警告是 "ERROR ITMS-9000: Invalid bundle. The bundle at 'xxxxx.appex' contains disallowed file 'Frameworks'".

我什至找不到名为 Frameworks 的文件。共享框架应该保存在 /Library/Frameworks,这是 Apple 推荐的保存位置。该项目还使用 Cocoapods,这让我觉得这是唯一可能的罪魁祸首,因为它在其配置文件中引用了 $FRAMEWORK_PATH(尽管构建文件夹不包含具有该名称的文件或文件夹)。

【问题讨论】:

标签: ios objective-c xcode validation app-store-connect


【解决方案1】:

在我的情况下,解决方案如下:

尝试在 'problematic target' -> Build Phases' 中创建脚本,然后点击 + 并选择 New Run Script Phase,运行脚本应该会在所有其他脚本之后。插入那里:

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

然后清理项目并再次尝试创建存档。这些答案在以下问题中提供:

希望对你有所帮助。

【讨论】:

  • 在我的情况下,使用 XCode 7.1.1 脚本不能解决问题。所以我不得不将 cocoapods 降级到 0.39.0.beta.3 版本,然后运行命令“pod install”
  • A.我应该将两个脚本都保留在那里还是只保留最后一部分? B. 我是否还应该检查两个选项中的启用(1. 显示环境变量,2. 仅运行脚本安装)? "${SRCROOT}/Pods/Target 支持文件/Pods-Orsys WatchKit Extension/Pods-Orsys WatchKit Extension-frameworks.sh" cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ] ];然后 rm -fr 框架文件
  • 为什么对这个答案投反对票?这是一个有效的解决方案。
  • @buildsucceeded 我想有一天可以解释每次有人投反对票时为什么他/她投反对票,而某些版主可以允许或不同意。
  • 这隐藏了问题,是的,它会删除 Framework 文件夹,所以它不会抱怨坏的 Framework 文件夹,但现在你不会有你的 Frameworks!
【解决方案2】:

我更改了构建设置 > 打包 > 在我的扩展程序中定义模块设置为 YES 并观察应用程序目标。适合我。

【讨论】:

  • 这里是 Xcode 7 用户,在由于旧答案无法解释的原因再次出现此类问题后,这对我有用
【解决方案3】:

对于未来的观众来说,这是解决方法:

当您创建自己的 iOS 框架(我使用的是 Xcode 6.1)时,最终产品在框架包本身中包含一个“Frameworks”文件夹。即 MyFramework.framework/Frameworks。即使您没有指定复制文件/嵌入框架构建阶段,也会发生这种情况。

你要做的是进入你的框架包,找到空的框架文件夹并将其删除。这不应以任何方式影响您的应用程序的功能。然后构建您的应用并检查嵌入式框架没有按计划包含 Frameworks 文件夹。

您的存档现在不应包含有问题的文件夹,并且错误应该消失了!

【讨论】:

  • 你如何“进入你的框架包,找到空的框架文件夹并删除它”?框架包在哪里?以及如何打开它?
  • frameworks 文件夹在您放置的任何位置。当您构建它时,它会出现在Users/username/Library/Developer/Xcode/DerivedData/projectName/Build/Products/Debug-xxx/ 中。然后我移动它们以便 Xcode 可以识别它们的存在。如果您双击myFramework.framework 文件(它就像一个文件夹),您将看到需要删除的Frameworks 文件夹。
  • 为我工作,但我必须弄清楚如何不让 carthage 构建包含框架的框架......
【解决方案4】:

继续使用它,我注意到我的共享扩展有一个“嵌入框架”构建阶段,目标设置为“框架”目录。我将其更改为“共享框架”并且错误消失了。

但是,另一个错误仍然存​​在:“...包含不允许的嵌套包”。我认为这是原始错误导致的一种伞式错误警告。我会为那个问题打开另一个问题。

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 2015-01-25
    • 2015-08-02
    • 2020-05-20
    • 2016-06-15
    • 2014-11-10
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多