AltServer-Linux 移植工作

大类
iOS
技术标签
云服务-CI
开发-Linux小工具
环境增强
优先级
Low
开始日期
Jun 21, 2021
状态
Maintaining
Need Repair
Public
Public
最后更新
Apr 20, 2022
最开始想在iSH上面跑, 结果发展的越来越好

1. 解决编译问题

本来是直接复制了一份然后魔改,但是develop分支变化速度太快,所以我换了一个思路:
  • 用submodule track upstream更改
  • 编写shim header来实现缺少的宏、函数等
  • 用脚本批量替换一些宏没法兼容的东西:比如Windows下的宽字符串L“”需要转成ANSI的
  • override main入口函数的文件来整体重写
 

2. 解决WiFi Sync

Wifi Sync两个组成部分:
  • AltServer广播”_altserver._tcp”的mDNS TXT记录,然后让AltStore来链接
  • AltServer通过usbmuxd来使用WiFi连接设备进行操作
 
  • 广播:
    • 要广播mDNS就必须要用avahi
    • 要用avahi就必须要动态链接avahi或者他的各种compact库
    • musl又不能静态连接的同时去动态链接
    • 因此就必须通过另一个小程序来进行广播
      • 我使用了Python+ctypes使用avahi的libdnssd compact
  • WiFi usbmuxd:
    • 通过netmuxd实现
 

3. 解决AnisetteData

  • 之前AnisetteData通过白嫖Sideloadly的服务来获取,但导致用户出现大量-36607错误
  • 需要自己搭建server
    • Anisette的获取渠道只有iCloud比较方便
    • macOS iCloud 有人写了,但是不好部署
    • Windows的iCloud可以在Wine中安装,可以搞
  • 方案:
    • Wine中运行iCloud
      • 需要至少登录一次后,才能正常提取AnisetteData
      • 学习了AHK,编写了个简单脚本
    • 将AltServer的Anisette部分代码提出来,成一个单独的小程序
    • 写一个简单服务器,但需要在Wine环境里运行,负责调用小程序,并输出JSON
      • Python多线程支持差、C++太难写
      • 只剩NodeJS比较适合
      • 编写后使用nexe打包成独立exe直接运行
    • 封装成Docker