在Xcode 6中使用私有框架的应用程序出现了“could not inspect application package”错误。缺少框架info.plist文件。

5

我的应用程序在Xcode 5中构建和运行得很好。 昨天我升级到Xcode 6,现在应用程序可以构建,但无法在模拟器或设备上运行。

当我试图运行时,我收到“无法检查应用程序包”错误。

我检查了我的设备日志(XCode> Windows>设备),在尝试运行应用程序后,我在日志中收到以下错误:

Sep 23 10:32:46 XXXXXX's-iPhone streaming_zip_conduit[5476] :   __dispatch_source_read_socket_block_invoke:203: Failed to install application at   file:///var/mobile/Media/PublicStaging/ActivateMachines.app/ : Error   Domain=LaunchServicesError Code=0 "操作无法完成。(LaunchServicesError error 0)" UserInfo=0x1355075a0   {Error=PackageInspectionFailed,ErrorDescription=Failed to load Info.plist from bundle at path   /private/var/mobile/Library/Caches/com.apple.mobile.installd.staging/temp.5lz5TS/extracted/ActivateMachines.app/Frameworks/GeLoSDK.framework}

我已经检查了GeLoSDK.framework是否有一个Resources/Info.plist文件。

我正在使用这个框架: https://github.com/GeLoInc/GeLoSDK-iOS

它应该正确链接,因为在Xcode 5上它是工作的。

在Xcode 6中有什么改变我不知道吗? 谢谢任何帮助。

4个回答

6

我曾遇到 GoogleInteractiveMediaAds.framework 的问题:

com.apple.CoreSimulator.CoreSimulatorService[522]: Error Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=PackageInspectionFailed, ErrorDescription=Failed to load Info.plist from bundle at path /Users/XXX/Library/Developer/CoreSimulator/Devices/B5E6B8A7-017D-4FC2-9C22-0698DFD0AC13/data/Library/Caches/com.apple.mobile.installd.staging/temp.Ha6x7D/extracted/XXX-ios.app/Frameworks/GoogleInteractiveMediaAds.framework} configd[54]: inet_set_autoaddr(en0, 1) failed, Resource busy (16)

对我有效的方法是从我的应用程序目标的构建阶段中的嵌入框架中删除 GoogleInteractiveMediaAds.framework。


谢谢你的提示! - Marcelo Gracietti

3
如果您在使用自定义框架运行应用程序时遇到问题,并且模拟器日志如下:
Oct 21 16:27:54 bunnydembp com.apple.CoreSimulator.CoreSimulatorService[1936]: Error Domain=LaunchServicesError Code=0 "The operation couldn’t be completed. (LaunchServicesError error 0.)" UserInfo=0x7fb7954c16c0 {Error=PackageInspectionFailed, ErrorDescription=Failed to load Info.plist from bundle at path /Users/bunny/Library/Developer/CoreSimulator/Devices/10D9FDBC-13B5-420B-9B9E-365E05551830/data/Library/Caches/com.apple.mobile.installd.staging/temp.4mi9Mn/extracted/radio365.app/Frameworks/SOME.framework}
您需要像这样在框架子路径中添加/别名info.plist: http://i.stack.imgur.com/e8Dz2.png

如果您使用http://blog.db-in.com/universal-framework-for-ios/中的构建脚本,只需在第44行添加以下内容

#ios8 bug in xcode 6.0.1 and 6.1
ln -s "${INSTALL_DIR}/Versions/${FMK_VERSION}/Resources/Info.plist" "${INSTALL_DIR}/Info.plist"

3

我将框架移动到“/Library/Frameworks”并从那里将其添加到项目中,以此来构建应用程序。

先前,我一直在使用框架,将其直接捆绑在应用程序中,并手动链接二进制文件。这在Xcode 5中运行良好,但在Xcode 6中却不行。

我不确定这是否是Xcode 6中的新错误,或者发生了什么变化,但是使用“/Library/Frameworks”解决了这个问题。


我想知道是否在Library/Frameworks内部会触发某些东西,允许深度捆绑,而这是不允许的其他位置的捆绑。无论如何,我很高兴你找到了解决方案。你声称它在Xcode 5中工作但在Xcode 6中不工作可能有点偏差。我怀疑问题更可能是iOS 8中installd的变化与iOS 7相比而不是工具的变化。 - Jeremy Huddleston Sequoia
我简直不敢相信这个能够运行。有时候,苹果公司真的很荒谬。 - datWooWoo

1
我怀疑您的捆绑包中实际上没有 Info.plist 文件,但是此错误在之前的版本中被忽略并未报告。请确保您真正安装了 GeLoSDK.framework 的 Info.plist 文件。

我应该在哪里检查?我已经查看了“ActivateMachines.app/Frameworks/GeLoSDK.framework”目录内部,其中包含一个名为“Resources”的文件夹,其中包含一个“Info.plist”文件。 - AnthonyMDev
1
我怀疑那就是问题所在。iOS 使用浅层束,而 OS X 则使用深层束。看起来你的 GeLoSDK.framework 正在构建成适用于 OS X(深层)而不是 iOS(浅层)。从你提供的链接来看,似乎你只是使用了第三方提供的构建好的框架。你可能可以通过将所有文件移动并自己平铺来修复它(你还需要运行 install_name_tool 来更改二进制文件的标识符),但我建议你只是联系那个框架的维护者来为你构建一个修复后的版本。 - Jeremy Huddleston Sequoia
感谢迄今为止的帮助,Jeremy。我应该如何“扁平化”它?也就是说,在使其“浅层”之后,框架应该呈现什么文件结构?你有任何相关参考链接吗?http://www.meonbinary.com/2013/07/creating-universal-ios-framework 表示,框架使用的文件结构应该是可以的。 - AnthonyMDev
1
请查看iPhoneSimulator SDK中的UIKit.framework(或其他框架)例如/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/System/Library/Frameworks...请注意它们的文件结构将所有内容直接放在.framework内,而不是Versions/A/Contents/Resources子目录中。尝试模仿这样做,看看是否可以解决您的问题。 - Jeremy Huddleston Sequoia
谢谢你的帮助,我最终想出了另一个解决方案,但是你帮我开始沿着正确的方向思考。 - AnthonyMDev
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接