Mac OS X 10.6
Stworzyłem bardzo prostą aplikację, która jest tylko opakowaniem skryptu powłoki (dzięki czemu mogę wybrać ten skrypt w selektorach aplikacji, takich jak aplikacje startowe). Próbuję go uruchomić i wczoraj zadziałało, ale dzisiaj zmieniłem zawartość i nazwę skryptu wykonywalnego (z czymś, co perfekcyjnie działa w skrypcie powłoki uruchomionym w Terminalu) i wyświetli tylko okno dialogowe z ikoną Findera
Nie można otworzyć aplikacji, ponieważ nie jest ona obsługiwana na tego rodzaju komputerach Mac.
Przywróciłem poprzedni skrypt (content / name), ale nadal pojawia się błąd! Tak samo przy ponownym wiązaniu aplikacji od podstaw lub całkowitej zmianie identyfikatora pakietu…
Jeśli spróbuję go otworzyć w Terminalu za pomocą open My.app
, Dostaję
Aplikacji nie można otworzyć, ponieważ ma nieprawidłowy format wykonywalny.
Ale kiedy wykonuję bezpośrednio Contents/MacOS/Script
, zawsze działa (z obiema treściami). Ponadto jest wyświetlany z poprawną ikoną i meta-informacjami w Finderze (więc chyba Info.plist jest zrozumiały).
Drzewo plików aplikacji to:
Contents/
Info.plist
MacOS/
Script (executable bit set, works when launched directly)
PkgInfo
Resources/
AppIcon.icns
Tutaj jest Info.plist
zawartość:
<?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>CFBundleExecutable</key>
<string>Script</string>
<key>CFBundleIconFile</key>
<string>AppIcon</string>
<key>CFBundleIdentifier</key>
<string>asdf.ScriptApp</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>My script</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSMinimumSystemVersion</key>
<string>10.4</string>
</dict>
</plist>
I PkgInfo
plik zawiera tylko APPL????
. Testowałem skrypt za pomocą prostego echo "ok"
i echo "ok" >/tmp/test
(plus #!/bin/sh
nagłówek).
Moje pytania to:
- Czy istnieje jakiś rodzaj buforowania ważności dla aplikacji? oparty na czym ? jak go spłukać?
- Skąd pochodzi ta wiadomość? Próbowałem google, ale wszystko, co dostaję, to strona mówiąca o 32/64 bitach Java…
źródło
Możesz utworzyć aplikację wykonującą skrypt w Automatorze za pomocą jednego Uruchom skrypt powłoki akcja.
źródło
#!/usr/bin/env bash | cd /Users/danielbeck | touch fooo
z|
będący ogranicznikiem linii.chmod +x Script
i to wszystko.fooo
zostaje utworzony podczas wykonywania.Sam skrypt powłoki może być zły. Zwykle dzieje się to między platformami PPC / Intel lub odwrotnie.
źródło
My.app/Contents/MacOS/Script
.Możesz sprawdzić Platypus:
http://sveinbjorn.org/platypus
źródło
Z powodzeniem zbudowałem aplikacje, których pliki wykonywalne są skryptami powłoki. Jednak zawsze poszli dalej
exec
normalny proces GUI (lub nietypowy, taki jak program Java); być może to robi różnicę.Czy kontrolowałeś także różnice w zmiennych środowiskowych? Po uruchomieniu z Terminalu otrzymujesz efekt plików kropek (
.profile
,.bash_profile
,.bashrc
itd.), ale uruchamianie GUI nie używa żadnego z nich. (To środowisko można zmodyfikować za pomocą~/.MacOSX/environment.plist
(po ponownym wprowadzeniu zmian), jeśli chcesz to zrobić.)źródło