无效的Swift支持/无效的swift实现

时间:2014-10-02 15:07:59

标签: ios xcode swift itunesconnect

我想上传一个用swift编写的应用程序。应用程序加载器成功地提供了应用程序,但几分钟后我得到苹果回复的回复:

  

无效的Swift支持 - 该包包含无效的Swift实现。该应用程序可能已使用不合规或预发布工具构建或签名。访问developer.apple.com获取更多信息。

我使用xCode版本6.0.1(6A317),Swift iOS SDK 8.0,只使用xcode构建应用程序。

在哪里可以找到有关如何获得有效的swift实现的信息? Apple并没有说具体的东西。

THX

22 个答案:

答案 0 :(得分:35)

我有类似的问题。 要修复它并能够将构建推送到iTunesConnect,我必须执行以下操作:

  • 在目标设置
  • 中将标记EMBEDDED_CONTENT_CONTAINS_SWIFT设置为YES
  • 确保Build Phases不包含任何其他奇怪的目标
  • Logout来自Xcode和登录的所有Apple Developper帐户只需要使用推送应用的帐户。
  • 使用Application Loader归档并提交应用with Xcode NOT

为什么我需要从所有Apple Developper帐户注销?

因为Xcode不知道用于上传二进制文件的帐号。 Application Loader在开始时询问您,但之后,上传的构建版本无效......

<强>更新

由于 Xcode 7.1 以及Swift的新版本我再次收到错误。目前的解决方法是执行以下操作:

  • 在Xcode上本地创建存档(不适用于我的CI)
  • 在管理器上,导出它作为AppStore版本。
  • 使用Application Loader上传二进制文件。

几分钟后(~10),iTunesConnect上的构建应该可用。

答案 1 :(得分:17)

如果你使用的是Swift pod,问题可能来自cocoapods。 要解决此问题,请使用分支xcode7-invalid-swift-support-fixusage)。或者通过编辑 Pods / Target Support Files / Pods / Pods-frameworks.sh 手动完成

之后评论该块
 # Embed linked Swift runtime libraries

更多信息:

答案 2 :(得分:14)

xcodebuild解决方案

  • 创建临时文件夹

  • 将ipa文件解压缩到临时文件夹

  • 在临时文件夹中创建SwiftSupport文件夹
  • 将快速库从Payload / * app / framworks复制到SwiftSupport文件夹
  • 包含ipa文件包含在临时文件夹内(我们有Payload和SwiftSupport文件夹)。

这是我的shell脚本,用于将Swift库添加到ipa

https://github.com/huhuvipi/VH_ipa_packger

如果你现有的ipa文件,你只需:

path/to/package_ipa.sh /path/to/ipafile

答案 3 :(得分:12)

您是使用命令行(xcodebuild)构建的吗?

如果是这样的话: 我遇到了同样的问题。问题是生成的ipa文件无效。它缺少SwiftSupport文件夹。当使用Xcode Gui构建带有Swift的项目时,该文件夹由XCode添加。

这个问题在这个苹果开发者论坛帖子中描述,其中提到了一个开放的雷达票: https://devforums.apple.com/message/1042117#1042117

答案 4 :(得分:5)

您是否安装了其他版本的Xcode?

打开最新的Xcode,然后转到偏好设置(Xcode菜单 - &gt;偏好设置),切换到“位置”标签,确认命令行工具与Xcode版本匹配。

答案 5 :(得分:3)

如果您是通过xcodebuild或Xcode Server(或Xcode中的管理器窗口以外的任何其他内容)构建的,则缺少IPA SwiftSupport。请参阅问题的this discussion

解决方案主要是自己导出IPA。 CaveJohnson有一个命令,可以使用正确的SwiftSupport导出IPA,因此您可以像这样构建IPA:

cavejohnson xcodeGUITricks --archive-path my.xcarchive --new-ipa-path myapp.ipa

答案 6 :(得分:3)

我遇到了同样的问题并尝试了所有建议,但总是失败...我的应用程序生成了SwiftSupport文件夹,我刚用这个解决方案解决了:

感谢您发送.ipa文件。该问题是由SwiftSupport目录中的libswiftXCTest.dylib引起的。测试目标使用该dylib,并且包含的​​开发构建是正常的,但App Store的存档构建不应包含此dylib。

要解决此问题,请按以下步骤操作:

  1. 打开您的Xcode项目
  2. 选择产品&gt;方案&gt;编辑方案
  3. 单击左侧栏中的“构建”
  4. 对于测试目标,取消选中存档复选框
  5. 单击“关闭”按钮
  6. 选择产品&gt;归档
  7. 将最新档案提交至App Store

答案 7 :(得分:1)

简单解决方案:

嗨,我有同样的问题,以下是解决方案:

只需在Target,Project的构建设置中将标记EMBEDDED_CONTENT_CONTAINS_SWIFT设置为NO,就像testTarget一样。

答案 8 :(得分:1)

我也有这个问题

我尝试将EMBEDDED_CONTENT_CONTAINS_SWIFT的标志设置为YES和NO。两者都不适合我。

最终我和Drew提到的CaveJohnson一起尝试过。但这也不起作用。

最后我创建了一个新项目并插入了我的swift文件和框架等等。就是这样!

我的解决方案:创建新项目

答案 9 :(得分:1)

检查您的代码签名。我在使用自动签名时遇到此错误。 我把我的dev配置文件用于发布版本的开发和生产配置文件,错误消失了。

答案 10 :(得分:1)

使用命令行http://www.matrixprojects.net/p/xcodebuild-export-options-plist/

时,这是一个解决方案

