AppleParty 是 37手游 iOS 团队研发,实现快速操作 App Store Connect 后台的自动化 macOS 工具。本文会介绍工具诞生的背景、使用教程和代码实现的简介,希望通过开源与大家分享成果,让更多人一起参与改进和完善,最后一起提高效率和拓展探索方向。
一、前言
大家好,很高兴告诉大家一件重要的事情,我们发起了一个开源项目 —— AppleParty(苹果派)(苹果派)。这是我们团队在上一个 开源的 App Store 后又一个尝试。AppleParty 这个项目是我们 37手游 iOS 团队内部孵化的一个产品,希望这个项目能作为一个引子,通过开源与大家分享成果,一起提高效率和拓展大家对未来的探索方向。
二、项目背景
目前,iOS/macOS App 上架 App Store,与苹果打交道的唯一方式,就是登陆苹果 App Store Connect 后台(https://appstoreconnect.apple.com,通过苹果后台进行 App 所有的信息和素材等送审准备工作。但是,目前苹果后台的自动化水平还处于零基础,很多重复的操作和功能,都没有提供批量处理方案,比如:
- 商店截图和预览视频的上传
- 应用内购商品的创建和更新
- App 本地化的元数据信息配置
- 开发者证书创建和管理
- …
App 分析的指标:
- 展示次数
- 产品页面查看次数
- 首次下载次数
- 净预订量
- 平台版本(iOS14.5、iOS15…)
- 页面类型(产品页面、商店表单、App内活动…)
- 用户来源(网页引荐来源、App 引荐来源、AppStore 浏览、AppStore 搜索、活动通知…)
- …
以上的 App 分析数据,每次只能下载一个指标的数据,每个 App 有十几个指标,操作这些重复的配置往往占用了运营同学非常长的时间,效率低且重复无聊的工作,导致我们长期无法做更多的时间开启和享受创造性。
基于以上种种痛点,我们从多个技术手段,打造了 Apple Party(苹果派对)工具! 通过尽可能快速实现操作的自动化流程,从而大大提高苹果后台的操作效率!
注:目前苹果有提供 App Store Connect API 方式,但是目前迭代的功能,还不能满足所有的需求,下文会展开说明。
2.1 Apple Party(苹果派)名字起源
Apple Party(苹果派)
我们倡导工作之余,丰富多彩的生活要领,健身、旅游、聚会、培养艺术兴趣等等。
- Party:派对 即 “宴会,聚会” 的意思,大家聚在一起庆祝和休闲的一种活动。
所以,Apple Party(苹果派对),简称:苹果派,就是希望大家在使用苹果的服务时,像似参加一场苹果派对,尽情欢乐,欢聚宴会~
我们希望,大家在 AppleOS 生态下开发时,可以提高效率,专注于核心内容,然后愉快派对!
三、使用说明
3.1 注意事件
目前实现的功能
- 内购买项目管理(批量创建和更新);
- 批量商店图和预览视频上传和更新;
- 数据报表批量下载(后续开源);
- 邮件发送工具;
- 二维码扫描和生成工具;
注:内购买项目和商店素材上传,暂时只支持 iOS app,未来会考虑支持 macOS app、tvOS app。
环境依赖
- 支持 macOS 10.13 和以上系统
- 依赖 Transporter.app
- 依赖 Xcode(Transporter.app 依赖)
3.1 安装包下载
目前我们在 GitHub 开源 37iOS/AppleParty,所以提供GitHub 安装包:
update 更新
目前已经使用 Sparkle 来实现版本更新,默认启动就会自动检查更新,也可以通过菜单栏进行手动检查更新。
3.2 使用介绍
因为账号记录是存放在 Keychain 里,所以首次打开时,会提示需要访问钥匙串:
如果点击“拒绝”,则不会保存账号和密码信息。
然后,会显示主界面:
默认情况下弹出登陆界面,也可以点击取消登陆(快捷键esc
):
现在默认登陆都需要双重认证:
如果需要使用短信验证码,可以点击“发送短信验证码”,如果希望通过语言验证码,可以勾选“拨打语言来电”切换:
3.2.1 批量上传内购买项目和商店素材
点击“我的 App”,显示帐号所有的App,可以操作内购买项目管理和商店素材管理。
点击内购管理,显示当前已有的内购品项列表:
- 刷新:刷新当前App的内购品项列表(刚刚上传的品项不会马上生效,所以可以手动刷新)
- 导入表格:通过固定表格的形式,批量创建内购品项
- 导出表格:导出所有品项的信息 Excel 表
- 导出品项 ID:导出品项productID和内购品项id的对应表
- 下载表格示例:批量创建内购品项的示例 Excel 表格
点击 “导入表格”,可选择excel表进行导入,然后会显示导入的品项明细表。
如上图所示,列表1和2是自定义的送审截图,所以需要点击右下角的“上传截图”选定。
“提交”后,会显示下面的界面,如未设置专用密码,首次需要设置,或者点击右下角“设置特殊密码”重新设置。
专用密码的生成参考文档:使用 App 专用密码 - Apple 支持 (中国)
上传失败时,查看 ERROR 内容就是错误内容:
批量素材上传
点击“素材一键导入”一键上传,素材可以分别在不同尺寸下显示。
对应的尺寸,上传视频和截图后,填写排序的位置和视频海报帧:
可点击右上角
?
按钮查看帮助文档。
3.2.2 其它扩展功能
邮箱功能,一方面是可以设置快速邮件发送,另一方面是工具效率自动邮箱的通知需求。
二维码功能也是一个工作中的小痛点。
四、代码实现简解
4.1 上传内购买项目和商店素材
使用的是苹果提供的 Transporter 工具链,提供了上会的命令,有 3 个工具:
- Xcode.app
- Application Loader.app
- Transporter.app
其中,Application Loader 已经弃用了,可以忽视。Transporter
命令所有的目录:
Xcode.app:
/Applications/Xcode.app/Contents/SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/bin/iTMSTransporter
Transporter.app:
/Applications/Transporter.app/Contents/itms/bin/iTMSTransporter
4.1.1 Transporter 命令使用
Lookup Metadata 模式
获取 app 信息,获取到一个 xxx.itmsp 包,里面有关于 app 版本和内购品项等信息的 xml 格式文件。
iTMSTransporter -m lookupMetadata -u [user] -p [password] -apple_id(-apple_ids) -destination [output_path]
示例:
同时获取多个 app 信息:
iTMSTransporter -m lookupMetadata -u xxx@37.com -p 专用密码 -apple_ids 10 xxxx,多个appid,xxx -destination /Users/37/Desktop/output
获取单个 app 信息:
iTMSTransporter -m lookupMetadata -u 账号邮箱 -p 专用密码 -apple_id 某个appid -destination /Users/37/Desktop/output
Provider 模式
查询供应商,也就是开发者账号的名字和团队 id:
iTMSTransporter -m provider -u [user] -p [password]
示例:
iTMSTransporter -m provider -u xxx@37.com -p 专用密码
输出内容:
Provider