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