VSCode上的iOS开发

技术标签: ios  

Using an IDE other than Xcode for iOS development until recently was a rather lonely path. This however tends to change with recent developments in the Apple ecosystem. Swift runs officially on Linux, Windows, AWS lambda, docker, and other places where you wouldn’t expect to find a programming language made by Apple.

直到最近,使用Xcode以外的IDE进行iOS开发都是一条很孤独的道路。 但是,随着Apple生态系统的最新发展,这种趋势往往会改变。 Swift可以在Linux,Windows,AWS lambda,docker和其他您不希望找到Apple编写的编程语言的地方正式运行。

Apple also wants to enable Swift to be a first-class citizen in 3rd party IDEs providing error reporting and code auto-completion. For that reason, they are developing SourceKit-LSP with plugins ready for popular IDEs such as Visual Studio Code (aka VSCode).

苹果还希望让Swift成为第三方IDE中的一等公民,从而提供错误报告和代码自动完成功能。 出于这个原因,他们正在开发SourceKit-LSP ,其插件可用于流行的IDE,例如Visual Studio Code(又名VSCode)。

Why would you want to use an IDE other than Xcode? Well, Xcode is not available on Linux or Windows in the first place. But even when being on a Mac, VSCode offers several nice features among of them a killer one called Live Share that allows 2 or more developers to collaborate remotely on the same file with live code co-editing. You can think of it as Google Docs for code.

为什么要使用Xcode以外的IDE? 好吧,首先,Xcode在LinuxWindows上不可用。 但是,即使在Mac上,VSCode也提供了许多不错的功能,其中一个杀手级功能称为Live Share ,它允许2个或更多开发人员通过实时代码共同编辑在同一文件上进行远程协作。 您可以将其视为Google Docs代码。

In the days of post-Covid and home office this feature is a real life saver and makes a developer’s life so much easier either if you want to do pair programming or briefly explain and get assistance on a certain task.

在Covid发布后和家庭办公室时代,此功能可为您节省大量时间,如果您想进行配对编程或简要地解释并获得特定任务的帮助,则使开发人员的生活变得更加轻松。

If you try to use Swift in VSCode you will get something like that:

如果您尝试在VSCode中使用Swift,则会得到类似以下内容:

Image for post
Auto-completion does not work as expected
自动补全无法按预期工作

The steps needed to enable VSCode for iOS development are basically 3:

启用VSCode进行iOS开发所需的步骤基本上是3:

  • Enable Swift language support

    启用S​​wift语言支持
  • Add iOS framework support

    添加iOS框架支持
  • Add “app” target support

    添加“应用”目标支持

Since this guide focuses on iOS and this is currently possible only with a Mac for the rest of the guide we will assume we are running on a Mac. Otherwise you can go as far a step 1.

由于本指南着重于iOS,因此本指南的其余部分目前仅适用于Mac,因此我们假定我们在Mac上运行。 否则,您可以继续执行步骤1。

启用S​​wift语言支持 (Enable Swift language support)

Make sure you have Xcode and VSCode installed. This is the easiest way to hit the ground running since sourcekit-lsp comes prebundled with Xcode. Open a terminal and run:

确保已安装Xcode和VSCode。 由于sourcekit-lsp与Xcode捆绑在一起,因此这是最简单的运行方法。 打开一个终端并运行:

$ xcrun sourcekit-lsp

Assuming that you don’t see any output this is normal and means it works as expected. Hit Ctrl+C to end the process.

假设您没有看到任何输出,这是正常现象,意味着它可以正常工作。 按Ctrl + C结束该过程。

构建SourceKit-LSP扩展 (Build the SourceKit-LSP extension)

Now it is time to build the SourceKit-LSP extension. There is an unofficial SourceKit-LSP — Unofficial CI build but this did not work for me. Building it from source is not that hard. Just make sure you have node.js installed and then run:

现在该构建SourceKit-LSP扩展了。 有一个非官方的SourceKit-LSP —非官方的CI版本,但这对我不起作用。 从源代码构建它并不难。 只要确保您已安装node.js ,然后运行:

$ git clone https://github.com/apple/sourcekit-lsp.git
$ cd sourcekit-lsp/Editors/vscode/
$ npm run createDevPackage
$ code --install-extension out/sourcekit-lsp-vscode-dev.vsix

After that restart VSCode.

之后,重新启动VSCode。

Contrary to what you might read elsewhere you don’t need to edit the source code of the extension at all.

与您在其他地方可能会读到的内容相反,您根本不需要编辑扩展程序的源代码。

If you try to open a Swift file now you will get an error

如果您现在尝试打开Swift文件,将会收到错误消息

Image for post
The plugin can’t locate SourceKit-LSP’s location
插件找不到SourceKit-LSP的位置

配置扩展 (Configure the extension)

You need to let the plugin know the location of the sourcekit-lsp executable. Open settings.json from VSCode using Cmd+Shift+P and enter “Preferences: Open Settings (JSON)”.

您需要让插件知道sourcekit-lsp可执行文件的位置 使用Cmd + Shift + P从VSCode打开settings.json ,然后输入“首选项:打开设置(JSON)”。

Insert this JSON as the last entry in the existing JSON. Remember to add a comma in the previous line.

将此JSON作为现有JSON中的最后一个条目插入。 请记住在前一行添加逗号。

"sourcekit-lsp.serverPath": "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/sourcekit-lsp"

添加iOS框架支持 (Add iOS framework support)

What is we achieved so far is to enable Swift development but VSCode has no idea about iOS frameworks. If you try to import UIKit you will get an error.

到目前为止,我们要做的是启用Swift开发,但是VSCode对iOS框架一无所知。 如果尝试导入UIKit,将会收到错误消息。

Image for post
The UIKit framework is not recognized
无法识别UIKit框架

Insert this JSON in settings.json. You might need to update the x86_64-apple-ios13.6-simulator line based on the current version that you have installed.

将此JSON插入settings.json中 。 您可能需要根据已安装的当前版本更新x86_64-apple-ios13.6-simulator行。

"sourcekit-lsp.serverArguments": ["-Xswiftc","-sdk","-Xswiftc","/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk","-Xswiftc","-target","-Xswiftc","x86_64-apple-ios13.6-simulator",],

This will work for Swift packages that reference iOS frameworks like UIKit.

这将适用于引用iOS框架(如UIKit)的Swift软件包。

添加“应用”目标支持 (Add “app” target support)

So far we added iOS support but only for Swift packages. What if you want to work on a typical app target. Trying to open the root folder gives this error:

到目前为止,我们添加了iOS支持,但仅支持Swift软件包。 如果您想处理典型的应用目标该怎么办。 尝试打开根文件夹会出现以下错误:

Image for post
SourceKit-LSP is looking for a Swift package manifest file
SourceKit-LSP正在寻找Swift软件包清单文件

What if you want to work on an iOS app and not on a Swift Package? SourceKit-LSP always looks for a package.json in root folder assuming that it always deals with a Swift package. An iOS app is not a Swift package and for that reason we need to trick SourceKit-LSP by adding a dummy Package.swift. Add this file to the root of your project (same level as .xcodeproj)

如果您想在iOS应用而不是Swift包上工作怎么办? 假设SourceKit-LSP始终处理Swift包,则它总是在根文件夹中寻找package.json。 iOS应用程序不是Swift包,因此,我们需要通过添加虚拟Package.swift来欺骗SourceKit-LSP 将此文件添加到项目的根目录 (与.xcodeproj相同的级别)

// swift-tools-version:5.2
import PackageDescriptionlet packageName = "PROJECT_NAME" // <-- Change this to yourslet package = Package(
name: "",
// platforms: [.iOS("9.0")],
products: [
.library(name: packageName, targets: [packageName])
],
targets: [
.target(
name: packageName,
path: packageName
)
]
)

Don’t forget to set packageName to your own one.

不要忘记将packageName设置为您自己的。

Image for post
Double check the location of the file
仔细检查文件的位置

Restart VSCode one last time and voila! Proper UIKit auto-completion

最后一次重新启动VSCode,瞧! 正确的UIKit自动完成

Image for post
UIKit auto-completion is working
UIKit自动完成工作

翻译自: https://medium.com/swlh/ios-development-on-vscode-27be37293fe1

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_26638123/article/details/108172373

智能推荐

对git分支如何应对紧急上线_weixin_33708432的博客-程序员宅基地

(1)正常上线流程(2)应对紧急需求上线紧急需求上线完毕之后,需要做两件事情:(a)删除临时分支(b)把生成分支的代码merge到集测分支. ...

实不相瞒,我的“睡后收入”是工资的5倍_Java后端技术的博客-程序员宅基地

