wake-up-neo.com

IOS-App-Archiv kann nicht in Xcode generiert werden

Ich habe ein Problem beim Generieren eines iOS-App-Archivs aus einer Anwendung. Die Anwendung lässt sich gut kompilieren und funktioniert sogar im Simulator. Jetzt wollte ich einige Ad-hoc-Tests durchführen und kann das iOS-App-Archiv nicht erstellen. Wenn ich auf Product -> Archive klicke, wird ein generisches Xcode-Archiv erstellt. Kann mir jemand helfen. Ich sollte erwähnen, dass ich bereits ein iOS-App-Archiv dieser Anwendung erstellt habe. Es wurde gerade aus irgendeinem Grund angehalten, iOS-Archiv zu erstellen. Danke vielmals.

165
Filip Majernik

Überprüfen Sie die Build-Einstellungen:

  1. Überspringen Sie die Installation mit NEIN für das Hauptziel des Projekts
  2. Die Überspringen-Installation ist JA für Framework-Ziele (Unterprojekte)
  3. In Erstellungsphasen für Unterprojekte muss sich Copy Headers in Project befinden, nicht in Public (gilt nicht für das Erstellen statischer Bibliotheken)
  4. Installationsverzeichnis unter Bereitstellung ist gültig (beispielsweise/Applications)
298
Alex L

Dies kann passieren, wenn Sie ein Framework/eine Bibliothek hinzugefügt haben ... Sie müssen die Target-> Build-Einstellungen dieser Bibliothek bearbeiten und die Einstellung 'Skip Install' auf 'Yes' setzen. Bei der erneuten Archivierung sollte XCode erneut ein 'iOS App Archive' und nicht ein 'generisches Xcode-Archiv' erstellen.

74
delany

Zusätzlich zu Skip Install to Yes und falls Sie ein anderes lib/framwork-Projekt in Ihrem App-Projekt geöffnet haben, müssen Sie die Header (falls vorhanden) von public nach project verschieben. in der Build-Phase / Kopfzeilen kopieren .

build phase of your lib/framwork target

61
ebtokyo

Ich habe folgendes getan, damit es für mich funktioniert:

  1. Ich besaß eine statische Three20-Bibliothek. Ich verwendete cocoapods , um die Dateien in das Hauptprojekt aufzunehmen
  2. folgte der überspringenden Installation für alle anderen Unterprojekte/statischen Bibliotheken und wechselte die Kopfzeilen von public zu project, wie oben angegeben
  3. am wichtigsten: in jeder Bibliothek, die Ihr Projekt verwendet, gehen Sie zu build phase -> Dateien kopieren und stellen Sie sicher, dass destination von Absolute path in products directory geändert wird. Hinweis: Beachten Sie den folgenden Hinweis, um die Suche einzugrenzen und die Bibliothek zu finden, die diesen Fehler verursacht.

und das war es! 

hint:, um sich ein Bild von den fehlerhaften Dateien zu machen, die dazu führen, dass Ihr Archiv eine Archivdatei anstelle eines ipa erstellt.

  1. Wählen Sie das Archiv aus und klicken Sie auf die Schaltfläche Verteilen. 
  2. Wählen Sie die Option "Save Built Products" aus. 
  3. Klicken Sie auf Weiter und Speichern. 
  4. Durchsuchen Sie das erstellte Verzeichnis im Finder. 
  5. Das Unterverzeichnis 'Bibliotheken' identifiziert die Bibliotheken, die Sie benötigen, um die Installation überspringen auf Ja zu setzen. 
  6. in einigen Fällen identifiziert usr/local/include die Überträger-Header-Dateien, die Sie zum Verschieben von "Öffentlich" in "Projekt" benötigen, oder die Dateien, die Sie vom absoluten Pfad in das Produktverzeichnis ändern müssen (oder sogar die Dateien, die Sie vergessen haben, um die Installation mit "Ja" zu markieren). Dieses Verzeichnis (z. B. usr/local/include) ist jedoch abhängig von der Verzeichnisstruktur Ihrer Sublibrary. In vielen Fällen ... sehen Sie all die Dateien, die unter Dateien kopieren in Schritt 3 oben aufgeführt sind. Wenn Sie sie hier finden, haben Sie eine eindeutige Antwort auf die Ursache Ihres Problems.

