簡體   English   中英

Xcode在某些文件中沒有找到Swift橋接header文件

[英]Xcode does not find Swift bridging header file in some files

我的iOs申請Xcode確實有問題,已經在Objective-C編碼了,現在正在Swift的文件遷移,一個接一個。 代碼通過版本控制系統 (git) 在團隊成員之間共享。

我從核心課程開始,然后這樣進行:

  • 我在 Swift 文件中寫入新的 class,例如。 MyClass.swift(帶@objc前綴關鍵字)
  • 我將#import "MyClass.h"替換為@class MyClass; 在 header 個文件中
  • 我在需要它的實現文件 (.m) 中添加#import "MyProject-Swift.h"
  • 我刪除了 MyClass.h 和 MyClass.m 文件
  • 我清理並構建項目

這個過程已經工作了好幾次,但由於某些原因,一些#import "MyProject-Swift.h"不起作用,我得到錯誤: 'MyProject-Swift.h' file not found

根據導致問題的不同文件,有時,Ctrl+Click 會打開“MyProject-Swift.h”文件,有時則不會(無論“未找到錯誤”)。

但是該文件存在,並且其中存在翻譯后的 Swift 代碼。

另一件事真的很奇怪,我嘗試從那些使用#import "MyProject-Swift.h"的東西重新創建 new.h 和 .m 文件並遇到問題,然后它工作(有時不工作,我得到其他錯誤)!

由於它在某些情況下有效,我真的不明白為什么它會導致其他情況出現問題。 當然,我搜索了幾十個主題,但沒有找到有同樣問題的人。

可能是 Xcode 設置問題,還是因為團隊開發人員之間的 Xcode 版本不同?

任何的想法?

謝謝

編輯:

我用另一種觀點來完成問題描述。

我確實有一個工作中的項目 state:使用我的一些新的 Swift 文件,它構建和運行良好(一些 Objective-C 文件使用 Swift 文件)。

我知道某個 .m 文件有問題:

  • 我在開頭添加#import "MyProject-Swift.h" ,沒有別的
  • Xcode 說找不到“MyProject-Swift.h”文件,Ctrl+Click 不起作用,項目不會構建
  • 但是,如果我單擊帶有四個小方塊的按鈕(編輯器的左上角),在顯示的菜單中我有“包括”,“MyProject-Swift.h”列在它下面,然后單擊“MyProject-Swift .h" 打開文件!

#import "MyProject-Swift.h"替換為#import <MyProject-Swift.h>不會改變任何東西。

我有時也會遇到這種情況:Ctrl+Click 打開“MyProject-Swift.h”,但是 Xcode 說找不到“MyProject-Swift.h”文件(它也不會構建)。

  1. 向您的項目添加一個名為[MyProjectName]-Bridging-Header.h的頭文件 這將是單個頭文件,您可以在其中導入您希望 Swift 代碼訪問的任何 Objective-C 代碼。

  2. 在您的項目構建設置中,找到 Swift Compiler – Code Generation,然后在 Objective-C Bridging Header 旁邊從項目的根文件夾中添加到您的橋接頭文件的路徑。 因此,如果文件位於項目根文件夾中,它可以通過MyProject/MyProject-Bridging-Header.h或簡單地MyProject-Bridging-Header.h

您只需要一個橋接頭。 將您的 #import 語句添加到此文件中,您的類現在可以在您的 Swift 代碼中使用,而無需任何額外的導入語句。

我終於想出了自己的解決方案:我猜在一些 git merge 之后,project.pbxproj 文件有點損壞。 該項目的某些文件在該文件中被引用了兩次,所以我刪除了我認為不好的那些(可能隨機選擇的更接近事實)。

現在它就像一個魅力。

事實上,在我嘗試將文件遷移到 Swift 之前,這對項目沒有影響!

在 XCode 中有一個工具或函數來將此 project.pbxproj 文件重置為我們擁有的當前內容將是一個好主意。

基於該假設https://stackoverflow.com/a/31540611/2150954我以這種簡單的方式解決了這個問題

找到目標 C 文件,編譯器聲稱在該文件中找不到 YourProject-Swift 文件。 從項目中刪除它的文件,然后添加.

之后我的項目成功編譯並運行

如果您有兩個目標,並且在 ObjC 代碼中使用的新編輯的 swift 文件不斷出現編譯/語義錯誤,這可能是問題所在 -

你有兩個<ProjectName>-swift.h文件。 就像在 mycase 中: MyProject-swift.hMyProjectSandbox-swift.h這些是包含所有 swift 類和方法的文件。 (當您在 Obj-C 代碼中用 Command 鍵單擊任何 swift 類時,這些會打開)

所以我正在研究Sandbox目標。 我發現,當我對 swift 文件和 clean-build 進行更改時,只有MyProjectSandbox-swift.h被更新。 但主要問題是 ObjC 代碼指的是MyProject-swift.h文件,該文件不會更新,因為我只是在重建我正在處理的(沙箱)目標。

TL; 博士;

因此,解決方案是確保您清理並重建兩個目標,以便使用最新的 swift 代碼和類更新兩者( MyProject-swift.hMyProjectSandbox-swift.h )。

這將更新兩個文件,並且您的 ObjC 代碼不會顯示任何與 swift 文件無關的編譯錯誤。

對我來說,它發生在重命名項目之后。 我所要做的就是重命名路徑:

Build Settings > Framework Search Paths

以匹配新的項目名稱。

在此處輸入圖像描述

暫無
暫無

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

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