web-dev-qa-db-de.com

Codesign: Was sind nicht versiegelte Inhalte?

Ich habe gerade ein Upgrade auf XCode 6 durchgeführt und versucht, eine mit meiner Entwickler-ID signierte Mac-App zu erstellen. Jetzt erhalte ich jedoch den folgenden Codesign-Fehler:

unsealed contents present in the root directory of an embedded framework

Dies gilt für den von mir verwendeten Dropbox.framework. Offensichtlich konnte das nicht unterschrieben werden. Was bedeutet der Fehler? Was ist falsch?

16
codingFriend1

Werfen Sie einen Blick auf OS X Code Signing In Depth

Ab OS X Version 10.9.5 wird es Änderungen geben, wie OS X signierte Apps erkennt

Strukturiere dein Bundle entsprechend den Erwartungen für OS X Version 10.9 oder höher:

  • Fügen Sie signierten Code nur in Verzeichnissen ein, die signierten Code enthalten sollen. 
  • Fügen Sie nur Ressourcen in Verzeichnissen ein, die enthalten sollen
    Ressourcen.
  • Verwenden Sie nicht das Flag --resource-rules oder ResourceRules.plist. Sie Sind veraltet und werden abgelehnt.
8
Parag Bafna

Das Problem ist die version.txt-Datei, die sich im Dropbox.framework befindet. Dies ist zwar nützlich, um zu wissen, um welche Version es sich bei dem Framework handelt, es scheint jedoch nicht mehr in Ordnung zu sein.

Als ich die Datei entfernte, funktionierte alles wieder gut.

10
codingFriend1

Hatte heute das gleiche Problem für mehrere Stunden, als ich versuchte, ein vor-Yosemite-Framework-Paket an Yosemite anzupassen. Das Problem waren letztendlich die von mir erstellten Symlinks, nicht unbedingt Dateien im Verzeichnis.

Anfangs hatte das Paket einen fehlerhaften Symlink im Stammverzeichnis. Ich habe es repariert.

Der Symlink, den ich hinzugefügt habe:

Headers -> Versions/Current/Headers/

Was es sein musste:

Headers -> Versions/Current/Headers

Dieser zusätzliche Schrägstrich ist der Mörder.

Beachten Sie, dass ich zweimal an zwei verschiedenen Stellen gebissen wurde: ich hatte es auch

Current -> 1.8.0/

wo ich brauchte

Current -> 1.8.0

Ich bin kein großer Nixer, also ist das vielleicht ein gesunder Menschenverstand, aber hoffentlich hilft es anderen Windows-Entwicklern wie mir.

6
ArtHare

Ich bin heute auf ein ähnliches Problem gestoßen ... mein Fehler war "nicht gesiegelter Inhalt in der Bundle-Wurzel". Die Lösung für mich bestand darin, das benutzerdefinierte Symbol zu entfernen, das ich in meiner App hatte. AppName.app/Icon? war irgendwie korrupt ... 

2
Sonic84

Ich habe heute eine Weile recherchiert und keiner der Vorschläge, die ich gefunden habe, hat geholfen. Mein sdl_mixer.framework verfügte über fünf eingebettete Frameworks, die ich nicht an iTunesConnect überholen konnte. Meine Lösung bestand darin, drei davon zu entfernen, die ich eigentlich nicht brauchte, und die anderen beiden wurden meinem Projekt als eigenständige Frameworks hinzugefügt, nicht eingebettet in den sdl_mixer. Hoffentlich hilft das jemandem, ich habe Stunden damit verbracht.

1
nuclearnova

Ich traf das Problem, als ich versuchte, ein anderes Framework zu signieren. Die Antworten hier sind sehr inspirierend. Hier müssen einige Probleme mit der Framework-Struktur auftreten, aber ich habe sie gefunden. Die Struktur scheint richtig zu sein, die Symlinks haben kein "/", es gibt keine zusätzliche Datei (Überprüfung mit ls) ...

Nach vielen Versuchen bemerkte ich schließlich, dass es einen zusätzlichen .DS_Store im Framework gibt, was wirklich nervig ist :(

Wenn Sie immer noch auf den Fehler stoßen, prüfen Sie, ob versteckte Dateien vorhanden sind.

0
Gavin

Ich hatte das gleiche Problem und für das Löschen des Inhalts des DerivedData-Ordners. Xcode sagt nicht, welche Ressource das Problem verursacht, also habe ich alles von Grund auf neu aufgebaut. Sauber hat auch nicht funktioniert.

0
André Fratelli

In meinem Fall habe ich versucht, eine App mit alten Frameworks zu signieren. Keiner dieser Vorschläge hat geholfen. Es stellte sich heraus, dass ich die PkgInfo-Datei aus einem Framework entfernen musste, damit diese Nachricht verschwindet.

0
Ken Aspeslagh

Eine weitere mögliche Ursache für dieses Problem: Wenn Sie iOS- und MacOS-Apps mit demselben Namen und demselben Installationsort erstellen, stellen Sie möglicherweise fest, dass beide in dasselbe Anwendungspaket geschrieben sind. Zuerst legt der iOS-App-Build seinen Inhalt direkt im App-Bundle-Stammverzeichnis ab. Anschließend platziert der macOS-App-Build seinen Inhalt in einem "Contents" -Ordner im App-Bundle.

0
bleater

Ich habe das jetzt zweimal getroffen, deshalb füge ich die Ursachen hinzu, da Codesign sehr undurchsichtig ist und generell ablehnt, Ihnen die problematische Ressource mitzuteilen.

Einmal hatte ich eine vorzeichenlose binäre ausführbare Datei. Jede ausführbare Datei und jedes Framework muss einzeln signiert werden, bevor das Bundle als Ganzes gesungen wird.

Dann habe ich einen anderen Fall getroffen. Ich signiere meinen Code als Teil des Veröffentlichungsprozesses und signiere jede ausführbare Datei und jedes Framework neu. Aber auch Xcode signiert das Bundle und es stellt sich heraus, dass Cruft in _CodeSignature-Ordnern zurückblieb. Bevor ich nun die ausführbaren Dateien und Frameworks und dann das Bundle signiere, entferne ich die generierten _CodeSignature-Ordner von Xcode folgendermaßen:

find MyApp.app -name _CodeSignature -type d -exec rm -rf {} +

Ich hoffe, diese hart erarbeiteten Informationen werden irgendwann irgendwann jemanden retten.

0
Peter N Lewis