使用 Swift Package Manager 管理 swift, cpp, c 和 objective-c 的混合编译

swift_packages creating-objc-cpp-packages-with-swift-package-manager Xcode11 开始已经支持 SPM 项目,同时还支持 Xcode 传统项目后面简称Xcode项目中引用 SPM 项目,不过目前只能引用远程仓库。 SPM 项目相对 Xcode 传统项目,要更加轻盈,通过一个 Package.swift 配置文件,完成整个 Package 的依赖,构建,目标管理工作,这一点是 Xcode 项目无法比拟的。 言归正传,回到 SPM 管理 多语言混合项目上来,首先说明一点 Swift 和其他语言混合开发的背景,Swift 能够直接调用的语言仅限于 Objective-C (后面简称Objc) 和 C ,并不包含 C++ ,但是通过 ObjC 和 C…

Docker configuration

Docsdocker 中文社区 docker build microservice docker with spring-boot Config Registryhttps://xnfwm35f.mirror.aliyuncs.com https://hdzyevnp.mirror.aliyuncs.com https://zbhkub6p.mirror.aliyuncs.com https://2h3po24q.mirror.aliyuncs.com /etc/default/docker DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io" /etc/docker/daemon.json { "debug" : true, "experimental" : true, "registry-mirrors" : [ "https:…

"self.class" 和 "object_getClass" 为什么不同?

"self.class" 和 "object_getClass" 为什么不同最近看到很多人对 "self.class" 的解释是,"如果是实例的时候,返回类对象,否则返回自身。" 这种说法,含糊不清,缺少背景上下文,也经不起推敲。这个类对象是什么?这个否则返回自身的情况又是如何? Objective-C 的面向对象首先我们简单了解一下,在 Objective-C 中,所有的实例对象都通过实现对应的类来完成,类对象为实例推向提供了实例方法,实例属性的模板,可以说类是对象的模板。 那么又是什么来描述类对象呢? 元类。 Objective-C 通过元类来描述类对象,元类其实和类一样,只是用途不同,可以通过 class_isMetaClass() 来判断是否为元类。元类中存储了类方法的信息,元类是类的模板。 Objective-C 中,实例,类,元类,都是对象,都是结构体的形式存在,在逻辑上分别代表了 OOP 中的不同层级。 object_…

源码解析 objc_msgSend 消息发送

源码解析 objc_msgSend 消息发送objc_msgSend从 objc-msg-arm64.s 汇编文件中找到 objc_msgSend 的汇编实现,我们可以看到 objc_msgSend 的汇编符号 _objc_msgSend #define NORMAL 0 #define GETIMP 1 #define LOOKUP 2 ENTRY _objc_msgSend UNWIND _objc_msgSend, NoFrame cmp p0, #0 // nil check and tagged pointer check #if SUPPORT_TAGGED_POINTERS b.le LNilOrTagged // (MSB…

未能创建用于APFS安装的预启动宗卷

install macOS 10.15 beta failed未能创建用于APFS安装的预启动宗卷根据 APFS 文件格式特性,手动创建一个新卷,然后安装到改卷。 apfs 文件系统中,卷的概念是个逻辑概念,多个卷可以共享硬盘剩下的空间。所以如果你的硬盘剩余100GB空间,此时你创建了3个新的卷,那么这三个卷的使用空间都是 100GB。 同理,安装系统的时候,需要手动建立一个新的卷,在这个卷看来,它可以使用剩余的所有空间,我想这就是 apfs 最强大的功能。 如何通过 macOS 恢复功能重新安装 macOS 如何创建可引导的 macOS 安装器…

如何看懂 Swift 语言参考规范?

如何阅读语法规范箭头(->) 用来表示语法生成,可以读作“能由...组成”句法类别通过在语法生成规则两边用 斜体 字来表示文法单词和符号通过粗体字等宽字符,在语法生成规则右边表示另一种语法生成符,通过竖线来分隔。当一种生成符太长而不易读时,会被在新行中分拆成多个语法生成规则少数情况下,常规字体用来描述语法生成规则的右边内容可选句法种类和文法通过后跟下标 $_{opt}$ 表示getter-setter 块语法 getter-setter-block $\rightarrow$ {getter-clause setter-clause}$_{opt}$ 以上定义,表示 getter-setter 块能通过在封闭的括号中的 getter 闭包,加上一个可选的 setter 闭包,或 setter 闭包跟随一个 getter 闭包组成。以上的语法公式相当于下面的两个明确标明的语法公式。 GETTER-SETTER 块语法 getter-setter-block $\rightarrow$ { getter-clouse setter-clouse$_{opt}$ } getter-setter-block $\rightarrow$ { setter-clause getter-clause } 总结最后,…

How to use a terminal proxy agent?

Privoxy terminal proxyPrivoxyhttp://www.silvester.org.uk/privoxy/source/ privoxy privoxy config ref use privoxy convert ssh -D tunnel  to http proxy, and export env . http://www.programmersought.com/article/4072191370/ privoxy config: forward-socks5 / 127.0.0.1:7777 . bashrc: export http_proxy=http://127.0.0.1:8118/ export…

项目管理中如何使用语义化版本号

语义化版本号https://semver.org/ https://guides.rubygems.org/patterns/#semantic-versioning 所有举例均假设发布版本号为:1.8.2 版本的发布路线测试中的版本号,按照实际的测试情况,每次发布的版本路线可能如下: 1.8.2-alpha 1.8.2-alpha.1 1.8.2-alpha.beta 1.8.2-beta.0 1.8.2-beta.1 1.8.2-beta.2 1.8.2-rc.1 1.8.2-rc.2 1.8.2…

如何使用本地编辑器操作远程文件?

步骤第一步:服务器端(配置)编辑文件(如没有,需新建)  $HOME/.rmate.rc host: localhost port: 52698 unixsocket: ~/.rmate.socket 第二部:本地机器在每次需要远程编辑文件之前,需要先执行以下 ssh 命令 ssh -R 52698:localhost:52698 name@server.com 这里在本地机器通过 ssh -R 提供反向端口转发能力,使得服务器可以访问到本地机器。后面总结中我会解释 rmate 的工作原理 第三步:在服务端执行 rmate /path/file,这是本地 textmate 文本编辑器,便会自动打开这个远程文件,并且在你编辑保存的时候,同步更新远程的文件。 小提示:对于有防火墙的本地机器,…