web-dev-qa-db-ja.com

Xcode 4:オートコンプリートと定義へのジャンプがXcode 3プロジェクトで壊れる

私のプロジェクトはXcode 3で作成されました。Xcode4で開きます。次の点に注意してください。

  • 'Jump to Definition'自分のシンボルでは動作しなくなりました(ただし、UI *やTT *シンボルでも問題なく動作します!)
  • オートコンプリート/「コードセンス」はXcode 3と同じくらい悪い、つまりすべてを示唆しています
  • プロジェクトのクラスがクラスナビゲーターに表示されません(ここでも、システムクラスとThree20クラスが表示されます!)

ただし、new Xcode 4プロジェクトを作成する場合、これらの機能doは機能するようです。残念ながら、唯一の回避策は、プロジェクトを再作成してすべてを再インポートすることです。このプロジェクトは大きすぎます!

私が試したこと:

  • オーガナイザーでの派生データの削除
  • プロジェクトの掃除
  • Xcode 4ゴールドマスターと最終バージョンの両方をインストールする

更新

  • このバグはXcode 4.0.1で解決されていません
43
Jimmy

私たちの場合、犯人はthree20 libsの古いバージョンであることが判明しました。プロジェクトを機能させるために私はしなければなりませんでした:

  1. プロジェクトからthree20へのすべての参照を削除します
  2. http://three20.info/article/2011-03-10-Xcode4-Support の指示に従ってください

新しいライブラリがインストールされるとすぐに、xcode4は自動的に再インデックスされます。コード補完、定義へのジャンプ、さらにはすべてのリファクタリングが今すぐ機能しています。 Xcodeを操作するJoy(tm)が復活しました! :)

より一般的に言えば、ヘッダーファイルをBUILT_PRODUCT_DIRに配置するライブラリには、同様の問題がある可能性があります。

1
Maria Zverina

オンウィンドウメニュー:

  1. 主催者
  2. [プロジェクト]タブ
  3. あなたのプロジェクト
  4. 派生データの削除
  5. Xcodeを再起動

他の人の答えからの小さなヒント:

ステップ4の後、プロジェクトをリビルドせず、Xcodeを再起動します。

67
xhan

私がxcodesを失ったときにうまくいったのは、素晴らしいコードヒントでした:

ウィンドウ(メニュー)->オーガナイザー(メニュー)->プロジェクト(タブ)

その後

派生データの削除を押します(これは、フォルダーに移動して手動で削除するのと同じです)

BUT !!!!!このステップではリビルドせずに、xcodeをシャットダウンしてプロジェクトを再度開きます。これでうまくいきました。

16
yeahdixon

今日、XCode 4の最終バージョンでも同じ問題が発生し、古いXCode 3プロジェクトで作業していました。この問題は、XCodeが作成するシンボルのインデックスに関連しています。新しいインデックスが自動的に作成されるはずですが、XCode 4では時間がかかるようです。解決策の1つは、〜/ Library/Developer/Xcode/DerivedDataに移動して古いインデックスを削除することです。 XCodeを再起動すると、インデックスが表示されます。 「Jump to Definition」の場合、コマンドを押したままメソッドまたはクラス名の上にマウスを置くと、ハイパーリンクのような青い下線が表示されます。次に、それをクリックして定義にジャンプできます。

7
gstroup

編集:共有コードで複数のターゲットをサポートするためのカスタムヘッダー検索パスがある場合、XCode 4のインデックス作成は機能しなくなり、アシスタントとcodesenseも一緒に機能します。私はこれを#ID 9182099としてAppleに提起しました。また、プロジェクトのグローバル設定とターゲット固有のビルド設定の間に競合する設定がある場合、インデックスが正しく完了しないという問題もあります。ビルド設定が一貫していることを確認してください。

非常に大規模なマルチターゲットの商業プロジェクトでこの問題が発生しました。追加の痛みとして、すべてのxibファイルはコントローラーをアシスタントビューに表示せず、サブクラス/スーパークラス/兄弟/カテゴリアシスタントビューも機能しません。

多くの検索とインデックスの削除などの実験の後、私は新しい空のプロジェクトを作成し、すべてを再インポートすることを余儀なくされました。あなたのプロジェクトはこれには大きすぎると言っていましたが、他に利用できるオプションはないと思います。最終的に、プロジェクトを完全に移行するのに1日のほとんどがかかりました。私はあなたが将来のポイントリリースでの解決のためにうまくいくと思いますが、私は今、弾丸を噛んで新機能による生産性の向上の恩恵を受けることを選びました。

これを実現するために、新しい「空の」プロジェクトを作成し、必要なターゲットを手動で再作成しました。次に、新しいターゲットのソースファイルと.plistファイルを削除して、必要な3つのターゲットを含む空のプロジェクトを再び残しました。

次に、必要に応じて、ターゲットに対してリンクするフォルダを一度に1つずつプロジェクトに追加します。最新のclangで発生したコンパイラエラーに対処するためにインポートされた各ターゲットを停止してビルドしました。

ファイルシステムのフォルダー構造にマップされていない複雑なグループ階層がある場合は、インポート後にグループを再作成するか、すべてのファイルをサブフォルダーに移動してXCodeの参照を再ポイントするという面倒なプロセスを実行する必要があります。

