Help with AppleScript cURL file upload
This is a sample CURL, which is what I am using to try and achieve an automatic upload of a file.
curl http://testflightapp.com/api/builds.json
-F file=@testflightapp.ipa
-F api_token='your_api_token'
-F team_token='your_team_token'
-F notes='This build was uploaded via the upload API'
-F notify=True
-F distribution_lists='Internal, QA'
I have made an AppleScript that asks for "notes", the file and whether to notify:
property api_token : "SECRET"
property team_token : "SECRET"
property notify : "False"
property pathToIPA : ""
property whats_new : ""
set whats_new_prompt to (display dialog "What's new in this version?" default answer "")
set whats_new to text returned of whats_new_prompt
set pathToIPA to (choose file with prompt "Select IPA")
set pathToIPA to (pathToIPA as text)
set notify_question to display dialog "Notify testers?" buttons {"No", "Yes"} default button 2
set notify_answer to button returned of notify_question
if notify_answer is equal to "No" then
set notify to "False"
end if
if notify_answer is equal to "Yes" then
set notify to "True"
end if
uploadIPA(api_token, team_token, notify, whats_new, pathToIPA)
on uploadIPA(api_token, team_token, notify, whats_new, pathToIPA)
set TestFlightAPIUploadScript to "/usr/bin/curl" & ¬
" http://testflightapp.com/api/builds.json " & ¬
" –F " & "file=" & pathToIPA & ¬
" –F " & "api_token=" & api_token & ¬
" –F " & "team_token=" & team_token & ¬
" –F " & "notes=" & whats_new & ¬
" –F " & "notify=" & notify
set UploadResponse to do shell script TestFlightAPIUploadScript
return UploadResponse
if UploadResponse contains "Status: 200 OK" then
return "Success!"
else
return "Failure!"
end if
end uploadIPA
Where I seem to have problems is with the file location. I am not sure, but I think it's returning the wrong format with : instead of / for the path.
Thanks in advance for any 开发者_Go百科advice.
To get a POSIX path of the form /Users/you/file
instead of the classic Mac style path of Macintosh HD:Users:you:file
, you can use POSIX path of
: set pathToIPA to POSIX path of pathToIPA
. However, there are a couple of other things you should fix, in order of importance.
Use
quoted form of
for any user input which goes to the shell. Otherwise, if the user writesIt's good.
, the shell will see the literal'
. Worse, someone could write; rm -rf ~
, and then you'd be hosed.You don't need a
property
for every variable; they're really for constants.You're inconsistent with your naming. It'd be nice to just see
these_vars
,theseVars
, orTheseVars
, not all three. A rather minor point, though. A similarly minor point is that you can remove some extra variables, though this is again a style point.I don't know which you meant to have, but right after
return UploadResponse
, you have more code. That code won't run, because you just returned. Make sure you only leave one of those code paths!
You need to do #1; the other three things are definitely optional. Even so, this is how I'd rewrite the code:
property api_token : "SECRET"
property team_token : "SECRET"
set whats_new to text returned of ¬
(display dialog "What's new in this version?" default answer "")
set path_to_IPA to POSIX path of (choose file with prompt "Select IPA")
set notify_answer to button returned of ¬
(display dialog "Notify testers?" buttons {"No", "Yes"} default button 2)
if notify_answer is equal to "No" then
set notify to "False"
else if notify_answer is equal to "Yes" then
set notify to "True"
else
error "\"Notify testers\" check failed."
end if
upload_IPA(api_token, team_token, notify, whats_new, path_to_IPA)
on upload_IPA(api_token, team_token, notify, whats_new, path_to_IPA)
set test_flight_API_upload_script to "/usr/bin/curl" & ¬
" http://testflightapp.com/api/builds.json" & ¬
-- add `@` to refer to the file itself not its path
" -F " & "file=@" & quoted form of path_to_IPA & ¬
" -F " & "api_token=" & quoted form of api_token & ¬
" -F " & "team_token=" & quoted form of team_token & ¬
" -F " & "notes=" & quoted form of whats_new & ¬
" -F " & "notify=" & quoted form of notify
set upload_response to do shell script test_flight_API_upload_script
return upload_response
-- Delete the above line or this if
if upload_response contains "Status: 200 OK" then
return "Success!"
else
return "Failure!"
end if
end upload_IPA
精彩评论