xcodebuild exportArchive:找不到适用的设备

时间:2016-09-22 08:51:19

标签: ios xcode enterprise xcodebuild

使用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)

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

** 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

非常感谢任何帮助。我已经在谷歌上尝试了很多建议,但还没有找到解决方案。

9 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

我们在运行

后遇到了同样的问题"No applicable devices found"
xcodebuild -exportArchive -archivePath ../bin/archive/GetSocialTestApp.xcarchive -exportPath ../bin/ -exportOptionsPlist ../../scripts/exportOptions.plist

工作解决方案:使用fastlane repo中的xcodebuild包裹xcbuild-safe.sh。详细解决方案描述了here

如图所示,问题是由rvm环境变量引起的,xcbuild-safe.sh在执行xcodebuild之前清除它们。

我们尝试过的

无效解决方案:

  • 按照here
  • 所述修改ipatool脚本
  • 降级为ruby 2.0.0
  • 安装CFPropertyListsqlite3抱怨的红宝石宝石ipatool

答案 2 :(得分:2)

在包含第三方框架时,我正在使用我的企业项目获得Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found."。我的exportOptionsPlist文件包含compileBitcode=NO条目,但项目本身仍然有bitcode。

我还使用了/var/folders/.../IDEDistribution.standard.log的日志,发现了一个更清晰的错误,引导我找到解决方案。

更多信息:https://developer.apple.com/library/content/technotes/tn2432/_index.html

答案 3 :(得分: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时取消设置这些变量 即使我们不在诸如CircleCI之类的某些环境中使用rbenv, 我们还需要显式取消设置GEM_HOME和GEM_PATH。 更多信息https://github.com/fastlane/fastlane/issues/627

答案 4 :(得分:1)

就是这样!设置bitcode = no,错误得到修复。

答案 5 :(得分:0)

@Tom Harada的回答对我有用,但我想找到导致默认ipatool突破的原因。

这是Google Cast 3.2 SDK,它缺少plist框架的条目。将其更新为3.3解决了出口问题。

参考文献: https://code.google.com/p/google-cast-sdk/issues/detail?id=954 https://github.com/fastlane/fastlane/issues/6223#issuecomment-267343853

答案 6 :(得分:0)

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

enter image description here

答案 7 :(得分: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>

事实证明,其中一个链接框架是使用bitcode编译的。这是从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项目重新编译为iphoneos - 和iphonesimulator - 框架并将它们合并到一个通用框架中

答案 8 :(得分:0)

首先,您需要检查是否已在mac上安装了带有gem的sqlite3和CFPropertyList。 使用这些命令查看终端中的结果:

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

如果你什么都不打印,那么你必须用sudo安装它们

  • sudo gem install sqlite3
  • sudo gem install CFPropertyList