iTunes 应用程序加载器 - 自动化

9

最近苹果更改了iTunes Connect界面,现在需要使用Application Loader上传应用程序。

虽然这很好,但我需要一个自动化脚本来完成我的工作。

如何自动化一个像App Loader这样的应用程序?

我想到了用AppleScript编写一些东西...但我不知道它公开了哪些操作(如果有的话)。我在某个地方发现可以从AppleScript中进行GUI脚本编写,但我找不到相关文档。

我需要...一些方式来触发输入操作(鼠标点击/键盘输入),并从各种显示的控件中读取文本。

如果Python/Ruby也能实现那就太好了,但是AppleScript也可以。

操作系统版本为OS X 10.6.4。

任何建议都将不胜感激。

谢谢。

3个回答

19

Application Loader的文档提到了一个名为altool的工具,可以用于验证并上传您的应用二进制文件到App Store。 (https://itunesconnect.apple.com/docs/UsingApplicationLoader.pdf)

相关信息:

您可以使用Application Loader的命令行工具altool来验证和上传您的应用程序二进制文件到App Store。

要在上传之前验证生成的构建或自动上传有效构建至App Store,您可以将altool包括在您的持续集成系统中。 altool位于Application Loader.app / Contents / Frameworks / ITunesSoftwareService.framework / Versions / A / Support /文件夹中(因此完整路径将是/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool)

要运行altool,请在命令行指定以下之一:

$ altool --validate-app -f file -u username [-p password] [--output-format xml]

$ altool --upload-app -f file -u username [-p password] [--output-format xml]

其中:

--validate-app 指定您要验证指定的应用程序。

--upload-app 指定您要上传指定的应用程序。

-f file 指定要验证或上传的应用程序的路径和文件名。

-u username 指定您的用户名(Apple ID)。

-p password 指定您的用户密码。

--output-format [xml | normal] 指定您希望Application Loader以结构化XML格式或非结构化文本格式返回输出信息。默认情况下,Application Loader会以文本格式返回输出信息。


抱歉,我知道这是一个老问题,但它仍然出现在谷歌上,我希望这些新信息能够得到公开。 - Chad Stewart
Chad,感谢你的补充。我已经转向其他事情了,那时我用Cocoa脚本自动化了应用程序加载器,因为CLI界面不可用。很高兴现在有命令行界面了。干杯! - Alexandru Nedelcu
感谢您发布了“altool”的完整路径。 - Denys Kniazhev-Support Ukraine

2
为了查看应用程序支持的任何Applescript命令,您需要查看应用程序的字典。从我在不久前发布的类似问题的答案中可以找到:(链接)
要在Applescript编辑器中打开应用程序的字典,请转到文件>打开字典...。操作系统知道支持Applescript的所有应用程序列表将出现,但操作系统无法捕获它们,因此您可以使用“浏览”按钮。如果应用程序不支持Applescript,则无法在对话框窗口中选择它。
这里有个警告,即某些应用程序应该支持但实际上不支持的某些命令,或者应用程序可能只支持最低限度的要求。这些都非常简单,例如打开、退出等。您的情况可能会有所不同。
可以在OS X自动化站点上找到开始GUI脚本 的信息。GUI脚本是一种奇怪的方式,我认为您不能获取屏幕控件的值,而只能设置它们。如果没有其他途径可行,才应使用此方法。
如果您希望使用Python,则可以查看py-appscript项目,但这仍然取决于应用程序的Applescript支持。

谢谢Philip...你的py-appscript建议很有用。不幸的是,该应用程序没有字典,所以UI脚本是我唯一的选择。但是我认为我成功了。你可以通过类似于“获取第1行文本字段1的值”的方式获取某个元素的值;这对于错误报告非常有用。 - Alexandru Nedelcu
我对缺乏字典并不感到惊讶。似乎Applescript已经在苹果公司中失宠了。他们只在更公开、旗舰应用程序中实现,即使如此,也可以说它们是功能不完整的。在这些情况下,GUI脚本编写确实是唯一的选择。我知道的唯一一个真正的陷阱(除了语法和跟踪您正在操作的控件之外)是意外的警报和对话框窗口可能会导致脚本出错。祝你好运! - Philip Regan
是的,我之前遇到过一些不必要的警告 / 对话框问题。但为了尽量减少这种情况,在脚本启动时,我首先终止应用程序以摆脱先前的状态。如果无法正常终止(例如应用程序要求确认或其他原因),那么我就会执行“kill -9”。在每个操作上重新开始肯定对此有很大帮助。 - Alexandru Nedelcu

2
你可以将以下任何一个命令单独使用或全部放入一个bash脚本中,以实现自动化存档、提取和上传到AppStore Connect的过程。

存档

Original Answer: "最初的回答"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" clean archive -configuration release -sdk iphoneos -archivePath ".build/${TEMP_BUILD}.xcarchive"

导出为IPA文件

xcodebuild -exportArchive -archivePath  ".build/${TEMP_BUILD}.xcarchive" -exportOptionsPlist  "ExportOptions.plist" -exportPath  ".build/${TEMP_BUILD}.ipa"

上传IPA至TestFlight

altool --upload-app -f ".build/${TEMP_BUILD}.ipa/${APP_NAME}.ipa" -u $APP_STORE_USERNAME -p $APP_STORE_PASSWORD

1) If you don't know what should be your ExportOptions.plist file just take a look here.

2) To use altool from anywhere in the terminal you could add it to your PATH env variable by typing in terminal:

MacBook-Pro:~ denis$ export PATH=$PATH:/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/
MacBook-Pro:~ denis$ source ~/.bash_profile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接