Xcode 创建通用 Xcode 存档而不是 iOS App Archive?

Posted

技术标签:

【中文标题】Xcode 创建通用 Xcode 存档而不是 iOS App Archive?【英文标题】:Xcode creating generic Xcode archive instead of iOS App Archive? 【发布时间】:2019-07-21 21:19:46 【问题描述】:

我正在尝试将我的应用上传到 App Store Connect,但我无法验证我的应用。我还看到没有显示标识符和其他信息。 这是为什么呢?这是个问题吗?如果我可以改变这一点,如何改变? [![在此处输入图片描述][1]][1]

我已经尝试了在 [here][2] 中找到的投票 2+ 的内容。

如果相关:我正在使用一个带有 cocoapods 的项目

info.plist 的 XML:

    <?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>ArchiveVersion</key>
    <integer>2</integer>
    <key>CreationDate</key>
    <date>2019-09-01T20:47:53Z</date>
    <key>Name</key>
    <string>FinalAppPrj</string>
    <key>SchemeName</key>
    <string>FinalAppPrj</string>
</dict>
</plist>

[![在此处输入图片描述][3]][3]

【问题讨论】:

我看到关注者单元格与喜欢和评论单元格不同。你能确定,你设置属性字符串的代码在两个单元格中吗?即 NotifTableViewCell2 和 NotifTableViewCell @dfgdfgdfgdfg,如果您能提供一个成功重现相同错误的示例项目,那么也许我们可以提供更好的帮助 @dfgdfgdfgdfg 你在这里放了很高的赏金,但我不知道这是否解决了你的问题。如果您仍然需要帮助,请发表评论。 @alxlives 这一切似乎都奏效了。该应用已提交审核。 【参考方案1】:

这是为什么?

这通常发生在 xCode 无法创建用于分发的有效存档时,因此它只是在管理器的“其他项目”中创建为“通用 Xcode 存档”。

有问题吗?

是的,因为您无法将其提交到 Apple Store Connect。您不能打包通用档案,也不能提交它们以供审核。

如果我可以改变这一点,如何改变?

首先,我们需要检查项目设置:

Target &gt; Manage Schemes... 中检查您当前的目标是否是一个有效的项目并选择了Shared 标志

Target &gt; Edit Scheme... 中检查目标是否是唯一启用存档的目标。还要检查分析和存档选项卡是否在构建配置中选择了发布

Product &gt; AnalyzeShift + command + B)中,检查是否没有错误。您可以在导航器面板上的最后一个图标中访问报告:

我检查了this link 上的所有 2 个投票答案,它们大多涵盖了所有可能的解决方案,但我想再次检查 Apple's support page troubleshoot:

1) 您的存档包含头文件。

如果您使用的是静态库,请检查是否存在 Headers 构建阶段。如果是这样,请删除此阶段,将Copy Files build phase 添加到您的库中,并使用它来导出您的头文件。

2) 您的存档包含静态库或框架。

在这种情况下,库和框架需要将标志 skip install 设置为 YES

然后尝试再次存档。

如果没有任何解决方案有效,则有一个workaround here,它包括手动修改存档.plist 文件并添加缺失的信息。可以访问:

归档您的项目 组织者将显示一个通用 Xcode 存档 右键单击,在查找器中显示 右键单击,显示包内容 在 XML 编辑器中打开 Info.plist 文件

您的有效.plist 文件如下所示:

只需将 PASTE_YOUR_BUNDLE_IDENTIFIER_HERE 替换为您的包标识符, PASTE_YOUR_CERTIFICATE_NAME_HERE 带有您的证书名称,PASTE_YOUR_CERTIFICATE_ID_HERE 带有您的证书 ID,PASTE_YOUR_TEAM_ID_HERE 带有您的团队 ID。

