开发移动Substrate扩展

9

我有几个关于开发移动补丁的问题。
首先,如何制作它们?

需要使用XCode吗?

需要哪些文件以及在哪里放置您的代码?

如何钩入应用程序?

例如,如果我想要更改“信息”应用程序中的某些内容,如何编程以将其钩入Messages.app中?

我对于开发应用商店中的常规应用程序非常熟悉,同时也非常感兴趣移动基础设施。我真的很想知道该如何做以及从何处开始。谢谢!

2个回答

12

目前,开发iOS插件最简单的方法是使用Theos

请按照上述链接中所提供的说明安装Theos,进入您想要存储项目的文件夹并运行 $THEOS/bin/nic.pl 以生成您的插件模板。

生成的Tweak.xm文件是您放置代码的位置。要构建项目,请在终端中导航到项目目录并运行 make。如果您在系统上有dpkg,那么可以轻松地打包和安装项目。请确保iDevice上已安装OpenSSH,并将此行添加到您的项目的makefile中:

THEOS_DEVICE_IP = [INSERTDEVICESIPHERE]

运行make package install来构建您的项目,将其打包为.deb文件,将其传输到设备上并安装。

实际进入Tweak.xm文件的代码是Objective-C语言,使用了一个简化Mobile Substrate任务的语言叫做Logos,这里有详细说明:http://iphonedevwiki.net/index.php/Logos。通常情况下,代码遵循以下格式:

%hook classname //declares the class from your application you're going to override

-(void)functionyouwanttooveride {

    dosomethingnew(); //put all your new code for the method here
    return %orig;     //this calls the original definition of the method and returns the result
}
%end //end hooking classname

要找出需要重写的类和方法以实现你想要的功能,需要先安装cydia上的 class-dump,然后通过ssh连接到你的设备并运行class-dump -H path/to/your/binary -o /path/where/you/want/your/classheaders命令。接着,你只需浏览生成的头文件,查找与你所需功能相关的类和方法,并进行尝试。

祝好运!


谢谢你,伙计!但是我怎么才能找到任何要覆盖的 functionyouwanttooverride?我该如何获取函数的原始代码,以便我可以修改它? - JonasG
3
别担心!这是困难的一部分,因为你没有源代码,所以你永远无法看到任何函数的实现,所以需要进行很多猜测。如果你从Cydia安装“syslogd to /var/log/syslog”包,那么如果你在代码中使用%log,它会写入系统日志(位于/var/log/syslog),记录调用该方法的参数,以便更好地了解正在发生的情况。同时,还可以从Cydia安装gdb,并设置有趣方法的断点以找出发生了什么。虽然困难,但请继续尝试! - stonesam92
2
请注意,一旦启用写入系统日志,许多其他进程也会写入它,并且它会很快填满并可能占用一些空间,因此您可能需要定期删除它或在不需要时禁用日志记录,您可以在theiphonewiki上了解更多信息。 - stonesam92
1
好的,如果我想在特定的应用程序中更改一些内容,比如向照片应用程序添加一个按钮,该怎么办? - JonasG
2
我不是很确定,但我猜你只需要钩住你想要添加按钮的视图,重写绘制方法并添加代码来绘制自己的新按钮。例如,看看DarkMalloc如何在他的Glue tweak中通过调用addButtonWithTitleUIActionSheet添加按钮。 - stonesam92

7

好的教程。谢谢! - NightFury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接