我正在尝试使用 Xcode 6 GM 提交应用程序,但在验证时出现此错误。该应用程序具有一个操作扩展程序和一个在扩展程序和应用程序本身之间共享的动态框架。
我在项目的任何地方都没有名为“Frameworks”的文件,所以我真的不确定这应该是什么意思。有没有人得到这个问题或有任何想法?
https://i.stack.imgur.com/YjRpt.png
由于下面列出的问题,存档验证失败。 iTunes Store 操作失败。无效的捆绑包。 ... 处的捆绑包包含不允许的文件“框架”。
原来该错误与使用 Swift 有关(应用程序和扩展程序都使用 Swift)。
对于应用程序,我必须设置:
Embedded Content Contains Swift Code: YES
对于扩展:
Embedded Content Contains Swift Code: NO
Xcode 8 和 9
看起来这已在 Xcode 8 和 9 中重命名为 Always Embed Swift Standard Libraries
。因此,对于应用程序:
Always Embed Swift Standard Libraries: YES
对于扩展:
Always Embed Swift Standard Libraries: NO
对我有用的唯一解决方案是将此运行脚本添加到 App Extension 目标:
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
https://i.stack.imgur.com/QHgrm.png
dyld: Library not loaded: ... Image not found
任何人都可以帮助我吗?
因此,从构建设置中解决此问题的 3 个步骤
容器应用程序:嵌入式内容包含 Swift 代码:是扩展:嵌入式内容包含 Swift 代码:否扩展:运行路径搜索路径 = @executable_path/../../Frameworks
就我而言,我刚刚升级到 CocoaPods 1.0.1,这似乎是一个新错误。
Pod 更新将运行脚本添加到我的扩展程序的目标中,该目标创建了 Frameworks 文件夹。我在即将添加@Roman 的运行脚本以将其删除时发现了它。
解决方案是从我的扩展程序的构建阶段删除此脚本。这是需要去的那个...
https://i.stack.imgur.com/vO8pY.png
1.1.0.rc.2
为我解决了这个问题。
删除标题中包含 embed
字样的扩展程序的每个 Build Phase。
此外:
包含 Swift 代码的嵌入内容必须为扩展目标设置为 Yes。
以上答案都不适合我。这是因为错误不是由父应用程序或其扩展引起的。而是其中一个链接库有问题。
要确认,首先使用 Xcode 存档,然后使用 Organizer 选择条目并使用 Show in Finder 定位。这将显示 .xcarchive
文件。
选择该文件并选择“显示包内容”。
选择 Products/Applications 文件夹中的 .app 并再次选择“显示包内容”。
在 Frameworks 文件夹中找到有问题的模块。例如,如果错误是:
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 中找到依赖模块并更新标志:
https://i.stack.imgur.com/cgnWP.png
请注意,克服此问题后,应用程序仍可能被 iTunes Store 的解释性电子邮件拒绝:
Invalid Swift Support - The Watch OS application has Swift libraries at both...
这又回到了 EMBEDDED_CONTENT_CONTAINS_SWIFT
标志。确保只有父应用程序将此设置为 YES
。 WatchKit 应用程序和扩展程序都必须将此标志设置为 NO
。这在上面@Mike 的回答中有详细说明。
https://i.stack.imgur.com/USetc.png
在我的情况下,解决方案是从我的扩展的嵌入式二进制文件中删除我的框架,并将其添加到我的扩展的链接框架和库中。 (两者都可以在扩展程序的常规选项卡中找到。)
如果 Embed Pods Frameworks 脚本和 Roman's script 都存在于同一目标中。
请检查 Embed Pods Frameworks 是否位于另一个之前。如果没有,只需将 Roman 的脚本移到最后。
我无法找到 Embedded Content Contains Swift Code
的任何设置,但我能够找到一个设置 Always Embed Swift Standard Libraries
,并且为我的框架将其设置为 NO 确实解决了这个问题。
以上答案对我不起作用。我做了下面的事情。
从团队容器应用程序的其他开发人员复制扩展的目标设置:嵌入式内容包含 Swift 代码:是扩展:嵌入式内容包含 Swift 代码:否
请从目标检查扩展的每个设置。
如果您使用的是 CocoaPods,我会考虑删除有问题的目标(扩展)上的 Embed 框架构建阶段,这为我解决了问题。
Container App: Build Setting -> Embedded Content Contains Swift Code: YES Extension: Build Setting -> Embedded Content Contains Swift Code: NO Extension: Build Phase -> 在其中添加了以下运行脚本
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ]];然后 rm -fr 框架 fi
(重要)扩展:构建阶段 -> 将运行脚本移到最后(在 Embed Pods Frameworks 脚本之后)
我遇到了同样的错误,这是因为我将框架复制到扩展包中。事实证明,扩展使用的框架应该被复制到主应用程序包中,并且只在扩展构建设置中链接(而不是复制)。确保在扩展构建中有搜索路径“@executable_path/../../Frameworks”。我认为该路径是由 XCode 10 自动添加的。
此处列出的构建设置都没有为我解决此问题。但是,在将一些框架从“嵌入式二进制文件”移动到“链接框架和库”之后,我确实做到了这一点。
看来我的主应用程序和我的一个自定义框架在两者中都具有相同的框架依赖关系,这似乎是一个不,但将它在我的主应用程序中从嵌入式区域移动到链接区域允许我成功上传应用程序没有错误。
我发现了很多这样的问题,但没有一个能帮助我解决我的问题,所以希望这可能对某人有所帮助。
我正在创建一个具有 Intent 扩展(用于 Siri 快捷方式)的应用,并且按照 Apple 的建议,我正在使用一个框架来在扩展和我的应用之间共享代码。
我已将我的框架添加到目标“常规”设置的“框架和库”部分中的扩展中。在此处添加框架时,有两列。一个是框架的名称,另一个是“嵌入”。我没有在“嵌入”列中显示任何内容,所以我认为这很好,但我必须为我的框架明确选择该列的“不嵌入”选项。当我这样做并在 Xcode 中存档时,我可以在验证期间看到该框架不再列在每个目标下的 ipa 内容中,而是仅列出一次,最终验证成功。
就我而言,Firebase SPM 是罪魁祸首。由于 frameworks 文件夹,我有一个 ShareExtension 未能通过 AppStore 验证。我用架构中的存档后脚本解决了这个问题:
https://i.stack.imgur.com/pjv3h.png
对于 Unity3D
将 Unity-iPhone 目标的“始终嵌入 Swift 标准库”设置为 YES 删除 .xcodearchive (见图)档案路径中的框架文件夹 ~/Library/Developer/Xcode/Archives
https://i.stack.imgur.com/KdHtH.png
https://i.stack.imgur.com/3bPEE.png
我第一次使用 XCode 7.1.1 时遇到了这个问题,我的应用程序有一个 Today Extension(我的项目中没有 Swift)。脚本 (https://github.com/CocoaPods/CocoaPods/issues/4203) 对我不起作用。
将 cocoapods 降级到 0.39.0.beta.3 版本,运行 pod install
,然后重新归档即可解决问题。
我遇到了同样的错误,还有一个
不允许的嵌套包错误
我的问题出在 SquareReaderSDK.framework
上,但我必须按照他们的说明添加一个新的运行脚本:
FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
您必须将脚本添加到构建阶段的末尾
cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then
rm -fr Frameworks
fi
https://i.stack.imgur.com/l72Dw.png
@executable_path/../../Frameworks