Xcode 8 构建失败仅适用于模拟器

Posted

技术标签:

【中文标题】Xcode 8 构建失败仅适用于模拟器【英文标题】:Xcode 8 build fail only for simulator 【发布时间】:2017-03-15 19:38:48 【问题描述】:

从昨天开始,我无法使用 Xcode 8.1 在 ios 10 模拟器上构建和运行我的项目。奇怪的是,构建和运行在真实设备上运行良好。问题是:

.../Xcode/DerivedData/Tripla_Doppia-fllujkpnletlmwcswbkopyphtkqd/Build/Products/Debug-iphonesimulator/Appirater.bundle:捆绑格式无法识别、无效或不合适 命令 /usr/bin/codedesign 失败,退出代码为 1

我尝试清理项目并清理派生数据的文件夹,但没有任何改变。我正在使用 CocoaPods 来管理库,包括 Appirater pod。直到上周,构建和运行都运行良好。有什么建议吗?

这是截图链接:

【问题讨论】:

1.删除派生数据 2. 清理项目并尝试再次运行您的项目。 我听从了你的建议,但再次构建失败。 代码签名似乎有问题。令人惊讶的是,它不应该影响模拟器。 终于找到了解决办法。我将 CocoaPods 更新到了最新版本(1.1.1,它是 0.3.9),现在构建成功了。我不明白为什么,但它有效。也许 Xcode 8.1、CocoaPods 0.3.9 和我使用的 pod 之间存在问题,因为使用 Xcode 8.0 项目没有任何问题。 另见:***.com/questions/29271548/… 【参考方案1】:

正如 Francesco 所说,这个问题可能是由 CocoaPods 引起的。

CocoaPods 和任何 pod 引用的资源路径不存在都可能导致问题。

就像 pod 引用一个不存在的资源路径,

s.resource_bundles =   
    'aPod' => ['Pod/Assets/*.png']  

线程 here 似乎有帮助。

【讨论】:

【参考方案2】:

通过提到的threadRonak Chaniyara,我找到了一个解决方案,供那些还不想更新 CocoaPods 的人使用。

如果您查看 Pods 项目文件,在目标下,您会注意到所有资源包都没有 Info.plist 文件集。 使用 CocoaPods 通用 Info.plist 设置它们,它将在模拟器上运行。但是,这不是永久性的,因为它将在下一个pod install

重置

如果您使用的是 CocoaPods(尤其是旧版本),您会注意到 pods 项目文件中的所有资源包目标都没有 info.plist。 使用 CocoaPods 通用 Info.plist 设置它们,它会运行。 然而,这不是一个永久的解决方案。它将在下一个pod install 重置

https://forums.developer.apple.com/thread/66538

编辑: 如果您的项目中还没有通用 plist 文件 在 Pods Target Support Files/Pods-<App Name>/ 中创建一个新文件 Info.plist 并粘贴此文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>en</string>
  <key>CFBundleIdentifier</key>
  <string>org.cocoapods.$PRODUCT_NAME:rfc1034identifier</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>$PRODUCT_NAME</string>
  <key>CFBundlePackageType</key>
  <string>BNDL</string>
  <key>CFBundleShortVersionString</key>
  <string>1.0.0</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>$CURRENT_PROJECT_VERSION</string>
  <key>NSPrincipalClass</key>
  <string></string>
</dict>
</plist>

【讨论】:

【参考方案3】:

我尝试更新 cocoapods 1.1.1,删除 DerivedData,以及几乎所有其他提到的内容。我仍然有同样的问题。我刚刚升级到 Xcode 8.2 beta。现在一切正常,就像我升级到 Xcode 8.1 之前一样。

【讨论】:

【参考方案4】:

我遇到了这个问题的一个变种,当我为模拟器构建时似乎没有识别 pod(为真实设备构建时没有问题)。就我而言,解决方案是从我的 Podfile 中删除 pod,执行 pod install,然后重新添加 pod 并执行另一个 pod install。这解决了问题。

【讨论】:

【参考方案5】:

就我而言,问题是由于仅在 Pods 目标 中为活动架构构建而引起的。 设置为否,以支持所有设备构建 pod。

【讨论】:

以上是关于Xcode 8 构建失败仅适用于模拟器的主要内容,如果未能解决你的问题,请参考以下文章

Xcode11 Swift5 框架不包含模拟器的头文件,仅适用于 arm64 和 armv7a

CoreData 适用于我的模拟器,但不适用于使用 xCode 6 的 iOS 8 Swift 中的 iPhone

iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz

Xamarin Http 请求仅适用于 iOS 模拟器

我的 NSDateFormatter 仅适用于 iPhone 模拟器

Xcode Command-Slash Shortcut to Comment 有时仅适用