まず、以下のコードで AppleScript アプリを作成しました (ファイル名: UnloadTest.scpt):
-- 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 を別のコンピューターで実行したい場合は、「UnloadTest.scpt」ファイルで UserName と MyPASSWORD を他の人のものに変更する必要があります。だから私は別の方法に行きたい: "- (id)initWithSource:(NSString *)source" 関数を使用してコードから AppleScript を作成し、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 が権限を取得できなかったのだと思いますが、修正方法がわかりません。
この問題を理解するのを手伝ってくれる人はいますか?