Cursor Guide for iOS Engineers (3)
Cursor 0.46
Cursor version 0.46 was recently released. The previous Agent mode is now the default, and several confusing features have been neatly organized within Chat. You can select Agent with Command + I, and the old normal mode can now be used as Edit. When you want to use the conversational mode without modifying code, you can use Command + L to select Ask.
The UI also got a slight revamp to be more user-friendly. I heard it now automatically performs web searches without needing an explicit @Web command. Features related to .cursorignore have been improved, and .cursorindexingignore was added so you can explicitly exclude files from being indexed. Aside from that, various bugs were fixed, and MCP-related features were added.
After this update, I did notice some complaints from existing normal mode users. They say the Agent feature often generates buggy code, especially in a large codebase. There is also an issue where the focus keeps shifting to the description when editing rules. It hasn't been fixed yet, but you can still edit them by right-clicking the mdc file and selecting Open With > Text Editor.
Understanding the Newly Changed UI Cursor Features
Ask: Quick bug fixes, understanding the codebase using `@Codebase`
Edit: Refactoring and improving code; it only makes suggestions, and the engineer must apply them
Agent: Can implement complex logic for the codebase and handle creating, modifying, deleting, and executing files. You can revert to the previous state with Command + Delete
When using Agent, it sometimes recreates files that already exist, so you need to define the file structure well in your cursor rules.
Yolo Mode
How to enable: Cursor Settings > Features > Enable Yolo mode
Lately, I've been developing with Yolo mode turned on. Yolo mode provides a feature where the Agent can automatically execute terminal commands. It is especially useful for automating tasks like running commands or deleting files. For critical changes like running deployment scripts, it doesn't execute them directly but requires the engineer's approval. Yolo mode is also compatible with MCP.
I've been using Yolo mode for a few days now. It actually manages to find problems and complete the fixes all on its own. For example, we are using LocalizedStringResource to provide localization. However, you cannot directly add a LocalizedStringResource to a Label.
// I18N.Settings.appSettings is LocalizedStringResource
Label(I18N.Settings.appSettings, systemImage: "gear") // 오류코드Instead, you can do it in the following way.
Label(String(localized: I18N.Settings.appSettings), systemImage: "gear")At first, it coded using the erroneous method, but then it detected the error and proceeded to code it in the format above. Writing buggy code, detecting the error itself, finding a better way, and resolving it—it executed this perfectly. Thinking it might be more convenient to use it as an extension, I gave it an additional command. The result was amazing.
I had thought of an optimization like the one below,
Label(I18N.Settings.appSettings.value, systemImage: "gear")But Cursor went one step further and produced the result below. It solved it by adding an initializer to the Label.
This is just one of very many examples. There have been numerous cases where it wrote amazing code and taught me something new.
Using Project Rules Instead of Global Rules
Using the "project-rules" in 0.45.2
Although it's a feature added in 0.45.2, you can use Project rules in the same way as .cursor/rules/swift.mdc. In the Alarmy project, we are adding and using rules for the technologies we use, such as tca, swiftui, and swift, in the following manner.
Cursor 0.47
According to Eric, an engineer on the Cursor team, version 0.47 will allow us to delegate even harder tasks using sonnet 3.7.
Almost all coding can be divided into sync and async tasks. Sync is what you do yourself, and async is what you delegate. We will be doing more tasks async, and AI will handle them. sonnet 3.7 is just the beginning.
Lately, I've been using Cursor more than Xcode. Version 0.46 brought major changes that faced a lot of pushback from the community, but I'm quite satisfied using it. Won't I build up more know-how if I keep using it? I definitely need to start executing a wider variety of tasks async.