Die Anwendung kann nicht geöffnet werden, weil der ausführbaren Datei fehlt
Ich habe eine Anwendung, die ich entwickeln seit einiger Zeit. Vor kurzem starten der Anwendung über einen Doppelklick zeigt ein Dialogfeld mit der Meldung "Sie können nicht öffnen Sie die Anwendung RepoWatch, weil es möglicherweise beschädigt oder unvollständig ist."
Starten der Anwendung via "öffnen". /RepoWatch.app gibt mir "Die Anwendung kann nicht geöffnet werden, weil der ausführbaren Datei fehlt".
Ich in der Regel starten Sie das Programm über ./RepoWatch.app/Contents/MacOS/RepoWatch einfach aus Gewohnheit (was funktioniert), so bin ich unsicher, wie lange dies geschehen ist, oder welche Veränderung geschah unmittelbar, bevor die hand. Die wahrscheinlichste änderung ist, dass ich cp Info.plist ./RepoWatch.app/Contents/
in mein make-Datei, um die version Info.plist ohne Versionierung alles in der .app-bundle.
Ich habe mir bei Info.plist viele Male, und nicht finden können nichts falsch mit ihm. Die Datei öffnet sich mit Property List Editor ohne Fehler. Speichern von Property List Editor nicht machen, die Datei "Arbeit" (wenn es ist die Schuld in Erster Linie).
Die Berechtigungen soweit ich das sagen kann, sehen auch gesund:
$ ls -l
./RepoWatch.app/Contents/Info.plist
-rw-rw-r--@ 1 dgrace staff 789 Feb 1 23:20 ./RepoWatch.app/Contents/Info.plist
$ ls -l
/Applications/Adium.app/Contents/Info.plist
-rw-rw-r-- 1 dgrace staff 5750 Aug 21 15:41 /Applications/Adium.app/Contents/Info.plist
Ich bin an einem Verlust, was zu versuchen nächsten.
Und hier der Inhalt der Info.plist (obwohl sich eigentlich nichts geändert in eine Weile):
<?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>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>RepoWatch</string>
<key>CFBundleIdentifier</key>
<string>com.doomstick.RepoWatch</string>
<key>CFBundleName</key>
<string>RepoWatch</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
<key>LSMinimumSystemVersion</key>
<string>10.6</string>
<key>CFBundleVersion</key>
<string>Beta26</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
- Hast du vergessen, die Ausgabe von
ls -l /Applications/Adium.app/Contents/Info.plist
, oder haben Sie nicht bedeuten, um diesen Befehl in den ersten Platz? - Ich hatte Probleme mit der Formatierung dieses Blocks und es wurde irgendwie gelöscht. Es ist aufgenommen worden. Ich habe auch entfernt die erweiterten Attribute von meiner Datei sind und keinen Unterschied gemacht.
- "... Ich bin unsicher, wie lange dies geschehen ist, oder welche Veränderung geschah unmittelbar, bevor die hand." Wenn Ihre version-control-system hat eine halbieren Befehl, jetzt wäre die Zeit, es zu benutzen. (Wenn Sie nicht mit version control, dies ist ein schöner Beweis für einen Grund, dies zu tun.)
- Ich habe nicht die .app oder etwas darunter, der unter der version Kontrolle. Das ist der Grund, warum ich umgezogen Info.plist aus, so könnte es effektiv sein, die unter Versionskontrolle. Halbieren nicht helfen. Alle von Ihnen waren "schlecht", weil es etwas außerhalb der Versionskontrolle, wie es scheint. Die einfache Lösung ist wahrscheinlich in den Papierkorb der .app und erstellen Sie es neu. Aber ich bin sehr neugierig, was das zugrunde liegende problem ist.
- Ich habe das gleiche problem. Die
.app
funktioniert, aber wenn ich es kopieren (von dieser Frage es sieht aus wie etwas, das ändert sich mitInfo.plist
) mit Hilfe von Ant Stoppt es starten, aber wenn ich kopiere es manuell funktioniert es noch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufbauend auf die Antwort von @smokris geschrieben:
Scheint das problem zu sein, mit Ihrem app-Anmeldung in der Launch-Services-Datenbank. Es gibt keine Notwendigkeit, den Wiederaufbau der gesamten Datenbank. Auf force-update den Eintrag für die app (speziell), verwenden Sie
lsregister
mit der-f
option:Ich hatte das gleiche problem, das Sie beschreiben, und dieses arbeitete für mich. Danke, @smokris!
Neuaufbau der Launch Services-Datenbank löst dieses problem für mich.
Probieren Sie die Ausführung des folgenden Befehls im Terminal:
lsregister
ist wahrscheinlich, um das problem zu beheben: Machen Sie sich eine Kopie der .app. Kann man die kopieren? Wenn ja, führen Sielsregister
.-f
option: stackoverflow.com/a/16546673/162094Ist das problem wahrscheinlich aufgrund einer ungültigen
CFBundleExecutable
Eigenschaft Wert in derInfo.plist
Datei, die Sie kopieren in der Anwendung.In Xcode-Projekte der Standardwert für diese Eigenschaft ist eine spezielle variable (Platzhalter) Wert (
${EXECUTABLE_NAME}
), die erweitert (ersetzt), wenn das build-system baut die Anwendung. Sind Sie sicher, dass Sie brauchen, um zu kopieren Sie diese Datei manuell? Vielleicht können Sie einen Skript-build-phase, die macht, was auch immer änderungen, die Sie benötigen nach es wurde erweitert und kopiert werden in Platz durch den normalen build-Prozess.Während Sie dabei sind, sollten Sie prüfen, für einen anderen Platzhalter-Werte in der Datei. Es ist wahrscheinlich, dass Sie brauchen, um füllen Sie
CFBundleName
(andere kann auch erforderlich sein, je nach Anwendung, Typ)..app
arbeitete in seiner.dmg
aber nicht auf meine/Applications
Ordner, was darauf schließen lässt, dass diese Besonderedmg
war der groß-und Kleinschreibung.OK, einige (mehr) Aufnahmen in der Dunkelheit.
./RepoWatch.app/Contents/MacOS/RepoWatch
um es manuell ausführen, verwenden Sie irgendeine Art von Abschluss oder mit dem Namen generation, oder geben Sie es in (vor allem die mit dem Namen der ausführbaren Datei)?Info.plist
. Versuchenls -w /path/to/RepoWatch.app/Contents/MacOS/| xxd
Blick auf die bytes für alles was non-ASCII-Zeichen.plutil -lint /path/to/Info.plist
geben Sie ein "OK"?@
nach den Berechtigungen in derls -l
Ausgabe zeigt einige xattrs. Diese könnte harmlos sein, aber haben Sie sich angeschaut, welche sind es mitls -l@
?(cd /path/to/RepoWatch.app/Contents/&& mv Info.plist Info.plist.save && cat Info.plist.save > Info.plist)
erhalten Sie eine Kopie, ohne die xattrs und testen mit ihm..save
oben), um zu sehen, wenn Sie können, dass eine andere Fehlermeldung, die helfen könnten, zeigen das problem.0a
ist nur die übliche Beendigung Zeilenvorschub ausls
nichts zu befürchten (die-w
option wird nur verhindert, dassls
aus drucken?
statt der raw byte, wenn es denkt, es ist nicht druckbaren in der aktuellen Umgebung).Projekt-Menü > Set Active Executable