ios - tutorial - xcode swift教學




SourceKitService終止 (20)

我遇到了Xcode出現“源代碼包服務終止”錯誤的問題,並且所有語法突出顯示和代碼完成都在Swift中消失了。 我怎樣才能解決這個問題?

這是一個示例圖像:


Xcode 6.1 Beta 3:

只要你在一個Swift文件中定義了一個非私有類型別名(例如typealias Foo = Int ),在另一個文件中輸入字母c就會導致SourceKitService崩潰。

解決方案是從使用類型別名退出,等待下一個測試版發布或在類定義中包裝類型別名:

public class DummyClass {
    public typealias Foo = String
}

並像這樣使用它:

var myVar:DummyClass.Foo?

今天有同樣的問題,事情是與println ,我只是嘗試舊的NSLog樣式打印一個值:

// something like this
println("value = %@", valueObj)

我們應該如何在swift中編寫字符串的方式已經從printf樣式演變為內聯樣式,所以現在您將值直接嵌入到格式字符串中,如下所示:

"Here goes \(YOUR_VARIABLE)"

所以,對於上面的例子來說,解決方案是:

println("value =\(valueObj)")

僅包含這兩行的程序(可能在Swift語法方面有錯誤)足以導致此處出現“SourceKitService Terminated”錯誤:

var x = 42
println("Hello", x)

使用let而不是var會使編輯器再次正常工作。 Xcode版本6.0(6A215l)


向蘋果報告(#17266321):

細節:

簡介:如果我們嘗試打印一個字典值為數組,彈出窗口會彈出 - “SourceKit已終止,編輯器功能暫時受限”。 Xcode凍結並丟失上下文識別,導致文本變黑。

重現步驟:1.創建一個數組為“ - var iOSHistoryArray = [”iOS6“,”iOS7“,”iOS8“,]”

  1. 創建一個字典為 - “var MacOSYosemiteFeatures:Dictionary = [”Device“:iOSHistoryArray]”。

  2. 打印字典為 - “println(”包含數組值的字典:%@ \ n“,MacOSYosemiteFeatures)” (<< - Culprit - >>)

  3. 第3步導致問題註釋使Xcode再次起作用。

預期結果:Xcode應該正常運行。

實際結果:Xcode變得無法正常工作,丟失上下文識別(所有字體丟失,所有文本變成純黑色),整個Xcode變為無效。

版本:Version 6.0(6A215l)


嘗試一下:

Swift編譯器/索引器中存在一個錯誤。 代碼中的一些行或行會給它帶來困難。 您將不得不使用其他文本編輯器編輯您的代碼,以在您能夠使用Xcode打開該項目之前註釋出錯的行。 如果您不知道問題所在,請註釋掉所有代碼。 一旦你打開了這個項目,你就可以開始一點一點地回收代碼,直到CPU活動的增加告訴你你已經找到了問題。



如果Xcode打開,請退出。 然後從終端運行:

defaults delete com.apple.dt.Xcode

這會將Xcode恢復到默認設置。 打開Xcode,一切都應該再次運作。


將部署目標更改為iOS 8.0適用於我。 我知道有人說把它移動到<= 7.1工作,但這個問題似乎來自多個來源,所以這個替代方案可能工作。


對我來說,解決方案恰好改變了模擬器。 我為我的模擬器使用iPhone 5S,當我將它切換到iPhone 5時,一切正常。 希望未來的版本能夠完全解決它。


對於在Beta 2中創建的項目,我對Xcode6 beta 3也有同樣的問題。

這是因為swift語言中的新突破性變化,即數組聲明語法。

由於測試版3中的更改發生中斷,請檢查受影響的代碼。

http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf

我的例子之一是:

我必須改變:

var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;

var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController

結論:看起來如果源代碼中有錯誤,在某些情況下,這個錯誤是由Xcode產生的。

解決方案,直到錯誤被修復:手動檢查錯誤:)

祝你好運!


您的項目是否被命名為Swift ? 看到這個消息,構建也會失敗( <unknown>:0: error: module name "Swift" is reserved for the standard library )。 嘗試使用另一個項目名稱,如SwiftTest 。 它會工作。


我在Apple的開發者論壇上找到了一個解決方案 (需要登錄,所以我也會在這裡解釋)。

TLDR :不要將Objective-C中的@protocol導入到與@interface命名相同的Swift橋接頭。 例如,Facebook SDK同時具有一個名為“FBGraphObject”的協議和接口。

這是論壇帖子:

添加Facebook SDK會導致SourceKitService崩潰。 如果你想使用測試版3並且你需要Facebook SDK,那麼我發現並正在為我工作的一個工作是重構Facebook SDK的@protocol FBGraphObject並將其重命名為@protocol FBGraphObjectProtocol作為@interface FBGraphObject也存在,顯然SourceKit不喜歡它。

它確實是一個臨時解決方案,只是為了保持功能性,您必須自己使用Cocoapods或以其他方式構建Facebook SDK,而不是使用框架庫。

目前,您需要確保您沒有衝突的@protocol和@interface聲明,並且包含您可能使用的第三方庫。

今天這花了我,希望它有幫助!

e.parto20147月10日發布


我在嵌套的Objective-C ++項目中遇到了同樣的錯誤,它現在包含了框架和Swift代碼。 為了解決這個問題,我不得不明確構建框架。 一旦我做了這個問題消失了,不回來;)


我想我找出了一個(因為可能有很多)的原因。

在我的情況下,我通過Bridging Header導入了Objective-C文件,該文件具有下列其中一個true:

  1. Objective-C導入的實現文件(.m)沒有正確設置應用程序目標。
  2. Objective-C文件只有頭文件(.h)文件而不是實現文件(.m)。 (同樣,我認為這是“沒有正確的應用程序目標”集合的一部分,因為您只能在.m文件中設置目標而不是在.h文件中)

修復Objective-C文件上的應用程序目標或刪除橋接頭中的這些文件的導入似乎可以解決這個問題。

僅供參考 - 如果您需要設置沒有實現(.m)文件的Header(.h)文件的目標,則可以執行以下簡單步驟: 無法在Xcode 4.5中更改目標成員可見性


我發現通過顯式(靜態)鍵入變量類型,而不是推斷它們,為我解決了這個問題。


我的答案(Xcode6-Beta7)只是簡單地刪除Derived Data文件夾。

Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.

希望這可以幫助某人。 這種崩潰發生的原因顯然有很多。


我鍵入後,SourceKitService在我的系統上崩潰

extension foo {

我正在使用Xcode 6 beta 6,如果我將它輸入到一個空文件或將其添加到現有文件中,則無關緊要。 只要源包含一個extension塊,它就會崩潰。 即使在新創建的項目上也會發生這種情況

我的“解決方案”是為了避免在我目前正在處理的來源中進行擴展。 我註釋掉了一個類塊的結尾和擴展塊的開頭。 一旦我完成了我在班上的工作,我就再次評論他們:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}

插入touchesMoved函數後,它開始發生在我的spritekit項目上。 該函數使用強制解包,這似乎會導致問題:

override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)

刪除感嘆號並停止強制解包後,SourceKitService停止崩潰。

希望這可以幫助!


為了解決這個問題,你可能會在你的Swift代碼中出現一些奇怪的問題。 例如有多個IBOutlets的定義,因為您正在復制和粘貼。 通常這只是一個無法處理的語法錯誤。


為項目使用除Swift之外的其他名稱。 “斯威夫特”是保留的。





swift