web-dev-qa-db-ja.com

Xcode 7.3の構文の強調表示とSwiftのコード補完の問題

私はXCode 7.3で非常にイライラする問題を抱えています(ただし、XCode 7.2をインストールしてからこの問題が続いています)とSwiftコード、そして他の人がこの問題を抱えていて解決方法を知っていることを願っています構文の強調表示とコード補完は、Objective-Cファイルでは完全に機能し、他のSwift Swiftコード内のオブジェクト。 Swiftコードで言及されているObjective-Cオブジェクトまたはメソッドは構文強調表示を取得せず、XCodeはObjective-Cで宣言されたメソッドまたはプロパティを完了しません。すべてが正常にコンパイルおよび実行されます。

また、XCodeの完全なクリーンインストールも試みたことを付け加えます。派生データをすべて削除し、XCodeキャッシュをすべて削除し、XCodeプリファレンスファイルを削除しました(再インストールする前にXCode.appアーカイブを明らかに削除しました)。

Swiftでの開発が非常に難しくなっています。これはやりたくありませんが、これを解決する方法が見つからない場合は、Objective-Cの使用に戻る必要があります。

37
aeskreis

そのため、問題はCocoaPodsにあったようです。フレームワークとしてではなく静的ライブラリとしてCocoapodsを使用していました。フレームワークに切り替えて(私のPodfileでuse_frameworks!を使用)、ライブラリをSwiftにインポートすると、すべての問題が解決しました。 XCodeを処理します。いずれにしても、この問題は解決されました。これが将来誰かに役立つことを願っています。

8
aeskreis

私は同じ問題を抱えています。しかし、最終的にそれを解決しました。私は2つの変更を行いますが、どちらが重要なポイントであるかはわかりませんが、それらすべてを試すことができます。

  1. モジュールキャッシュを削除する

プロジェクトの派生データと同じフォルダー内にモジュールキャッシュがあります。コード補完が機能しなくなったときに、これを削除すると修正されました。

Xcodeを閉じるおよび〜/ Library/Developer/Xcode/DerivedData/ModuleCacheディレクトリを削除します。

  1. モジュールの有効化の値を変更する

ターゲットのビルド設定に移動してから、モジュールの有効化を検索します

Yesの場合、Noに変更します。ビルドエラーが発生する場合は、Yesに戻します。

上記の2つのステップの後、Clean(Shift + Command + K)プロジェクトにする必要があります。

今のところ、問題を修正することができます。

21
Galvin

これはもう必要ないかもしれませんが、私はまだこれを投稿したいです:

この投稿の時点で、最新バージョンのcocoapods(1.0.0.beta.8)では、Xcodeターゲットごとにポッドを定義する必要があります。

私の場合、プロジェクトターゲットおよびテストターゲット用にクラスをコンパイルしました。怠lazのため、メインターゲットにのみポッドを追加しました。

クラスAのコードで作業中です。import NAMEを使用してポッドフレームワークを追加し、フレームワークのクラスを使用しようとしました。 Xcodeは、新しいクラスを使用する特定のコードを強調表示しませんが、コンパイルと実行は正常に機能します。完了ダイアログでは、変数のタイプは<<error type>>でした

この問題を解決する方法:Podfileで、新しく追加されたポッドをすべてのターゲットに追加します。クラスAはメンバーです。

これで、Xcodeはすべてのターゲットに必要なフレームワークを検出し、コードの強調表示が再び機能します。

編集1:

可能な解決策は、私の例のように、共有ポッドのリストを定義することです:

platform :ios, '8.4'
use_frameworks!
inhibit_all_warnings!

def all_pods
    pod 'MPMessagePack'
    pod 'SwiftyDispatch'
    pod 'BFKit'
    pod 'Timepiece'
    pod 'Alamofire'
    pod 'AlamofireSwiftyJSON'
end

def testing_pods
    pod 'Quick'
    pod 'Nimble'
end

target 'App' do
    all_pods
end

target 'AppLogicTests' do
    all_pods
    testing_pods
end

target 'AppUITests' do
    pod 'RxTest'
    all_pods
    testing_pods
end

post_install do |installer|
    installer.pods_project.targets.each do |target|
        puts target.name
    end
end

これにより、すべてのポッドがすべてのターゲットに追加され、すべてのテストポッドがターゲットに追加されます。これらの横に、AppUITestsに「RxTest」を追加しました。

(選択されたポッドは私のプロジェクトの例であり、広告は意図されていません:-))

ObjC/Swiftの混合プロジェクトでも同じ問題が発生しました。派生データなどの削除に関するすべての提案を試みましたが、役に立ちませんでした。時々それは助けましたが、再現可能な方法ではなく、しばらくして動作しなくなりました。この投稿のGalvinの投稿は、モジュール関連のビルド設定のトラックに私を置きました。ただし、コードの完了/色付けを再現可能な方法で解決したのは別の設定でした。メインプロジェクトのDEFINES_MODULE(パッケージ化)をYESからNOに設定することが解決策でした。

ノート:

3
Marius

上記のどれもうまくいかなかった場合、Cocoapodsを使用している場合は、Carthageに切り替えてみてください。

Googleで見つけることができるすべての提案を試みましたが、役に立ちませんでした。しかし、それを修正しようとする多くのハックの理由として、一貫してCocoapodが登場しているように見えました。私はCarthageを読んでおり、プロジェクトがどのようにプロジェクトを変更しないか、ワークスペースを強制的に使用するか、ビルドフォルダーをヘッダーファイルで埋める可能性があります(Xcodeを混乱させ、構文の強調表示とオートコンプリートが壊れる可能性があります)。

切り替えを行った後、私はまだ何の問題にも直面していません。正直に言うと、クリーンなソリューションを得るために、ほんの少しのオーバーヘッドを好みます。 この投稿 本当に私のために家に帰りました。

0
Scott Fister