Now Reading
The whole information to iOS & macOS growth in Neovim

The whole information to iOS & macOS growth in Neovim

2023-11-23 05:49:19

In my earlier submit, I simply scratched the floor of iOS growth in Neovim. Since then I found many new issues that allowed me to maneuver my growth virtually fully to Neovim.

On this article, I’ll describe step-by-step easy methods to configure Neovim to maneuver away from Xcode. It took me a number of months to determine all of it out piece by piece and to mix it into one working iOS growth setting (I did it so that you don’t must :D). Hopefully, it gained’t take you greater than half a day to configure it with my assist :).

It is going to be somewhat bit prolonged journey, and it’ll require organising a number of plugins. I might suggest it to people who find themselves already acquainted with Vim. If you happen to simply put in Neovim, it might be overwhelming to study Vim motions, Neovim setting, and arrange dependencies, unexpectedly.

If you’re simply beginning with Neovim, take it slowly. First, study Vim motions inside Xcode (by enabling Vim mode), within the meantime begin configuring Neovim and get acquainted with it by putting in plugins, enhancing textual content recordsdata, JSON recordsdata, and so on. As soon as you are feeling snug with Vim motions and Neovim, then attempt migrating your growth :).


In fact, there are going to be some limitations, that we are able to’t work round with different instruments, however should you observe this information, you must be capable of do over 90% of the work in the one you love Neovim.

To start with, should you haven’t completed it but, you must neglect about xcodeproj and xcworkspace. One other genius Xcode’s invention, fully unmaintainable by something however Xcode.

Begin utilizing XcodeGen (really helpful) or Tuist as an alternative! These instruments allow you to generate a undertaking primarily based on a easy configuration file. It’s required to simply add new recordsdata, targets, and capabilities outdoors of Xcode. They supply full undertaking administration with out touching Xcode.

Options That Require Xcode

  • Extra superior debugging (sanitizers, reminiscence graphs)
  • UI debugging (view hierarchy)
  • Monitoring of reminiscence consumption, CPU utilization, power effectivity
  • SwiftUI previews (they cease working ultimately anyway)
  • Check debugging (unsure but whether it is doable outdoors of Xcode)
  • Code protection (most likely doable to attain in Neovim)
  • Signing administration
  • Archiving and releasing app (doable by way of command line, however not supported but)
  • Debugging StoreKit 2
  • Xcode Cloud administration and integration
  • Debugging on bodily units
  • UI automated exams
  • In all probability sport and visionOS growth?
  • Code recordsdata in languages aside from Swift
  • Property administration – xcassets is only a set of easy JSON recordsdata and folders, however
    it’s nonetheless most likely simpler to do it by means of the built-in editor in Xcode
  • You could use XcodeGen or Tuist. In any other case, you’ll need so as to add recordsdata and handle
    the undertaking configuration from Xcode.

If these usually are not an enormous a part of your every day work, it is possible for you to to exchange Xcode with Neovim.

Code Completion

An important factor for app growth for my part is the code completion. It’s arduous to think about growth with out that.

Additionally, it was probably the most difficult factor to resolve in Neovim. Why? As a result of Apple is being Apple and shares both none or very restricted instruments that couldn’t be reused by different editors.

Language Server Protocol

These days, we’ve got numerous programming languages. It wouldn’t be doable to keep up all code completions if each language would require a customized integration. That’s why Microsoft launched a unified means to try this and outlined Language Server Protocol (LSP). Kudos to Visible Studio Code! Now, every language is chargeable for offering code completion by implementing LSP.

The issue with Swift + iOS/macOS SDK is that the sourcekit-lsp supplied by Apple doesn’t perceive Xcode initiatives. So how may it present the code completion if it doesn’t perceive the undertaking structure, targets, dependencies, and so on.? Precisely, it might probably’t.

I spent a number of weeks on the lookout for some options, posting right here and there, and attempting many issues. I even acquired info from folks engaged on Swift that it gained’t be doable. Nonetheless, I didn’t surrender and at last, I posted on sourcekit-lsp GitHub a function request to supply assist for iOS growth.

Surprisingly, SolaWing appeared and posted there about his device that covers the hole between sourcekit-lsp and Xcode undertaking. He constructed a device known as xcode-build-server that implements Construct Server Protocol (BSP) to supply all the required details about the undertaking to sourcekit-lsp. And it really works like a appeal!

sourcekit-lsp and xcode-build-server

