Ungültige Swift-Unterstützung - Dateien stimmen nicht überein

116

Ich habe gerade eine App in Swift 2 neu geschrieben. Ich versuche, die App für interne Tests auf iTunesConnect (über Xcode 7 GM) hochzuladen.

Ich habe eine Weile mit einem "Invalid Swift Support" -Fehler gerungen ( der andere, verwandte Fragen hat ) ... aber jetzt hat sich etwas anderes geändert.

Der Fehler von Apple lautet jetzt:

Ungültige Swift-Unterstützung

Die Dateien libswiftCoreLocation.dylib, libswiftCoreMedia.dylib, libswiftCoreData.dylib, libswiftAVFoundation.dylib stimmen nicht überein

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks. Dylib

Stellen Sie sicher, dass die Dateien korrekt sind (?), Erstellen Sie Ihre App neu und reichen Sie sie erneut ein.

Wenden Sie keine Nachbearbeitung auf an

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks. Dylib.

Ich konnte ähnliche Fehler nicht finden, indem ich nach "Nachbearbeitung nicht anwenden", "Sicherstellen, dass die Dateien korrekt sind, App neu erstellen und erneut einreichen" usw. gesucht habe.

Weiß jemand, wie ich "sicherstellen kann, dass die Dateien korrekt sind" - oder - andere Empfehlungen habe? Danke dir.

Dan
quelle
Ich habe genau das gleiche Problem. Irgendwelche Lösungen?
Beny Boariu
Kündigen Sie diese App? Ist das ein direkter Upload von Xcode?
Andy
@Andy direkter Upload von Xcode unmittelbar nach der Archivierung.
Dan

Antworten:

82

Selbes Problem hier. Ich denke, dies ist höchstwahrscheinlich ein Fehler der Entwicklertools, der mit dem Bitcode zusammenhängt.

