%hook XXXX 无法与 MSHookFunction 写在同一个.xm里面

#include <substrate.h>

char *(*old_getenv)(const char * str);

char *getenv_getenv(const char * str)
{
return old_getenv(str);
}

%ctor
{
MSHookFunction((void *)getenv,(void *)getenv_getenv, (void **)&old_getenv);
}

//********** 分界线 *************

%hook UIApplication

  • (BOOL)canOpenURL:(NSURL *)url
    {
    return %orig;
    }

%end
上面是代码 ,分界线 上部 跟下部,都可以单独编译通过,放一起编译不通过
tweak里面,如果要使用 MSHookFunction 就要把 #include <substrate.h> 引入
但是引入了 #include <substrate.h> ,下面的 %hook UIApplication 部分 编译就会出错

错误代码图

可能是因为你OSX上的substrate.h不是最新版本,从iOS上拉一个最新版本的下来吧,在

/Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h

,然后重命名一下就好了

问题完美的解决了
用手机上面的
/Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h
改名替换
电脑上面的
/opt/theos/include/substrate.h
:loveliness: