Eu preciso começar com a afirmação de que eu não sou um programador, então eu preciso ser falado. Eu fiz o que descrevi abaixo usando guias e muita tentativa e erro
Eu tenho um AppleScript funcionando que tem 2 prompts para um nome de usuário e senha que, em seguida, continua a montar alguns volumes de rede com base em uma pesquisa LDAP. Eu criei um novo projeto Xcode 6.4 AppleScriptObjC e trouxe o código do AppleScript de trabalho. Usando o construtor de interfaces, criei uma janela de entrada simples e liguei-a ao seguinte código:
-- IBOutlets
property theWindow : missing value
property accountName : missing value
property passwordName : missing value
-- IBActions (button clicks)
on setCredentialsFromUserInput_(sender)
set accountName to accountName's stringValue()
set passwordName to passwordName's stringValue()
end setCredentialsFromUserInput_
Eu liguei o botão OK com o IBAction descrito acima e os campos ID e senha com os IBOutlets associados acima. O projeto cria e executa ok, mas quando eu clico no botão OK, nada acontece. Não prossegue para executar o restante do código no projeto. Eu presumo que estou sentindo falta de algo básico aqui - pensamentos?
Atualização 1:
Aqui está o resto do código no script. A maior parte foi importada de uma versão anterior deste aplicativo escrito em AppleScript Studio (acredito). Espero que você encontre outros erros aqui também, mas minhas principais preocupações são por que nada parece se mover quando clico em OK.
-- Set text delimiters
-- From previous version of Map Drives application
on removechar(delim, sourcetxt) --remove delim from string source
try
set OldDelims to AppleScript's text item delimiters -- save their current state
set AppleScript's text item delimiters to delim -- declare new delimiters
set sourcelist to (every text item in sourcetxt) as list
set sourcetxt to ""
repeat with i from 1 to count of sourcelist
set this_item to item i of sourcelist
set sourcetxt to sourcetxt & this_item
end repeat
set AppleScript's text item delimiters to OldDelims -- restore them
return sourcetxt
on error
set AppleScript's text item delimiters to OldDelims -- restore them in case something went wrong
end try
end removechar
on replacechar(delim, sourcetxt, replacement) --replace delim in string source with replacement
try
set OldDelims to AppleScript's text item delimiters -- save their current state
set AppleScript's text item delimiters to delim -- declare new delimiters
set sourcelist to (every text item in sourcetxt) as list
set sourcetxt to ""
repeat with i from 1 to count of sourcelist
set this_item to item i of sourcelist
if i is equal to 1 then
set sourcetxt to this_item
else
set sourcetxt to sourcetxt & replacement & this_item
end if
end repeat
set AppleScript's text item delimiters to OldDelims -- restore them
return sourcetxt
on error
set AppleScript's text item delimiters to OldDelims -- restore them in case something went wrong
end try
end replacechar
-- Execute LDAP Query
on mapDrives_(accountname, passwordname)
--setup ldap query
set ldap_host to "LDAP HOST"
set ldap_searchbase to "LDAP QUERY"
set ldap_attribute to "NetworkResource"
set query to "uid=\"" & accountname & "\""
-- run ldap query
try
set networktest to do shell script "ping -c 1 " & ldap_host
on error
display alert "Unable to connect to server.
Please check your internet connection and try again." as warning default button "OK"
restoreButton()
return
end try
try
set ldapresults to do shell script "ldapsearch -x -b " & ldap_searchbase & " -H ldap://" & ldap_host & " -D \"" & uName & "\"@" & ldap_host & " -w \"" & pWord & "\" -LLL " & query & " " & ldap_attribute & ""
end try
--Clean LDAP results
--display dialog "results: " & ldapresults
set cleanldapresults to removechar(space, ldapresults)
--quit
--display dialog "first pass: " & cleanldapresults
set cleanldapresults to removechar(return, cleanldapresults)
--display dialog "second pass: " & cleanldapresults
set cleanldapresults to replacechar("\\", cleanldapresults, "/")
--try
set OldDelims to AppleScript's text item delimiters -- save their current state
set AppleScript's text item delimiters to return -- declare new delimiters
--separate out the cifs paths and load them into a list
--display dialog "last pass: " & cleanldapresults
try
set mountpaths to (every text item in (do shell script "echo \"" & cleanldapresults & "\" | grep -o cifs_path=\"[^,]*\"")) as list
on error
display alert "Invalid drive mappings." as warning
quit
end try
--display dialog mountpaths
--iterate through mount paths and mount them
repeat with i from 1 to count of mountpaths
set this_item to item i of mountpaths
set this_item to replacechar("cifs_path=", this_item, "")
if this_item is not equal to "" then
try
-- display alert "Mapping: smb:" & this_item
mount volume ("smb:" & this_item) as user name uName with password pWord
on error
display alert "Failed to map: smb:" & this_item & " with username: " & uName as warning
end try
end if
end repeat
display alert "Your network drives have been mapped." as informational default button "OK"
restoreButton()
set AppleScript's text item delimiters to OldDelims -- restore them
quit
end mapDrives_
##################################################
# Application
on applicationWillFinishLaunching_(aNotification)
-- Insert code here to initialize your application before any files are opened
end applicationWillFinishLaunching_
on applicationShouldTerminate_(sender)
-- Insert code here to do any housekeeping before your application quits
return current application's NSTerminateNow
end applicationShouldTerminate_
end script
fonte
uName
epWord
variáveis e os colocou no código onde eles são necessários para executar a consulta LDAP, mas depois de clicar em OK, o restante do código no projeto não é executado. Parece estar criando as variáveis, mas não vai seguir em frente.