I exploit Xcode on a daily basis, however I do know not anything about Xcode. In this text, I can discover what indexing is and the way it works. At the tip of the thing, I’ve written a easy command-line software to question the tips saved in indexing DataStore.
1. Xcode Indexing
1.1. What indexing is2. How indexing paintings
2.1. Unit record and file record
2.2. Using IndexRetailer to question DataStore
2.3. Xcode Indexing Log3. Extend Reading
What indexing is
Indexing strengthen a spread of IDE options like code navigation, syntax highlighting, code auto-completion, jump-to-definition, to find usages, refactor. You use those options on a daily basis as an iOS developer.
How indexing works
When Xcode quite a bit a task that hasn’t been construct, it’s going to get started indexing the task.
Activity observe is a handy gizmo that can assist you to find out the working processes, the Xcode and SKAgent pop up from the record when I open the task.
So, the query is what SKAgent is? The SKAgent is the element of SourceKit framework runs the compilation instructions to generate the indexing knowledge. The SKAgent executable binary locates at /Applications/Xcode.app/Contents/SharedFrameworks/SourceKit.framework/Versions/A/XPCServices/com.apple.dt.SKAgent.xpc/Contents/MacOS/com.apple.dt.SKAgent
The SKAgent is aoperated by means of SourceKit makes use of the mechanism to keep up a correspondence with Xcode.
I alter the surroundings variable, SOURCEKIT_LOGGING, to permit the logging of SourceKit. And then open the terminal, input SOURCEKIT_LOGGING=3 /Applications/Xcode.app/Contents/MacOS/Xcode &> ~/Desktop/indexing.log. The recordhas a variety of knowledge, so I spotlight the content material for higher demonstration. SourceKit-Client, aka, the Xcode, calls for indexer to open or create indexing with the next arguments.
Client calls for indexer to check in items include the assets record.
SourceKit posts notification that compiler will get started compiling the supply record ViewController.swfit to the buyer.
SourceKit posts notification that compiler did end compiling the ViewController.swift to the buyer.
The indexing knowledge shop within the route laid out in the argument move by means of the command -index-store-path spotlight in Figure-3 with blue colour.
After the SourceKit finishes indexing, I attempt to soar to definition, upload a brand new record, upload new serve as and rename purposes to ensure how the indexing paintings.
- Jump to definition
Just proper click on the hi serve as after which click on soar to definition
- Add a brand new record
Add new record, Modal, to task.
- Add a brand new serve as
Rename the serve as declared in Modal.swift
The motion described above you are making, Xcode will turn into right into a request. The request will ship to SourceKit. There are a number of roughly requests
- Code Completion
- Cursor Info
- Module interface era
- Protocol Version
- Compiler Version
You can move to thefor extra element. After SourceKit receives the request, it’s going to question the indexing knowledge(the DataStore) to meet the request and generates the corresponding reaction to Xcode. SourceKit and Xcode paintings as CS structure. SourceKit is the server, Xcode is the SourceKit-client.
Unit record and file record
Both the clang and swift compilers strengthen the command line possibility -index-store-path <dir>, which tells the compiler to supply indexing knowledge within the type of unit information and file information within the given listing. When the -index-store-path possibility is provide, clang will upload the fronted motion,. It makes use of an to gathering image occurrences from the type-checked AST. In addition to this, despite the fact that, it additionally makes use of an to gather the supply information and modules concerned within the compilation, and any related record inclusion and module import members of the family. When the frontend motion is finished (i.e. IndexRecordMotion’s completed() way is named) the amassed indexing knowledge is written out to the index knowledge shop.
Writing the indexing knowledge to the shop is treated by means ofand categories.
FYI, you’ll download theright here.
Unit information are information that file details about the interpretation unit of the compiler invocation, monitoring the the set of supply record paths and matching file information that contain them, in addition to the unit information of every other compilation gadgets they rely on. They observe the naming conference “basename-hash” the place basename is the basename of the output record (the one handed to the compiler within the -o possibility), and hash is theof absolutely the route of the output record — if the trail given to the compiler within the -o possibility is relative, it’s reworked to an absolute route ahead of hashing.
The content material of the ViewController unit record proven underneath
Record information file details about the symbols encountered in several information used all over compilation. They observe the naming conference “basename-hash” the place basename is the basename of the record learn by means of the compiler (e.g. stdio.h), and hash is the hash of the contents of the record after being preprocessed.
The content material of the ViewController file record proven underneath
To get the c-index-test software, you’ll clone the, and observe the professional . After development the llvm, the executable locates at llvm-project/construct/bin.
Using IndexRetailer to question DataStore
Also, you’ll useto question the indexing knowledge saved in a listing laid out in -index-store-path. I’ve written a the use of IndexRetailer to seek out all of the references of symbols laid out in the enter price.
First, download the. Second, open the IndexingDemo.xcodeproj and construct. After development, move to the Report navigator, to find out the shop route laid out in each and every assemble unit.
Open the IndexStoreCmd.xcodeproj, upload the shop route, and the logo you need to go looking.
After working the IndexStoreCmd, the outcome as Figure-5 displays, style is referenced by means of ViewController and ModalSupervisor.
Comparing the Figure-5 and Figure-6, the outcome fits the references declared within the supply information. The diagram underneath depicts the structure of Xcode, SourceKit, Compiler, and IndexStore_db, no longer professional, please inform me if anything else unsuitable.
Xcode Indexing Log
You can override the Xcode environment, IDEIndexDisplayLog, to appear up the indexing log straight away. Open terminal, input defaults write com.apple.dt.Xcode IDEIndexDisplayLog -bool YES. Because the indexing occurs within the background, it lets you do one thing indexing motion, like soar to definition, straight away after coding.
video: Index‐While‐Building, pdf: