@midscene/ios 1.2.1 → 1.2.2-beta-20260115065918.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,190 @@ import { WDAManager, WebDriverClient } from "@midscene/webdriver";
11
11
  import { exec } from "node:child_process";
12
12
  import { platform } from "node:os";
13
13
  import { promisify } from "node:util";
14
+ const defaultAppNameMapping = {
15
+ 微信: 'com.tencent.xin',
16
+ 企业微信: 'com.tencent.ww',
17
+ 微信读书: 'com.tencent.weread',
18
+ 微信听书: 'com.tencent.wehear',
19
+ QQ: 'com.tencent.mqq',
20
+ QQ音乐: 'com.tencent.QQMusic',
21
+ QQ阅读: 'com.tencent.qqreaderiphone',
22
+ QQ邮箱: 'com.tencent.qqmail',
23
+ QQ浏览器: 'com.tencent.mttlite',
24
+ TIM: 'com.tencent.tim',
25
+ 微视: 'com.tencent.microvision',
26
+ 腾讯新闻: 'com.tencent.info',
27
+ 腾讯视频: 'com.tencent.live4iphone',
28
+ 腾讯动漫: 'com.tencent.ied.app.comic',
29
+ 腾讯微云: 'com.tencent.weiyun',
30
+ 腾讯体育: 'com.tencent.sportskbs',
31
+ 腾讯文档: 'com.tencent.txdocs',
32
+ 腾讯翻译君: 'com.tencent.qqtranslator',
33
+ 腾讯课堂: 'com.tencent.edu',
34
+ 腾讯地图: 'com.tencent.sosomap',
35
+ 小鹅拼拼: 'com.tencent.dwdcoco',
36
+ 全民k歌: 'com.tencent.QQKSong',
37
+ 支付宝: 'com.alipay.iphoneclient',
38
+ 钉钉: 'com.laiwang.DingTalk',
39
+ 闲鱼: 'com.taobao.fleamarket',
40
+ 淘宝: 'com.taobao.taobao4iphone',
41
+ 斗鱼: 'tv.douyu.live',
42
+ 天猫: 'com.taobao.tmall',
43
+ 口碑: 'com.taobao.kbmeishi',
44
+ 饿了么: 'me.ele.ios.eleme',
45
+ 高德地图: 'com.autonavi.amap',
46
+ UC浏览器: 'com.ucweb.iphone.lowversion',
47
+ 一淘: 'com.taobao.etaocoupon',
48
+ 飞猪: 'com.taobao.travel',
49
+ 虾米音乐: 'com.xiami.spark',
50
+ 淘票票: 'com.taobao.movie.MoviePhoneClient',
51
+ 优酷: 'com.youku.YouKu',
52
+ 菜鸟裹裹: 'com.cainiao.cnwireless',
53
+ 土豆视频: 'com.tudou.tudouiphone',
54
+ 抖音: 'com.ss.iphone.ugc.Aweme',
55
+ 抖音极速版: 'com.ss.iphone.ugc.aweme.lite',
56
+ 抖音火山版: 'com.ss.iphone.ugc.Live',
57
+ Tiktok: 'com.zhiliaoapp.musically',
58
+ 飞书: 'com.bytedance.ee.lark',
59
+ 今日头条: 'com.ss.iphone.article.News',
60
+ 西瓜视频: 'com.ss.iphone.article.Video',
61
+ 皮皮虾: 'com.bd.iphone.super',
62
+ 美团: 'com.meituan.imeituan',
63
+ 美团外卖: 'com.meituan.itakeaway',
64
+ 大众点评: 'com.dianping.dpscope',
65
+ 美团优选: 'com.meituan.iyouxuan',
66
+ 美团优选团长: 'com.meituan.igrocery.gh',
67
+ 美团骑手: 'com.meituan.banma.homebrew',
68
+ 美团开店宝: 'com.meituan.imerchantbiz',
69
+ 美团拍店: 'com.meituan.pai',
70
+ 美团众包: 'com.meituan.banma.crowdsource',
71
+ 美团买菜: 'com.baobaoaichi.imaicai',
72
+ 京东: 'com.360buy.jdmobile',
73
+ 京东读书: 'com.jd.reader',
74
+ 网易新闻: 'com.netease.news',
75
+ 网易云音乐: 'com.netease.cloudmusic',
76
+ 网易邮箱大师: 'com.netease.macmail',
77
+ 网易严选: 'com.netease.yanxuan',
78
+ 网易公开课: 'com.netease.videoHD',
79
+ 网易有道词典: 'youdaoPro',
80
+ 有道云笔记: 'com.youdao.note.YoudaoNoteMac',
81
+ 百度: 'com.baidu.BaiduMobile',
82
+ 百度网盘: 'com.baidu.netdisk',
83
+ 百度贴吧: 'com.baidu.tieba',
84
+ 百度地图: 'com.baidu.map',
85
+ 百度阅读: 'com.baidu.yuedu',
86
+ 百度翻译: 'com.baidu.translate',
87
+ 百度文库: 'com.baidu.Wenku',
88
+ 百度视频: 'com.baidu.videoiphone',
89
+ 百度输入法: 'com.baidu.inputMethod',
90
+ 快手: 'com.jiangjia.gif',
91
+ 快手极速版: 'com.kuaishou.nebula',
92
+ 哔哩哔哩: 'tv.danmaku.bilianime',
93
+ 芒果TV: 'com.hunantv.imgotv',
94
+ 苏宁易购: 'SuningEMall',
95
+ 微博: 'com.sina.weibo',
96
+ 微博极速版: 'com.sina.weibolite',
97
+ 微博国际: 'com.weibo.international',
98
+ 墨客: 'com.moke.moke.iphone',
99
+ 豆瓣: 'com.douban.frodo',
100
+ 知乎: 'com.zhihu.ios',
101
+ 小红书: 'com.xingin.discover',
102
+ 喜马拉雅: 'com.gemd.iting',
103
+ 得到: 'com.luojilab.LuoJiFM-IOS',
104
+ 得物: 'com.siwuai.duapp',
105
+ 起点读书: 'm.qidian.QDReaderAppStore',
106
+ 番茄小说: 'com.dragon.read',
107
+ 书旗小说: 'com.shuqicenter.reader',
108
+ 拼多多: 'com.xunmeng.pinduoduo',
109
+ 多点: 'com.dmall.dmall',
110
+ 便利蜂: 'com.bianlifeng.customer.ios',
111
+ 亿通行: 'com.ruubypay.yitongxing',
112
+ 云闪付: 'com.unionpay.chsp',
113
+ 大都会Metro: 'com.DDH.SHSubway',
114
+ 爱奇艺视频: 'com.qiyi.iphone',
115
+ 搜狐视频: 'com.sohu.iPhoneVideo',
116
+ 搜狐新闻: 'com.sohu.newspaper',
117
+ 搜狗浏览器: 'com.sogou.SogouExplorerMobile',
118
+ 虎牙: 'com.yy.kiwi',
119
+ 比心: 'com.yitan.bixin',
120
+ 转转: 'com.wuba.zhuanzhuan',
121
+ YY: 'yyvoice',
122
+ 绿洲: 'com.sina.oasis',
123
+ 陌陌: 'com.wemomo.momoappdemo1',
124
+ 什么值得买: 'com.smzdm.client.ios',
125
+ 美团秀秀: 'com.meitu.mtxx',
126
+ 唯品会: 'com.vipshop.iphone',
127
+ 唱吧: 'com.changba.ktv',
128
+ 酷狗音乐: 'com.kugou.kugou1002',
129
+ CSDN: 'net.csdn.CsdnPlus',
130
+ 多抓鱼: 'com.duozhuyu.dejavu',
131
+ 自如: 'com.ziroom.ZiroomProject',
132
+ 携程: 'ctrip.com',
133
+ 去哪儿旅行: 'com.qunar.iphoneclient8',
134
+ Xmind: 'net.xmind.brownieapp',
135
+ 印象笔记: 'com.yinxiang.iPhone',
136
+ 欧陆词典: 'eusoft.eudic.pro',
137
+ 115: 'com.115.personal',
138
+ 名片全能王: 'com.intsig.camcard.lite',
139
+ 中国银行: 'com.boc.BOCMBCI',
140
+ '58同城': 'com.taofang.iphone',
141
+ 'Google Chrome': 'com.google.chrome.ios',
142
+ Gmail: 'com.google.Gmail',
143
+ Facebook: 'com.facebook.Facebook',
144
+ Firefox: 'org.mozilla.ios.Firefox',
145
+ Messenger: 'com.facebook.Messenger',
146
+ Instagram: 'com.burbn.instagram',
147
+ Starbucks: 'com.starbucks.mystarbucks',
148
+ 'Luckin Coffee': 'com.bjlc.luckycoffee',
149
+ Line: 'jp.naver.line',
150
+ Linkedin: 'com.linkedin.LinkedIn',
151
+ Dcard: 'com.dcard.app.Dcard',
152
+ Youtube: 'com.google.ios.youtube',
153
+ Spotify: 'com.spotify.client',
154
+ Netflix: 'com.netflix.Netflix',
155
+ Twitter: 'com.atebits.Tweetie2',
156
+ WhatsApp: 'net.whatsapp.WhatsApp',
157
+ Safari: 'com.apple.mobilesafari',
158
+ 'App Store': 'com.apple.AppStore',
159
+ 设置: 'com.apple.Preferences',
160
+ 相机: 'com.apple.camera',
161
+ 照片: 'com.apple.mobileslideshow',
162
+ 时钟: 'com.apple.mobiletimer',
163
+ 闹钟: 'com.apple.mobiletimer',
164
+ 备忘录: 'com.apple.mobilenotes',
165
+ 提醒事项: 'com.apple.reminders',
166
+ 快捷指令: 'com.apple.shortcuts',
167
+ 天气: 'com.apple.weather',
168
+ 日历: 'com.apple.mobilecal',
169
+ 地图: 'com.apple.Maps',
170
+ 电话: 'com.apple.mobilephone',
171
+ 通讯录: 'com.apple.MobileAddressBook',
172
+ 信息: 'com.apple.MobileSMS',
173
+ Facetime: 'com.apple.facetime',
174
+ FaceTime: 'com.apple.facetime',
175
+ 计算器: 'com.apple.calculator',
176
+ 家庭: 'com.apple.Home',
177
+ 健康: 'com.apple.Health',
178
+ 钱包: 'com.apple.Passbook',
179
+ 股市: 'com.apple.stocks',
180
+ 图书: 'com.apple.iBooks',
181
+ 新闻: 'com.apple.news',
182
+ 视频: 'com.apple.tv',
183
+ 文件: 'com.apple.DocumentsApp',
184
+ 邮件: 'com.apple.mobilemail',
185
+ 查找: 'com.apple.findmy',
186
+ 翻译: 'com.apple.Translate',
187
+ 音乐: 'com.apple.Music',
188
+ 播客: 'com.apple.podcasts',
189
+ 库乐队: 'com.apple.mobilegarageband',
190
+ 语音备忘录: 'com.apple.VoiceMemos',
191
+ iMovie: 'com.apple.iMovie',
192
+ Watch: 'com.apple.Bridge',
193
+ 'Apple Store': 'com.apple.store.Jolly',
194
+ TestFlight: 'com.apple.TestFlight',
195
+ Keynote: 'com.apple.Keynote',
196
+ 'Keynote 讲演': 'com.apple.Keynote'
197
+ };
14
198
  const debugIOS = getDebug('webdriver:ios');
15
199
  class IOSWebDriverClient extends WebDriverClient {
16
200
  async launchApp(bundleId) {
@@ -521,12 +705,21 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
521
705
  throw new Error(`Unable to connect to iOS device ${this.deviceId}: ${e}`);
522
706
  }
523
707
  }
708
+ setAppNameMapping(mapping) {
709
+ this.appNameMapping = mapping;
710
+ }
711
+ resolveBundleId(appName) {
712
+ if (appName in this.appNameMapping) return this.appNameMapping[appName];
713
+ }
524
714
  async launch(uri) {
525
715
  this.uri = uri;
526
716
  try {
527
717
  debugDevice(`Launching app: ${uri}`);
528
718
  if (uri.startsWith('http://') || uri.startsWith('https://') || uri.includes('://')) await this.openUrl(uri);
529
- else await this.wdaBackend.launchApp(uri);
719
+ else {
720
+ const resolvedUri = this.resolveBundleId(uri) ?? uri;
721
+ await this.wdaBackend.launchApp(resolvedUri);
722
+ }
530
723
  debugDevice(`Successfully launched: ${uri}`);
531
724
  } catch (error) {
532
725
  debugDevice(`Error launching ${uri}: ${error}`);
@@ -907,6 +1100,7 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
907
1100
  _define_property(this, "customActions", void 0);
908
1101
  _define_property(this, "wdaBackend", void 0);
909
1102
  _define_property(this, "wdaManager", void 0);
1103
+ _define_property(this, "appNameMapping", {});
910
1104
  _define_property(this, "interfaceType", 'ios');
911
1105
  _define_property(this, "uri", void 0);
912
1106
  _define_property(this, "options", void 0);
@@ -927,7 +1121,7 @@ const runWdaRequestParamSchema = z.object({
927
1121
  endpoint: z.string().describe('WebDriver API endpoint'),
928
1122
  data: z.object({}).passthrough().optional().describe('Optional request body data as JSON object')
929
1123
  });
930
- const launchParamSchema = z.string().describe('App bundle ID or URL to launch');
1124
+ const launchParamSchema = z.string().describe('App bundle ID, URL, or app name');
931
1125
  const createPlatformActions = (device)=>({
932
1126
  RunWdaRequest: defineAction({
933
1127
  name: 'RunWdaRequest',
@@ -1023,7 +1217,12 @@ class IOSAgent extends Agent {
1023
1217
  return (...args)=>action(args[0]);
1024
1218
  }
1025
1219
  constructor(device, opts){
1026
- super(device, opts), agent_define_property(this, "launch", void 0), agent_define_property(this, "runWdaRequest", void 0), agent_define_property(this, "home", void 0), agent_define_property(this, "appSwitcher", void 0);
1220
+ super(device, opts), agent_define_property(this, "launch", void 0), agent_define_property(this, "runWdaRequest", void 0), agent_define_property(this, "home", void 0), agent_define_property(this, "appSwitcher", void 0), agent_define_property(this, "appNameMapping", void 0);
1221
+ this.appNameMapping = {
1222
+ ...defaultAppNameMapping,
1223
+ ...opts?.appNameMapping || {}
1224
+ };
1225
+ device.setAppNameMapping(this.appNameMapping);
1027
1226
  this.launch = this.createActionWrapper('Launch');
1028
1227
  this.runWdaRequest = this.createActionWrapper('RunWdaRequest');
1029
1228
  this.home = this.createActionWrapper('IOSHomeButton');
@@ -1088,7 +1287,7 @@ class IOSMCPServer extends BaseMCPServer {
1088
1287
  constructor(toolsManager){
1089
1288
  super({
1090
1289
  name: '@midscene/ios-mcp',
1091
- version: "1.2.1",
1290
+ version: "1.2.2-beta-20260115065918.0",
1092
1291
  description: 'Control the iOS device using natural language commands'
1093
1292
  }, toolsManager);
1094
1293
  }
package/dist/lib/bin.js CHANGED
@@ -12030,6 +12030,190 @@ var __webpack_exports__ = {};
12030
12030
  __webpack_require__("../../node_modules/.pnpm/cors@2.8.5/node_modules/cors/lib/index.js");
12031
12031
  const agent_namespaceObject = require("@midscene/core/agent");
12032
12032
  const logger_namespaceObject = require("@midscene/shared/logger");
12033
+ const defaultAppNameMapping = {
12034
+ 微信: 'com.tencent.xin',
12035
+ 企业微信: 'com.tencent.ww',
12036
+ 微信读书: 'com.tencent.weread',
12037
+ 微信听书: 'com.tencent.wehear',
12038
+ QQ: 'com.tencent.mqq',
12039
+ QQ音乐: 'com.tencent.QQMusic',
12040
+ QQ阅读: 'com.tencent.qqreaderiphone',
12041
+ QQ邮箱: 'com.tencent.qqmail',
12042
+ QQ浏览器: 'com.tencent.mttlite',
12043
+ TIM: 'com.tencent.tim',
12044
+ 微视: 'com.tencent.microvision',
12045
+ 腾讯新闻: 'com.tencent.info',
12046
+ 腾讯视频: 'com.tencent.live4iphone',
12047
+ 腾讯动漫: 'com.tencent.ied.app.comic',
12048
+ 腾讯微云: 'com.tencent.weiyun',
12049
+ 腾讯体育: 'com.tencent.sportskbs',
12050
+ 腾讯文档: 'com.tencent.txdocs',
12051
+ 腾讯翻译君: 'com.tencent.qqtranslator',
12052
+ 腾讯课堂: 'com.tencent.edu',
12053
+ 腾讯地图: 'com.tencent.sosomap',
12054
+ 小鹅拼拼: 'com.tencent.dwdcoco',
12055
+ 全民k歌: 'com.tencent.QQKSong',
12056
+ 支付宝: 'com.alipay.iphoneclient',
12057
+ 钉钉: 'com.laiwang.DingTalk',
12058
+ 闲鱼: 'com.taobao.fleamarket',
12059
+ 淘宝: 'com.taobao.taobao4iphone',
12060
+ 斗鱼: 'tv.douyu.live',
12061
+ 天猫: 'com.taobao.tmall',
12062
+ 口碑: 'com.taobao.kbmeishi',
12063
+ 饿了么: 'me.ele.ios.eleme',
12064
+ 高德地图: 'com.autonavi.amap',
12065
+ UC浏览器: 'com.ucweb.iphone.lowversion',
12066
+ 一淘: 'com.taobao.etaocoupon',
12067
+ 飞猪: 'com.taobao.travel',
12068
+ 虾米音乐: 'com.xiami.spark',
12069
+ 淘票票: 'com.taobao.movie.MoviePhoneClient',
12070
+ 优酷: 'com.youku.YouKu',
12071
+ 菜鸟裹裹: 'com.cainiao.cnwireless',
12072
+ 土豆视频: 'com.tudou.tudouiphone',
12073
+ 抖音: 'com.ss.iphone.ugc.Aweme',
12074
+ 抖音极速版: 'com.ss.iphone.ugc.aweme.lite',
12075
+ 抖音火山版: 'com.ss.iphone.ugc.Live',
12076
+ Tiktok: 'com.zhiliaoapp.musically',
12077
+ 飞书: 'com.bytedance.ee.lark',
12078
+ 今日头条: 'com.ss.iphone.article.News',
12079
+ 西瓜视频: 'com.ss.iphone.article.Video',
12080
+ 皮皮虾: 'com.bd.iphone.super',
12081
+ 美团: 'com.meituan.imeituan',
12082
+ 美团外卖: 'com.meituan.itakeaway',
12083
+ 大众点评: 'com.dianping.dpscope',
12084
+ 美团优选: 'com.meituan.iyouxuan',
12085
+ 美团优选团长: 'com.meituan.igrocery.gh',
12086
+ 美团骑手: 'com.meituan.banma.homebrew',
12087
+ 美团开店宝: 'com.meituan.imerchantbiz',
12088
+ 美团拍店: 'com.meituan.pai',
12089
+ 美团众包: 'com.meituan.banma.crowdsource',
12090
+ 美团买菜: 'com.baobaoaichi.imaicai',
12091
+ 京东: 'com.360buy.jdmobile',
12092
+ 京东读书: 'com.jd.reader',
12093
+ 网易新闻: 'com.netease.news',
12094
+ 网易云音乐: 'com.netease.cloudmusic',
12095
+ 网易邮箱大师: 'com.netease.macmail',
12096
+ 网易严选: 'com.netease.yanxuan',
12097
+ 网易公开课: 'com.netease.videoHD',
12098
+ 网易有道词典: 'youdaoPro',
12099
+ 有道云笔记: 'com.youdao.note.YoudaoNoteMac',
12100
+ 百度: 'com.baidu.BaiduMobile',
12101
+ 百度网盘: 'com.baidu.netdisk',
12102
+ 百度贴吧: 'com.baidu.tieba',
12103
+ 百度地图: 'com.baidu.map',
12104
+ 百度阅读: 'com.baidu.yuedu',
12105
+ 百度翻译: 'com.baidu.translate',
12106
+ 百度文库: 'com.baidu.Wenku',
12107
+ 百度视频: 'com.baidu.videoiphone',
12108
+ 百度输入法: 'com.baidu.inputMethod',
12109
+ 快手: 'com.jiangjia.gif',
12110
+ 快手极速版: 'com.kuaishou.nebula',
12111
+ 哔哩哔哩: 'tv.danmaku.bilianime',
12112
+ 芒果TV: 'com.hunantv.imgotv',
12113
+ 苏宁易购: 'SuningEMall',
12114
+ 微博: 'com.sina.weibo',
12115
+ 微博极速版: 'com.sina.weibolite',
12116
+ 微博国际: 'com.weibo.international',
12117
+ 墨客: 'com.moke.moke.iphone',
12118
+ 豆瓣: 'com.douban.frodo',
12119
+ 知乎: 'com.zhihu.ios',
12120
+ 小红书: 'com.xingin.discover',
12121
+ 喜马拉雅: 'com.gemd.iting',
12122
+ 得到: 'com.luojilab.LuoJiFM-IOS',
12123
+ 得物: 'com.siwuai.duapp',
12124
+ 起点读书: 'm.qidian.QDReaderAppStore',
12125
+ 番茄小说: 'com.dragon.read',
12126
+ 书旗小说: 'com.shuqicenter.reader',
12127
+ 拼多多: 'com.xunmeng.pinduoduo',
12128
+ 多点: 'com.dmall.dmall',
12129
+ 便利蜂: 'com.bianlifeng.customer.ios',
12130
+ 亿通行: 'com.ruubypay.yitongxing',
12131
+ 云闪付: 'com.unionpay.chsp',
12132
+ 大都会Metro: 'com.DDH.SHSubway',
12133
+ 爱奇艺视频: 'com.qiyi.iphone',
12134
+ 搜狐视频: 'com.sohu.iPhoneVideo',
12135
+ 搜狐新闻: 'com.sohu.newspaper',
12136
+ 搜狗浏览器: 'com.sogou.SogouExplorerMobile',
12137
+ 虎牙: 'com.yy.kiwi',
12138
+ 比心: 'com.yitan.bixin',
12139
+ 转转: 'com.wuba.zhuanzhuan',
12140
+ YY: 'yyvoice',
12141
+ 绿洲: 'com.sina.oasis',
12142
+ 陌陌: 'com.wemomo.momoappdemo1',
12143
+ 什么值得买: 'com.smzdm.client.ios',
12144
+ 美团秀秀: 'com.meitu.mtxx',
12145
+ 唯品会: 'com.vipshop.iphone',
12146
+ 唱吧: 'com.changba.ktv',
12147
+ 酷狗音乐: 'com.kugou.kugou1002',
12148
+ CSDN: 'net.csdn.CsdnPlus',
12149
+ 多抓鱼: 'com.duozhuyu.dejavu',
12150
+ 自如: 'com.ziroom.ZiroomProject',
12151
+ 携程: 'ctrip.com',
12152
+ 去哪儿旅行: 'com.qunar.iphoneclient8',
12153
+ Xmind: 'net.xmind.brownieapp',
12154
+ 印象笔记: 'com.yinxiang.iPhone',
12155
+ 欧陆词典: 'eusoft.eudic.pro',
12156
+ 115: 'com.115.personal',
12157
+ 名片全能王: 'com.intsig.camcard.lite',
12158
+ 中国银行: 'com.boc.BOCMBCI',
12159
+ '58同城': 'com.taofang.iphone',
12160
+ 'Google Chrome': 'com.google.chrome.ios',
12161
+ Gmail: 'com.google.Gmail',
12162
+ Facebook: 'com.facebook.Facebook',
12163
+ Firefox: 'org.mozilla.ios.Firefox',
12164
+ Messenger: 'com.facebook.Messenger',
12165
+ Instagram: 'com.burbn.instagram',
12166
+ Starbucks: 'com.starbucks.mystarbucks',
12167
+ 'Luckin Coffee': 'com.bjlc.luckycoffee',
12168
+ Line: 'jp.naver.line',
12169
+ Linkedin: 'com.linkedin.LinkedIn',
12170
+ Dcard: 'com.dcard.app.Dcard',
12171
+ Youtube: 'com.google.ios.youtube',
12172
+ Spotify: 'com.spotify.client',
12173
+ Netflix: 'com.netflix.Netflix',
12174
+ Twitter: 'com.atebits.Tweetie2',
12175
+ WhatsApp: 'net.whatsapp.WhatsApp',
12176
+ Safari: 'com.apple.mobilesafari',
12177
+ 'App Store': 'com.apple.AppStore',
12178
+ 设置: 'com.apple.Preferences',
12179
+ 相机: 'com.apple.camera',
12180
+ 照片: 'com.apple.mobileslideshow',
12181
+ 时钟: 'com.apple.mobiletimer',
12182
+ 闹钟: 'com.apple.mobiletimer',
12183
+ 备忘录: 'com.apple.mobilenotes',
12184
+ 提醒事项: 'com.apple.reminders',
12185
+ 快捷指令: 'com.apple.shortcuts',
12186
+ 天气: 'com.apple.weather',
12187
+ 日历: 'com.apple.mobilecal',
12188
+ 地图: 'com.apple.Maps',
12189
+ 电话: 'com.apple.mobilephone',
12190
+ 通讯录: 'com.apple.MobileAddressBook',
12191
+ 信息: 'com.apple.MobileSMS',
12192
+ Facetime: 'com.apple.facetime',
12193
+ FaceTime: 'com.apple.facetime',
12194
+ 计算器: 'com.apple.calculator',
12195
+ 家庭: 'com.apple.Home',
12196
+ 健康: 'com.apple.Health',
12197
+ 钱包: 'com.apple.Passbook',
12198
+ 股市: 'com.apple.stocks',
12199
+ 图书: 'com.apple.iBooks',
12200
+ 新闻: 'com.apple.news',
12201
+ 视频: 'com.apple.tv',
12202
+ 文件: 'com.apple.DocumentsApp',
12203
+ 邮件: 'com.apple.mobilemail',
12204
+ 查找: 'com.apple.findmy',
12205
+ 翻译: 'com.apple.Translate',
12206
+ 音乐: 'com.apple.Music',
12207
+ 播客: 'com.apple.podcasts',
12208
+ 库乐队: 'com.apple.mobilegarageband',
12209
+ 语音备忘录: 'com.apple.VoiceMemos',
12210
+ iMovie: 'com.apple.iMovie',
12211
+ Watch: 'com.apple.Bridge',
12212
+ 'Apple Store': 'com.apple.store.Jolly',
12213
+ TestFlight: 'com.apple.TestFlight',
12214
+ Keynote: 'com.apple.Keynote',
12215
+ 'Keynote 讲演': 'com.apple.Keynote'
12216
+ };
12033
12217
  const external_node_assert_namespaceObject = require("node:assert");
12034
12218
  var external_node_assert_default = /*#__PURE__*/ __webpack_require__.n(external_node_assert_namespaceObject);
12035
12219
  const core_namespaceObject = require("@midscene/core");
@@ -12546,12 +12730,21 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
12546
12730
  throw new Error(`Unable to connect to iOS device ${this.deviceId}: ${e}`);
12547
12731
  }
12548
12732
  }
12733
+ setAppNameMapping(mapping) {
12734
+ this.appNameMapping = mapping;
12735
+ }
12736
+ resolveBundleId(appName) {
12737
+ if (appName in this.appNameMapping) return this.appNameMapping[appName];
12738
+ }
12549
12739
  async launch(uri) {
12550
12740
  this.uri = uri;
12551
12741
  try {
12552
12742
  debugDevice(`Launching app: ${uri}`);
12553
12743
  if (uri.startsWith('http://') || uri.startsWith('https://') || uri.includes('://')) await this.openUrl(uri);
12554
- else await this.wdaBackend.launchApp(uri);
12744
+ else {
12745
+ const resolvedUri = this.resolveBundleId(uri) ?? uri;
12746
+ await this.wdaBackend.launchApp(resolvedUri);
12747
+ }
12555
12748
  debugDevice(`Successfully launched: ${uri}`);
12556
12749
  } catch (error) {
12557
12750
  debugDevice(`Error launching ${uri}: ${error}`);
@@ -12932,6 +13125,7 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
12932
13125
  device_define_property(this, "customActions", void 0);
12933
13126
  device_define_property(this, "wdaBackend", void 0);
12934
13127
  device_define_property(this, "wdaManager", void 0);
13128
+ device_define_property(this, "appNameMapping", {});
12935
13129
  device_define_property(this, "interfaceType", 'ios');
12936
13130
  device_define_property(this, "uri", void 0);
12937
13131
  device_define_property(this, "options", void 0);
@@ -12952,7 +13146,7 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
12952
13146
  endpoint: core_namespaceObject.z.string().describe('WebDriver API endpoint'),
12953
13147
  data: core_namespaceObject.z.object({}).passthrough().optional().describe('Optional request body data as JSON object')
12954
13148
  });
12955
- const launchParamSchema = core_namespaceObject.z.string().describe('App bundle ID or URL to launch');
13149
+ const launchParamSchema = core_namespaceObject.z.string().describe('App bundle ID, URL, or app name');
12956
13150
  const createPlatformActions = (device)=>({
12957
13151
  RunWdaRequest: (0, device_namespaceObject.defineAction)({
12958
13152
  name: 'RunWdaRequest',
@@ -13006,7 +13200,12 @@ ScreenSize: ${size.width}x${size.height} (DPR: ${size.scale})
13006
13200
  return (...args)=>action(args[0]);
13007
13201
  }
13008
13202
  constructor(device, opts){
13009
- super(device, opts), agent_define_property(this, "launch", void 0), agent_define_property(this, "runWdaRequest", void 0), agent_define_property(this, "home", void 0), agent_define_property(this, "appSwitcher", void 0);
13203
+ super(device, opts), agent_define_property(this, "launch", void 0), agent_define_property(this, "runWdaRequest", void 0), agent_define_property(this, "home", void 0), agent_define_property(this, "appSwitcher", void 0), agent_define_property(this, "appNameMapping", void 0);
13204
+ this.appNameMapping = {
13205
+ ...defaultAppNameMapping,
13206
+ ...opts?.appNameMapping || {}
13207
+ };
13208
+ device.setAppNameMapping(this.appNameMapping);
13010
13209
  this.launch = this.createActionWrapper('Launch');
13011
13210
  this.runWdaRequest = this.createActionWrapper('RunWdaRequest');
13012
13211
  this.home = this.createActionWrapper('IOSHomeButton');