L'application ne peut pas être ouvert car son exécutable est manquant
J'ai une application que j'ai été en développement pendant un certain temps maintenant. Récemment, le lancement de l'application via un double-clic affiche une boîte de dialogue qui dit "Vous ne pouvez pas ouvrir l'application RepoWatch, car il peut être endommagé ou incomplet."
Le lancement de l'application via l'ouvrir ./RepoWatch.application me donne "L'application ne peut pas être ouvert car son exécutable est manquant."
J'ai l'habitude de lancer l'application via ./RepoWatch.app/Contents/MacOS/RepoWatch simplement par habitude (qui fonctionne), donc je ne suis pas sûr combien de temps il a été passe, ou de ce changement s'est passé juste avant la main. Les plus susceptibles de changer, c'est que j'ai mis cp Info.plist ./RepoWatch.app/Contents/
dans mon fichier de créer pour des informations de version.plist sans versioning tout dans le .app bundle.
J'ai regardé les Infos.plist de nombreuses fois et ne peut pas trouver quelque chose de mal avec elle. Le fichier s'ouvre avec la Liste des propriétés de l'Éditeur, sans erreurs. Sauver de la Liste des propriétés de l'Éditeur de ne pas rendre le fichier "travail" (si c'est à blâmer en premier lieu).
Les autorisations d'aussi loin que je peux dire, aussi regarder sane:
$ 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
Je suis à une perte quant à ce qu'à essayer la prochaine.
Et voici le contenu de l'Info.plist (Même si rien n'a vraiment changé depuis un certain temps):
<?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>
- Avez-vous oublié d'inclure la sortie de
ls -l /Applications/Adium.app/Contents/Info.plist
, ou n'avez-vous pas dire à inclure la commande en premier lieu? - J'ai eu des problèmes avec la mise en forme de ce bloc et il a été supprimé en quelque sorte. Il a été ajouté dans. J'ai également supprimé les attributs étendus d'un fichier et qui n'a fait aucune différence.
- “... Je ne suis pas sûr combien de temps il a été passe, ou de ce changement s'est passé juste avant la main.” Si votre système de contrôle de version a un coupent commande, maintenant serait le moment de l'utiliser. (Si vous n'utilisez pas de contrôle de version, c'est une belle démonstration de l'une des raisons de le faire).
- Je n'ai pas l' .app ou quoi que ce soit sous sous contrôle de version. C'est la raison pour laquelle j'ai déménagé Info.plist, il pourrait effectivement être sous contrôle de version. Traversent, n'a pas aidé. Tous étaient "mauvais", comme c'est quelque chose en dehors du contrôle de version, il me semble. La solution la plus simple est probablement de la corbeille .app et de le recréer. Mais je suis très curieux de savoir ce que le problème sous-jacent est.
- Je vais avoir ce même problème. Le
.app
fonctionne, mais quand je l'ai copier (à partir de cette question, il ressemble à quelque chose change avecInfo.plist
) à l'aide de Ant il s'arrête de lancement, mais si je l'ai copier manuellement, il fonctionne toujours.
Vous devez vous connecter pour publier un commentaire.
Bâtiment sur la réponse de @smokris posté le:
Le problème semble être avec votre application d'enregistrement dans les Services de Lancement de la base de données. Il n'est pas nécessaire de reconstruire l'ensemble de la base de données. À force de mettre à jour l'entrée de votre application (en particulier), l'utilisation
lsregister
avec le-f
option:J'ai eu le même problème que vous décrivez, et cela a fonctionné pour moi. Merci, @smokris!
La reconstruction du Lancement des Services de base de données permet de résoudre ce problème pour moi.
Essayez d'exécuter la commande suivante dans le Terminal:
lsregister
est susceptible de résoudre le problème: Faire une copie de l' .app. Vous pouvez exécuter la copie? Dans ce cas, exécutezlsregister
.-f
option: stackoverflow.com/a/16546673/162094Le problème est probablement dû à une défaillance de
CFBundleExecutable
de la propriété valeur dans laInfo.plist
fichier que vous copiez dans l'application.Dans des projets Xcode la valeur par défaut de cette propriété est une variable spéciale (espace réservé) valeur (
${EXECUTABLE_NAME}
) qui est développée (remplacé) lorsque le système génère l'application. Êtes-vous sûr que vous devez copier ce fichier manuellement? Peut-être que vous pouvez ajouter un script phase de construction qui rend les changements que vous avez besoin après il a été élargi et copié en place par le processus normal de compilation.Pendant que vous y êtes, vous devriez vérifier pour d'autres valeurs d'espace réservé dans le fichier. Il est probable que vous devrez remplir
CFBundleName
(les autres peuvent aussi être nécessaires, en fonction de votre type d'application)..app
a travaillé à l'intérieur de son.dmg
mais pas sur mon/Applications
dossier, ce qui suggère que cettedmg
était pas sensible à la casse.OK, quelques (plusieurs) coups de feu dans l'obscurité.
./RepoWatch.app/Contents/MacOS/RepoWatch
de l'exécuter manuellement, utilisez-vous une sorte d'achèvement ou d'un fichier de génération, ou êtes-vous en tapant tout (surtout le nom de l'exécutable)?Info.plist
. Essayezls -w /path/to/RepoWatch.app/Contents/MacOS/| xxd
à regarder les octets de quelque chose de non-ASCII.plutil -lint /path/to/Info.plist
vous donner un “OK”?@
après les autorisations dans lels -l
sortie indique certains xattrs. Ceux-ci pourraient être inoffensifs, mais avez-vous regardé ceux qui sont là avecls -l@
?(cd /path/to/RepoWatch.app/Contents/&& mv Info.plist Info.plist.save && cat Info.plist.save > Info.plist)
pour obtenir une copie sans le xattrs et de tester avec elle..save
ci-dessus) pour voir si vous pouvez causer un autre message d'erreur qui peut aider à indiquer le problème.0a
est simplement l'habitude de terminaison de ligne dels
, rien à craindre (le-w
option empêchels
de l'impression?
au lieu de l'octet brut si il pense que c'est non imprimable dans le contexte actuel).Menu projet > Set Active Exécutable