Files
Open-AutoGLM/phone_agent/config/apps_ios.py
2025-12-12 17:58:20 +08:00

340 lines
11 KiB
Python

"""App name to iOS bundle ID mapping for supported applications.
Based on iOS app bundle ID conventions and common iOS applications.
Bundle IDs are in the format: com.company.appName
"""
APP_PACKAGES_IOS: dict[str, str] = {
# Tencent Apps (腾讯系)
"微信": "com.tencent.xin",
"企业微信": "com.tencent.ww",
"微信读书": "com.tencent.weread",
"微信听书": "com.tencent.wehear",
"QQ": "com.tencent.mqq",
"QQ音乐": "com.tencent.QQMusic",
"QQ阅读": "com.tencent.qqreaderiphone",
"QQ邮箱": "com.tencent.qqmail",
"QQ浏览器": "com.tencent.mttlite",
"TIM": "com.tencent.tim",
"微视": "com.tencent.microvision",
"腾讯新闻": "com.tencent.info",
"腾讯视频": "com.tencent.live4iphone",
"腾讯动漫": "com.tencent.ied.app.comic",
"腾讯微云": "com.tencent.weiyun",
"腾讯体育": "com.tencent.sportskbs",
"腾讯文档": "com.tencent.txdocs",
"腾讯翻译君": "com.tencent.qqtranslator",
"腾讯课堂": "com.tencent.edu",
"腾讯地图": "com.tencent.sosomap",
"小鹅拼拼": "com.tencent.dwdcoco",
"全民k歌": "com.tencent.QQKSong",
# Alibaba Apps (阿里系)
"支付宝": "com.alipay.iphoneclient",
"钉钉": "com.laiwang.DingTalk",
"闲鱼": "com.taobao.fleamarket",
"淘宝": "com.taobao.taobao4iphone",
"斗鱼": "tv.douyu.live",
"天猫": "com.taobao.tmall",
"口碑": "com.taobao.kbmeishi",
"饿了么": "me.ele.ios.eleme",
"高德地图": "com.autonavi.amap",
"UC浏览器": "com.ucweb.iphone.lowversion",
"一淘": "com.taobao.etaocoupon",
"飞猪": "com.taobao.travel",
"虾米音乐": "com.xiami.spark",
"淘票票": "com.taobao.movie.MoviePhoneClient",
"优酷": "com.youku.YouKu",
"菜鸟裹裹": "com.cainiao.cnwireless",
"土豆视频": "com.tudou.tudouiphone",
# ByteDance Apps (字节系)
"抖音": "com.ss.iphone.ugc.Aweme",
"抖音极速版": "com.ss.iphone.ugc.aweme.lite",
"抖音火山版": "com.ss.iphone.ugc.Live",
"Tiktok": "com.zhiliaoapp.musically",
"飞书": "com.bytedance.ee.lark",
"今日头条": "com.ss.iphone.article.News",
"西瓜视频": "com.ss.iphone.article.Video",
"皮皮虾": "com.bd.iphone.super",
# Meituan Apps (美团系)
"美团": "com.meituan.imeituan",
"美团外卖": "com.meituan.itakeaway",
"大众点评": "com.dianping.dpscope",
"美团优选": "com.meituan.iyouxuan",
"美团优选团长": "com.meituan.igrocery.gh",
"美团骑手": "com.meituan.banma.homebrew",
"美团开店宝": "com.meituan.imerchantbiz",
"美团拍店": "com.meituan.pai",
"美团众包": "com.meituan.banma.crowdsource",
"美团买菜": "com.baobaoaichi.imaicai",
# JD Apps (京东系)
"京东": "com.360buy.jdmobile",
"京东读书": "com.jd.reader",
# NetEase Apps (网易系)
"网易新闻": "com.netease.news",
"网易云音乐": "com.netease.cloudmusic",
"网易邮箱大师": "com.netease.macmail",
"网易严选": "com.netease.yanxuan",
"网易公开课": "com.netease.videoHD",
"网易有道词典": "youdaoPro",
"有道云笔记": "com.youdao.note.YoudaoNoteMac",
# Baidu Apps (百度系)
"百度": "com.baidu.BaiduMobile",
"百度网盘": "com.baidu.netdisk",
"百度贴吧": "com.baidu.tieba",
"百度地图": "com.baidu.map",
"百度阅读": "com.baidu.yuedu",
"百度翻译": "com.baidu.translate",
"百度文库": "com.baidu.Wenku",
"百度视频": "com.baidu.videoiphone",
"百度输入法": "com.baidu.inputMethod",
# Kuaishou Apps (快手系)
"快手": "com.jiangjia.gif",
"快手极速版": "com.kuaishou.nebula",
# Other Popular Apps
"哔哩哔哩": "tv.danmaku.bilianime",
"芒果TV": "com.hunantv.imgotv",
"苏宁易购": "SuningEMall",
"微博": "com.sina.weibo",
"微博极速版": "com.sina.weibolite",
"微博国际": "com.weibo.international",
"墨客": "com.moke.moke.iphone",
"豆瓣": "com.douban.frodo",
"知乎": "com.zhihu.ios",
"小红书": "com.xingin.discover",
"喜马拉雅": "com.gemd.iting",
"得到": "com.luojilab.LuoJiFM-IOS",
"得物": "com.siwuai.duapp",
"起点读书": "m.qidian.QDReaderAppStore",
"番茄小说": "com.dragon.read",
"书旗小说": "com.shuqicenter.reader",
"拼多多": "com.xunmeng.pinduoduo",
"多点": "com.dmall.dmall",
"便利蜂": "com.bianlifeng.customer.ios",
"亿通行": "com.ruubypay.yitongxing",
"云闪付": "com.unionpay.chsp",
"大都会Metro": "com.DDH.SHSubway",
"爱奇艺视频": "com.qiyi.iphone",
"搜狐视频": "com.sohu.iPhoneVideo",
"搜狐新闻": "com.sohu.newspaper",
"搜狗浏览器": "com.sogou.SogouExplorerMobile",
"虎牙": "com.yy.kiwi",
"比心": "com.yitan.bixin",
"转转": "com.wuba.zhuanzhuan",
"YY": "yyvoice",
"绿洲": "com.sina.oasis",
"陌陌": "com.wemomo.momoappdemo1",
"什么值得买": "com.smzdm.client.ios",
"美团秀秀": "com.meitu.mtxx",
"唯品会": "com.vipshop.iphone",
"唱吧": "com.changba.ktv",
"酷狗音乐": "com.kugou.kugou1002",
"CSDN": "net.csdn.CsdnPlus",
"多抓鱼": "com.duozhuyu.dejavu",
"自如": "com.ziroom.ZiroomProject",
"携程": "ctrip.com",
"去哪儿旅行": "com.qunar.iphoneclient8",
"Xmind": "net.xmind.brownieapp",
"印象笔记": "com.yinxiang.iPhone",
"欧陆词典": "eusoft.eudic.pro",
"115": "com.115.personal",
"名片全能王": "com.intsig.camcard.lite",
"中国银行": "com.boc.BOCMBCI",
"58同城": "com.taofang.iphone",
# International Apps
"Google Chrome": "com.google.chrome.ios",
"Gmail": "com.google.Gmail",
"Facebook": "com.facebook.Facebook",
"Firefox": "org.mozilla.ios.Firefox",
"Messenger": "com.facebook.Messenger",
"Instagram": "com.burbn.instagram",
"Starbucks": "com.starbucks.mystarbucks",
"Luckin Coffee": "com.bjlc.luckycoffee",
"Line": "jp.naver.line",
"Linkedin": "com.linkedin.LinkedIn",
"Dcard": "com.dcard.app.Dcard",
"Youtube": "com.google.ios.youtube",
"Spotify": "com.spotify.client",
"Netflix": "com.netflix.Netflix",
"Twitter": "com.atebits.Tweetie2",
"WhatsApp": "net.whatsapp.WhatsApp",
# Apple Native Apps (Apple 原生应用)
"Safari": "com.apple.mobilesafari",
"App Store": "com.apple.AppStore",
"设置": "com.apple.Preferences",
"相机": "com.apple.camera",
"照片": "com.apple.mobileslideshow",
"时钟": "com.apple.mobiletimer",
"闹钟": "com.apple.mobiletimer",
"备忘录": "com.apple.mobilenotes",
"提醒事项": "com.apple.reminders",
"快捷指令": "com.apple.shortcuts",
"天气": "com.apple.weather",
"日历": "com.apple.mobilecal",
"地图": "com.apple.Maps",
"电话": "com.apple.mobilephone",
"通讯录": "com.apple.MobileAddressBook",
"信息": "com.apple.MobileSMS",
"Facetime": "com.apple.facetime",
"FaceTime": "com.apple.facetime",
"计算器": "com.apple.calculator",
"家庭": "com.apple.Home",
"健康": "com.apple.Health",
"钱包": "com.apple.Passbook",
"股市": "com.apple.stocks",
"图书": "com.apple.iBooks",
"新闻": "com.apple.news",
"视频": "com.apple.tv",
"文件": "com.apple.DocumentsApp",
"邮件": "com.apple.mobilemail",
"查找": "com.apple.findmy",
"翻译": "com.apple.Translate",
"音乐": "com.apple.Music",
"播客": "com.apple.podcasts",
"库乐队": "com.apple.mobilegarageband",
"语音备忘录": "com.apple.VoiceMemos",
"iMovie": "com.apple.iMovie",
"Watch": "com.apple.Bridge",
"Apple Store": "com.apple.store.Jolly",
"TestFlight": "com.apple.TestFlight",
"Keynote": "com.apple.Keynote",
"Keynote 讲演": "com.apple.Keynote",
}
def get_bundle_id(app_name: str) -> str | None:
"""
Get the iOS bundle ID for an app.
Args:
app_name: The display name of the app.
Returns:
The iOS bundle ID, or None if not found.
"""
return APP_PACKAGES_IOS.get(app_name)
def get_app_name(bundle_id: str) -> str | None:
"""
Get the app name from an iOS bundle ID.
Args:
bundle_id: The iOS bundle ID.
Returns:
The display name of the app, or None if not found.
"""
for name, bid in APP_PACKAGES_IOS.items():
if bid == bundle_id:
return name
return None
def list_supported_apps() -> list[str]:
"""
Get a list of all supported iOS app names.
Returns:
List of app names.
"""
return list(APP_PACKAGES_IOS.keys())
def check_app_installed(app_name: str, wda_url: str = "http://localhost:8100") -> bool:
"""
Check if an app is installed on the iOS device.
Args:
app_name: The display name of the app.
wda_url: WebDriverAgent URL.
Returns:
True if app is installed, False otherwise.
Note:
This uses the iTunes API to get app information. For actual
installation check on device, you would need to use WDA's
app listing capabilities or URL scheme checking.
"""
bundle_id = get_bundle_id(app_name)
if not bundle_id:
return False
try:
import requests
# Query iTunes API for app info
url = f"https://itunes.apple.com/lookup?bundleId={bundle_id}"
response = requests.get(url, timeout=10)
if response.status_code == 200:
data = response.json()
return data.get("resultCount", 0) > 0
except ImportError:
print("Error: requests library required. Install: pip install requests")
except Exception as e:
print(f"Error checking app installation: {e}")
return False
def get_app_info_from_itunes(bundle_id: str) -> dict | None:
"""
Get app information from iTunes API using bundle ID.
Args:
bundle_id: The iOS bundle ID.
Returns:
Dictionary with app info (name, version, etc.) or None if not found.
"""
try:
import requests
url = f"https://itunes.apple.com/lookup?bundleId={bundle_id}"
response = requests.get(url, timeout=10)
if response.status_code == 200:
data = response.json()
results = data.get("results", [])
if results:
return results[0]
except ImportError:
print("Error: requests library required. Install: pip install requests")
except Exception as e:
print(f"Error fetching app info: {e}")
return None
def get_app_info_by_id(app_store_id: str) -> dict | None:
"""
Get app information from iTunes API using App Store ID.
Args:
app_store_id: The numeric App Store ID (e.g., "414478124" for WeChat).
Returns:
Dictionary with app info or None if not found.
"""
try:
import requests
url = f"https://itunes.apple.com/lookup?id={app_store_id}"
response = requests.get(url, timeout=10)
if response.status_code == 200:
data = response.json()
results = data.get("results", [])
if results:
return results[0]
except ImportError:
print("Error: requests library required. Install: pip install requests")
except Exception as e:
print(f"Error fetching app info by ID: {e}")
return None