Xcode 创建通用 Xcode 存档而不是 iOS App 存档?
Xcode creating generic Xcode archive instead of iOS App Archive?
我正在尝试将我的应用上传到应用商店连接,但我无法验证我的应用。我还看到标识符和其他信息没有显示。 这是为什么?这是个问题吗?如果我可以改变这个,怎么办?
[![在此处输入图片描述][1]][1]
我已经尝试了在 [此处][2] 中找到的投票 2+ 的东西。
Incase 相关:我正在使用一个带有 cocoapods 的项目
XML 对于 info.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>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]
Why is this?
这通常发生在 xCode 无法创建有效的分发存档时,因此它只是在管理器的 "Other Items" 中创建为 "Generic Xcode Archive"。
Is it a problem?
是的,因为您将无法将其提交到 Apple Store Connect。您不能打包通用档案,也不能提交它们以供审核。
If I can change this, how?
首先,我们需要检查项目设置:
- 在
Target > Manage Schemes...
中检查您当前的目标是否是一个有效的项目并选择了 Shared
标志
- 在
Target > Edit Scheme...
中检查目标是否是唯一启用存档的目标。还要检查 Analyze 和 Archive 选项卡是否在 Build Configuration 中选择了 Release
- 在
Product > Analyze
(Shift + command + B
)中检查是否有错误。您可以在导航器面板的最后一个图标中访问报告:
我检查了 this link, and they mostly cover all the possible solutions, but I would like to double check the Apple's support page troubleshoot 上的所有 2 个投票答案:
1) 您的存档包含头文件。
如果您使用的是静态库,请检查是否有 Headers 构建阶段。如果是这样,请删除此阶段,将 Copy Files build phase
添加到您的库中,并使用它来导出您的头文件。
2) 您的存档包含静态库或框架。
在这种情况下,库和框架需要将标志 skip install
设置为 YES
然后尝试再次存档。
如果 none 的解决方案有效,则有一个 包括手动修改存档 .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
(MacFinder > Applications > Utilities > Keychain Access.app
),找到证书(可以按文本过滤"Distribution") 并查看其详细信息。绿色标出的是名字,红色标出的是括号内的ID。
然后关闭并重新打开 xCode。在 Window > Organizer
中,如果存档位于 iOS 应用程序下,则您可以验证和分发该应用程序。
编辑
要添加 iOS 分发证书,请在 xCode 中单击 xCode > Preferences > Accounts >
Select 团队,然后单击 Manage Certificates...
。在 Plus button
你应该看到 iOS 分布:
将此证书添加到项目中,检查钥匙串是否已添加并将其指向 .plist 文件。
由于您使用的是签名团队,因此您还需要将团队添加到.plist 中。我用所需的条目更新了 .plist 文件。
@alxlives 所说的我都试过了,但没有用。最后我解决了我的问题:
- 正在重启mac
- 更新嵌入到我的项目xxx.framework文件
- 正在将 cocoapods 从 1.8.4 更新到 1.9.1 并重新安装 pods
对我来说,这发生在 Xcode 12.5.1 中,在项目中有多个目标和扩展。我不得不取消选中带有扩展名的其他目标的存档。然后再次开始存档以直接分发给 Apple。转到 Edit Scheme...
并取消勾选。不过以前不需要这样做。
我正在尝试将我的应用上传到应用商店连接,但我无法验证我的应用。我还看到标识符和其他信息没有显示。 这是为什么?这是个问题吗?如果我可以改变这个,怎么办? [![在此处输入图片描述][1]][1]
我已经尝试了在 [此处][2] 中找到的投票 2+ 的东西。
Incase 相关:我正在使用一个带有 cocoapods 的项目
XML 对于 info.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>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]
Why is this?
这通常发生在 xCode 无法创建有效的分发存档时,因此它只是在管理器的 "Other Items" 中创建为 "Generic Xcode Archive"。
Is it a problem?
是的,因为您将无法将其提交到 Apple Store Connect。您不能打包通用档案,也不能提交它们以供审核。
If I can change this, how?
首先,我们需要检查项目设置:
- 在
Target > Manage Schemes...
中检查您当前的目标是否是一个有效的项目并选择了Shared
标志
- 在
Target > Edit Scheme...
中检查目标是否是唯一启用存档的目标。还要检查 Analyze 和 Archive 选项卡是否在 Build Configuration 中选择了 Release
- 在
Product > Analyze
(Shift + command + B
)中检查是否有错误。您可以在导航器面板的最后一个图标中访问报告:
我检查了 this link, and they mostly cover all the possible solutions, but I would like to double check the Apple's support page troubleshoot 上的所有 2 个投票答案:
1) 您的存档包含头文件。
如果您使用的是静态库,请检查是否有 Headers 构建阶段。如果是这样,请删除此阶段,将 Copy Files build phase
添加到您的库中,并使用它来导出您的头文件。
2) 您的存档包含静态库或框架。
在这种情况下,库和框架需要将标志 skip install
设置为 YES
然后尝试再次存档。
如果 none 的解决方案有效,则有一个 .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
(MacFinder > Applications > Utilities > Keychain Access.app
),找到证书(可以按文本过滤"Distribution") 并查看其详细信息。绿色标出的是名字,红色标出的是括号内的ID。
然后关闭并重新打开 xCode。在 Window > Organizer
中,如果存档位于 iOS 应用程序下,则您可以验证和分发该应用程序。
编辑
要添加 iOS 分发证书,请在 xCode 中单击 xCode > Preferences > Accounts >
Select 团队,然后单击 Manage Certificates...
。在 Plus button
你应该看到 iOS 分布:
将此证书添加到项目中,检查钥匙串是否已添加并将其指向 .plist 文件。
由于您使用的是签名团队,因此您还需要将团队添加到.plist 中。我用所需的条目更新了 .plist 文件。
@alxlives 所说的我都试过了,但没有用。最后我解决了我的问题:
- 正在重启mac
- 更新嵌入到我的项目xxx.framework文件
- 正在将 cocoapods 从 1.8.4 更新到 1.9.1 并重新安装 pods
对我来说,这发生在 Xcode 12.5.1 中,在项目中有多个目标和扩展。我不得不取消选中带有扩展名的其他目标的存档。然后再次开始存档以直接分发给 Apple。转到 Edit Scheme...
并取消勾选。不过以前不需要这样做。