xcodebuild exportArchive: 没有找到适用的设备

16

升级到带有iOS 10的Xcode 8后,我遇到了这个错误。我使用最新版本的El Capitan,并使用以下版本的ruby(我通过rvm更新,与系统版本的2.0.0相同),以及CFPropertyList:

Philipps-MacBook-Pro:mobile-sdk prakuschan$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]


Philipps-MacBook-Pro:mobile-sdk prakuschan$ gem list CF
*** LOCAL GEMS ***
CFPropertyList (2.3.3)

在一个shell脚本中执行xcodebuild -exportArchive命令。在成功归档后,我收到如下错误:

** ARCHIVE SUCCEEDED **
2016-09-22 10:02:16.460 xcodebuild[10375:8369748] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/9y/r64c9wld0jx2yf3glsrzhhr00000gn/T/AppName_2016-09-22_10-02-16.456.xcdistributionlogs'.
2016-09-22 10:02:18.228 xcodebuild[10375:8369748] [MT] IDEDistribution: Step failed: <IDEDistributionThinningStep: 0x7fe435f9dfb0>: Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found." UserInfo={NSLocalizedDescription=No applicable devices found.}
error: exportArchive: No applicable devices found.
Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found." UserInfo={NSLocalizedDescription=No applicable devices found.}
** EXPORT FAILED **

在查看xcdistributionlogs时,IDEDistribution.standard.log文件在末尾包含以下行:
2016-09-22 08:02:18 +0000 [MT] /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool exited with a signal 6
2016-09-22 08:02:18 +0000 [MT] ipatool JSON: (null)

我不知道这是否有价值,但这是到ipatool的路径:

2016-09-22 08:02:17 +0000 [MT] Running /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool

非常感谢您的帮助。我已经尝试了许多在谷歌上找到的建议,但仍未找到解决方案。


