光 在Xcode12.3下编译tweak报错 【已解决】

环境

使用theos新建默认tweak工程,在Tweak.x里引入 #import <Foundation/Foundation.h>,同时,修改Makefile,在里面指定使用光:

_THEOS_TARGET_CC := /Library/Developer/Toolchains/光.xctoolchain/usr/bin/clang
_THEOS_TARGET_CXX := /Library/Developer/Toolchains/光.xctoolchain/usr/bin/clang++

使用的测试工程如下:
testtweak.zip (1.8 KB)

报错信息

==> Compiling Tweak.x (arm64)…
While building module 'Foundation' imported from Tweak.x:2:
In file included from <module-includes>:1:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:39:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:11:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.3.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURL.h:10:9: fatal error: 'Foundation/NSURLHandle.h' file not found
#import <Foundation/NSURLHandle.h>
        ^~~~~~~~~~~~~~~~~~~~~~~~~~
Tweak.x:2:9: fatal error: could not build module 'Foundation'
#import <Foundation/Foundation.h>
 ~~~~~~~^
2 errors generated.

尝试解决

1. 在makefile里增加编译参数消宏定义

报错出现在文件NSURL.h里:

#if TARGET_OS_OSX || TARGET_OS_MACCATALYST
#import <Foundation/NSURLHandle.h>
#endif

在Makefile里增加参数:
testtweak_CFLAGS := -DTARGET_OS_OSX\=0 -DTARGET_OS_MACCATALYST\=0 -DTARGET_OS_IPHONE -DTARGET_OS_IOS

结果:仍然报错

2. 使用Xcode11.7

结果:编译成功,不再报错

看了下Xcode 11.7 里 也保留有 #if TARGET_OS_OSX || TARGET_OS_MACCATALYST 定义,

该版本可以编译过,不知道哪里环境配置有问题,看看有没有大佬遇到这个问题呢?

看着像sysroot的问题

手动加一下-isysroot 试试?

感谢张总。刚才试了下,如果指定Xcode12的还是报这个错误,如果指定为Xcode11.7的正常编译。

这样修改的:

testtweak_CFLAGS := -isysroot "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk"

这里指的是Xcode11.7的sdk正常 Xcode12的SDK报错? :thinking:怀疑是头文件路径查找有什么问题:thinking:没搞过,最近也没时间看。 可以自己在这个方向上研究一下

好嘞,感谢。我再摸索一下

已发现问题所在,解决啦。

将 iPhoneOS.sdk/usr/include/TargetConditionals.h 里arm64架构下的 #define TARGET_OS_MACCATALYST 1 改为 0

4 Likes

:thinking:

你好 这种系统的怎么改啊

我照着改了也不行, 出了另外的一堆错误

Xcode 13 也出现这个问题,难顶,改了也是报错

说了二十遍了,兼容性最好的方式就是移植到Apple Swift