[原创]国东谈主原创能在xPC上运行的ios模拟器iqemu开源

发布日期:2024-02-01 07:54    点击次数:128


乐动体育

年,苹果照旧出了基于arm指示集的M芯片,让iOSApp能在PC上运行变得很容易。然则咱们的开发始于几年前,由于其时放眼寰宇皆莫得一个能让iosapp运行在PC上的模拟器,是以咱们决定我方开发一个。

模拟器运行于基于Intelx-CPU的macOS/Xcode(本次发布版块运行于Catalina)。Xcode自带的iOSSimulator只可运行领有源代码的,我方编译的x版块的iOSApp。咱们对iOSSimulator进行了大幅度的hack与修改,使得在苹果AppStore中发布的基于arm指示集的iOSApp粗略在iOSSimulator中运行。这个模拟器也曾还有一个基于VirtualBox的壳,macOS运行其中,使扫数这个词模拟器能运行在Windows中。然则终末由于后果与兼容性方面的原因,这个贪图被毁掉了。

为了使arm指示集的iOSApp粗略运行,有许多问题需要措置。最初最为不言而谕的等于x-与arm指示集的调遣问题。指示调遣上,咱们使用了qemu中枢作念关键的翻译。在模拟经过中,唯有iOSApp部分的代码是以qemu的JIT翻译模式运行的,其他扫数部分的Framework部分的代码是苹果提供的以x-原生指示的形态运行的。两种指示领有不同的ABI,因此很当然地,咱们就需要为个指示形态的代码提供ABI调遣。为了作念到这极少,咱们修改了编译器LLVM的代码,为扫数这个词SDK实施了一次扫描,生成了SDK中扫数函数的参数信息。笔据这些参数信息,ABI调遣智商得手地实施。

关联词ABI不仅包含c圭臬,也同期包含c++的圭臬。在不同的指示集下,c++的基础库,类在内存中的布局,虚函数表的成列与收尾步地皆有小的划分。这种与c比拟更无法识别的划分使ABI调遣成为不成能。为了措置这个问题,咱们干脆摒弃了ABI调遣的念念法,转而使用arm指示集的libc++.dylib收尾iOSApp的c++诉求。

苹果的Framework代码也使用到了c++代码。因此苹果的Framework使用x-的libc++.dylib,iOSApp使用arm指示的libc++.dylib。为了使内存中能同期存在两份疏浚名字的dylib,需要对macOS的动态贯穿器dyld进行修改。尽管苹果开源了dyld的代码,编译dyld却无法达成。苹果抽掉了一些关键的头文献。因此咱们只可选拔对dyld_sim(模拟器使用的dyld)进行二进制patch。

c++很是亦然咱们遭遇的一个大问题。由于堆栈中同期存在x-与arm的函数帧,当有一个很是抛出时,正本的Unwinding代码就无法胜任在双重函数栈中寻找合乎的Exceptionhandler的任务。为此咱们修改了libunwind的代码何况再行编译。

首先笔者觉得09如果复出的话,拿到平台的一份一线主播合同应该是没什么问题的,毕竟09本身就属于有人气的电竞大佬,哪怕他不在,但是江湖上一直流传着他的传说,简单来说,09不直播但是也不会被熟悉他的玩家淡忘,而一旦要直播的话,那么越是高调,越是能够重新把这些粉丝给吸引过来。

此外,乐动体育比赛历史战绩念念要达成模拟器粗略在x-的macOS上得手运行仍然有格外多的问题。比方objc的兼容与加快,Metal绘制API的兼容,通过Kernelextension对xnu内核的修改等等。而其中最有挑战性的,等于为了让iOSApp粗略无错误地运行而进行的逆向责任。跟着责任进行,扫数这个词系统的复杂性运转超出咱们的预期。这个步地现时粗略得手运行微信与王者荣耀在PC上。

与此同期,在苹果放出基于arm指示集的M的cpu来运行macOS后,咱们这个模拟器的必要性与挑战性就莫得那么大了。因此最终咱们决定开源扫数这个词步地。若是有东谈主有好奇爱慕好奇爱慕,不错不绝完善这个步地。

步地地址

系统需求

现时模拟器只运行于macOSCatalina..-..原始版块(其他的macOS版块可能也能运行,未测试)与Xcode..(通过一些小转变粗略升级),Xcode模拟器的iOS版块...

从AppStore里赢得的App必须先行解密。

App的架构必须是ARM指示集。也不错是FAT措施的,然则其中必须包含一个ARM架构的部分。不撑捏单独的Armv或者Arme架构。

教授

iqemu由许多部分构成,其中的驱动部分会齐全干掉macOS的代码签名考证。莫得了代码签名后,系统会变得脆弱,容易被入侵。不要在你正在逐日责任中使用的macOS上试用模拟器。虽然,你不错通过卸载驱动或者重启来还原代码签名。

编译

关掉SIP。

关掉Gatekeeper.有些早期型号的iMac/macbook可能不需要作念这一步.

确保homebrew与Xcodecommandlinetools照旧安设。

编译/安设完成后会有提醒。

iqemu只会对Xcode的可实施文献进行patch。它不会修改macOS的系统Framework与内核。模拟器的驱动只会作念运行时的patch。若是你念念还原Xcode被patch后的文献,实施以下号召:

驻防:

现时安设剧本只撑捏Catalina与Xcode..。剧本会对patch过的Xcode的文献进行备份。运行剧本时必须输入你正在使用的Xcode.app的全旅途。其中的make号召会失败,这个是平常的。

当你得手安设以后,你必须在每次macOS启动后,运行模拟器里的iOSApp前,运行以下号召:(因为莫得咱们的驱动的macOS是无法运行被patch过的Xcode和simulator的)

向模拟器安设iOSApp

用任何压缩软件解压缩ipa文献,赢得其中的.app文献夹。

乐动体育

若是你系统上有多个Xcode,确保你正在向阿谁你patch过的Xcode的模拟器安设App。用以下号召安设:

截图

微信截图

王者荣耀截图

已知问题

尽管咱们照旧作念了许多责任,然则由于真正征战与模拟器诸多不同,仍然有许多App会崩溃,或者无法平常运行在模拟器里。现时唯有一小部分App经过测试。咱们照旧修正了许多问题然则仍然有更多的恭候修正。若是你格外但愿某个App粗略运行在iqemu上,你不错在咱们github步田主页上新建一个issue。若是你找到粗略运行在iqemu上的App,也接待见知咱们。Metal的撑捏格外有限,你不错在苹果官网上找到关连的文档。咱们不错制作一个兼容层,然则还未完成。XcodeiOS模拟器中OpenGLES的收尾是一个软件渲染器,它长短常格外慢的。硬件的OpenGLES收尾这次并莫得开源。Signalhandler与machexceptionport的撑捏比较差,因此App可能将无法使用崩溃证明这个功能。iOS系统的syscall尚未收尾。

商量咱们

其他部件,包括提供更好的调试撑捏,为开发动态分析用具而作的指示级别的测时框架,检测内存照管bug,和提供更好的App兼容性,这次尚未开源。若是你感好奇爱慕好奇爱慕,不错向imoltencoreco#gmail.com发一封邮件,也接待任何的的反映和念念法。

[培训]《安卓高等研修班(网课)》月薪三万贪图乐动体育网页官网






Powered by 乐动体育比赛历史战绩 @2013-2022 RSS地图 HTML地图

Copyright 站群系统 © 2013-2023 乐动体育 版权所有

栏目分类

热点资讯

相关资讯