Ich habe ein Problem beim Generieren eines iOS-App-Archivs aus einer Anwendung. Die Anwendung kompiliert einwandfrei und funktioniert sogar im Simulator. Jetzt wollte ich einige Ad-hoc-Tests durchführen und kann das iOS-App-Archiv nicht generieren. Wenn ich auf Produkt -> Archiv 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. Die Generierung des iOS-Archivs wurde aus irgendeinem Grund gestoppt. Vielen Dank.
175
xcodebuild
. Die Lösung besteht darin, das Ziel anzugeben:xcodebuild -destination generic/platform=iOS
Antworten:
Überprüfen Sie die Build-Einstellungen:
quelle
/usr/local/include
. Wenn Sie eine statische Bibliothek erstellen, müssen die Header öffentlich sein. Daher ist es korrekter, wenn # 3 den Ordnerpfad für öffentliche Header in einen sinnvolleren Pfad ändern sollinclude/$(TARGET_NAME)
. @CopperCash vermerkt dies in einer Antwort unten.Dies kann passieren, wenn Sie ein Framework / eine Bibliothek hinzugefügt haben. Sie müssen die Ziel-> Build-Einstellungen dieser Bibliothek bearbeiten und die Einstellung "Installation überspringen" auf "Ja" setzen. Wenn Sie erneut archivieren, sollte XCode erneut ein "iOS App Archive" erstellen und kein "generisches Xcode-Archiv".
quelle
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 Header (falls vorhanden) in der Build Phase / Copy Headers von public in project verschieben .
quelle
Ich habe Folgendes getan, damit es für mich funktioniert:
Absolute path
nach geändert wirdproducts directory
. Hinweis: Lesen Sie den folgenden Hinweis, um Ihre Suche einzugrenzen und die Bibliothek zu finden, die diesen Fehler verursacht.und das war es!
Hinweis: Um eine Vorstellung von den fehlerhaften Dateien zu erhalten, die dazu führen, dass Ihr Archiv eine Archivdatei anstelle einer IPA erstellt, gehen Sie folgendermaßen vor:
usr/local/include
werden die Header-Dateien des Täters identifiziert, die Sie vom öffentlichen zum Projekt verschieben müssen, oder die Dateien, die Sie vom absoluten Pfad zum Produktverzeichnis ändern müssen (oder sogar die Dateien, die Sie vergessen haben, das Flag "Überspringen installieren" auf "Ja" zu setzen). Dieses Verzeichnis (dh usr / local / include) hängt jedoch von der Struktur Ihres Unterbibliotheksverzeichnisses ab. In vielen Fällen werden alle hier aufgeführten Schritte unter "Dateien kopieren" in Schritt 3 aufgelistet. Wenn Sie sie hier finden, haben Sie eine eindeutige Antwort auf die Ursache Ihres Problems.Update auf Hinweis: Um das Leben noch einfacher zu machen. Welche Dateien auch immer unter Schritt 4 im obigen Hinweis erscheinen . Suchen Sie einfach bei der globalen Suche nach xcode danach. Sie sollten sofort Ergebnisse für das erhalten, was Sie möchten. Zum Beispiel Dies war der Inhalt meines Ordners (gemäß den Schritten im obigen Hinweis):
Also habe ich es hat sagen könnte , etwas zu tun mit dem Krypto und ssl Bibliotheken .. für sie die Suche:
hat mir klar gemacht, dass ich vergessen habe, die überspringende Installation auf Ja zu setzen.
quelle
./usr/local/include
.Wenn Sie das Archiv exportieren, öffnen Sie es und sehen Sie
/urs/local/include
unter Produkte, versuchen Sie diesen Vorschlag :Arbeitete für mich nach dem Upgrade meiner React Native-App auf
0.11.0
Xcode7
und CocoaPods0.39.0.beta.4
.quelle
Wenn Sie CocoaPods sowie WatchKit oder eine Today-Erweiterung verwenden, gibt es im CocoaPods-Repo ein offenes Problem , in dem Ihr Problem erläutert wird.
Die Lösung für mich bestand darin, die
Copy Pod Resources
Phase aus den Zielen WatchKit Extension und Today Extension unter zu entfernenBuild Phases
. Das Projekt wurde wie erwartet kompiliert und archiviert, sobald ich dies getan habe.Hoffe das hilft jemandem, das hat mich einen ganzen Tag lang verblüfft!
quelle
Wenn eine der oben genannten Antworten nicht funktioniert, liegt Ihr Problem wahrscheinlich bei
cocoaPods
. Das neueste Update hat die0.38.1
Dinge für mich durcheinander gebracht, aber dann habe ich ein Downgrade auf durchgeführt0.37.1
und die Dinge haben sich wieder normalisiert. Verwenden vonXcode 6.3.1
Später bearbeiten: Durch Aktualisieren auf
0.38.2
wird dies ebenfalls behoben. Weitere Informationen zu diesem Problem finden Sie hier: Cocoapods 0.38.1 konnte kein gültiges Archiv erstellenquelle
0.38.2
und habe immer noch Probleme. Bist du auf Xcode 7?/Library/Frameworks
. Ich denke, es könnte etwas damit zu tun haben, dass Googles Kakaofrüchte nicht als dynamisches Framework erstellt werden. Es klingt ähnlich wie github.com/CocoaPods/CocoaPods/issues/3889Obwohl ich Xcode5 verwende und es für mich sortiert habe, war das Bearbeiten des Build-Schemas - das Ausprobieren aller oben genannten Vorschläge, die zutreffend waren, hat in meinem Fall nicht geholfen.
Ich hatte zwei Ziele, sagen wir "App" und "App FREE". Meine Probleme mit dem generischen Archiv sind aufgetreten, als ich versucht habe, die KOSTENLOSE Version zu archivieren, die ich nach der "normalen" Version der App hinzugefügt habe. In meinem Fall, als ich das Schema in der Symbolleiste auswählte und Schema bearbeiten auswählte ... sah ich, dass der Abschnitt Erstellen zwei Ziele hatte, nämlich App und App FREE.
Ich habe alle Spalten für App deaktiviert, nur die Spalten von App FREE aktiviert gelassen und auf OK geklickt. Wenn ich das nächste Mal Produkt> Archiv gewählt habe, habe ich meine App KOSTENLOS anstelle eines generischen Archivs erhalten. :) :)
quelle
Wenn Sie nur ein einziges Projekt haben, ist diese Lösung möglicherweise hilfreich. Dieses Problem war aufgetreten, als ich das Ziel dupliziert habe. Als Ergebnis ließ ich zwei Ziele parallel bauen. Dies verursachte das Problem. Das generische IOS-Archiv wurde erstellt.
Um die gebaute Parallele auszuschalten, gehen Sie zu
quelle
Ich hatte dieses Problem nach dem Update auf iOS 9 und Xcode 7. Die Lösung von Josh H funktionierte für mich:
Ich habe auch ein Post-Installationsskript für mein Podfile erstellt, um dies automatisch zu tun!
Fügen Sie es einfach unten in Ihr Podfile ein und führen Sie es aus
pod install
quelle
Ich habe mehrere Projekte in meinem Arbeitsbereich (GTL, Pods und mein Hauptprojekt) und dies hat für mich funktioniert:
Wählen Sie das Projekt aus, es gibt zwei Typen, das Projekt und die Ziele .
Für Projekte, die nicht Ihr Hauptziel sind
GTL
oderPODS
:Projekte:
Ziele:
Für das Hauptprojekt (das normalerweise den gleichen Namen wie Ihr Produktname hat):
Projekte:
Ziele:
Überprüfen Sie das ios-Bereitstellungsziel für jedes Projekt und jedes Ziel, um sicherzustellen, dass alle identisch sind.
quelle
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 Tool war, mit dem einige Daten für die iOS-App generiert wurden, die dann im Bundle enthalten waren.
Ich musste diese Abhängigkeit entfernen und das Tool separat erstellen, bevor ich die iOS-App selbst erstellen konnte.
quelle
In meinem Szenario erhielt ich das fehlerhafte "Generic Archive" erst, nachdem ich begonnen hatte, Swift-Code in mein überwiegend Objective-C-Projekt aufzunehmen. Nach vielen
SwiftSupport
Fehlern bei der Fehlerbehebung und Überprüfung der Archivdatei, die Xcode ausspuckte, stellte ich fest, dass sich der Ordner (mit den erforderlichen Dylibs für die Swift-Laufzeit) an einer anderen Stelle in meinem Archiv befand als in einem brandneuen Vanilla-Projekt-App-Archiv von Vanilla .Ich habe die
Installation Directory
Build-Einstellung gefunden und festgestellt, dass sie in meinem Projekt auf einen benutzerdefinierten Pfad festgelegt wurde. Ich habe es einfach gelöscht (auf den generischen Wert von gesetzt/Applications
) und beim nächsten Build -> Archive habe ich wie erwartet gearbeitet und mir ein richtiges iOS App Archive gegeben.TL; DR:
Installation Directory
Stellen Sie sicher , dass Ihre Build-Einstellung auf den Standardwert eingestellt ist/Applications
, wenn Sie Swift-Code in Ihre App aufnehmen, insbesondere wenn Sie mit einer älteren Projektdatei beginnen, die möglicherweise unerwartete Legacy-Build-Einstellungen enthält.quelle
Lassen Sie dies hier, um andere von derselben Reise zu retten.
Ich musste dieselbe Erstellungsphase für Copy Pod-Ressourcen auch von einem statischen Bibliotheksziel in meinem Arbeitsbereich entfernen.
quelle
Ergänzung zu Alex Ls Antwort.
Punkt 3. Ändern Sie 'Build Settings' -> 'Public Header Folder Path' in 'include / xxx'.
quelle
Wenn Ihnen keiner der oben genannten Punkte 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 getan, indem ich es in der rechten Benutzeroberfläche bearbeitet habe, ohne zu bemerken, dass ein leerer Schlüssel in die Datei Info.plist eingefügt wird. Ich denke, das macht es ungültig. Mein Bundle wurde während der Archivierung als anderes Element angezeigt und hatte kein Symbol. Ich konnte es nirgendwo hochladen.
Dies führt zu ungültigen Werten in der Info.plist. Wenn es sich nicht um ein gültiges Archiv handelt, versuchen Sie, ein altes Archiv zu entpacken und das aktuelle Archiv zu löschen, und prüfen Sie, ob es beim Neuerstellen des Archivs behoben wird.
quelle
Gehen Sie zu Build Settings und fügen Sie hinzu
yourAppName / Resources / dist.plist zu den Code Signing-Berechtigungen
Drücken Sie cmd + B mit iOS - Gerät oder ein Echt Gerät ausgewählt als Build - Ziel
Wenn Sie fertig sind -> scrollen Sie zum Ordner "Produkte" und klicken Sie mit der rechten Maustaste auf yourAppName.app
Wählen Sie "Im Finder anzeigen"
Erstellen Sie einen Ordner mit Name Payload ( Großbuchstabe "P" )
Kopieren Sie IhrenAppName in Ihren Payload-Ordner
Erstellen Sie eine Zip aus Ihrem Payload-Ordner
Benennen Sie die Zip in yourAppName.ipa um
GETAN
quelle
Nachdem ich so ziemlich alles ausprobiert habe:
Ich bemerkte dann, dass meine Boot-Partition "wenig freien Speicherplatz" hatte ... ungefähr 1 GB oder so. Ich habe neu gestartet und dann ungefähr 18 GB frei bekommen.
Dann öffnete ich Xcode und das Projekt, führte das Archiv durch ... und überraschenderweise (nach einer Stunde des Versuchs, ein Archiv zu erstellen) bekam ich endlich ein nicht generisches Archiv.
Keine Ahnung, ob es sich um ein kostenloses Festplattenproblem handelt, das das Problem behoben hat, oder um einen Neustart des MacOS, mit dem es behoben wurde, aber es hat bei mir funktioniert.
quelle
Wenn Sie unter Projekt> Ziele> Phasen erstellen> Zielabhängigkeiten .xcodeproj-Dateien haben, entfernen Sie diese von dort und erstellen Sie dann Ihr ipa. Für mich geht das. Prost
Hier erhalten Sie eine Antwort: xcode erstellt ein generisches xcode-Archiv anstelle des iOS App-Archivs
quelle
In meinem Fall musste ich sowohl FMDB als auch BlocksKit in statische Bibliotheken verschieben. Zuvor wurden sie als Teilprojekte erstellt. Denken Sie daran, dass Sie mit lipo universelle Bibliotheken erstellen können. Beim Erstellen der Endprodukte wird der Simulatorcode automatisch entfernt.
quelle
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 gemeinsam nutzt. In einem der iOS-Ziele hatte ich versehentlich ein OSX-Ziel als Abhängigkeit hinzugefügt.
quelle
Um gründlich zu sein, veröffentliche ich meine Lösung.
Beim Versuch, ein Archiv eines iOS-Projekts in Xcode 5.1.1 (5B1008) zu erstellen, trat genau das gleiche Problem auf. Keiner der oben genannten Vorschläge behebt das Problem, und die meisten von ihnen waren irrelevant (ich hatte keine Frameworks hinzugefügt und hatte keine öffentlichen Einträge im Abschnitt "Header kopieren" meiner Build-Phasen).
In meinem Fall bestand die Behebung des Problems darin, einfach mein Projekt zu schließen, alle zuvor erstellten Archive zu löschen, zu Einstellungen> Konten zu wechseln, mein Entwicklerkonto zu entfernen, Xcode zu beenden, neu zu starten, mein Entwicklerkonto erneut hinzuzufügen und den Archivierungsprozess zu starten nochmal. Dies hat mein Problem sofort behoben.
quelle
Noch eine Lösung, da all das bei mir nicht funktioniert hat ...
Änderte das
User Header Search Paths
(ich nehme an, esHeader Search Paths
würde genauso elegant funktionieren) in"$(BUILT_PRODUCTS_DIR)/BlocksKit"
.Hintergrund :
In BlockKit haben die Entwickler die Header im Hauptprojekt anders strukturiert als die Struktur bei der Bereitstellung. Sie können also nicht auf die Header im Projekt verweisen und müssen auf die in das Build-Verzeichnis kopierten Header verweisen.
quelle
So funktionierte dies für mich in (Xcode 5) Ich hatte 2 Ziele und als ich das Schema bearbeitete, sehen Sie im linken Bereich des Schema-Editors [BUILD, RUN, TEST, PROFILE XXX.APP, ANALYZE, ARCHIVE ] Im Bereich BUILD sehen Sie Ihre Projektziele in einer Liste. Ganz rechts sehen Sie die ARCHIV-Auswahl. Stellen Sie sicher, 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 im Produkt haben wollte, und es hat funktioniert!
quelle
Ich habe diesen Fehler behoben, indem ich nur das App-Projekt in XCode geöffnet habe, d. H. Öffnen eines Arbeitsbereichs, der die Anwendung und andere Projekte / Bibliotheken / Frameworks umfasst.
Mit zwei separaten Projekten, einem Framework oder einer gemeinsam genutzten Bibliothek und einer iOS-Anwendung musste ich zwei verschiedene XCode-Fenster öffnen, die jeweils direkt die .xcodeproj- Datei anstelle des gemeinsamen .xcworkspace öffneten, um jedes einzeln zu erstellen.
Als netter Nebeneffekt erstellt XCode nicht mehr jedes Ziel jedes Projekts neu, nachdem ich eine Bereinigung durchgeführt habe , was zu kurzen Erstellungszeiten führt.
Hintergrund: Ich erstelle ein Open Source SDK und eine Demo-iOS-Anwendung. Ich hatte beide in einem einzigen Arbeitsbereich geöffnet. Wenn Sie die Installation "Überspringen" auf den SDK-Zielen auf " JA" setzen , kann niemand ein Archiv erstellen, da es leer ist. Dies war also keine Option. Die Verwendung von Project anstelle von öffentlichen Headern würde dazu führen, dass in einem Archiv die Header-Dateien fehlen, die verteilt werden sollen. Daher war dies auch keine Option.
quelle
Denn es war, weil ich in einem Arbeitsbereich arbeitete. Das Projekt wurde archiviert, aber nicht im Organizer-Fenster angezeigt. Ich habe den Arbeitsbereich geschlossen und das Projekt selbst geöffnet. Das Archiv wurde im Organizer geöffnet ... hoffe es hilft.
quelle
In meinem Fall hatte ich ein benutzerdefiniertes Skript, das einige temporäre Dateien kopierte in:
Das bedeutete, dass ich, nachdem ich das Archiv untersucht hatte, um seinen Inhalt zu überprüfen, direkt neben der .app-Datei einen myTempDir-Ordner fand. Nachdem ich das Skript geändert hatte, um es an anderer Stelle zu speichern, wurden die Dinge sortiert.
quelle
Versuchen Sie, $ (PROJECT_NAME) -Header im Ordnerpfad für öffentliche Header von Framework projet festzulegen. Sie müssen Einstellungen für das Bibliotheksziel erstellen und dann den Ordnerpfad für öffentliche Header als $ (PROJECT_NAME) -Header bearbeiten.
quelle
Bei Verwendung von Xcode 7 mit Cocoapods v.0.38.2 . Versuchen Sie,
copy pod resources
von Ihrem heutigen Erweiterungsziel zu entfernen .quelle
Dieses Problem trat auf, nachdem ich dem Projekt meiner iOS-App ein OS X-Befehlszeilentool hinzugefügt hatte, und Skip Install wurde für das Ziel des Befehlszeilentools standardmäßig auf NO gesetzt. Da Sie eine OS X-Binärdatei offensichtlich nicht auf einem iOS-Gerät installieren können, wird bei der Archivierung standardmäßig ein generisches Xcode-Archiv verwendet. Das Problem wurde behoben, indem für dieses Ziel die Option "Installation überspringen" auf "JA" gesetzt wurde.
quelle