简体   繁体   中英

Xcode creating generic Xcode archive instead of iOS App Archive?

I'm trying to upload my app to app store connect and I am unable to validate my app. I also see that identifier and other info is not showing up. Why is this? Is it a problem? If I can change this, how? [![enter image description here][1]][1]

I have tried the things found in [here][2] that where voted 2+.

Incase its relevant: I am using a project with cocoapods

XML for 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>

[![enter image description here][3]][3]

Why is this?

This usually happens when xCode can't create a valid archive for distribution, so it just gets created in "Other Items" in the Organizer as a "Generic Xcode Archive".

Is it a problem?

Yes, because you will not be able to submit it to Apple Store Connect. You cannot package generic archives nor submit them for review.

If I can change this, how?

First of all, we need to check the project setup:

  • In Target > Manage Schemes... check if your current target is a valid project with the Shared flag selected

在此处输入图片说明

  • In Target > Edit Scheme... check if the target is the only one with Archive enabled. Also check if the Analyze and the Archive tabs have Release selected in Build Configuration

在此处输入图片说明

  • In Product > Analyze ( Shift + command + B ), check if there are no errors. You can access the report in the last icon on the navigator panel:

在此处输入图片说明

I checked all the 2 vote answers on this link , and they mostly cover all the possible solutions, but I would like to double check the Apple's support page troubleshoot :

1) Your archive contains header files.

If you are using a static library, check if there is a Headers build phase. If so, delete this phase, add a Copy Files build phase to your library, and use it to export your header files.

在此处输入图片说明

2) Your archive contains static libraries or frameworks.

In this case, the libraries and frameworks need to have the flag skip install set to YES

在此处输入图片说明

Then try to archive it again.

If none of the solutions worked, there is a workaround here that consists in modifying the archive .plist file manually and adding the missing information. It can be accessed:

  • Archive your project
  • Organizer will show a Generic Xcode Archive
  • Right Click, Show in finder
  • Right Click, Show Package Contents
  • Open the Info.plist file in a XML editor

Your valid .plist file would be like this:

Just replace PASTE_YOUR_BUNDLE_IDENTIFIER_HERE with your bundle identifier, PASTE_YOUR_CERTIFICATE_NAME_HERE with your certificate name, PASTE_YOUR_CERTIFICATE_ID_HERE with your certificate id and PASTE_YOUR_TEAM_ID_HERE with your team 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>

To check the certificate name and ID, the easiest way is to open Keychain Access.app (Mac Finder > Applications > Utilities > Keychain Access.app ), find the certificate (you can filter by the text "Distribution") and see its details. Marked in green is the name, marked in red is the ID between parenthesis.

在此处输入图片说明

Then close and reopen xCode. In Window > Organizer , if the archive is under iOS Apps, then you can Validate and Distribute the app.

Edit

To add an iOS Distribution Certificate, in xCode, click on xCode > Preferences > Accounts > Select the team and click on Manage Certificates... . On the Plus button you should see iOS Distribution:

在此处输入图片说明

Add this certificate to the project, check in the keychain if is added there and point it into the .plist file.

As you are using a signing team, you also need to add the team to the .plist. I updated the .plist file with the needed entry.

I tried all what @alxlives said, but it didn't help. Finally i solved my problem with:

  • Rebooting mac
  • Updating embedded in my project xxx.framework file
  • Updating cocoapods to 1.9.1 from 1.8.4 and reinstalling pods

For me this happened with Xcode 12.5.1 with multiple targets with extensions in the project. I had to untick archive for other target with extension. Then start archive again to get the direct distribution to Apple. Goto Edit Scheme... and untick. This was not required previously though.

在此处输入图片说明

This is a niche answer, but there appear to be problems with Xcode 13.4.1 & 13.4.2 that cause the archive to be generic and the 'Validate app' button disabled.

Build errors were noted on the Shopify Github for 13.4.1 and I noted the problem for building a Qt app using 13.4.2

Upgrading to Xcode 14.2 resolved the issue for me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM