使用命令行工具测试 APNs
Sep 29, 2021
APNs 全称是 Apple Push Notification service (苹果推送通知服务)。 早期的 APNs 是使用证书的方式,缺点是有时效性,需要定期更换。 到了 iOS10 时期,苹果推出了新的认证方式:密钥标识符。 密钥标识符没有时效,可以永久使用,每个密钥标识符对应一个密钥文件,如果密钥文件泄露,可以注销密钥标识符使其失效。 …
port 安装支持 HTTP/2 的 curl
Sep 29, 2021
macports 默认情况下安装 curl: sudo port install curl 以上命令安装的 curl 是不支持 HTTP/2 协议的。 如果需要支持 HTTP/2 ,需要添加变量 +http2,完整的安装命令: sudo port install curl +http2 参考资料 https://trac.macports.org/ticket/44380
iOS 15 开启更快的 ProMotion 刷新率
Sep 28, 2021
iPhone 13 Pro 系列支持最高 120Hz 的动态刷新率,App 需要主动适配才能使用动态刷新率。 在 Info.plist 里加上: <key>CADisableMinimumFrameDurationOnPhone</key><true/> 参考资料 Optimizing ProMotion Refresh Rates for iPhone 13 Pro and iPad Pro
编译 wget2 支持 HTTP/2
Sep 27, 2021
wget2 发布了,相对于 wget ,下载速度更快而且支持 HTTP/2 的特性。 macports 还没有预编译好的版本,想体验 wget2 只能自己编译了。 下载源码: wget2-2.0.0.tar.gz 解压缩: tar xvzf ./wget2-2.0.0.tar.gz 我使用的包管理工具是 macports,如果是 brew 用户需要自行变通处理。 …
Swift:了解一下 defer
May 23, 2021
关于 defer 的几条说明: defer 会在退出其作用域的时候执行。 同一个作用域内可以定义多个 defer。 defer 不要定义在作用域的末尾(因为没有必要)。 一个例子解释: func loadFile(atPath path: String) { let fs = InputStream(fileAtPath: path) defer { // loadFile 方法返回前执行 fs.close() } fs.open() ... for i in 0..<9 { let lock = NSLock() defer { // 每一次循环结束前执行 lock.unlock() } } ... defer { // 可以定义多个 defer 块 } ... } 以上例子可以充分理解了 defer 的使用场景。 …
clang 跨平台编译 iOS/macOS arm64/x86_64
May 19, 2021
Target 不同的目标平台对应不同的 -target $triple 参数: iOS 平台: armv7:-target arm64-apple-darwin arm64:-target armv7-apple-darwin macOS 平台: i386:-target i386-apple-macos x86_64:-target x86_64-apple-macos …
从包含多架构的 framework 生成 xcframework
May 06, 2021
xcframework 是多个 framework 的集合,它是一个包含有多个 framework 的文件夹。 以腾讯云的 ImSDK 为例演示如何生成 ImSDK.xcframework。 ImSDK.framework 里包含了 3 种架构:armv7 arm64 x86_64,分别对应真机和模拟器。 …
使用 -l 链接时,如何确定链接动态库还是静态库
Apr 25, 2021
比如:-lssl 是链接到 libssl.a 还是 libssl.so? 由编译参数决定: -Wl,-static,静态链接。 -Wl,-dynamic,动态链接。 如果动态库和静态库混乱链接,加上 -search_paths_first。 …
Shell 脚本获取微信登录二维码
Apr 21, 2021
生成二维码需要先获取 sdk_ticket,获取方法参考: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Login_via_Scan.html 根据官方的文档描述,得到 sdk_ticket 后,计算出签名,然后发起 GET 查询,就可以得到登录的二维码(Base64)。 …
FreeBSD 入门笔记
Apr 19, 2021
配置 sudo root 用户权限最高,除非必要情况,日常维护和使用应该使用普通用户帐号。 系统默认不提供 sudo 命令,需要使用 root 用户自行安装: pkg install sudo 创建一个普通用户(用户名 v),默认添加到 staff 分组: …