常见问题答疑 (FAQ)

TouchIOS 是什么?

  • 是一款用于越狱 iOS 环境下的自动化模拟操作的软件
  • 开发人员可以编写 Lua 脚本让 TouchIOS 运行 来完成一些日常自动化的工作。但它本身没有集成也不会自动编写具有针对性的具体的自动化工作脚本。
  • 希望自行编写脚本,可参考

哪些设备可运行 TouchIOS?

设备及系统版本要求

设备型号 可以运行 TouchIOS 的系统版本区间
iPhone 6 iOS 12 及以上所有版本
iPhone 6 Plus iOS 12 及以上所有版本
iPhone 6s iOS 12 及以上所有版本
iPhone 6s Plus iOS 12 及以上所有版本
iPhone 7 iOS 12 及以上所有版本
iPhone 7 Plus iOS 12 及以上所有版本
iPhone 8 iOS 12 及以上所有版本
iPhone 8 Plus iOS 12 及以上所有版本
iPhone SE iOS 12 及以上所有版本
iPhone SE2 iOS 12-16.5.1
iPhone SE3 iOS 12-16.5.1
iPhone X iOS 12 及以上所有版本
iPhone XR iOS 12-16.5.1
iPhone XS iOS 12-16.5.1
iPhone XS MAX iOS 12-16.5.1
iPhone 11 iOS 15-16.5.1
iPhone 11 Pro iOS 15-16.5.1
iPhone 11 Pro Max iOS 15-16.5.1
iPhone 12 iOS 15-16.5.1
iPhone 12 mini iOS 15-16.5.1
iPhone 12 Pro iOS 15-16.5.1
iPhone 12 Pro Max iOS 15-16.5.1
iPhone 13 iOS 15-16.5.1
iPhone 13 mini iOS 15-16.5.1
iPhone 13 Pro iOS 15-16.5.1
iPhone 13 Pro Max iOS 15-16.5.1
iPhone 14 iOS 15-16.5.1
iPhone 14 Plus iOS 15-16.5.1
iPhone 14 Pro iOS 15-16.5.1
iPhone 14 Pro Max iOS 15-16.5.1

注意!!!

  • 尽量使用以下越狱工具:checkra1n / unc0ver / palera1n / dopamine
  • 推荐越狱环境:iphone11-14,ios15-16.5.1,dopamine roothide越狱
  • iPhone 6-iPhone X设备 IOS12.0-14.8.1系统,checkra1n rootful 有根越狱 参考教程:https://dkxuanye.cn/?p=9899
  • iPhone 6-iPhone X设备 IOS12.0-14.8系统,unc0ver rootful 有根越狱 参考教程:https://dkxuanye.cn/?p=3787
  • iPhone 7-iPhone X设备 IOS15.0-16.7.8系统,palera1n rootful 有根越狱 参考教程:https://dkxuanye.cn/?p=6813
  • iPhone 7-iPhone X设备 IOS15.0-16.7.8系统,palera1n rootless 无根越狱 参考教程:https://dkxuanye.cn/?p=6813
  • iPhone XR-iPhone 14设备 IOS15.0-16.5.1系统,dopamine rootless 无根越狱 参考教程:https://dkxuanye.cn/?p=9682
  • iPhone XR-iPhone 14设备 IOS15.0-16.5.1系统,dopamine roothide 无根越狱 参考教程:https://dkxuanye.cn/?p=8554

如何安装 TouchIOS 到设备上?


TouchIOS 收费么?哪些部分收费?

  • 收费
  • 让脚本运行的功能收费
  • 以下是参考价格
    • 月卡( 31 天)授权码 15 元/设备
    • 季度(92 天)授权码 30 元/设备
    • 年卡(366 天)授权码 60 元/设备
  • 授权码是您的购买于 TouchIOS 唯一的凭据,请一定保管好
  • 授权码费用仅为 TouchIOS 应用程序本体的使用费,不包含具体脚本功能开发费及相关任何程序的教学费。请务必于购买授权码之前知晓您购买授权码后的权利以及购买后将解除的限制
  • 如何使用授权码?

  • 我购买了 TouchIOS 授权码后会获得哪些权利?

    • 您可以用单个授权码激活任意一台已安装 TouchIOS 并能正常运行的设备上的 TouchIOS
      • 每台设备可获得 168 小时的一次性 全功能试用 授权,务必先试用确认后再购买
    • 未到期设备无法使用激活码
      • 换绑激活码到未到期设备会覆盖旧激活码到期时间

    我电脑上有个脚本,如何使用 USB 连接导入到设备上?

    • 使用 iTools(或者各种能连 iOS 设备的手机助手) 将脚本文件传到设备的这个目录
      <用户系统>/1ferver/lua/scripts/
      
      :此处 用户系统 仅为 iTools 上手机文件管理显示名,不同的手机助手上名字不相同,大概为 用户系统文件系统(用户)

    电脑端如何通过 USB 访问到完全文件系统?

    • 在cydia或sileo里搜索 Apple File Conduit "2" 安装上
    • 拔掉usb数据线重新连接设备即可

    TouchIOS 的脚本及相关资源存在设备的哪个位置?

    • 脚本存放目录为 /var/mobile/Media/1ferver/lua/scripts/
    • 插件存放目录为 /var/mobile/Media/1ferver/lib/
    • 资源存放目录为 /var/mobile/Media/1ferver/res/
    • 日志存放目录为 /var/mobile/Media/1ferver/log/
    • 文字识别字库存放目录为 /var/mobile/Media/1ferver/tessdata/
    • 内置脚本模块存放目录为 /var/mobile/Media/1ferver/lua/

    如何在电脑上给 TouchIOS 开发脚本?


    取色器/编辑器/局域网控制器 扫描不到设备怎么办?

    • 确保电脑端或路由器的防火墙规则没有拦截
    • 设备与电脑在同一局域网
    • 确保停用了设备上的网络代理及 VPN
    • 确保设备是解锁屏幕状态
    • 确保电脑能 ping 通设备
    • 确保设备打开了 远程开关

    如何录制脚本?

    • 默认可以使用 长按音量键 弹出选择录制脚本
    • 再次使用 长按音量键 可以完成录制
    • 可于 更多-->按键设置 编辑更改快捷键设定
    • 图:如何录制脚本

    如何运行脚本?

    • 启动 TouchIOS 的 App 后可以看到 “我的脚本” 界面
    • 点一下需要选择的脚本文件名
    • 默认可以使用 长按音量键 弹出选择启动选中脚本
    • 可于 更多-->按键设置 编辑更改快捷键设定
    • 图:如何运行已经选中的脚本

    如何选择脚本?


    如何在设备上编辑脚本?

    • 启动 TouchIOS 的 App 后可以看到 “我的脚本” 界面
    • 点一下脚本文件右边的
    • 点一下左边出现的 </> 按钮
    • 图:如何开始编辑一个脚本

    如何加密脚本?


    脚本可以做什么?


    加密的脚本可以被解密么?

    • 不可以
    • 从脚本源码到加密脚本这一过程是单向的,不可逆的
    • 源码可以加密成加密脚本,反之加密脚本是无法还原成源码

    TouchIOS 可以在电脑上运行么?

    • 不可以
    • TouchIOS 只有 iOS 端

    TouchIOS 可以在安卓系统上运行么?

    • 不可以
    • TouchIOS 只有 iOS 端

    TouchIOS 可以在没有越狱的 iOS 设备上运行么?

    • 不可以
    • TouchIOS 必须要设备已经能够越狱获取完整系统权限方可运行

    常用app.eval例子

    
    
    --app.eval 获取前台应用的 recursiveDescription 示例
    local remoteCode = {
    lua = [==[
    NSString = NSString or objc.class.NSString
    UIApp = UIApp or objc.class.UIApplication.sharedApplication()
    
    dispatch_async(dispatch_get_work_queue(), function()
    	pcall(function()
    		proc_put("界面信息", UIApp.keyWindow().recursiveDescription().UTF8String()) -- 发送通知回脚本进程
    	end)
    end)
    
    ]==]}
    
    
    proc_put('界面信息', '')
    app.eval(remoteCode)
    
    local tm = sys.mtime()
    local rd = ''
    while sys.mtime()-tm < 1000 do -- 超时时间 1 秒
    	rd = proc_put('界面信息', '')
    	if rd~='' then
    		break
    	end
    	sys.msleep(30)
    end
    
    nLog(rd)
    
    
    
    
    
    --app.eval 连接到某个 WiFi 热点
    local check_value = functor.argth.check_value
    local opt_value = functor.argth.opt_value
    
    function JoinWiFi(...)
    	local name = check_value(1, 'string', ...)
    	local pass = opt_value(2, 'string', '', ...)
    	local wtype = opt_value(3, 'integer', 0, ...)
    	if #pass == 0 then
    		wtype = 0
    	end
    	app.eval{
    	bid = 'com.apple.springboard';
    	lua = [[
    	function isTruthy(value)
    		if (type(value) == 'table') then
    			if (value.target == objc.NULL) then
    				return false
    			else
    				return true
    			end
    		else
    			return value~=false and value~=nil and value~=0 and value~=objc.NULL
    		end
    	end
    	
    	function JoinWiFi(wifiname, wifipass, sectype)
    		objc.class.NSBundle.bundleWithPath('/System/Library/PreferenceBundles/AirPortSettings.bundle')().load()
    		local a = objc.class.APOtherNetworkController.alloc()
    		a.init()
    		a.loadView()
    		a.viewDidLoad()
    		local b = a.valueForKey('_allSpecifiers')()
    		local namesp, passsp, secsp
    		for i=0, b.count() - 1 do
    			local v = b.objectAtIndex(i)()
    			local vpro = v.properties()
    			local vid = vpro.objectForKey('id')()
    			if (isTruthy(vid.isEqualToString('NAME')())) then
    				namesp = v
    			elseif (isTruthy(vid.isEqualToString('PASSWORD')())) then
    				passsp = v
    			elseif (isTruthy(vid.isEqualToString('SECURITY')())) then
    				secsp = v
    			end
    		end
    		a.setName(wifiname).specifier(namesp)()
    		a.setPassword(wifipass).specifier(passsp)()
    		a.setAuthenticationType({"@", sectype}).specifier(secsp)()
    		local c = objc.class.APNetworksController.alloc()
    		c.init()
    		c.joinOtherNetwork(a.valueForKey('_network')())()
    		a.release()
    		c.release()
    	end
    	
    	dispatch_sync(dispatch_get_main_queue(), function()
    		]]..string.format('JoinWiFi(%q, %q, %d)', name, pass, wtype)..[[
    	end)
    	]];}
    end
    
    JoinWiFi("Tenda_Soze", "iop224354", 1)
    
    
    
    
    --WhatsApp跳转到指定用户聊天界面
    --先在"/Library/MobileSubstrate/DynamicLibraries/1feaks.plist"添加目标app的bundleID 添加后重新打开目标应用,如果是roothide越狱,则路径是"jbroot(/Library/MobileSubstrate/DynamicLibraries/1feaks.plist)"
    
    function jumptochat(wid)
    	local scheme="whatsapp://send?phone="..wid
    	app.eval{
    			bid = "net.whatsapp.WhatsApp",
    			lua = [==[
    			dispatch_sync(dispatch_get_main_queue(), function()
    			local u=objc.class.NSURL.URLWithString("]==]..scheme..[==[")()
    			objc.class.UIApplication.sharedApplication().openURL(u)()
    			end)
    			]==]
    			}
    end
    
    jumptochat("11234567890")
    
    
    
    
    app.views_info() --打印当前view结构
    
    --先在"/Library/MobileSubstrate/DynamicLibraries/1feaks.plist"添加目标app的bundleID 添加后重新打开目标应用,如果是roothide越狱,则路径是"jbroot(/Library/MobileSubstrate/DynamicLibraries/1feaks.plist)"
    nLog(app.views_info()) --输出格式为json
    
    
    
    

    results matching ""

      No results matching ""