在Xcode中,归档选项出现在其他项目下面。

36

我试图使用“归档”选项向iTunes Connect提交应用程序。在为通用iOS设备构建时,它通常会出现在组织者中的iOS应用程序下。然而,现在它出现在“其他项目”下,没有版本和整洁。

我上次构建是在10月28日,除了添加ADAL Xcode项目(作为项目)和我执行的小错误修复之外,我不知道还有什么原因可以导致这种情况。

我添加ADAL Xcode项目到我的应用程序项目中的原因是,如果仅包含框架,则无法在模拟器中工作。添加框架可以正确构建它。

但即使现在删除ADAL项目并添加旧的预构建框架,它仍然出现在其他项目下。有什么指针可以解释造成这种情况的原因吗? 我正在使用Xcode 9.1。


2
顺便说一下,我通过这个解决方案修复了这个问题:https://dev59.com/pGgv5IYBdhLWcg3wSe0f#10727504 - Chandler
这是在我的上传被拒绝后发生的。最终我不得不删除Derived文件夹,关闭Xcode,重新启动,然后进行归档。 - David H
18个回答

27
对于所有的框架或辅助组件项目(如果有),将 Skip install 设置为 YES。然后,将主项目目标的 Skip install 设置为 NO。最后,在任何框架项目的 Build Phases 中,在 Headers 部分下,将任何文件从 Public 拖动并移动到 Project 中。完成这些步骤后,请尝试重新进行归档。例如,如果您有一个依赖于几个框架、特权帮助工具和命令行工具的 macOS 应用程序,所有这些都包含在主应用程序束中,那么您应该为所有这些次要组件设置 Skip installYES。否则,当您创建主应用程序的存档时,Xcode 将希望为所有这些次要组件创建一个组合存档,以便可以单独安装在应用程序本身旁边。

2
这是唯一一个真正描述了“跳过安装”选项的答案 - 所有其他答案都告诉我将其设置为“YES”,但这个解释说主目标需要设置为“NO”。我只有一个目标,它被设置为“YES”,这就是我的唯一问题。 - Coltuxumab
1
+1 我的工作区结构包括一个主项目、一个模块项目和一个 Pods 项目。我在模块项目中添加了一个单元测试目标,将 Skip Install 设置为 No 即可解决问题。 - Romano
1
这对我来说是一个头文件问题。哇,我已经为此烦恼了两天,谢谢你。 - raeldor

23
对我而言,问题在于我将手表应用程序目标的“构建设置”中的“跳过安装”设置为“否”。一旦我将其更改为“是”,问题就得到解决了。 在此输入图片描述

注意:这可能有效,但在将其应用于您的项目之前,请先了解“跳过安装”是什么。 - tomacco

9

为了更容易理解,请按照图片操作并从所选方案中删除重复的目标。

点击左上角的目标(位于 > 通用 iOS 设备/模拟器列表旁边),然后进入编辑方案 > 删除重复目标,只保留一个目标。

删除重复目标


9

对于那些搜索此问题的人 - 我们遇到了与上述相同的问题。 结果发现,每当存档的Products /文件夹内出现异常情况时,XCode就会认为该归档不是iOS应用程序。 在我们的情况下,在同一存档方案中构建了2个目标,因此在 Products / 中显示了2个应用程序。

解决方法是单击左上方的目标(紧挨着 > Generic iOS Device ),然后转到 Edit Scheme > Build > 从那里删除重复的目标,并仅留下一个。

另一种解决方法是将目标的 Skip Install 设置为 YES ,以使其不安装到存档中(请参见@RawMean的答案)。

希望这能帮助某人节省一些痛苦。


1
没错。当您使用“管理方案”编辑器复制方案时,可能会出现这种情况。您的解决方案解决了这个问题 +1。 - Michael
漂亮的回答!对于那些通过右键单击主目标并复制它来创建多个目标(dev、prod)的人,需要这样做才能进行存档和分发。 - barrylachapelle
经过几个小时的尝试和失败,这最终拯救了我! - Michal Šrůtek

9
我们的iOS应用程序也遇到了同样的问题。在浪费了一些时间进行随机操作后,我们将损坏的存档与旧存档之一进行了比较。 它们通常都在这里:~/Library⁩/Developer⁩/Xcode⁩/Archives⁩ 结果发现,新的存档在Products文件夹中包含了几个额外的子文件夹,而旧版本只有Applications文件夹。
这是构建配置的另一个更改的副作用,所以我们进行了修复。

