美文网首页
'xxx-Swift' file not found

'xxx-Swift' file not found

作者: 姬歌 | 来源:发表于2020-01-03 17:52 被阅读0次

    吐槽:
    很就没做iOS开发了,这两天搞个Demo练练手,swift-oc混编的项目,XCode10.1。一开始,一切都OK的,但是,当我clean(实际上默认是Clean Build Folder)之后,编译就一直报错'Demo-Swift.h' file not found!!!WTF??然后网上各种找答案,各种搞!鬼使神差,也不知道弄了啥,又能编译了!
    然后,今天重新打开项目编译,又报错'Demo-Swift.h' file not found!!!我草泥马啊!不得不爆粗口!苹果把这个混编改得这么烂!之前XCode8,9,一直用啊,怎么clean啊,怎么搞都完全没问题!
    最后找到了解决办法,但也只是权宜之计(可以放心用,就是很麻烦)。

    解决过程:

    实际上,我们项目编译之后,在项目目录下是看不到'xxx-Swift.h'文件的。因为这个文件是自动生成在/Users/XXXXXX/Library/Developer/Xcode/DerivedData/Demo-cuikoynpwnwfycfwyyisctpjtahd/Build/Intermediates.noindex/Demo.build/Debug-iphoneos/Demo.build/Objects-normal/arm64目录下的。

    • Library就是【资源库】目录。
    • Demo-cuikoynpwnwfycfwyyisctpjtahd是自动生成的[项目名]+[一长串字符串](每次编译生成的名称不变!)
      这个就是我们项目编译后输出的目录,你手动删除,再编译,又会再次生成。
    • 当我们执行clean的时候,就会把Demo.build/Debug-iphoneos/Demo.build里面大部分数据清空了!包括删掉了Objects-normal目录!这就导致了'xxx-Swift.h'连带被删除了!这个时候我们再去编译,就会报错的!因为它确实是不存在!
      解决的办法是,先把代码里面的 import 'xxx-Swift.h' 屏蔽,以及相关混编纠缠报错的代码都屏蔽,先让编译成功!编译成功才能生成Demo.build目录下的内容,包括'xxx-Swift.h'。当编译输出拥有了'xxx-Swift.h'之后,再重新打开之前屏蔽掉的混编的代码(import 'xxx-Swift.h'等)。
    • 到这里,可能还是报错'Demo-Swift.h' file not found。这时就需要把arm64目录,也就是\color{red}{要把Demo-Swift.h所在目录路径,拷贝到User Header Search Paths}(注意不是Header Search Paths),目录示例:
      /Users/XXXXXX/Library/Developer/Xcode/DerivedData/Demo-cuikoynpwnwfycfwyyisctpjtahd/Build/Intermediates.noindex/Demo.build/Debug-iphoneos/Demo.build/Objects-normal/arm64
      这时,再编译,就可以了。
      如果不添加User Header Search Paths,直接把Demo-Swift.h文件拷贝到项目根目录,也可以编译通过。。。
      综上,第一步要确保Library.../Demo.build目录下有Demo-Swift.h文件;第二步,要确保User Header Search Paths能包含该头文件的路径,或者直接把该文件拷贝到项目根目录。
      之所以说这是权宜之计,是因为一旦我们执行clean|clean build folders,就会把Demo.build目录下(大部分)内容清空,包括会删除'xxx-Swift.h'。而这些目标文件,很多是build success成功才能生成的!!所以必须保证项目代码可以build success,才能再次生成'xxx-Swift.h'!可能需要你屏蔽很多混编代码!这是很麻烦的。

    相关文章

      网友评论

          本文标题:'xxx-Swift' file not found

          本文链接:https://www.haomeiwen.com/subject/bzizoctx.html