Update zum Hinweis:, um das Leben noch einfacher zu gestalten. Welche Dateien auch immer unter Schritt 4 in Hinweis oben angezeigt werden ... suchen Sie einfach in der globalen Suche von Xcode danach Ergebnisse für das, was Sie wollen. Zum Beispiel war dies der Inhalt meines Ordners (den oben genannten Hinweisen folgend):

enter image description here

Ich könnte also sagen, dass es etwas mit den Bibliotheken crypto und ssl zu tun hat. 

enter image description here

mir wurde klar, dass ich vergessen habe, die Installation von Skip auf yes zu setzen.

43
abbood

Wenn Sie das Archiv exportieren, öffnen Sie es und sehen Sie /urs/local/include in Products. Versuchen Sie diesen Vorschlag :

In jedem Pod wird unter PackagingPrivate Headers Folder Path und Public Headers Folder Path auf /usr/local/include gesetzt. Wenn ich sie lösche, bekomme ich ein gültiges Archiv.

enter image description here

Nach einem Upgrade meiner React Native-App auf 0.11.0, Xcode 7 und CocoaPods 0.39.0.beta.4 für mich gearbeitet.

20
Josh Habdas

Wenn Sie CocoaPods sowie WatchKit oder Today Extension verwenden, gibt es ein offenes issue auf dem CocoaPods-Repo, in dem das mögliche Problem beschrieben wird.

Die solution bestand für mich darin, die Copy Pod Resources-Phase von den WatchKit Extension- und Today Extension-Zielen unter Build Phases zu entfernen. Das Projekt wurde wie erwartet kompiliert und archiviert.

Hoffe das hilft jemandem, das hat mich einen ganzen Tag lang gestopft!

12
rebello95

Wenn eine der obigen Antworten nicht funktioniert, liegt das Problem wahrscheinlich bei cocoaPods. Das neueste Update 0.38.1 hat Dinge für mich durcheinander gebracht, aber dann habe ich auf 0.37.1 heruntergestuft, und die Dinge sind wieder normal. Xcode 6.3.1 verwenden 

Later edit: Das Aktualisieren auf 0.38.2 behebt dies ebenfalls. Weitere Informationen zu den Ursachen dieses Problems finden Sie hier: Cocoapods 0.38.1 konnte kein gültiges Archiv erstellen

10
Ehmad Zubair

Obwohl ich Xcode5 verwende und was für mich die Sortierung betraf, war das Editieren des Build-Schemas - der Versuch, alle oben genannten Vorschläge zu verwenden, half in meinem Fall nicht.

Ich hatte zwei Ziele, beispielsweise "App" und "App FREE". Meine Probleme mit dem generischen Archiv sind beim Versuch der Archivierung der KOSTENLOSEN Version aufgetreten, die ich nach der "normalen" Version der App hinzugefügt habe. In meinem Fall habe ich, als ich das Schema in der Symbolleiste ausgewählt und das Bearbeitungsschema gewählt habe, festgestellt, dass der Build-Abschnitt zwei Ziele hatte, nämlich App und App FREE.

Ich habe alle Spalten für App deaktiviert, nur die Spalten von App FREE wurden aktiviert, und auf OK geklickt. Das nächste Mal, wenn ich Product> Archive wählte, erhielt ich meine App KOSTENLOS anstelle eines generischen Archivs. :)

7
Stephen Watson

Wenn Sie nur ein einziges Projekt haben, ist diese Lösung möglicherweise nützlich. Dieses Problem war aufgetreten, als ich das Ziel dupliziert hatte. Als Ergebnis hatte ich zwei Ziele parallel gebaut. Dies verursachte das Problem. Es wurde ein generisches IOS Archiv erstellt. 

Um die eingebaute Parallelschaltung zu deaktivieren, gehen Sie zu 

  • Schemas verwalten, 
  • Schema bearbeiten, 
  • Bauen, 
  • Entferne das andere Ziel.
6
roman777

Ich habe mehrere Projekte in meinem Arbeitsbereich (GTL, Pods und mein Hauptprojekt) und dies hat bei mir funktioniert: 

Wählen Sie das Projekt aus, es gibt zwei Typen, es gibt das Projekt und dort die Ziele .

Für Projekte, die nicht dein Haupt sind, wie GTL oder PODS:

Projekte:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Ziele:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Für das Hauptprojekt (das normalerweise wie Ihr Produktname bezeichnet wird):

Projekte:

Skip Install = NO
Installation Directory = /Applications

Ziele:

Skip Install = NO
Installation Directory = /Applications

Überprüfen Sie das ios-Implementierungsziel für jedes Projekt und jedes Ziel, um sicherzustellen, dass alle gleich sind.

5
Bryan P

Nach dem Update auf iOS 9 und Xcode 7 hatte ich dieses Problem. Die Lösung von Josh H funktionierte für mich:

In jedem Pod unter Packaging, Private Headers Folder Path und Public Der Ordnerpfad für Header ist auf/usr/local/include festgelegt. Wenn ich sie lösche, dann Ich bekomme ein gültiges Archiv.

Ich habe auch ein Post-Installationsskript für meine Poddatei erstellt, um dies automatisch durchzuführen!

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

Fügen Sie es einfach am Ende Ihrer Pod-Datei hinzu und führen Sie pod install aus.

5
wyzkid207

Ich hatte dieses Problem. In meinem Fall wurde dies dadurch verursacht, dass ein Mac-App-Ziel als Abhängigkeit von der iOS-App beibehalten wurde.

Der Grund dafür war, dass die Mac-App ein Werkzeug war, mit dem Daten für die iOS-App generiert wurden, die dann im Bundle enthalten war.

Ich musste diese Abhängigkeit entfernen und das Tool separat erstellen, bevor ich die iOS-App selbst erstellte.

4
Tomas Andrle

In meinem Szenario bekam ich das fehlerhafte "Generic Archive" erst, nachdem ich anfing, Swift-Code in mein vorwiegend Objective-C-Projekt aufzunehmen. Nach einer großen Fehlerbehebung und Prüfung der Archivdatei, die Xcode ausgespuckt hatte, fiel mir auf, dass sich der Ordner SwiftSupport (mit den erforderlichen Berechtigungen für die Swift-Laufzeit) in meinem Archiv an einer anderen Stelle befand als bei einer brandneuen Swift-Projekt-App von Vanilla Archiv.

Ich habe die Installation Directory-Build-Einstellung gefunden und festgestellt, dass sie in meinem Projekt auf einen benutzerdefinierten Pfad gesetzt wurde. Ich habe es einfach gelöscht (auf den generischen Wert von /Applications gesetzt) ​​und das nächste Build -> Archive, das ich wie erwartet gearbeitet habe, und mir ein richtiges iOS-App-Archiv zur Verfügung gestellt.

TL; DR: Stellen Sie sicher, dass Ihre Build-Einstellung für Installation Directory auf den Standardwert von /Applications gesetzt ist, wenn Sie Swift-Code in Ihre App aufnehmen. Dies gilt insbesondere, wenn Sie mit einer älteren Projektdatei beginnen, die möglicherweise unerwartete Einstellungen für ältere Builds enthält.

4
Ryan Dorshorst

Das hier zu lassen, um andere von der gleichen Reise zu retten. 

Ich habe festgestellt, dass ich die gleiche Erstellungsphase von Copy Pod Resources von einem statischen Bibliotheksziel in meinem Arbeitsbereich entfernen musste.

3
Michael

Ergänzung zur Antwort von Alex L.

Punkt 3. Ändern Sie 'Build Settings' -> 'Public Header Folder Path' in 'include/xxx'.

2
CopperCash

Wenn keiner der oben genannten Punkte Ihnen geholfen hat ... nach langer Zeit .......

Ich habe den Wert in der Info.plist für die Bundle-Version gelöscht weil ich mit Bundle Version Short 1.0 zufrieden war. Schlecht. Tu das nicht.

* Hinweis: Ich habe dies tatsächlich durch Bearbeiten in der Benutzeroberfläche rechts gemacht, ohne zu merken, dass ein leerer Schlüssel in die Info.plist-Datei eingefügt wird. Ich denke, das macht es ungültig. Mein Bundle wurde während der Archivierung als andere Elemente angezeigt und hatte kein Symbol. Ich konnte es nicht überall hochladen.

Dies führt zu ungültigen Werten in der Info.plist. Wenn es sich nicht um ein gültiges Archiv handelt, entpacken Sie ein altes Archiv und legen Sie es in das aktuelle Archiv/überschreiben Sie es und überschreiben Sie es. Sehen Sie nach, ob es das Archiv repariert.

2
ohc192
  1. Gehe zu den Build-Einstellungen und füge hinzu 

    yourAppName/Resources/dist.plist zu den Codesignierungsberechtigungen

  2. Drücken Sie cmd + B mit iOS-Gerät oder einem Real-Gerät , das als Build-Ziel ausgewählt ist

  3. Wenn Sie fertig sind, gehen Sie zum Ordner "Products" und klicken Sie mit der rechten Maustaste auf IhreAppName.app

  4. Wählen Sie "Im Finder anzeigen".

  5. Erstellen Sie einen Ordner mit Name Payload ( Capital "P" )

  6. Kopiere yourAppName in deinen Payload-Ordner

  7. Erstellen Sie eine ZIP aus Ihrem Payload-Ordner

  8. Umbenennen der Zip in yourAppName.ipa

ERLEDIGT

1
LoVo

Nachdem Sie so ziemlich alles versucht haben:

  • Reinigen, Archivieren
  • derivedData löschen, Archiv
  • xcode neu starten (ich habe XCode7 verwendet), Archivieren
  • kombinationen von oben ...

Ich bemerkte dann, dass meine Bootpartition "zu wenig Festplattenspeicher" hatte ... ungefähr 1 GB oder so ... Ich startete neu und erhielt dann etwa 18 GB frei.

Dann öffnete Xcode und Projekt, führte Archiv aus ... und überraschenderweise (nach einer Stunde des Versuchs, ein Archiv zu erstellen) erhielt ich schließlich ein nicht generisches Archiv.

Keine Ahnung, ob es sich um ein Problem mit der freien Festplatte handelt, das das Problem behoben hat, oder einen Neustart des macOS, das das Problem behoben hat, aber es hat bei mir funktioniert.

1
Peter Li

Wenn Sie in Projekt> Ziele> Erstellungsphasen> Zielabhängigkeiten über .xcodeproj-Dateien verfügen, entfernen Sie sie von dort und erstellen Sie dann Ihre ipa. Für mich geht das. Prost

Die Antwort erhalten Sie hier: xcode erstellt ein generisches Xcode-Archiv anstelle von iOS App Archive

1

In meinem Fall hatte ich ein benutzerdefiniertes Skript, in das einige temporäre Dateien kopiert wurden:

${TARGET_BUILD_DIR}/myTempDir

Das heißt, nachdem ich das Archiv untersucht hatte, um seinen Inhalt zu untersuchen, fand ich direkt neben der .app-Datei einen Ordner myTempDir. Nachdem ich das Skript geändert hatte, um es an anderer Stelle zu speichern, wurden die Dinge sortiert.

0
Eli

In meinem Fall funktionierte keine der anderen 30+ Antworten. Der Speicherort für Archive (Einstellungen -> Speicherorte) wurde auf einen benutzerdefinierten Pfad festgelegt, der auf unseren Server verweist (Windows Server 2008, falls dies einen Unterschied macht). 

Nachdem ich den Speicherort auf dem lokalen Computer auf den Standardwert zurückgesetzt habe, wurde ein normales iOS-App-Archiv erstellt. Ich bin nicht sicher, warum das funktioniert, aber ich hoffe, es hilft auch jemand anderem.

Jetzt müssen wir die .xcarchive -Dateien manuell speichern, um sie abzuspeichern, haben aber zumindest keine Probleme mit generischen Archiven.

0
alera729

Ich habe diesen Fehler durch nur das App-Projekt öffnen in XCode gelöst, dh. kein Arbeitsbereich wird geöffnet mit der Anwendung und anderen Projekten/Bibliotheken/Frameworks.

Nachdem ich zwei separate Projekte, ein Framework oder eine gemeinsam genutzte Bibliothek und eine iOS-Anwendung hatte, musste ich zwei verschiedene XCode-Fenster öffnen. Dazu wurde jeweils die Datei .xcodeproj anstelle des üblichen .xcworkspace geöffnet Baue jedes Stück vor.

Ein netter Nebeneffekt ist, dass XCode nicht mehr jedes Ziel jedes Projekts nach einem Clean neu erstellt, was zu verkürzten Erstellungszeiten führt.

Background: Ich erstelle ein Open Source SDK und eine Demo-Anwendung für iOS. Ich hatte beide in einem einzigen Arbeitsbereich geöffnet. Wenn Sie Skip install auf YES auf den SDK-Zielen setzen, wird verhindert, dass ein Archiv erstellt wird, da es leer sein würde Möglichkeit. Die Verwendung von Project anstelle von Public - Headern würde dazu führen, dass die zu verteilenden Header-Dateien in einem Archiv fehlen, sodass dies auch keine Option war.

0
ofavre

In meinem Fall hatte ich einige Dateien in den Copy-Dateien. Ich habe sie einfach entfernt und alles hat gut funktioniert und ich habe das iOS App Archive erreicht. Gehen Sie zu Build Phases-> Copy Files und löschen Sie die Dateien. Ich hoffe, das löst dein Problem. :)

0
S_J

Dies ist für die armen Seelen wie ich, für die keine dieser Lösungen funktionierte, bei denen sogar eine neue Einzelansicht-Anwendung fehlerfrei erstellt wird, die Archivierung jedoch fehlschlägt.

Gehen Sie zum Archivpfad (Verfügbar in Xcode -> Einstellungen -> Speicherorte -> Archivpfad) und löschen Sie Ordner an problematischen Tagen!

Verdammt du Apple!

0
Dhilip

Denn es war, weil ich in einem Arbeitsbereich arbeitete. Das Projekt wurde archiviert, aber im Organizer-Fenster würde ich neu angezeigt. Ich habe den Arbeitsbereich geschlossen und das Projekt selbst geöffnet. Das Archiv wurde erstellt im organizer geöffnet ... hoffe es hilft.

Ein weiterer möglicher Grund dafür ist, dass in "Zielabhängigkeiten" Verweise auf Projekte für eine andere Plattform vorhanden sind. In meinem speziellen Fall arbeitete ich an einem Projekt, das Code für OSX und iOS freigibt. In einem der iOS-Ziele hatte ich versehentlich ein OSX-Ziel als Abhängigkeit hinzugefügt.

0
miguelSantirso

Eine weitere Lösung, da all das oben für mich nicht funktionierte ...

Der User Header Search Paths (ich denke, Header Search Paths würde genauso elegant funktionieren) wurde in "$(BUILT_PRODUCTS_DIR)/BlocksKit" geändert.

Hintergrund :

In BlockKit haben die Entwickler die Kopfzeilen im Hauptprojekt anders strukturiert als bei der Bereitstellung. Sie können also nicht auf die Header im Projekt verweisen, sondern müssen auf die im Build-Verzeichnis kopierten Header verweisen.

0
Mazyod

Bei Verwendung von Xcode 7 mit cocoapods v.0.38.2. Entfernen Sie copy pod resources von Ihrem heutigen Erweiterungsziel.

 enter image description here

0
CoderPug

Die Art und Weise, wie dies für mich in (Xcode 5) funktioniert hat, hatte zwei Ziele. Wenn Sie das Schema bearbeitet haben, sehen Sie im linken Bereich des Schema-Editors [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] Im BUILD-Fenster sehen Sie Ihre Projektziele in einer Liste. Ganz rechts sehen Sie die ARCHIVE-Auswahl. Vergewissern Sie sich, dass nur ein Ziel für die Archivierung ausgewählt ist.

Ich hatte 2 meiner Ziele in meinem Projekt ausgewählt, ich habe nur das Ziel überprüft, das ich für das Produkt wollte, und es hat funktioniert!

0
dexyjones