@Zeropointer,苹果的人有任何回应吗? - Viktor Benei
1
我在苹果开发者论坛(https://forums.developer.apple.com/message/182955)上发布了一个帖子,但是已经有一周了他们甚至没有批准我的帖子。看起来他们并没有认真对待这个问题。 与此同时,我发现新创建的Xcode项目文件可以顺利构建,所以我花费了精力将我们应用程序的所有设置和文件转移到了一个新项目中,并且它奏效了。也许这可以作为一种解决方法帮助到你们中的一些人。 - Philipp
@ViktorBenei 当我添加这个旧框架时,会出现“找不到适用设备”的错误,当我将其删除后,就可以导出应用程序。 - Zeropointer
奇怪..谢谢信息@Zeropointer! - Viktor Benei
1
我遇到了同样的问题,并通过将“启用位代码”设置为false(临时解决方案)来成功解决它。 - spafrou
显示剩余4条评论
9个回答

10

我遇到了同样的问题。在搜索了以下内容之后:

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

以及其他关于Xcode 7类似的问题。我意识到这个问题是独特的。如果你调整Xcode 8中的ipatool脚本,你就可以解决它。

sudo vi /Applications/Xcode.app/Contents/Developer/usr/bin/ipatool

把这一行注释掉:

# Check the artwork idiom.
#return nil,"the device doesn't support the app's UIDeviceFamily" unless (deviceTraits.supportedIdioms & bundle.supportedIdioms).size > 0

通过调查ipatool命令可以在以下位置找到:

/var/folders/.../IDEDistribution.standard.log

你可以通过以下方式搜索它们:
$ sudo find /private/var -name "*.xcdistributionlogs"

相关细节/调试步骤:https://github.com/fastlane/fastlane/issues/8737


该链接包含有关调试fastlane问题的详细步骤和信息。

2
谢谢您的建议,我已经尝试了,但是它并没有起作用。不过我已经找到了我的导出失败原因在IDEDistribution.standard.log中。 - Zeropointer
1
@ViktorBenei 这是我的日志 [MT] /Applications/Xcode_8.app/Contents/Developer/usr/bin/ipatool 以1的状态退出 2016-10-03 07:45:38 +0000 [MT] ipatool JSON: { alerts = ({ code = 0; description = "\MyApp.app/Frameworks/TheFramework.framework/Resources\U201d 的 Info.plist 指定了一个不存在的文件作为 CFBundleExecutable 键"; info = { }; level = ERROR; type = "malformed-payload"; } ); - Zeropointer
1
太棒了!通过那个名为IDEDistribution.standard.log的日志调试ipatool在不同情况下都很有用。这是我的主要收获。谢天谢地,如果需要,我们都可以阅读Ruby文件。 - user560766
这仍然是一个症状,但仍然是非常有用的信息。在我的情况下,问题的根本原因是使用google-cast-sdk和这个bug:https://code.google.com/p/google-cast-sdk/issues/detail?id=954 - diidu
@Zeropointer,IDEDistribution.standard.log 的位置在哪里? - Sazzad Hissain Khan

5

我们在运行后也遇到了相同的问题"未找到适用设备"

xcodebuild -exportArchive -archivePath ../bin/archive/GetSocialTestApp.xcarchive -exportPath ../bin/ -exportOptionsPlist ../../scripts/exportOptions.plist

解决方案: 使用来自fastlane repoxcbuild-safe.sh封装xcodebuild。详细的解决方案请参阅此处

如出现此问题,则原因是由rvm环境变量引起的,xcbuild-safe.sh在执行xcodebuild之前会清除它们。

不可行的解决方案我们已经尝试过:

  • 按照此处描述修改ipatool脚本
  • 降级到ruby 2.0.0
  • 安装ipatool抱怨的ruby gemsCFPropertyListsqlite3

对我们也起作用。我们想在 Fastlane 自定义操作中使用这个包装器。最终以以下方式获取到 xcbuild-safe.sh 的路径:requrie "gym" xcbuild_safe ||= File.join(Gym::ROOT, "lib/assets/wrap_xcodebuild/xcbuild-safe.sh") - i4niac
也对我们适用。看起来是一个rvm问题。 - radalin

2
在将第三方框架包含到我的企业项目中时,我遇到了一个错误:Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found."。 我的exportOptionsPlist文件包含compileBitcode=NO条目,但是项目本身仍然有位码。
我还使用了日志文件/var/folders/.../IDEDistribution.standard.log,并找到了更清晰的错误信息,从而找到了解决办法。
更多信息请参考:https://developer.apple.com/library/content/technotes/tn2432/_index.html

2

复制以下内容并添加到您的 ~/.bashrc 文件末尾(如果您使用 ZSH,则为 ~/.zshrc)。然后退出终端并重新启动它(必须)

unset RUBYLIB
unset RUBYOPT
unset BUNDLE_BIN_PATH
unset _ORIGINAL_GEM_PATH
unset BUNDLE_GEMFILE
unset GEM_HOME
unset GEM_PATH

提示信息:

因为Xcode依赖2个外部宝石:sqlite和CFPropertyList 更多信息请参见https://github.com/fastlane/fastlane/issues/6495

我们必须取消rbenv、rvm变量的设置,以及当用户使用bundler时。 即使在一些环境中我们不使用rbenv,比如CircleCI, 我们也需要显式地取消GEM_HOME和GEM_PATH的设置。 更多信息请参见https://github.com/fastlane/fastlane/issues/627


这个在 Jenkins 的 sh 调用中为我解决了问题。 - BadmintonCat

1

就是这样!将bitcode = no设置,问题得到解决。


0

0

首先,您需要检查是否在Mac上使用gem安装了sqlite3和CFPropertyList。

请使用以下命令在终端中查看结果:

  • gem list | grep sqlite3
  • gem list | grep CFPropertyList

如果您没有看到任何输出,则需要使用sudo进行安装。

  • sudo gem install sqlite3
  • sudo gem install CFPropertyList

0

我的构建脚本也遇到了同样的问题,我检查了一些添加的框架。有一个框架包含一个plist文件(名称与Info.plist相同)。因此,我删除了Info.plist文件,构建脚本就正常工作了。

enter image description here


0

我也曾遇到过XCode 8.2.1的同样问题。

在我的情况下,问题是在使用以下导出信息plist导出adhoc或appstore分发档案时重现的。

<?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>teamID</key>
        <string>TEAMID</string>
        <key>method</key>
        <string>ad-hoc</string> # or `app-store`
        <key>uploadSymbols</key>
        <true/>
        <key>compileBitcode</key>
        <false/>
        <key>uploadBitcode</key>
        <false/>
</dict>
</plist>

原来其中一个链接的框架是使用位码编译的。这是从Xcode导出日志中指出的: IDEDistribution.stadard.log
error: Failed to verify bitcode in YandexMapKit.framework/YandexMapKit:
error: Bundle only contains bitcode-marker /var/folders/zb/ftpjx10s547ddmzm_ybqdm51xdv_t7/T/IDEDistributionThinningStep.NKQ/Payload/Avito.app/Frameworks/YandexMapKit.framework/YandexMapKit (armv7)

我不得不手动重新编译 YandexMapKit 项目为 iphoneosiphonesimulator 框架,然后将它们合并成一个通用框架。


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