첫째, 나는 아래의 코드를 애플 스크립트 응용 프로그램 (: UnloadTest.scpt 파일 이름) : 생성 된NSAppleScript를 사용하여 ObjectScript C의 AppleScript 앱을 만들고 호출하면 동일한 코드로 다른 결과가 나타 납니까?
-- Set user name and password
set UserName to "MyAccount"
set MyPASSWORD to "MyPassword"
-- unload FTDIUSBSerialDriver
do shell script "sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext" user name UserName password MyPASSWORD with administrator privileges
-- Copy driver to the used location
do shell script "sudo cp ./libftd2xx.1.0.2.dylib /usr/local/lib" user name UserName password MyPASSWORD with administrator privileges
do shell script "sudo cp ./libd2xx_table.dylib /usr/local/lib" user name UserName password MyPASSWORD with administrator privileges
do shell script "cd /usr/local/lib" user name UserName password MyPASSWORD with administrator privileges
do shell script "sudo ln -sf libftd2xx.1.0.2.dylib libftd2xx.dylib" user name UserName password MyPASSWORD with administrator privileges
을 그리고, 아래의 코드 호출에 NSAppleScript 클래스를 사용
NSString * strScript = [[NSBundle mainBundle] pathForResource:@"UnloadTest" ofType:@"scpt"];
NSAppleScript * appScript = [[NSAppleScript alloc] initWithContentsOfURL:[NSURL fileURLWithPath:strScript] error:nil];
[appScript executeAndReturnError:NULL];
[appScript release];
잘 작동 할 수는 있지만 문제가 있습니다. 다른 컴퓨터에서 내 APP를 실행하려면 UserName과 MyPASSWORD를 다른 사람의 "UnloadTest.scpt"파일로 변경해야합니다. 바보입니다! 그래서 다른 방법을 가고 싶어 : 사용 "- (ID) initWithSource : (있는 NSString *) 소스"코드에서 애플 스크립트를 생성하는 기능, 내 APP 인터페이스에서 사용자 이름 & 암호를 보낼 수 있습니다
NSString *strScriptUnload = [NSString stringWithFormat:@"\
set UserName to \"%@\"\
set MyPASSWORD to \"%@\"\
do shell script \"sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext\" user name UserName password MyPASSWORD with administrator privileges\
do shell script \"sudo cp ./libftd2xx.1.0.2.dylib /usr/local/lib\" user name UserName password MyPASSWORD with administrator privileges\
do shell script \"sudo cp ./libd2xx_table.dylib /usr/local/lib\" user name UserName password MyPASSWORD with administrator privileges\
do shell script \"cd /usr/local/lib\" user name UserName password MyPASSWORD with administrator privileges\
do shell script \"sudo ln -sf libftd2xx.1.0.2.dylib libftd2xx.dylib\" user name UserName password MyPASSWORD with administrator privileges",[m_textUserName stringValue], [m_textPassword stringValue]];
NSAppleScript *appUnloadScript = [[NSAppleScript alloc] initWithSource:strScriptUnload];
returnDescriptor = [appUnloadScript executeAndReturnError:nil];
[appUnloadScript release];
그러나 그것은 나를 위해 실패한 작품이다. 모양은 다음과 같다.
sudo ln -sf libftd2xx.1.0.2.dylib libftd2xx.dylib
성공하지 않는다. AppleScript가 권한을 얻지 못했지만 그것을 수정하는 방법을 모르겠습니다.
이 문제를 이해하는 데 도움을 줄 수있는 사람이 있습니까?
* 사용자의 로그인 세부 정보를 절대 하드 코딩하지 않습니다. 거대한 보안 위반입니다. 하나의'do shell script "set -e; cmd1; cmd2; cmd3; ..."with administrator privileges' 명령을 사용하십시오. 그러면 사용자는 계속 진행하기 전에 한 번 인증을 받으라는 메시지를 자동으로 표시합니다. – foo
하지만 내 앱이 매번 AppleScript를 호출해야하기 때문에 저에게는 좋지 않습니다. 내가 말한대로 그렇게하면 사용자가 한 번이 아니라 항상 인증을 받도록합니다. – Raniys
앱에서이 스크립트를 얼마나 자주 실행해야합니까? 원래 게시물은 배경 정보를 제공하지 않습니다. – foo