硬件要求
Intel E3-1230 v3 可以成功安装, AMD Ryzen 5900 CPU 在 Linux 系统上,需要配置 CPU 模仿 Intel CPU 的特性。并且 CPU 部分,不要启用 嵌套VT-x/AMD-V 。
生成系统安装镜像
在 macOS (实验使用的系统是 macOS Big Sur (11.7.1))系统上,执行如下命令,生成系统安装镜像
Mac是苹果自1984年起以“Macintosh”开始的个人消费型计算机,如:iMac、Mac mini、Macbook air、Macbook pro、Mac pro等计算机。使用独立的Mac os系统,最新的OS X系列基于NeXT系统开发,不支持兼容。是一套完备而独立的生态系统。
Intel E3-1230 v3 可以成功安装, AMD Ryzen 5900 CPU 在 Linux 系统上,需要配置 CPU 模仿 Intel CPU 的特性。并且 CPU 部分,不要启用 嵌套VT-x/AMD-V 。
在 macOS (实验使用的系统是 macOS Big Sur (11.7.1))系统上,执行如下命令,生成系统安装镜像
从 RocksDB 7.0 开始,RocksDB 要求编译的 C++ 必须支持 C++ 17 ,( Dropping some compiler support in 7.0#9388)但是目前的Android/iOS版本显然暂时还不能大范围的适配 C++ 17,因此我们目前只能使用 6.x 版本。
Android:
iOS/macOS ARM:
macOS x86:
这篇文章就简单介绍怎么在macOS下使用RocksDB。
RocksDB是一个可嵌入的、持久型的Key-Value存储。
不像MySQL,PostgreSQL这样数据库分客户端与服务器端。实际上,可以把它当作一个第三方库,在自己的代码中进行引用,调用相应的接口就可以使用,比如使用C/C++语言,直接在源代码中include相应的头文件就可以。
与嵌入式数据库SQLite的使用比较类似。
目前: RocksDB使用LSM存储引擎,纯C++编写。Java版本RocksJava也已经完美支持。
更多有关RocksDB的介绍参考:
关于RocksDB的详细使用介绍:
macOS上安装RocksDB非常简单,不用单独安装其他任何依赖。直接使用brew工具安装即可。
可以运行一下命令来查看安装信息。
安装结果如下。
其他操作系统上的安装可以参考:
代码目录:
main.cpp文件内容:
Makefile文件内容:
运行结果:
系统与开发环境 Flutter (2.10.1~3.3.9)/Xcode 13.2.1(13C100)/macOS Big Sur 11.6.4/iPad Pro(Model A1673) iOS 15.3.1/iPhone SE 3 iOS 16.1.1
1. 苹果开发网站注册或关联开发者账号,如果暂时不需要发布应用到 Mac App Store,只是在设备上调试应用,则不需要注册收费用户,只需要注册或者关联账号即可。具体可以查看官方介绍 选择会员资格 。
2. 在 iPad Pro 和 macbook Pro 登陆同一个注册的开发者的账号。
3. 通过 USB 数据线把 iPad Pro 与 macbook Pro 设备连接起来,如下图:
在执行 flutter doctor --android-licenses 的时候报错:
原因为 Java 版本太高,Flutter 1.22.5 只能使用 Java 1.8版本:
对于错误
原因:
Android Studio(4.1)后,安装插件的位置发生了变化,但是flutter doctor
还是去原先的位置找,导致的安装过插件还报错。
解决方法:
更简单的方式是执行
升级到 flutter 2.8.1 以及之后的版本即可。
最近,公司的一台电脑升级到 macOS Monterey (12.0.1),之后从进行软件更新,以及 XCode 的下载安装。由于网速的限制,临时把 XCode 的下载进行了暂停操作,之后忘记恢复就进行了重启。
结果第二天在App的安装界面上就看不到被暂停的任务了。然后在 App Store 中尝试继续进行下载,发现无法进行下载任务,下载按钮点击之后,状态一闪而过,又回到待下载状态。
更换账号/重启应用/重启系统之后,无法解决问题。
应该是 App Store 内部状态混乱了,导致无法进行下载任务,需要对 App Store 进行重置操作。
网上搜索很久,才找到解决方案,执行如下命令:
之后重启系统,重新点击下载应用,即可解决问题。
DNS劫持就是通过劫持了DNS服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。
常见的DNS劫持现象网络运营商向网页中注入了Javascript代码,甚至直接将我们的网页请求转发到他们自己的广告页面或者通过自己的DNS服务器将用户请求的域名指向到非法地址
全站使用HTTPS协议,或者采用HttpDNS,通过HTTP向自建的DNS服务器或者安全的DNS服务器发送域名解析请求,然后根据解析结果设置客户端的Host指向,从而绕过网络运营商的DNS解析服务。
客户端对WebView的html请求进行DNS解析。优先使用阿里、腾讯、114等公共安全的DNS服务器解析客户端的所有指定域名的http请求。相对来讲我们自己的服务域名变化较少,对此我们做了一个白名单,把凡是访问包含我们公司域名的请求都必须通过白名单的解析和DNS验证。从而杜绝被劫持的情况出现,这时候NSURLProtocol就派上用场了。
这是一个抽象类,所以在oc中只能通过继承来重写父类的方法。
然后在AppDelegate的 application:didFinishLaunchingWithOptions: 方法或者程序首次请求网络数据之前去注册这个NSURLProtocol的子类
注册了自定义的urlProtocol子类后,之后每一个http请求都会先经过该类过滤并且通过+canInitWithRequest:
这个方法返回一个布尔值告诉系统该请求是否需要处理,返回Yes才能进行后续处理。
+canonicalRequestForRequest:
这个父类的抽象方法子类必须实现。
以下是官方对这个方法的解释。当我们想对某个请求添加请求头或者返回新的请求时,可以在这个方法里自定义然后返回,一般情况下直接返回参数里的NSURLRequest实例即可。
It is up to each concrete protocol implementation to define what “canonical” means. A protocol should guarantee that the same input request always yields the same canonical form.
+requestIsCacheEquivalent:toRquest:
这个方法能够判断当拦截URL相同时是否使用缓存数据,以下例子是直接返回父类实现。
-startLoading
和-stopLoading
两个方法分别告诉NSURLProtocol实现开始和取消请求的处理。
由于我们在-startLoading
中新建了一个NSURLConnection实例,因此要实现NSURLConnectionDelegate
的委托方法。
至此,通过NSURLProtocol和QNDnsManager(七牛DNS解析开源库)可以解决DNS劫持问题。但是NSURLProtocol还有更多的用途,以下是本文第二个内容:webView上web请求的资源本地化。
这里只举一个简单的示例,同样是在上述NSURLProtocol的子类的-startLoading
方法里
最近在OS X EI Capitan系统上执行升级工作的时候,发生错误,内容如下:
排查了很久,发现是以前为了修复 解决macOS系统curl报告https证书不正确(curl: (60) SSL certificate problem: Invalid certificate chain)问题而配置了curl忽略安全配置信息导致的,如下:
移除这个配置项目即可解决问题。