Ich habe gerade die Problemumgehung dafür gefunden.

  1. Archivieren Sie Ihre App mit der neuen Build-Nummer :(
  2. Suchen Sie das Archiv (.xcarchive-Datei) im Finder im Organizer "Im Finder anzeigen".
  3. Öffnen Sie das Paket und suchen Sie nach Verzeichnissen wie Products/Applications/YourApp.ipa/Frameworks/undSwiftSupport/iphoneos/
  4. Kopieren Sie alle libswiftXxx.dylibDateien von SwiftSupport/iphoneos/in Products/Applications/YourApp.ipa/Frameworks/und überschreiben Sie sie
  5. Laden Sie jetzt vom Organizer in den App Store hoch

Mit diesem Prozess gelingt es mir, meinen Build hochzuladen. Jetzt warte ich auf eine Überprüfung.

HINWEIS:

Ich benutze CocoaPods und die ENABLE_BITCODEOption war NEIN.

Hahnenkamm
quelle
Auf welches iOS SDK zielen Sie ab? Ich dachte, Sie könnten nicht mit deaktiviertem Bitcode an den Store senden.
JAL
3
In meinem Fall ist SwiftSupport / iphoneos / leer.
Lim Thye Chean
2
Die Validierung war für mich erfolgreich, aber der Build befindet sich noch Processingnach ca. 12 Stunden im Bereich "Vorabversion" von iTunes Connect.
ldiqual
2
hey danke dafür! Ich erhalte immer noch eine Warnung, dass die API-Analysedatei zu groß ist. Cl.ly/image/0s0N0s441s0X - aber das Wichtigste ist, dass sie immer noch bestanden wurde und in TestFlight gelangen konnte.
ded
1
Was soll ich tun, wenn sich in meiner .ipa kein Ordner SwiftSupport / iphoneos / befindet?
Alexander Yakovlev
51

Bearbeiten: CocoaPods 0.39.0 wurde veröffentlicht, wodurch dieses Problem behoben wird!

Wie @orkenstein erwähnt hat , gibt es eine einfachere Lösung, indem Code in auskommentiert wirdPod-frameworks.sh . Ich füge hier ein bisschen mehr Details hinzu.

Öffnen Sie in Ihrem Xcode-Projektverzeichnis Pods/Target Support Files/Pods/Pods-frameworks.sh

Kommentieren Sie die folgenden Zeilen aus:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

=>

# Embed linked Swift runtime libraries
# local basename
# basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
# local swift_runtime_libs
# swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
# for lib in $swift_runtime_libs; do
#   echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
#   rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
#   code_sign_if_enabled "${destination}/${lib}"
# done

Speichern Pods-frameworks.shSie und Sie sollten bereit sein zu gehen!

DJ Tarazona
quelle
4
Das hat bei mir funktioniert. Nur ein Kopf hoch, wenn Sie pod-install oder pod-update ausführen, müssen Sie es möglicherweise erneut kommentieren!
Max Alexander
Cocoapods-Problem hier: github.com/CocoaPods/CocoaPods/issues/4188 , Sie können diese PR: github.com/CocoaPods/CocoaPods/pull/4221 mit den folgenden Anweisungen ausprobieren
ldiqual
aktualisiert cocoaPods 0.39.0 und es löst dieses Problem nicht für mich
nwales
@ DJ Tarazona Danke für dein Rezept !! Es hat den Trick für mich vollbracht, selbst als ich das Cocopods-Juwel auf die neueste Version aktualisiert habe
Jorge Vicente Mendoza
16

Das Update für dieses Problem wurde zusammengeführt und ist in der neuesten CocoaPods-Version verfügbar 0.39.0.beta.5

https://github.com/CocoaPods/CocoaPods/pull/4268

Führen Sie die neueste Version von CocoaPods aus gem install cocoapods --pre

Befolgen Sie alternativ die Anweisungen zum Ausführen nicht freigegebener Funktionen: http://guides.cocoapods.org/using/unreleased-features

Sobald Sie die neueste Version von CocoaPods haben, führen Sie sie pod installerneut aus.

Will Y.
quelle
Dies ist der Geldverdiener
Tommybananas
Die Tränen kommen. Danke dir!
MQLN
Der Fehler hat nicht speziell mit CocoaPods zu tun. Wir haben das gleiche Problem und verwenden keine CocoaPods.
Devios1
8

Ich habe fastlane gym 1.9.0 verwendet, um meine App zu erstellen, und sie wurde von Apple immer wieder abgelehnt, weil die Dateien nicht übereinstimmten. Wenn ich sie über XCode 8 hochlud, wurde sie akzeptiert. Ich habe die schnellen Bibliotheken im Swift-Support-Ordner des IPA überprüft und im Frameworks-Ordner festgestellt, dass die Bibliotheken im Swift-Support-Ordner für Swift 2.3 waren, während sie im Frameworks-Ordner Swift 3 waren. Also habe ich in meiner Fitness-Studio-Datei die Toolchain hinzugefügt Möglichkeit:

gym(
  scheme: "CoCadre", 
  configuration: "Production Release",
  clean: true,
  use_legacy_build_api: false,
  toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

* Beachten Sie, dass ich use_legacy_build_api in false ändern musste, um die Toolchain-Option zu verwenden

Um die Toolchain-Option verwenden zu können, müssen Sie use_legacy_build_api festlegen: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185

Zhong Huiwen
quelle
Danke dir! Ich benutze auch Fastlane und Gym und dies hat das Problem behoben.
Eystein Bye
Vielen Dank, das hat dazu beigetragen, das Problem auch bei der Verwendung von Gym zu beheben. Bitte beachten Sie, dass ich diese Lösung immer noch mit use_legacy_build_api verwenden konnte: true
Viktor Malyi
6

Es gibt eine etwas weniger komplexe Lösung auf GitHub :

Ich habe mich in Pods-frameworks.sh umgesehen und einen Abschnitt gefunden, der wie folgt kommentiert ist:

Eingebettete Swift-Laufzeitbibliotheken
einbetten Das Kommentieren des Codeblocks, der diese Bibliotheken kopiert (und mit Code signiert), scheint meine Probleme bei der Übermittlung behoben zu haben. Ich bin noch nicht tiefer eingetaucht, um zu sehen, ob es nur das Kopieren ist, das die Probleme verursacht, oder ob es die Codesignatur ist. Ich komme dort ein bisschen aus meiner Tiefe heraus.

Orkenstein
quelle
4
  1. Aktualisieren Sie Ihre Cocoapods auf die neueste Version, geben Sie sudo gem install cocoapodsterminal ein.
  2. Führen pod updateSie es im Verzeichnis Ihres Projekts aus.
  3. Denken Sie daran, Satz aktivieren Bitcode zu NO für DebugOption für alle Ihre Schoten.
  4. Fest

Das Problem wurde behoben, weil der folgende Code in Pods-frameworks.sh:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit ${PIPESTATUS[0]})"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/${basename}.framework/${basename}" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
  code_sign_if_enabled "${destination}/${lib}"
done

wurde geändert in:

# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
    local swift_runtime_libs
    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
  for lib in $swift_runtime_libs; do
    echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
    rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
    code_sign_if_enabled "${destination}/${lib}"
  done
fi
Bartłomiej Semańczyk
quelle
2

Meine Lösung dafür:

Ich verwende Reveal über Cocoapods und Reveal muss Bitcode deaktivieren. Also habe ich Reveal (sollte für jedes andere Framwork funktionieren) nur für Debug aufgenommen:

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

Da mein Reveal jetzt nur für Debug konfiguriert ist, habe ich Bitcode nur für Debug deaktiviert.

Geben Sie hier die Bildbeschreibung ein

Mit diesen Einstellungen funktioniert alles einwandfrei, ohne Hacks ...

Urkman
quelle
0

Ich habe diesen Fehler beim Integrieren von Bibliotheken gesehen, die keinen Bitcode unterstützen (z. B. die aktuelle stabile Version von New Relic). Die Lösung besteht entweder darin, die Bibliotheken zu entfernen, den Bitcode zu deaktivieren (und möglicherweise nicht an den Store zu senden) oder auf aktualisierte Binärdateien zu warten, die Bitcode von Ihrem Bibliotheksanbieter unterstützen.

JAL
quelle
0

Der Fehler für mich war, dass ich mit Adhoc-Profil anstelle von App Store-Profil erstellt habe, um das Spa in den App Store hochzuladen.

Jarora
quelle