开发者

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.

  1. Use quoted form of for any user input which goes to the shell. Otherwise, if the user writes It's good., the shell will see the literal '. Worse, someone could write ; rm -rf ~, and then you'd be hosed.

  2. You don't need a property for every variable; they're really for constants.

  3. You're inconsistent with your naming. It'd be nice to just see these_vars, theseVars, or TheseVars, 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.

  4. 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