また、ターゲットのカスタムビルド設定を慎重に確認し、含めるライブラリを再リンクする必要もあります。また、ターゲットリンクから一括インポートされた.plistファイルを必ず削除してください。

これがあなたが望んでいた答えではない場合は申し訳ありません。

7
Rick

http://three20.info/article/2011-03-10-Xcode4-Support うまくいきました。具体的には、three20のビルドディレクトリを消去します。奇妙なことに、このビルドがxcode4で作成された場合でも機能しました。 CodeSenseは、three20ビルドディレクトリを消去した瞬間に動作し始め、プロジェクトを再コンパイルまたは再ロードする必要すらありませんでした。

4
GreatWiz

これは私のためにうまくいきました:

  • Xcodeプロジェクトを開きます。
  • プロジェクトディレクトリでコマンドプロンプトを開き、次のように入力します。

    touch MyProject.xcodeproj/project.pbxproj

  • 構文の色付けやその他のものがあなたの目の前で修正されるのを見てください。

  • IOSプロジェクトでプロジェクトスキームが「My Mac」にリセットされた場合は、プロジェクトを再度開きます(またはプロジェクト設定を調整します)。
2

Organizerで派生データを削除し、touch MyProject.xcodeproj/project.pbxprojを実行してプロジェクトを再度開くことで、問題を修正しました。それを再度開いた後、インデックス作成を開始し、その後再び機能していました。

2
k3a

いくつかの場所にもコメントとしてこれを追加したので、Googleジュースがプログラマーの再稼働に役立つかもしれません...しかし、とにかく、touchコマンドをYourAppName-Prefix.pchファイルすべての派生データを削除したり、Xcodeを再起動したりすることなく、構文の強調表示/色付けとコード補完/ジャンプに戻ります。これを.bashrcファイルでエイリアスにしました。

alias pch_touch='touch /path/to/your/apps/Prefix.pch'

. ~/.bashrc

Pchファイルに触れてから約1〜2秒以内に、構文の色分けが再開されます。これは、サインコードの完了/ジャンプも機能するようになります。悲しいことに、そうでなければ素晴らしい強力なツールは、いくつかのメタデータ/ステートフル性のバグによって控えめにされていますが、そこに行きます。少なくともそれはあなたをバックアップして走らせ、あなたの時間を無駄にするのをやめます。

1
Eric Goldberg

XCode 4のセットアップでは、再起動後にユーザーヘッダーの検索パスを設定すると、コードセンス、特に「定義へのジャンプ」が中断されることが100%再現可能です。新しいプロジェクトを作成し、ヘルパーライブラリをサブプロジェクトとして追加しました。ユーザーヘッダー検索パス(再帰的)でヘッダーを含めると、コンパイルできますが、オートコンプリート/ナビゲーションが機能しません。

ヘッダー検索パスを削除し、プロジェクトを閉じて再度開くと、再び修正されます。

1
Duane Fields

このコメントはこちら プロジェクトで同様の問題をデバッグすることができました。clangプリプロセッサが正しく認識していなかったのは、悪い-wフラグのようです。基本的に、実行中

defaults write com.Apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

ターミナルでは、インデクサーの冗長性が向上し、問題の追跡に役立ちます。 Console.appを実行し、IDEIndexingClangを検索します。

0
damian

私はこれとまったく同じ問題を抱えていました。私はBaseViewControllerと呼んでいるクラスを拡張する一連のViewControllerを含むプロジェクトを持っています。以下のコードをBaseViewController.hに追加し、構文の色分けとコードのオートコンプリートが壊れました!派生データの削除を繰り返しても問題は残っていました。信じられない!

@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResponder
{
    if (self.isFirstResponder) {
        return self;
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResponder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}
@end

このコードをコメントアウトすると、私の問題が解決しました! XCodeバージョン4.4.1(4F1003)を持っています

0

「Jump to Definition」については、Scheme選択ボタン(ビルド、デバイス、およびシミュレーターのリストを表示するウィンドウの右上近くにあるボタン)をクリックしてから、コードエディターでクリックして戻り、Commandキーを押しながらクリックします。または「Jump to Definition」をもう一度。

私は最近、「Jump to Definition」が機能しなくなったときはいつでもこれを実行でき、しばらくの間再び機能することを発見しました。これは修正ではありませんが、有効な回避策です。

0
John Lemberger

それが誰かに役立つかどうかはわかりませんが、Xcode 4に切り替えたときにC++プロジェクトのコードインデックスが壊れました。Lionに切り替えていないため、4.02バージョンをまだ持っています。 Xcodeでプロジェクトを作成するときは、外部ビルドオプションを使用しますが、HEADER_SEARCH_PATHSがプロジェクトに正しく追加されませんでした。私はそれを使用してそれを見つけました:

   cmake -G Xcode . 

xcodeプロジェクトを生成するには、この変数を正しく設定し、プロジェクト全体のインデックス作成を有効にします。

0
Jim M.

私も同じ問題を抱えていました。定義リンク、コードセンス、構文強調表示はありません。派生データの削除は機能せず、新しいプロジェクトを作成しても違いはありませんでした。それはあなたが持っているのと同じ問題ではないかもしれませんが、リックが言ったようにビルド設定をクリーンアップして(プロジェクトとターゲットの間に競合がなくなるように)それを解決しました(私はまだどの設定が/だったのかわかりませんが/問題を引き起こしていた)。

0
Sacha