<?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>ApplicationProperties</key>
    <dict>
        <key>ApplicationPath</key>
        <string>Applications/FinalAppPrj.app</string>
        <key>CFBundleIdentifier</key>
        <string>PASTE_YOUR_BUNDLE_IDENTIFIER_HERE</string>
        <key>CFBundleShortVersionString</key>
        <string>1.0</string>
        <key>CFBundleVersion</key>
        <string>1</string>
        <key>SigningIdentity</key>
        <string>iPhone Distribution: PASTE_YOUR_CERTIFICATE_NAME_HERE (PASTE_YOUR_CERTIFICATE_ID_HERE)</string>
        <key>Team</key>
        <string>PASTE_YOUR_TEAM_ID_HERE</string>
    </dict>
    <key>ArchiveVersion</key>
    <integer>2</integer>
    <key>CreationDate</key>
    <date>2019-09-01T20:47:53Z</date>
    <key>Name</key>
    <string>FinalAppPrj</string>
    <key>SchemeName</key>
    <string>FinalAppPrj</string>
</dict>
</plist>

要查看证书名称和 ID,最简单的方法是打开 Keychain Access.app(Mac Finder &gt; Applications &gt; Utilities &gt; Keychain Access.app),找到证书(您可以通过文本“分发”进行过滤)并查看其详细信息。绿色标记的是名称,红色标记的是括号之间的ID。

然后关闭并重新打开 xCode。在Window &gt; Organizer,如果归档在 ios Apps 下,那么您可以验证和分发应用程序。

编辑

要添加 iOS 分发证书,请在 xCode 中单击 xCode &gt; Preferences &gt; Accounts &gt; 选择团队并单击 Manage Certificates... 。在Plus button 上,您应该会看到 iOS Distribution:

将此证书添加到项目中,检查钥匙串是否已添加并将其指向 .plist 文件。

当您使用签名团队时,您还需要将团队添加到 .plist。我用所需的条目更新了 .plist 文件。

【讨论】:

***.com/questions/32524011/… 用于此选项。最后一步说将此 xml 添加到该部分...我看到我添加的 xml 有问题我在哪里添加它? 在第一个 键中,您需要 ApplicationProperties 键及其属性 。尝试复制我的有效 .plist 文件并替换 > 标签 我用你上面的 xml 尝试了所有这些,因为我不知道如何转换它......没有工作。 你知道你的包标识符、证书名称和证书ID吗? 这里不用贴,只是想知道你有没有资料【参考方案2】:

我尝试了@alxlives 所说的所有内容,但没有帮助。最后我解决了我的问题:

重启mac 更新嵌入到我的项目 xxx.framework 文件中 将 cocoapods 从 1.8.4 更新到 1.9.1 并重新安装 pods

【讨论】:

您究竟是如何重新安装 pod 的?您指的是“更新我的项目 xxx.framework 文件中嵌入的内容”? @AndreiF pod deintegrate &amp;&amp; pod install + 迦太基更新。 好的,谢谢。我尝试了一切,包括可可缓存删除,没有运气。唯一有效的是手动更改存档中的 Info.plist,并在上传之前重新启动 Xcode,但这只是一个可恶的 - ***.com/questions/64896305/… - 如果你们有其他想法......【参考方案3】:

对我来说,这发生在 Xcode 12.5.1 中,项目中有多个带有扩展的目标。我不得不取消勾选其他带有扩展名的目标的存档。然后再次开始归档以直接分发给 Apple。转到Edit Scheme... 并取消勾选。不过,这在以前不是必需的。

【讨论】:

以上是关于Xcode 创建通用 Xcode 存档而不是 iOS App Archive?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 xcode 中生成 iOS App 存档

为通用 iOS 设备创建产品存档时出现 SDWebImage 错误

Xcode iOS 发行版成功创建存档但存档为空 - 为啥?

Xcode 6/iOS - 缺少存档和 Info.plist

为啥应用存档在 iOS、swift、xcode 9.2 中使用自定义框架失败

在没有 Xcode 的情况下创建存档