In meinem Fall hatte ich zwei Ziele (Target1 und Target2) und das erste davon konnte in der "iOS-App" archiviert werden, jedoch an zweiter Stelle nur unter "Andere Elemente". Der schnellste Weg, dieses Problem zu lösen, bestand für mich darin, mein Target2 durch eine Kopie von Target1 durch die folgenden Schritte zu ersetzen:
1. Benennen Sie Target2 in Target2_old um
2. Erstellen Sie eine Kopie von Target1 und benennen Sie sie in Target2 ..__ um.
3. Ändern Sie den Link zur richtigen .plist-Datei (von einem älteren Ziel) für das neue Target2 und markieren Sie "Zielmitgliedschaft" in Ihren Klassen .
4. Öffnen Sie "Schemas verwalten ...", löschen Sie das Schema für Target2_old und fügen Sie ein neues Schema für das neue Target2 .__ hinzu.
5. Wählen Sie dieses neue Schema und dann Produkt -> Archiv

0
Pavel Kataykin

In meinem Fall musste ich FMDB und BlocksKit in statische Bibliotheken verschieben. Bisher wurden sie als Unterprojekte gebaut. Denken Sie daran, dass Sie Lipo verwenden können, um universelle Bibliotheken zu erstellen. Beim Erstellen der Endprodukte wird der Simulatorcode automatisch entfernt.

0
Maciej Swic

Es ist mir in einer App passiert, in der die Version mit einer undefinierten Variablen $ (APP_PRODUCT_VERSION) definiert wurde.

Ich habe die Version definiert und konnte eine iOS-App generieren.

0
Fred

Versuchen Sie, $ (PROJECT_NAME) -Header im Public Headers-Ordnerpfad von Framework Projet festzulegen. Sie müssen die Einstellungen für das Bibliotheksziel erstellen und dann den Pfad für den öffentlichen Header als $ (PROJECT_NAME) -Header bearbeiten. 

0
Inco Mob

Dieses Problem trat auf, nachdem ich ein OS X-Befehlszeilentool zum Projekt meiner iOS-App hinzugefügt hatte. Die Option "Überspringen" wurde für das Ziel des Befehlszeilentools standardmäßig auf "Nein" gesetzt. Da Sie eine OS X-Binärdatei offensichtlich nicht auf einem iOS-Gerät installieren können, wurde die Archivierung standardmäßig in einem generischen Xcode-Archiv erstellt. Wenn Sie für dieses Ziel "Skip Install" auf "YES" setzen, wurde das Problem behoben.

0
Brian Stewart

Ich bin auf ein ähnliches Problem gestoßen, aber in einer WatchKit-App ohne Pods. Skip Install wurde für die iOS-App korrekt auf NO gesetzt, für die WatchKit-App jedoch falsch auf NO gesetzt. 

Wenn Sie Skip Install in YES für die WatchKit-App ändern (aber NEIN für die iOS-App beibehalten), wurde das Problem behoben, und Xcode generierte ein iOS-App-Archiv anstelle eines generischen Xcode-Archivs.

0
StevenHolland

Um gründlich zu sein, poste ich meine Lösung.

Bei Xcode 5.1.1 (5B1008) ist beim Erstellen eines Archivs eines iOS-Projekts genau das gleiche Problem aufgetreten. Keiner der obigen Vorschläge behebte das Problem, und die meisten waren irrelevant (ich hatte keine Frameworks hinzugefügt und hatte keine öffentlichen Einträge im Abschnitt "Header kopieren" in meinen Erstellungsphasen).

In meinem Fall bestand das Problem darin, einfach mein Projekt zu schließen, alle zuvor erstellten Archive zu löschen, zu Voreinstellungen> Konten zu gehen, mein Entwicklerkonto zu löschen, Xcode zu beenden, neu zu starten, meinen Entwicklerkonto erneut hinzuzufügen und den Archivierungsprozess zu starten nochmal. Dies hat mein Problem sofort behoben.

0
Ade Ward

In meinem Fall wurde das Entfernen eines Unterstrichs aus dem Zielnamen behoben.

Nicht sicher, ob es der eigentliche Unterstrich oder der Namenswechsel war, der den Trick geleistet hat.

0
Mathijs