簡體   English   中英

Xcode 無法發出預編譯頭文件?

[英]Xcode failed to emit precompiled header?

在此先感謝您對我的幫助。

我昨天在互聯網上搜索了半天,現在已經兩個小時了,但我什么也沒找到(除了使用 route-me 庫時找不到 FMDatabase.h 沒有幫助的兩個鏈接和無法發出預編譯頭文件之外)用於橋接標題

所以這是我的問題:我剛剛擁有一個以前的開發人員一直在從事的項目,當我嘗試啟動它時,我有兩個錯誤:

未能發出預編譯的頭文件 '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang2dsVheader' '/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/我/下載/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'

/Users/me/Downloads/Alavoc-ios-master/Alavoc/externalLib/customClass/customClassViewController.h:13:9: 錯誤: 'FMDB/FMDB.h' 文件未找到

還有一個這樣寫的致命錯誤(即使我只計算了兩個錯誤,這個錯誤出現在前面描述的另外兩個錯誤之上的日志中)

致命錯誤:模塊文件 '/Users/me/Library/Developer/Xcode/DerivedData/ModuleCache/30E4RG2TSVLXF/Foundation-3DFYNEBRQSXST.pcm' 已過期,需要重建:簽名不匹配注意:由 '/Users/me 導入/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch/Alavoc-User-masters Alavoc-Bridging-Header.h:13:9:注意:在 /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h:13 包含的文件中:#import "customClassViewController.h"赫”

customClassViewController.h 第 13 行:

#import <FMDB/FMDB.h>

我想這些錯誤是有聯系的。 你知道它可能來自哪里嗎?

在此先感謝您的幫助,我真的很感激!

編輯battlmonster(新錯誤):

這是兩個錯誤(文件未找到(在 Alavoc-Bridging-Header.h FMDB.h 未找到))並且未能發出預編譯頭:

致命錯誤:文件 '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h' 自預編譯頭文件 '/Users/me/Library/Developer/Xcode/DerivedData 以來已被修改/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch'已構建注意:請重建預編譯頭文件'/LibracutApcbd-vxcode/Usersdvoc/LibracvtcAvetcAverd-dev/Usersdvoc /Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h:29:9:9錯誤:找不到“FMDB/FMDB.h”文件

進口

 ^ 1 error generated. <unknown>:0: error: failed to emit precompiled header

'/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RGpgingsAvoca/Download/Users/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40R -ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'

此錯誤與格式錯誤的橋接頭有關。 橋接頭文件是一個特殊的頭文件,它列出了所有帶有必須可以從 Swift 代碼訪問的類的 Objective-C 頭文件。 所有橋接頭定義都以一種可以在 Swift 中使用的方式進行預編譯。 在您的情況下,橋接標頭是“Alavoc/bridge/Alavoc-Bridging-Header.h”,它包含 customClassViewController.h 的標頭(來自 Alavoc/externalLib/customClass),這表明您的開發伙伴希望 customClassViewController 是可訪問的在 Swift 代碼中。

現在關於橋接標頭的令人困惑的事情是它沒有遞歸地包含所有內容,即它只查看第一級定義,並且如果您在導入中導入一些您想要在 Swift 中使用的內容,則必須將其添加到橋接明確標頭,否則您可能會收到警告(或有時會出現錯誤)。 假設您在橋接頭中有#import "Ah" ,並且在#import "Ah"中有#import "Bh" ",那么您可能還必須在橋接頭中添加 "Bh"。

現在,在您的示例中,A = customClassViewController 和 B = FMDB,通常您需要將 FMDB 添加到橋接頭中,但問題是您很可能不希望通過橋接頭將 FMDB 導出到 Swift,因為它是不是為了這個(它是為了你自己的 objc 代碼而不是 3rd 方庫)。

解決方案是從“customClassViewController.h”中刪除第 13 行。 這可能會修復橋接頭編譯,但可能會破壞 customClassViewController,因此您需要在“customClassViewController.m”中包含 FMDB,並且很可能將“customClassViewController.h”調整為與 FMDB 無關(或向前聲明那些與@class X;用法@class X; )。

如果您將#import <FMDB/FMDB.h>移動到您的實現 (.m) 文件,但仍然error: 'FMDB/FMDB.h' file not found ,則可能是您的標頭搜索路徑中未列出 FMDB 路徑.

要解決最后一個問題,只需在 Xcode 構建設置的“標題搜索路徑”中包含正確的路徑。 假設 FMDB 位於 /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB(你有 /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB/FMDB.h里面),然后你需要打開Xcode項目設置——在左邊選擇你的目標——在頂部選擇“Build Settings”——找到“Header Search Paths”設置並添加/Users/me/Downloads/Alavoc-ios-master/ Alavoc/ASDASD 路徑

如果您使用的是 cocoapod 並且它是一個框架,建議您不要將其包含在預編譯頭文件中。

相反,objc 文件,使用:

@import framework_name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM