这是一个示例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
我似乎遇到的问题是文件位置。我不确定,但我认为它返回了错误的格式:而不是/为路径。
提前感谢任何建议。
答案 0 :(得分:3)
要获取/Users/you/file
形式的POSIX路径而不是Macintosh HD:Users:you:file
的经典Mac风格路径,您可以使用POSIX path of
:set pathToIPA to POSIX path of pathToIPA
。但是,按照重要性的顺序,您还应该修复其他一些事项。
将quoted form of
用于进入shell的任何用户输入。否则,如果用户写It's good.
,shell将看到文字'
。更糟糕的是,有人可以写; rm -rf ~
,然后你就会受到冲击。
每个变量都不需要property
;他们真的是常数。
您的命名不一致。很高兴看到these_vars
,theseVars
或TheseVars
,而不是全部三个。但是,这是一个相当小的一点。一个类似的小点是你可以删除一些额外的变量,虽然这又是一个样式点。
我不知道你有什么意思,但是 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