1
这个提示帮助我的同事找到了真正的根本原因,即他重构项目结构和构建配置。简而言之:有一些额外的文件和文件夹作为额外的构建资源被包含在归档中,使Xcode认为它不再是iOS应用程序。由于这些文件和文件夹只是不必要的遗留物,我们只需将它们删除即可。 - stepio
3
简而言之,如果你要将其他东西与你的应用程序一起打包,请将“跳过安装”构建设置设置为“是”。 - user187676
感谢你的回答。我不小心在尝试存档的目标的“Build Phases”中添加了一些内容到“Copy Files”。这导致一个图像被添加到存档产品文件夹中。简而言之,请检查YourTarget > Build Phases > Copy Files,确保没有任何你不想要的东西存在,否则它将被添加到存档的产品文件夹中。 - Christopher Larsen

4

有很多可能的原因(从谷歌搜索中可以找到)导致存档被添加到“其他项目”中,其中之一是Xcode不知道CFBundleVersion/CURRENT_PROJECT_VERSION。但在苹果的世界里,这并不容易。无论如何,即使我在Info.plist中有CFBundleVersion,Xcode也没有看到/使用它。请参见下面的详细信息。

从Xcode 13.2.x升级到13.4.x后,我的应用程序存档开始显示在组织器的“其他项目”部分中,而不是“iOS应用程序”部分。此外,在组织器中,该应用程序版本为空。尽管在模拟器上构建失败,但在iPhone上的构建工作正常,由于出现错误,提示我在Info.plist中没有CFBundleVersion,但是实际上我已经在那里了。问题的根源在于我使用了一个固定值(而非变量)。因此,我必须将静态值更改为变量...

文件 Info.plist

// OLD incorrect
<key>CFBundleVersion</key>
<string>345</string>
<key>CFBundleShortVersionString</key>
<string>1.2.3</string>

// NEW correct
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>

文件project.pbxproj

...
CURRENT_PROJECT_VERSION = 345;
MARKETING_VERSION = 1.2.3;
...

此外,我还不得不将变量添加到project.pbxproj文件的Release和Debug部分中,因为我没有在那里找到它。所以,在旧版本的Xcode中,它是按照这种方式工作的,并且版本是从Info.plist中获取的。现在看来,真正的源是project.pbxproj中的变量,但由于Apple无法在错误中指出CFBundleVersion在Info.plist中缺失,所以会出现不正确的错误消息。最后,Xcode会自动从Info.plist中删除CFBundleVersion和CFBundleShortVersionString。

我花了很多很多小时去找问题。我讨厌升级Xcode - 噩梦,总是浪费很多时间。


在 Xcode 14(旧项目中),我遇到了相同的问题,但行为略有不同:1- 构建显示版本但没有构建号。 2- 您可以进行验证,但如果分发,则会出现错误并失败。错误信息不太有用:“提供的实体包括与无效值的关系 “不是关系'build'的有效ID(ID:63a4a5d-8716-4c6-983f-7455d00a6081)”。 - benc

4
使用Xcode 11.4时我遇到的另一个问题是,我的应用程序归档也最终出现在“其他项目”中。在来回查看Git历史记录后,我找到了问题(尽管很奇怪)和解决方法。
Info.plist将“Bundle version string”设置为$(MARKETING_VERSION),但将其更改为原始版本号1.0.7后,应用程序就能正确地归档到iOS应用程序列表中。

我已经尝试了各种解决方案,但是这个像冠军一样奏效!谢谢! - Zarul Izham
我的情况与此相反,我有类似于${FLUTTER_BUILD_VERSION}的内容,并将其替换为$(MARKETING_VERSION)。 - Chris
是的,那就是解决方案,伙计。 - Ramkesh Yadav

0

我遇到了这个问题...每当我归档时,它会列在其他项目中而不是aps中...然后我意识到应用程序名称不同...我将模式名称编辑为原始名称,问题得到解决。


0
在我的情况下,问题是我在发布版本的项目设置中没有为我的 Info.plist 指定路径。构建设置 > 打包 > Info.plist 文件。 错误 enter image description here 正确 enter image description here

0
在我的情况下,我必须删除旧的存档,然后删除我的应用程序目标并重新创建它,运行pod install,之后我就能够将我的应用程序提交到AppStore,应用程序从“其他项目”移动到“iOS应用程序”。

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