基本上所有需要做的就是创建xcodebuild exportOptions 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>teamID</key>
        <string>MYTEAMID123</string>
        <key>method</key>
        <string>app-store</string>
        <key>uploadSymbols</key>
        <true/>
</dict>
</plist>

这里最重要的关键是方法应用商店

然后使用存档

运行xcode构建
xcodebuild -scheme MyApp -archivePath builds/MyApp.xcarchive archive

之后运行xcrun with export archive

xcrun xcodebuild -exportArchive -exportOptionsPlist exportPlist.plist -archivePath builds/MyApp.xcarchive -exportPath builds

答案 11 :(得分:1)

我发现在主应用程序构建设置中将“嵌入内容包含Swift代码”从YES更改为NO(并在扩展中将其设置为YES)将在手表(和手机)上运行。在我上传该二进制文件的同时,Apple必须对ITC后端进行更改,因为我标记为“Invalid Binary”的其他已上传版本已恢复为“Processing”,之后将屏幕传递给“Inactive”。

所以我在扩展程序中提交了“嵌入内容包含Swift代码”的构建,仅供审阅。

主应用程序:嵌入式内容包含Swift Code = YES(如果它是一个快速项目。否则为NO)

WatchKit扩展:嵌入式内容包含Swift Code = YES(如果它是一个快速项目。否则为NO)

WatchKit App:嵌入式内容包含Swift Code = NO(无论如何)

答案 12 :(得分:0)

如果你有cocoapods,只需删除所有pod,然后重新安装pod install

非常烦人,因为我在使用Application Loader直接从Xcode和无效Swift支持上传时出现了-22421错误

答案 13 :(得分:0)

对我而言,这对分发来说是有用的。

转到 - &gt; Xcode-&GT;制品 - &GT; Archive-&GT;导出

在此之后,将使用当前日期创建一个文件夹。您可以将其保存在某个地方供以后使用。然后打开Application loader,您可以从这里提交到itunesConnect。一切都会被清除。 确保通过单击管理器窗口中的“导出”选项来创建Build(.ipa)文件。然后使用Application loader将构建提交到iTunesConnect。

我希望它有所帮助。如果您需要更多信息,请与我们联系。

答案 14 :(得分:0)

我能够通过打开存档,进入SwiftSupport并删除WatchOS的文件夹来解决这个问题,因为它是空的。我想我的Watch目标设置为嵌入Swift,因此它包含了文件夹,但没有在其中生成任何内容。所以iTC看到一个空文件夹并出错。通过删除它工作的空文件夹。

答案 15 :(得分:0)

以为我应该分享,因为我花了几天时间试图解决这个问题。

每个人都在说要设置EMBEDDED_CONTENT_CONTAINS_SWIFT = NO=YES

我有一个完全用Objective-C编写的iPhone应用程序和一个完全用Swift编写的Watch Kit应用程序。

我为所有内容设置了EMBEDDED_CONTENT_CONTAINS_SWIFT = NO(Project Target,iPhone app target,Tests,UITests和WatchKit)

我设置EMBEDDED_CONTENT_CONTAINS_SWIFT = YES的位置在WatchKit扩展中。这解决了我的问题,我可以通过Xcode上传到App Store。

希望这可以帮助别人!

答案 16 :(得分:0)

五步解决方案:

  1. 转到构建设置并制作标记嵌入内容包含Swift代码 - &gt; ,如果您的代码包含部分快速代码或完全由Swift制作
  2. 使用 Xcode-&gt;产品 - &gt;存档
  3. 存档您的版本
  4. 导出存档构建您将突然看到差异构建大小将超过40 MB这是因为 XCode添加了缺少的SwiftSupport文件夹
  5. 现在使用应用程序加载器
  6. 上传此版本
  7. 如果这不起作用,请检查您的系统上是否有多个XCode goto Xcode-&gt; Preferences-&gt; Location-&gt;命令行工具具有相同的最新或相同的Xcode下拉选中您已完成编码&amp;挥之不去。
  8. 这有点不足,因为swift带有行李,必须与早期版本和Objective C代码兼容。

    我浪费了很多时间希望你会发现这很有用;)

答案 17 :(得分:0)

升级到Xcode后我们遇到了类似的问题7.必须添加-exportOptionsPlist选项并提供methodteamID。搞砸了但现在有效。

答案 18 :(得分:0)

新的xcode中的Swift项目更新后出现了类似的错误,下面是我的解决方案。

打开project.pbxproj文件并删除以下行

  

EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

并且能够成功提交应用。

答案 19 :(得分:0)

seriously. I spent two days on this problem, and I tried all methods above. Nothing works!Finall. I used my friend's mac. And this time, it works. After that I realized that I downloaded the xcode from developer center not in mac app store. So I removed all xcode from my mac, and reinstall the xcode from app store, and it worked. And there is no difference between the two versions, which shared the exactly the same version number.

答案 20 :(得分:0)

我遇到了同样的问题。对我有用的解决方案是更新我的xcode然后创建新项目并将我的所有工作复制粘贴到该项目

答案 21 :(得分:-1)

我实际上只是通过一个完全不同,无关且非常奇怪的解决方案来解决这个问题。有上述错误,但没有改变项目或构建环境中的任何内容。

经过大量的重建和上传周期后,结果证明它是导致此问题的Ad-Hoc证书。使用fastlane并将gym标志ad_hoc设置为false以及使用Release配置进行构建(不确定哪个修复它)最终有效。这是我的gym行:

identifier = "de.xxx.yyy"
config = "Release"
ad_hoc = false
scheme = "Schema"
gym(verbose: false, scheme: scheme, codesigning_identity: "iPhone Distribution: YTB)", configuration: config)