Я пытаюсь запустить эту команду сценария оболочки через appleScript в моем приложении Mac.Он отлично работает в редакторе яблочного сценария, но когда я запускаю его в xcode, как показано ниже, он не работает.Я делаю это неправильно?
NSString *asString = [[NSString alloc] initWithFormat:@"property MACaddr : \"gg:gg:gg:gg:gg:gg\"\n property WAN_IP_address : \"255.255.255.255\"\n property port_number : \"9\"\n "
"on run\n set command to \"/usr/bin/php -r \" & quoted form of (\"$mac = \" & quoted form of MACaddr & \"; $porttemp = \" & quoted form of port_number & \";$ip = \" & quoted form of WAN_IP_address & \"; \" & \""
"$mac_bytes = explode(\\\":\\\", $mac); "
" $mac_addr = \\\"\\\"; "
" for ($i=0; $i<6; $i++) "
" $mac_addr .= chr(hexdec($mac_bytes[$i]));"
" $packet = \\\"\\\"; "
" for ($i=0; $i<6; $i++) "
" $packet .= chr(255); "
"for ($i=0; $i<16; $i++) "
"$packet .= $mac_addr;"
" $port = $porttemp; "
"$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);"
"socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, TRUE);"
"socket_sendto($sock, $packet, strlen($packet), 0, $ip, $port);"
"socket_close($sock);\") "
"do shell script command \n"
"end run" ];
NSLog(@"the applescript %@", asString);
NSAppleScript *asScript = [[NSAppleScript alloc] initWithSource:asString];
[asScript executeAndReturnError:nil];
[asString release];
[asScript release];
Вот точный appleScript, который отлично работает в моем редакторе Applescript.Я отредактировал вышеупомянутую часть с правильными обратными слешами и все так же, как мой яблочный пирог, который работает.Однако, это все еще не работает в xcode, и волшебный пакет не отправляется.(используя wireshark, чтобы контролировать это.) Есть идеи, что не так?Я даже добавил часть запуска.
property MACaddr : "gg:gg:gg:g4:g5:gg"
property WAN_IP_address : "255.255.255.255"
property port_number : "9"
on run
set command to "/usr/bin/php -r " & quoted form of ("$mac = " & quoted form of MACaddr & "; $porttemp = " & quoted form of port_number & ";$ip = " & quoted form of WAN_IP_address & "; " & "
$mac_bytes = explode(\":\", $mac);
$mac_addr = \"\";
for ($i=0; $i<6; $i++)
$mac_addr .= chr(hexdec($mac_bytes[$i]));
$packet = \"\";
for ($i=0; $i<6; $i++) /*6x 0xFF*/
$packet .= chr(255);
for ($i=0; $i<16; $i++) /*16x MAC address*/
$packet .= $mac_addr;
$port = $porttemp;
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, TRUE);
socket_sendto($sock, $packet, strlen($packet), 0, $ip, $port);
socket_close($sock);
")
do shell script command
end run
в любом случае, у меня все работает НАКОНЕЦ.Понятия не имею, что именно это было, но вот код для того, кто хочет запустить php-скрипт для магического пакета WOL (wake on lan) через PHP в качестве сценария оболочки appleScript в целевой среде c.Ага.Вот отредактированный и рабочий:
NSString *asString = [[NSString alloc] initWithFormat:@"property MACaddr : \"gg:gg:gg:gg:gg:gg\"\n property WAN_IP_address : \"255.255.255.255\"\n property port_number : \"9\"\n "
"on run\n set command to \"/usr/bin/php -r \" & quoted form of (\"$mac = \" & quoted form of MACaddr & \"; $porttemp = \" & quoted form of port_number & \";$ip = \" & quoted form of WAN_IP_address & \"; \" & \"\n"
"$mac_bytes = explode(\\\":\\\", $mac);\n "
" $mac_addr = \\\"\\\";\n "
" for ($i=0; $i<6; $i++) "
" $mac_addr .= chr(hexdec($mac_bytes[$i]));\n"
" $packet = \\\"\\\";\n "
" for ($i=0; $i<6; $i++)\n "
" $packet .= chr(255);\n "
"for ($i=0; $i<16; $i++)\n "
"$packet .= $mac_addr;\n"
" $port = $porttemp;\n "
"$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);\n"
"socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, TRUE);\n"
"socket_sendto($sock, $packet, strlen($packet), 0, $ip, $port);\n"
"socket_close($sock);\")\n "
"do shell script command \n"
"end run" ];
NSLog(@"the applescript %@", asString);
NSString *script2 = [asString stringByReplacingOccurrencesOfString:@"gg:gg:gg:gg:gg:gg" withString:AirportMAC];
NSAppleScript *asScript = [[NSAppleScript alloc] initWithSource:script2];
[asScript executeAndReturnError:nil];
[asString release];
[asScript release];
Большое спасибо всем за помощь!