The device created by SolaWing is de facto nice. You solely must run one command in your undertaking listing and that’s it.

First, it’s important to obtain xcode-build-server. Simply clone the repository and place it in a folder the place you wish to maintain it.

Now, create a symbolic hyperlink to the binary from this folder to ensure that xcode-build-server is globally seen:

As soon as it’s completed, just one extra step is required. It’s important to create a buildServer.json that may inform LSP to speak with xcode-build-server. To do you can merely run one command (almost certainly, solely as soon as to your undertaking lifetime):

In case your undertaking is just not within the root listing, you must transfer the generated buildServer.json to the foundation.

Neovim LSP Integration

An important step is completed. Now, our xcode-build-server will be capable of present info
in regards to the undertaking. We simply must combine our Neovim with sourcekit-lsp.

To try this we’ll want nvim-lspconfig plugin. Here’s a pattern configuration:

So as to add assist for code completion pop-ups you should utilize nvim-cmp.


Now the autocompletion ought to work nice inside any iOS and macOS undertaking. Simply be certain that to open Neovim within the root listing of your undertaking. Open any Swift file and run :LspInfo command to see if the LSP server is correctly connected and if the foundation listing is ready.

If you happen to encounter any issues, normally constructing the undertaking from Xcode and operating xcode-build-server command once more will resolve points. Typically buildServer.json might be corrupted. Open it and ensure that the paths are appropriate.

Linting & Formatting

The following milestone in our growth in Neovim is organising a linter and formatter. The most well-liked selections are SwiftLint and SwiftFormat, so let’s go along with them. Each could be put in utilizing Homebrew.


For linting we’ll use a plugin known as nvim-lint. Sadly, it doesn’t assist SwiftLint by default, however I used to be in a position to create a working configuration on my own.

The strategy above has the benefit of with the ability to exclude recordsdata outlined in your .swiftlint.yml config, as a result of the file title is handed to the device. Nonetheless, this manner linting outcomes can solely be up to date should you save your adjustments.

If you wish to have reside updates with out saving, however with out excluding recordsdata, you could possibly do:

This fashion the content material of the buffer shall be handed to the linter. Nonetheless, the linter doesn’t know what file it’s, and in consequence, it’s unable to exclude any recordsdata.


For formatting, we are able to use conform.nvim plugin. It gives by default SwiftFormat integration, however we wish to enhance it by setting our personal configuration.

In our setup operate we’ll add trying to find the undertaking configuration file, and a operate to format solely chosen vary.


Strive it out! Now linting and formatting of Swift recordsdata ought to work appropriately.

If you happen to encounter any issues, ensure that the trail to the config file is appropriate. You’ll be able to attempt first with an express path.

The Holy Grail – Construct, Run & Check

How may you develop apps with out operating them? Everyone knows that many operations are doable utilizing xcodebuild command line device and xcrun simctl. Nonetheless, there is no such thing as a integration for Neovim to try this out of the field.

I began questioning how I may obtain that. First, I needed to create a number of easy instructions to construct and run functions. I began including them piece by piece and very quickly I ended up growing my plugin to do all of it for you! I known as it xcodebuild.nvim.

The plugin not solely means that you can construct and run functions, nevertheless it additionally gives a sophisticated log parser to generate a easy abstract, and plenty of extra actions like switching simulators, uninstalling apps, choosing schemes, and so on.

Nonetheless, probably the most attention-grabbing is the mixing with exams. The plugin is able to displaying you take a look at outcomes equally to Xcode with an icon subsequent to every take a look at. Moreover, it exhibits take a look at length and provides all issues and failed asserts to the QuickFix listing. On prime of that, you’ll be able to even choose exams in Visible mode and run solely these.

The supplied options cowl many of the actions that you’d anticipate from IDE.


The mixing is pretty easy and doesn’t require any extra steps.

By default, the plugin makes use of xcbeautify to format logs. You’ll be able to set up it utilizing Homebrew or you’ll be able to change it to one thing else or disable the formatter fully within the setup operate:

You can begin the plugin by calling XcodebuildPicker command to configure the undertaking and choose
some actions. For extra particulars, please see

The Final Step – Debugging

We’re virtually there. You’ll be able to’t develop apps with out a correctly working debugger. It’s a must have. Happily, the Neovim neighborhood has an answer for that as properly.

lldb / codelldb

To debug iOS functions you’ll be able to join the debugger to your app course of through the use of lldb command line debugger included in Xcode. Nonetheless, we’ll want one thing extra to attach it with our Neovim.

Here’s a comparable state of affairs to the one with autocompletion. It will be a nightmare to supply a customized integration by every IDE for every language. Due to this fact, Debug Adapter Protocol (DAP) has been launched, once more by Microsoft, to unify that.

In fact, Apple doesn’t present any integration with DAP. Nonetheless, the neighborhood involves the rescue another time they usually constructed a device known as codelldb. It may possibly debug not solely Swift but in addition C++, Rust, Fortran, Kotlin Native, Nim, Goal-C, Pascal, and Zig.

It’s a Visible Studio Code plugin however we are able to use it with Neovim as properly. First, obtain the newest launch for DARWIN structure from HERE and UNZIP the vsix file to the situation the place you wish to maintain it.


The most well-liked plugin for debugging is nvim-dap. You’ll be able to simply combine it with codelldb to supply assist for iOS and macOS apps.

To keep away from guide work with constructing, operating and attaching, my plugin xcodebuild.nvim gives additionally some serving to capabilities for integration with nvim-dap. Simply take a look at the code under and replace paths.


To get a extra acquainted debugging expertise you’ll need nvim-dap-ui. It’s an extension for nvim-dap that may present you routinely all panels essential for debugging. That is one other must-have.

You’ll be able to simply modify the format, icons, and modify debugging mode to your wants. The mixing may be very easy.


Now you must be capable of construct, run, and debug the app by merely hitting <chief>dd. As soon as the app is operating the debugger must be routinely connected.

Bonus: prints

The debugger doesn’t know something about Swift print in your apps. That is one thing added by Xcode. If you wish to see your print logs you’ll be able to set a breakpoint in your logger and log the message.

Utilizing my configuration you’ll be able to press Management-Shift-B and sort the title of the variable that incorporates the message like: {message} and that’s it. Now the debugger will print your logs with out stopping.

Bonus 2: Persisting Breakpoints

By default nvim-dap doesn’t retailer your breakpoints, however you’ll be able to fairly simply add this performance. Simply add on the prime of your nvim-dap configuration file the next code:

Now, you’ll be able to replace your keymaps to save lots of breakpoints:

The very last thing is to load them when Neovim begins. Put it under the keymaps:

Full Configuration

I ready a pattern config utilizing LazyVim. It covers all of the options offered on this article. If you wish to attempt it out, take a look at this repository: ios-dev-starter-nvim. Be certain to put in all essential dependencies.

Ultimate Phrases

Hell has frozen over! Utilizing the strategy described above you’ll barely must open Xcode to develop apps.

It took me a number of months, step-by-step, to get up to now. Ultimately, I needed to take issues into my very own fingers and implement xcodebuild.nvim plugin, however the journey was value it!

If you happen to adopted this information, you must find yourself with a working code completion, linting, formatting, debugger, and primary actions to check, construct, run, and deploy apps to simulators. All collectively covers not less than 90% of the event time.

I’ve been utilizing this strategy for a while and I’m very pleased with the outcomes. Neovim works nice and I’m not a prisoner of dumb Xcode limitations anymore. I don’t have to attend one other 5 years to get a reliably working rename, to get fuzzy search, or to get “dot” assist in Vim mode.

There are numerous third-party dependencies right here, so chances are you’ll face some issues sooner or later. This text was written in a means that ought to let you copy part by part with none additional steps. Nonetheless, should you encounter difficulties, or if one thing is unclear, be happy to submit a remark.

Neovim is a really extensible device, you’ll be able to simply configure or add something you want. As you’ll be able to see, I used to be in a position to create a posh plugin offering take a look at integration just like the one in Xcode and all of it took solely round 2 weeks (and is almost certainly extra dependable than the one in Xcode).

All the most effective within the new period of iOS & macOS growth outdoors of Xcode.

Enhance Your Work

Psst! If you wish to enhance your productiveness even additional, take a look at this app.

Snippety is a device that may make every day duties extra gratifying by offering fast entry to your snippets. Snippety works flawlessly with each textual content area! Simply press ⌘⇧House, discover your snippet, and hit ↩︎. You’ll be able to outline additionally your key phrases and use snippets by simply typing with out even opening the app!

Snippety Keyboard
App Store - Snippety

Source Link

What's Your Reaction?
In Love
Not Sure
View Comments (0)

Leave a Reply

Your email address will not be published.

2022 Blinking Robots.
WordPress by Doejo

Scroll To Top