前两天跟几个朋友聊天时,大家提到一句很经典的话:“人生最后一份工作,应该是理财。”乍看这句话,你可能会觉得奇怪,为啥理财就是最后一份工作了?我跟朋友们聊下来,发现这句话有两个意思。首先,...

IT行业与风险投资_liangyling3的博客-程序员宅基地

风险投资是什么? 百度百科的解释是这样的: 风险投资(Venture Capital)简称是VC,在中国是一个约定俗成的具有特定内涵的概念,其实把它翻译成创业投资更为妥当。广义的风险投资泛指一切具有高风险、高潜在收益的投资;狭义的风险投资是指以高新技术为基础,生产与经营技术密集型产品的投资。根据美国全美风险投资协会的定义,风险投资是由职业金融家投入到新兴的、迅速发展的、具有巨大竞争潜力的企业中

Kotlin学习笔记二:Kotlin的数据类型和变量声明:_入坟级Android选手的博客-程序员宅基地

Kotlin的数据类型:对于Kotlin来说,所有的数据变量都是对象,可以调用类型的方法和值;和Java一样,存在4种整数型,2种浮点型,1种布尔型,1种字符型。Byte:占8bit。Short:占16bit。Int:占32bit。Long:占64bit。Float:占32bit。Double:占64bit。char:占8-64bit。Boolean:占1bit。对于JVM来说,变量一旦声明类型后,只能赋值相同类型或相同类型的值。Kotlin的变量声明:对于Kotlin的变量声明

matlab md 编辑器,vim-matlab: vim-matlab 是 neovim 的 MATLAB 插件,它是 Vim 用户的 MATLAB 默认编辑器,用户可以通过 VIM 远程操作 MA..._宝贝西的博客-程序员宅基地

vim-matlabAn alternative to Matlab's default editor for Vim users.FAQHow do I run code cells (%% blocks)?In Normal mode, press or . The editor will parse the code in the current cell and send to MATL...

如何让iframe框架和主页面共用一个滚动条(也称为:iframe高度自适应问题)_weixin_30873847的博客-程序员宅基地

最近在前端页面遇到了一个问题,我在一个页面中利用iframe框架引入了一个页面进来,但是这个页面的高度是不叫高的,高出电脑屏幕很多,所以就引发了iframe框架一个滚动条,然后主页面一个滚动条,这样页面就出现了两个滚动条。在网上查了好久,一直没有好的方法,直到我在网上看到了iframe高度自适应,才解决了这个问题。自适应的意思是,iframe框架的高度自动适应引入的HTML文...

随便推点

js声明数组的四种方式_香煎三文鱼的博客-程序员宅基地_js声明数组

&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;/title&gt;&lt;/head&gt;&lt;body&gt; &lt;script type="text/javascript"&gt; function array1(){ /* 数

获取相册相机,定位_baron a的博客-程序员宅基地

1.判断用户是否有权限访问相册#import [objc] view plain copy ALAuthorizationStatus author = [ALAssetsLibraryauthorizationStatus];      if (author == kCLAuthorizationStatusRestricted || author =

Django 视图函数views_weixin_30747253的博客-程序员宅基地

Django 视图函数viewshttp请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象所在位置:django.http1 HttpRequest对象的属性和方法:# path: 请求页面的全路径,不包括域名## method: 请求中使用的HT...

python中集合的符号_Python处理中文标点符号大集合_weixin_39616367的博客-程序员宅基地

中文文本中可能出现的标点符号来源比较复杂,通过匹配等手段对他们处理的时候需要格外小心,防止遗漏。以下为在下处理中文标点的时候采用的两种方法:中文标点集合比较常见标点有这些:!?。"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、、〃》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〾〿–—‘'‛“”„‟…‧﹏.调用zhon包的zhon.hanzi.punctuation函数即可得到这些中文...

pytorch学习笔记 2.6 Optimizer 优化器_·Tu me manques的博客-程序员宅基地

一、优化器Optimizer 加速神经网络训练(Speed Up Training)  越复杂的神经网络 , 越多的数据 , 使得在训练神经网络时花费的时间也就越多。 原因很简单, 是因为计算量太大了,所以我们需要寻找一些方法, 让神经网络的训练快起来。1、Stochastic Gradient Descent (SGD)  把数据分成小批小批的,然后再分批进行计算。每次使用批数据,虽然不能...

Machine Learning—Support Vector Machines(1)_Voidwalkerxiaohui的博客-程序员宅基地

印象笔记同步分享:Machine Learning—Support Vector Machines(1)

推荐文章

热门文章

相关标签