Помогите с загрузкой файла AppleScript cURL - PullRequest
2 голосов
/ 03 декабря 2010

Это образец CURL, который я использую для автоматической загрузки файла.

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'

Я сделал AppleScript, который запрашивает «заметки», файл и нужно ли уведомлять:

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

Где у меня проблемы с расположением файла. Я не уверен, но я думаю, что он возвращает неправильный формат с: вместо / для пути.

Заранее спасибо за любой совет.

1 Ответ

3 голосов
/ 03 декабря 2010

Чтобы получить путь POSIX в форме /Users/you/file вместо классического пути в стиле Mac для Macintosh HD:Users:you:file, вы можете использовать POSIX path of: set pathToIPA to POSIX path of pathToIPA.Однако есть несколько других вещей, которые вы должны исправить в порядке важности.

  1. Используйте quoted form of для любого пользовательского ввода, который идет в оболочку.В противном случае, если пользователь пишет It's good., оболочка увидит литерал '.Хуже того, кто-то может написать ; rm -rf ~, и тогда вы будете заскучаны.

  2. Вам не нужно property для каждой переменной;они действительно для констант.

  3. Вы не согласны с вашим именем.Было бы неплохо просто посмотреть these_vars, theseVars или TheseVars, а не все три.Впрочем, довольно незначительный момент.Аналогично второстепенный момент заключается в том, что вы можете удалить некоторые дополнительные переменные, хотя это опять-таки точка стиля.

  4. Я не знаю, что вы хотели иметь, но сразу после return UploadResponse, у вас есть больше кода.Этот код не будет работать, потому что вы только что вернулись.Убедитесь, что вы оставили только один из этих путей кода!

Вам нужно сделать # 1;другие три вещи, безусловно, не являются обязательными.Тем не менее, вот как я бы переписал код:

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