【问题标题】:Application with private framework "could not inspect application package" in Xcode 6. Missing framework info.plistXcode 6 中具有私有框架的应用程序“无法检查应用程序包”。缺少框架 info.plist
【发布时间】:2014-09-23 17:36:32
【问题描述】:

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

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

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

9 月 23 日 10:32:46 XXXXXX's-iPhone streaming_zip_conduit[5476]: __dispatch_source_read_socket_block_invoke:203: 安装应用程序失败 file:///var/mobile/Media/PublicStaging/ActivateMachines.app/ :错误 Domain=LaunchServicesError Code=0 "无法执行该操作 完全的。 (LaunchServicesError 错误 0。)“UserInfo=0x1355075a0 {Error=PackageInspectionFailed, ErrorDescription=加载失败 路径中捆绑的 Info.plist /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 中是否发生了一些我不知道的变化?感谢您的帮助。

【问题讨论】:

    标签: ios iphone xcode xcode6


    【解决方案1】:

    我在使用 GoogleInteractiveMediaAds.framework 时遇到了这个问题:

    com.apple.CoreSimulator.CoreSimulatorService[522]:错误 Domain=LaunchServicesError Code=0 "(null)" UserInfo={Error=PackageInspectionFailed, ErrorDescription=失败 从路径中的包加载 Info.plist /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) 失败,资源繁忙 (16)

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

    【讨论】:

    • 感谢您的提示!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我想知道在库/框架内部是否会触发一些允许深度捆绑的东西,而其他地方的捆绑则不允许这样做。无论如何,我很高兴您找到了解决方案。您声称它在 Xcode 5 而不是 Xcode 6 中工作的说法可能有点过时了。我怀疑与 iOS 7 相比,iOS 8 中的已安装更改更有可能出现此问题,而不是工具更改。
    • 我不敢相信这行得通。苹果有时绝对是荒谬的。
    【解决方案3】:

    如果您在使用自定义框架运行应用程序时一直遇到问题,并且来自模拟器的日志如下:

    10 月 21 日 16:27:54 com.apple.CoreSimulator.CoreSimulatorService[1936]:错误 Domain=LaunchServicesError Code=0 "无法执行该操作 完全的。 (LaunchServicesError 错误 0。)“UserInfo=0x7fb7954c16c0 {Error=PackageInspectionFailed, ErrorDescription=加载失败 路径中捆绑的 Info.plist /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}

    你需要像这样在框架子路径中add/alias info.plisthttp://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"
    

    【讨论】:

      【解决方案4】:

      我怀疑您在该捆绑包中确实没有 Info.plist,但该错误被忽略并且在以前的版本中未报告。确保您确实为 GeLoSDK.framework 安装 Info.plist。

      【讨论】:

      • 我应该在哪里检查?我查看了“ActivateMachines.app/Frameworks/GeLoSDK.framework”目录,其中有一个“Resources”文件夹,其中包含一个“Info.plist”文件
      • 我怀疑这就是问题所在。 iOS 使用浅捆绑包,而 OS X 使用深度捆绑包。看起来您的 GeLoSDK.framework 是为 OS X(深)而不是 iOS(浅)构建的。从您的链接来看,您似乎只是在使用第三方提供的构建框架。您可以通过将所有文件向上移动并自己展平它来自己修复它(您可能还需要运行 install_name_tool 来更改二进制文件的标识符),但我建议您只需戳该框架的维护者来为您构建一个固定的版本。
      • 感谢 Jeremy 迄今为止的帮助。我应该如何压平它?框架在使其“浅”之后应该是什么样的文件结构?你有任何参考的链接吗? meonbinary.com/2013/07/creating-universal-ios-framework 表示框架使用的文件结构应该没问题。
      • 查看 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 子目录。尝试模仿它,看看它是否能为您解决问题。
      • 感谢您的帮助,我终于想出了另一个解决方案,但您帮助我开始朝着正确的方向思考。
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2011-03-01
      • 2014-12-10
      相关资源
      最近更新 更多