diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index c7623d1cf..000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.* linguist-language=Swift \ No newline at end of file diff --git a/.gitignore b/.gitignore index e43b0f988..8c687f5a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +CLAUDE.md diff --git a/Contributors/README.md b/Contributors/README.md new file mode 100644 index 000000000..60c129025 --- /dev/null +++ b/Contributors/README.md @@ -0,0 +1,281 @@ +## 老司机技术成员介绍 + +### 没故事的卓同学 / lacklock + + + +老司机技术发起人。WWDC19 ~ 20 内参主要负责人。独立开发者(App:打工人小组件)。积极拥抱 SwiftUI。 + +### Parsifal + + + +老司机技术二代目,新技术爱好者,微医移动技术负责人,看球不打球,虎扑十多年潜水党。 + +### 老王 / Damonwong + + + +老司机技术三代目,WWDC20 ~ 22 内参主要负责人。目前就职于阿里巴巴,参与手机淘宝基础建设工作。对 iOS 新特性、Swift、编译等较感兴趣。除了工作和技术以外,也喜欢和朋友聊天,看电竞比赛(LPL)以及玩手机游戏(王者荣耀)。 + +### 老黄 / ChengzhiHuang + + + +老司机技术成员,周报轮值主编。目前就职于字节跳动,参与西瓜视频质量与稳定性工作。对 OOM/Watchdog 较为了解并长期投入。月球厨师;Amphibian 与 打越钢太郎 的粉丝。 + +### EF / EyreFree + + + +老司机周报编辑 / T 技术沙龙运营负责人 / 开源爱好者 / Sprout 技术负责人。 + +### Cooper + + + +老司机技术成员,目前就职于 Zoom,参与 Zoom 桌面端基建开发,负责性能优化、稳定性维护和 CI 相关工作,重度自驾游爱好者。 + +Editor of Old Driver Weekly, currently working at Zoom, involved in the development of Zoom desktop infrastructure, responsible for performance optimization, stability maintenance, and CI related work, and a heavy self driving enthusiast. + +### J_Knight_ + + + +老司机技术成员,目前就职于同花顺,参与人工智能相关的业务开发。重度股票 & 期货爱好者。 + +### AidenRao + + + +老司机技术成员,目前就职于字节跳动,参与抖音 APP 的开发工作,base 成都。想成为作家,又或者独立开发者,游戏设计师。擅长当韭菜。 + +### 享耳先森 + + + +老司机技术成员,目前就职于丁香园。参与丁香医生、丁香妈妈等 App 开发,还有自己的独立 App 骑行控。 + +### 红纸 + + + +老司机技术成员,WWDC 内参小助手(初号机)。目前就职于阿里巴巴,负责手淘 CI/CD 和研发效率相关工作。爱折腾新玩意儿。Dota2 仅 6k 小时的菜鸡。 + +### 水水 + + + +老司机技术成员,偶尔 T 技术沙龙 的临时工,目前就职于百度(上海),百度输入法 iOS & Mac 应用的程序媛。美食、徒步爱好者~ + + +### Leo + + + +老司机技术成员,目前就职于字节跳动,负责 TikTok iOS 客户端体验。喜欢研究一些技术底层的原理,业余喜欢主机游戏(特别是魂类游戏)。 + + +### 莲叔 + + + +老司机技术成员,就职于uc,负责直播业务。主要关注音视频、端智能相关技术。原神57级摆烂中,最近开始打壁球。 + +### 含笑饮砒霜 + + + +老司机技术成员,目前就职于百度,随便做点、研究点东西。渴望尽早退休,善于发现美好,乐于享受生活。 + +### Zvving + + + +老司机技术成员,目前就职于字节跳动,负责音乐创作客户端开发。热爱开源理念,每周一场足球不看球,任氏主机党塞尔达是天。 + +### 邦Ben + + + +老司机技术成员,周报轮值主编,曾担任 WWDC 内参文章审核,目前就职于字节跳动 - 剪映,负责剪辑工具侧相关业务,最近入坑羽毛球被虐菜,塞尔达工业革命溜街中。 + +### 慕牧 / Zoe + + + +老司机技术成员,目前就职于智谱华章。喜欢尝试新鲜事物,乐于探索,在变优秀的路上不断努力中~长板初学者。 + +### BZ / BarneyZhaoooo + + + +老司机技术成员 / B站 / 原神、星穹铁道爱好者。 + +### Damien + + + +老司机技术成员,目前就职于字节跳动,负责 TikTok 客户端隐私相关的工作。喜欢研究一些新新技术,爱折腾。 + +### Smallfly + + + +老司机技术成员,目前就职于网易云音乐,负责长音频大前端业务。喜欢 Swift,对前端技术比较感兴趣。业务爱好健身,想当一枚粗狗。 + +### 极速男孩007 + + + +老司机技术成员,目前就职于回想科技,沉迷于 Flutter。喜欢各种数码产品。 + +### Kyo + + + +老司机技术成员,目前就职于百度小说,负责客户端团队,关注文档、图书排版体验。喜欢的很多,这里说不过来。 + +### xiaofei86 + + + +老司机技术成员,目前就职于百度,负责百度网盘客户端基础架构相关的工作,正在折腾前端。日常躺平,梦想当一名卷王。 + +### 四娘 / kemchenj + + + +老司机技术核心成员 / 开源爱好者 / 最近在做 3D 重建相关的开发工作 + +### 老驴 + + + +老司机技术成员,就职于某 404 公司, 努力写算法和推进项目中... + +### JonyFang + + + +老司机周报编辑,目前就职于哔哩哔哩,负责直播基础、业务开发。日常喜欢研究一些基础框架的底层原理,业余会跑跑步、打打球。 + +### 天南 / CrazyCoderShi + + + +老司机技术成员,无业游民,天天瞎折腾;目前用 Flutter 写移动端。 + +### 老峰 + + + +老司机周报编辑,技术狂热,混迹币圈,希望早日自由。 + +### CrazyZhang + + + +老司机周报编辑,另类的 Android 开发,Flutter 忠实拥护者,Unity 爱好人员,王者中毒人员。 + +### anotheren + + + +老司机周报编辑,新晋奶爸,无业游民,正在向全栈独立开发者努力,熟悉图像与视频技术,希望在 AI 与 VR 浪潮中,找到新的定位。 + +### mmoaay + + + +老司机早期编辑 / T沙龙负责人 + +### Awhisper + + + +老司机技术成员,目前就职于蚂蚁金服,参与支付宝 APP 的开发工作,base 北京,常年出差杭州,不折腾不舒服司机。 + +### 叶孤城 / Yegucheng + + + +老司机早期作者,现在佛系划水,独立开发者(app:灵动大陆),积极拥抱 SwiftUI too + +### 芒果 / 100mango + + + +https://github.com/100mango + +老司机早期编辑,喜欢清晰简洁的代码与技术方案 + +### 小T / tom510230 + + + +老司机技术曾经活跃的编辑,从 iOS 4 开始入坑,目前在剪映项目组,专注于跨平台技术相关领域 + +### Jason Yu + + + +### 张嘉夫 / josephchang10 + + + +独立开发者,数字游民。 + +### Looping + + + +老司机技术成员,目前全力为小项目打杂,争取做大。业余爱好代码重构和算法设计,资浅科幻推理迷。 + +### JimQ + + + +老司机技术候补队员。All in AI-App。理想是:大河向东流,财务挺自由。已经实现了上半句。 + +### 五子棋 / SatanWoo + + + +老司机技术成员,就职于阿里巴巴淘宝,负责 端智能/AR/VR 等技术 + +### Kyle-Ye + + + +老司机技术成员,Swift Documentation Workgroup 成员,独立开发者 + +### DylanYang + + + +老司机技术成员,目前就职于字节跳动,参与音乐相关客户端开发,业余喜欢看看番、打打游戏。 + +### BluesJiang + + + +iOS 开发者,老司机技术成员,目前就职于淘宝,负责淘宝原生基础架构。热衷于 Swift/SwiftUI 等基础技术领域。 + +### 阿权 / bq + + + +老司机技术成员,base 广州,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。 + +### zhangferry + + + +老司机技术成员,目前在抖音基础技术团队从事代码分析相关工作。对 LLM、Stable Diffusion 有过短暂热爱,目前较大精力在带娃。 + +### David + + + +老司机技术成员,目前从事 iOS Infra 相关工作,对跨平台技术比较感兴趣。喜欢摄影、跳舞,会点 Popping,为多上街舞大师课,现定居大阪。 diff --git "a/Posts/Swift5 \346\233\264\346\226\260\347\254\224\350\256\260.md" "b/Posts/Swift5 \346\233\264\346\226\260\347\254\224\350\256\260.md" new file mode 100644 index 000000000..16f4ec326 --- /dev/null +++ "b/Posts/Swift5 \346\233\264\346\226\260\347\254\224\350\256\260.md" @@ -0,0 +1,470 @@ +## [Swift 5 Release Notes for Xcode 10.2](https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/swift_5_release_notes_for_xcode_10_2) + +Swift5 正式更新,官方提供了更新笔记说明,我们周报编辑团队的 [@Tom](https://xiaozhuanlan.com/u/6682065345) 组织 [@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang) 和 [@极速男孩](https://github.com/ztlyyznf001) 为大家做了第一手的翻译工作,方便大家了解这次对于 Swift 发展史很重要的一次迭代。另外,[@Tom](https://xiaozhuanlan.com/u/6682065345) 所在的深圳头条研发中心正在招募各路好手,有兴趣的可以加他微信 tomtan,切磋技术和聊情怀都可以喔~~~~ + +### 概要 + +在 Xcode10.2 版本中,将可以使用 Swift5.0 进行开发 + +### 总体(General) + +#### Swift 5 运行时对命令行工具的支持 + +- Swift 命令行工具从 Xcode 10.2 开始需要依赖于 macOS 中的Swift库。这些库将从 macOS Mojave 10.14.4 开始默认包含在 macOS 中。在 macOS Mojave 10.14.3 和更早的版本中,可以选择从 [More Downloads for Apple Developers](https://developer.apple.com/download/more/) 下载 Swift 命令行工具所需要的运行时库。如果你安装了 beta 版本,需要将其替换成正式版本。只有在 Swift 命令行工具中才需要这个包,而并不适用于具有图形用户界面的应用程序。 + +### App 瘦身(App Thinning) + +#### 新特性 + + - Swift 不再包含 Swift 标准库的动态链接,并且会在 iOS 12.2, watchOS 5.2, and tvOS 12.2 中内置 Swift SDK 。从而 Swift apps 在你上传 App Store ,发布 TestFlight 测试,和本地打包时会变得更小。 + + 想要比较应用在 iOS 12.2 和 iOS 12.1 之前版本瘦身的大小的区别,你可以把应用的 deployment target 设为 iOS 12.1 或之前的版本,然后将scheme 设为 Generic iOS Device 生成一个归档文件。然后用选择 Archives organizer 中的发布应用中的 Development distribution。确定在 App Thinning 的下拉菜单中选中某个特定的设备如:iPhone XS 。当发布完成以后,在刚刚创建的文件夹中打开 App Thinning Size Report ,可以看到 iOS 12.2 的安装包要比 iOS 12.1 或者更早的版本要小。准确的大小差别取决于你的 app 使用系统框架的数量。 + + 想要获取更多 app 瘦身的信息,可以参考 [Xcode Help](https://help.apple.com/xcode/mac/current/) 中的 [What is app thinning?](https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f) 。 + + 获取更多 app文件大小的信息,可以参考 [App Store Connect Help](https://help.apple.com/app-store-connect/) 中的 [View builds and file sizes](https://help.apple.com/app-store-connect/#/dev3b56ce97c) 。 + +### Swift 语言特性(Swift Language) + +#### 新特性 + +- 字符串的声明,现在可以使用更好用的分隔符了。当使用(#)号来包住一个字符串的时候,可以使用多个(#)号来分割纯字符和变量声明。使用增强的分隔符,可以避免写得很混乱的字符串转义声明。([SE-0200](https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md))(47725014): + + ```swift + print(#""#) + // 等价于: + print("") + ``` + +- 如果声明的类型与标准库中的类型具有相同的名称,则会覆盖了标准库中的类型声明。(46767892) + + 例如,在模块 Foo 中声明了一个类型,名字是 Result + ```swift + // Module `Foo`. + public enum Result { + case value(T) + case error(Error) + } + ``` + + 这样在任何使用了 Foo 模块的代码中,Result 类型都将被认为是 ```Foo.Result```: + ```Swift + import Foo + + func doSomething() -> Result { /* … */ } + ``` + + 那么如果真的想要引用标准库中的 [Result](https://developer.apple.com/documentation/swift/result) 类型,那么必须加上显式的声明: + + ```swift + import Foo + + func useStandardLibraryResult() -> Swift.Result { /* … */ } + ``` + +- 如果一个变量声明为```@dynamicCallable```的话,这样可以使用一个函数调用的语法糖,这个语法糖主要的使用场景是动态语言互操作([SE-0216](https://github.com/apple/swift-evolution/blob/master/proposals/0216-dynamic-callable.md))(47325423) + + 例如: + ```swift + @dynamicCallable struct ToyCallable { + func dynamicallyCall(withArguments: [Int]) {} + func dynamicallyCall(withKeywordArguments: KeyValuePairs) {} + } + + let x = ToyCallable() + + x(1, 2, 3) + // 上面的代码实际上是一个语法糖,如果不用语法糖的话,代码会像这样子写 `x.dynamicallyCall(withArguments: [1, 2, 3])` + + x(label: 1, 2) + // 上面的代码实际上是一个语法糖,如果不用语法糖的话,代码会像这样子写 `x.dynamicallyCall(withKeywordArguments: ["label": 1, "": 2])` + ``` + +- ```标识键路径(Key paths)```功能现在支持一个特殊的标记方式```(\.self)```,[WritableKeyPath](https://developer.apple.com/documentation/swift/writablekeypath) 指代了整个输入值([SE-0227](https://github.com/apple/swift-evolution/blob/master/proposals/0227-identity-keypath.md))(40538312) + + ```swift + let id = \Int.self + var x = 2 + print(x[keyPath: id]) // Prints "2" + x[keyPath: id] = 3 + print(x[keyPath: id]) // Prints "3" + ``` + +- 在 Swift5 之前,可以编写一个带有可变参数的枚举体: + + ```swift + enum X { + case foo(bar: Int...) + } + 
func baz() -> X { + return .foo(bar: 0, 1, 2, 3) + } + ``` + 这不是一个特意支持的特性,现在会产生编译错误了。(46821582) + 相对地,你可以用数组的声明来代替可变参数声明: + + ```swift + enum X { + case foo(bar: [Int]) + } + 
func baz() -> X { + return .foo(bar: [0, 1, 2, 3]) + } + ``` + +- 在 Swift5 下,```try?```如果用在[可选类型](https://developer.apple.com/documentation/swift/optional)上的话,就算是多层使用,也不会导致返回值是一个多层嵌套的可选类型了。([SE-0230](https://github.com/apple/swift-evolution/blob/master/proposals/0230-flatten-optional-try.md))(47313584) + +- 如果一个类型```T```符合 [Initialization with Literals](https://developer.apple.com/documentation/swift/swift_standard_library/initialization_with_literals) 中的一个协议,例如 [ExpressibleByIntegerLiteral](https://developer.apple.com/documentation/swift/expressiblebyintegerliteral) ,并且是一个标量表达式的话,那么将不需要一直使用```T```用在泛型协议声明中了 + + 例如:现在可以这样子写一个变量表达式 + + ```swift + UInt64(0xffff_ffff_ffff_ffff) + ``` + + 在之前的版本的话将会导致 [Int](https://developer.apple.com/documentation/swift/int) 溢出错误。([SE-0213](https://github.com/apple/swift-evolution/blob/master/proposals/0213-literal-init-via-coercion.md))(17088188) + +- 字符串插入大幅提高了性能表现。([SE-0228](https://github.com/apple/swift-evolution/blob/master/proposals/0228-fix-expressiblebystringinterpolation.md))(43621912) + +- 一个旧的协议```_ExpressibleByStringInterpolation```被移除了。如果你希望继续使用这个协议的话,你可以通过条件编译选项来实现新老板本的兼容。 + + 例如: + ```swift + #if compiler(<5) + extension MyType: _ExpressibleByStringInterpolation { /*...*/ } + #else + extension MyType: ExpressibleByStringInterpolation { /*...*/ } + #endif + ``` + +### Swift 标准库(Swift Standard Library) + +#### 新特性 + +- 标准库现在包括 `Result` 枚举 ` Result.success(_:)` 和 `Result.failure(_:)` 。在`do-catch` 语句和 `try` 表达式不能使用的情况下(例如在使用可能失败的异步api时),使用 `Result` 手动传递和处理错误。 + + 作为添加的一部分,`Error` 协议的自我一致性,这使得在通用上下文中处理错误更加容易。([SE-0235](https://github.com/apple/swift-evolution/blob/master/proposals/0235-add-result.md))(21200405) + +- [SIMD](https://developer.apple.com/documentation/swift/simd) 类型和基本操作符现在在标准库中定义。在 `simd` 框架提供的类型中, [float2](https://developer.apple.com/documentation/simd/float2) 和 [float3](https://developer.apple.com/documentation/simd/float3),现在是新标准库类型的类型别名。 + + `SIMD` 类型是标量元素类型上的泛型。例如,旧的 [float3](https://developer.apple.com/documentation/simd/float3) 类型是 `SIMD3` 的类型别名。任何符合 [SIMDScalar](https://developer.apple.com/documentation/swift/simdscalar) 协议的类型都可以用作 `SIMD` 向量的标量类型,但是有效的向量化依赖于为相关的 [SIMDStorage](https://developer.apple.com/documentation/swift/simdstorage) 类型选择一个良好的数据布局并进行有效的下标操作。 + + 大多数使用 `simd` 类型的现有代码可以继续使用新的泛型 `simd` 类型,但是需要注意一些更改。 + + 新类型增加了一些新的一致性; [SIMD](https://developer.apple.com/documentation/swift/simd) 向量现在是 [Hashable](https://developer.apple.com/documentation/swift/hashable) 、[Equatable](https://developer.apple.com/documentation/swift/equatable) 和 [Codable](https://developer.apple.com/documentation/swift/codable)。这可能允许您删除在您自己的代码中提供这些一致性的一些现有扩展。 + + 为提供向量标量算法而重载的运算符集得到了极大的扩展。这使得编写一些东西变得更容易,但是在某些情况下会给 `typechecker` 带来歧义,并且可能需要分解一些表达式或使用显式类型进行注释。 + + 由于现在的类型是泛型而不是具体的,如果您已经在 `simd` 框架类型上定义了自己的协议,那么可能有必要重构一致性,因为 `Swift` 泛型类型不能对协议有多个条件一致性。这种情况相对比较少见,但通常需要重构如下代码: + + ```swift + protocol MyVectorProtocol { /* ... */ } + extension float2: MyVectorProtocol { /* ... */ } + extension double2: MyVectorProtocol { /* ... */ } + + ``` + + 要改为使用以下结构: + + ```swift + protocol MySIMDScalarProtocol: SIMDScalar { /* ... */ } + extension SIMD2 where Scalar: MySIMDScalarProtocol { /* ... */ } + // Or even: + protocol MySIMDScalarProtocol: SIMDScalar { /* ... */ } + extension SIMD where Scalar: MySIMDScalarProtocol { /* ... */ } + ``` + + 这种更改通常允许您删除许多冗余实现,但它要求您定义任何必要的实现 `Hook`,这些 `Hook` 引用 `Darwin` 系统上标量类型的C头文件中的具体函数。([SE-0229](https://github.com/apple/swift-evolution/blob/master/proposals/0229-simd.md))(17045503) + +- [Set](https://developer.apple.com/documentation/swift/set) 和 [Dictionary](https://developer.apple.com/documentation/swift/dictionary) 现在为每个新创建的实例使用不同的散列种子。因此,在 [Set](https://developer.apple.com/documentation/swift/set) 和 [Dictionary](https://developer.apple.com/documentation/swift/dictionary) 中,元素的顺序每次都会改变: + + ```swift + let a: Set = [1, 2, 3, 4, 5] + let b: Set = [1, 2, 3, 4, 5] + a == b // true + print(a) // [1, 4, 3, 2, 5] + print(b) // [4, 2, 5, 1, 3] + ``` + + 现有的代码错误地假设两个不相关但相等的集合或字典将以相同的顺序包含元素,这在 `Swift 5` 中更容易产生错误的结果。尽管元素顺序在不同的 `Set` 或 `Dictionary` 实例之间并不稳定,但是在同一个实例上的多次迭代之间,顺序不会发生变化。除了强调这些集合不能保证一致的元素顺序外,此更改还修复了大量操作的情况。例如:`union(_:)` 二次性能。(44760778) + +- 为了防止 `Cocoa` 对象的不一致哈希,`NSObject` 上的 [hashValue](https://developer.apple.com/documentation/objectivec/nsobject/1418615-hashvalue) 属性不再是可重写的。在 `Swift 4.2` 废弃重写 `hashValue`。要在 `NSObject` 子类中重写属性 [hash](https://developer.apple.com/documentation/objectivec/nsobjectprotocol/1418859-hash) 来自定义哈希值。下面展示一个例子: + + ```swift + class Person: NSObject { + let name: String + + init(name: String) { + self.name = name + super.init() + } + + override func isEqual(_ other: Any?) -> Bool { + guard let other = other as? Person else { return false } + return other.name == self.name + } + + override var hash: Int { + var hasher = Hasher() + hasher.combine(name) + return hasher.finalize() + } + } + ``` + + 哈希和相等判断是相辅相成。如果重写 `hash`,还需要覆盖 `isEqual(_:)`,反之亦然。(42623458) + +- [DictionaryLiteral](https://developer.apple.com/documentation/swift/dictionaryliteral) 类型改名成 [KeyValuePairs](https://developer.apple.com/documentation/swift/keyvaluepairs)。 ([SE-0214](https://github.com/apple/swift-evolution/blob/master/proposals/0214-DictionaryLiteral.md)) (23435865) + +- `Swift` 字符串桥接到 `Objective-C` 可能适当地在 [CFStringGetCStringPtr(_:_:)](https://developer.apple.com/documentation/corefoundation/1542133-cfstringgetcstringptr) 返回非 `nil` 值,而从 `UTF8String` 方法返回的指针则绑定到字符串的生命周期,而不是最内层的自动释放池。正确的程序应该不会有任何问题,并可能看到显著的加速。但是,它可能导致以前未测试的代码运行,从而暴露潜在的bug;例如,如果对非 nil 值进行检查,该分支可能从未在 `Swift 5` 之前被执行过。(26236614) + +- [Sequence](https://developer.apple.com/documentation/swift/sequence) 协议不再具有 `SubSequence` 关联类型。以前返回子序列的 `Sequence` 上的方法现在返回具体类型。例如,[suffix(_:)](https://developer.apple.com/documentation/swift/sequence/3128822-suffix) 现在返回一个数组。(45761817) + + 使用子序列的序列上的扩展应该修改为类似地使用具体类型,或者修改为 [Collection](https://developer.apple.com/documentation/swift/collection) 上的扩展(如果子序列仍然可用)。 + + 例如: + + ```swift + extension Sequence { + func dropTwo() -> SubSequence { + return self.dropFirst(2) + } + } + ``` + + 变为: + + ```swift + extension Sequence { + func dropTwo() -> DropFirstSequence { + return self.dropFirst(2) + } + } + ``` + + 或者: + + ```swift + extension Collection { + func dropTwo() -> SubSequence { + return self.dropFirst(2) + } + } + ``` + +- [String](https://developer.apple.com/documentation/swift/string) 结构的本地编码从 `UTF-16` 转换为 `UTF-8`,这可能会提高 `String.UTF8View` 相对 `String.UTF16View` 的性能。考虑重新评估使用 `String.UTF16View` 来调优性能的代码。(42339222) + +#### 已知的问题 + +- Xcode 10.2 beta 版本 [Sequence](https://developer.apple.com/documentation/swift/sequence?language=objc) 协议中增加的 ```count(where:)``` 方法已经被移除。(47549309) +**解决方案:**使用 [reduce(_:_:)](https://developer.apple.com/documentation/swift/anycollection/2906169-reduce?language=objc) 可以高效率地计算与谓词匹配的出现次数: + + ```swift + let occurrences = sequence.reduce(0) { predicate($1) ? $0 + 1 : $0 } + ``` + +#### 已解决的问题 + +- 可以按预期在字符串上设置 `utf8` 属性。(47864538) + +- 传递 null [UnsafeBufferPointer](https://developer.apple.com/documentation/swift/unsafebufferpointer?language=objc) 给 [String](https://developer.apple.com/documentation/swift/string?language=objc) 结构体的 [init(decoding:as:)](https://developer.apple.com/documentation/swift/string/2907004-init?language=objc) 初始化方法现在可以正常的返回空字符串。 (47864610) + +### Swift 包管理(Swift Package Manager) + +#### 新特性 + +- 当使用 `Swift 5 Package.swift tools-version` 时,`Targets` 可以声明一些常用的、特定于目标的构建设置。还可以根据平台和构建配置对新设置进行条件设置。所包含的构建设置支持 `Swift` 和 `C` 语言定义、`C` 语言头文件搜索路径、链接库和链接 framework。([SE-0238](https://github.com/apple/swift-evolution/blob/master/proposals/0238-package-manager-build-settings.md))(23270646) + +- 当使用 `Swift 5 Package.swift tools-version` 时,可以指定最低部署版本。如果包的任何包依赖项指定的最小部署目标大于包本身的最小部署目标,则构建会出现错误。([SE-0236](https://github.com/apple/swift-evolution/blob/master/proposals/0236-package-manager-platform-deployment-settings.md)) (28253354) + +- 一个新的依赖项镜像特性允许顶级包覆盖依赖项url。([SE-0219](https://github.com/apple/swift-evolution/blob/master/proposals/0219-package-manager-dependency-mirroring.md))(42511642) + + 使用以下命令设置镜像: + ``` + $ swift package config set-mirror \ + --package-url --mirror-url + ``` + +- `swift test` 命令可以以一种标准格式生成代码覆盖率数据,这种格式适合使用标记 `--enable-code-coverage` 的其他代码覆盖率工具使用。生成的代码覆盖率数据在`//codecov` 中可用。(44567442) + +- `Swift 5` 不再支持 `Swift 3 Package.swift tools-version`。仍然在 `Swift 3 Package.swift tools-version` 的包应该更新到一个新版本。(41974124) + +- 包管理器处理大型包的速度显著加快了。(35596212) + +- Swift 包管理器有一个新的 `--disable-automatic-resolution` 标志,它强制包解析在包失败时失效。已解析项不再与 `Package.swift manifest` 文件中指定的依赖项版本兼容。这个特性对于持续集成系统检查包 `Package.resolved` 是否过期非常有用。(45822895) + +- `swift run` 命令有一个新的 `--repl` 选项,该选项启动 `Swift REPL`,支持导入目标包的库。这使您可以轻松地从包目标测试API,而不需要构建调用该API的可执行文件。(44889181) + +- 有关使用Swift包管理器的更多信息,请访问上 [swift.org](https://swift.org/) 的 [Using the Package Manager](https://swift.org/getting-started/#using-the-package-manager)。 + +### Swift Compiler + +#### 新特性 + +- 为了减少 Swift 元数据的占用体积,Swift 中的 convenience initializers 现在将不会提前分配内存空间,除非其调用了在 Objective-C 中定义的 designated initializer。多数情况下,这不会对你的 app 产生任何影响。唯一例外是当你的 convenience Initializers 被 Objective-C 调用,同时,没有调用自身暴露给 Objective-C 的 `self.init` ,那么[最初始分配的内存空间](https://developer.apple.com/documentation/objectivec/nsobject/1571958-alloc?language=objc)会在没有调用任何 initializer 下被释放掉。这可能会对使用 initializer 的人产生困扰,因为他们并没有意识有 object replacement 的发生。一个例子是 [`initWithCoder:`](https://developer.apple.com/documentation/foundation/nscoding/1416145-initwithcoder?language=objc):[`NSKeyedUnarchiver`](https://developer.apple.com/documentation/foundation/nskeyedunarchiver?language=objc) 如果调用了在 Swift 中定义的 `initWithCoder:` 并且保存了存在循环的对象图,它最后的实现将会出错。 + + 要避免这样的问题,你需要保证 convenience initializers 不支持 object replacement,同时,确保最终调用的 initializers 暴露给 Objective-C,这可以是在 Objective-C 中定义 initializers,或是被标记了 `@objc`,亦或是他们被暴露给 Objective-C 的 initializers 覆写了,也可以是他们遵从任何一个标记了 `@objc` 的协议。 + +- 超过 16 字节对齐的 C 语言类型已不再被 Swift 支持。其实,之前版本 Swift 编译器也没有正确的处理这些类型过。(31411216) + +- 在 Swift 5 模式中,非 `final` 类的 convenience initializer 中 Self 的类型是动态的 Self 类型,而非具体类型了。(47323459) + +- 在 `optimized build`(`-O` 和 `-Osize`) 设置下,独占内存访问会在 runtime 中默认强制启用。若程序在 runtime 中违反独占内存访问,则程序会产生一条诊断信息:“Simultaneous accesses to […], but modification requires exclusive access"。你可以通过用命令行标记 -enforce-exclusivity=unchecked 来禁用检查,但是可能会导致产生未知的结果。Runtime 中违反独占内存访问一般会是由同时对类属性和全局变量(包括顶层代码中的变量和被逃逸闭包持有的变量)同时访问导致的。更多信息,请查看 [Swift 5 Exclusivity Enforcement](https://swift.org/blog/swift-5-exclusivity/). ([SR-7139](https://bugs.swift.org/browse/SR-7139)) (37830912) + +- 移除对 Swift 3 的支持。现在编译器支持的 `-swift-version` 是 4,4.2 和 5。 + +- 在 Swift 5 中,在 Switch 中遍历在 Objective-C 中定义的,或由系统框架定义的枚举时,将被要求处理 unknown case。Unknown case 有可能来自于后来新增或在 Objective-C 的 `.m` 文件里进行私有定义。之前,Objective-C 允许枚举变量储存符合定义类型的任何值。这些情况现在都可以用新的 `@unknown default` 来处理。不用担心,编译器依然会对漏掉的 case 进行警告。当然,普通的 `default` 也是可以处理的。 + + 如果你在 Objective-C 自定义了枚举变量,也不需要客户端对未知情况进行处理的话,那么,你可以使用 `NS_CLOSED_ENUM` 宏来代替 `NS_ENUM`。 Swift 编译器会识别这些宏,之后,就不会再要求对 `default` case 处理了。 + + 在 Swift 4 和 Swift 4.2 模式下,你还是可以使用 `@unknown default` 进行处理。如果你没有添加 `@unknown default`, 而 runtime 中有未知 case 传入,runtime 会捕获到这样的异常,这和 Xcode 10.1 中的 Swift 4.2 是一致的。([SE-0192](https://github.com/apple/swift-evolution/blob/master/proposals/0192-non-exhaustive-enums.md)) (39367045) + +- 现在 SourceKit 生成的 Swift Modules 的接口中,默认参数会被显示出来,而非之前用 `placeholder default` 来显示。(18675831) + +- `unowned` 和 `unowned(unsafe)` 变量现已支持 [`Optional`](https://developer.apple.com/documentation/swift/optional?language=objc) 类型。(47326769) + +### Known Issues + +- Key Path 中如果引用另外一个 Swift Module 中 `Protocol Extension` 中的属性,可能会导致编译器奔溃。(48001932) + + 暂时解决方案:在当前 Module 中定义中间属性(`wrapper property`),在 key path 中引用这个中间属性而非原有属性。 + +- 若启用`Thread Sanitizer`,可能导致 Swift 编译器在编译过程中奔溃。 + + 暂时解决方案:在 `Scheme Editor` 的 `Diagnostics` 标签页下禁用 `Thread Sanitizer`。 + +- 链接静态 Swift 库可能会导致创建的二进制程序中缺失类型元数据,原因是静态库中的定义元数据的 Object 文件被错误的当做未使用。 + + 这有可能导致一个 Swift runtime 错误,同时会有类似 “failed to demangle superclass of MyClass from mangled name ‘’” 的错误信息。 + + 暂时解决方案:如果你能重新编译静态库,请尝试启用 `whole module optimization` 下进行编译。 否则,可以考虑添加 `-all_load` 到客户端二进制程序的链接器中来保证所有的 Object 文件都被链接入二进制程序。 + +- `self.init()` 在 [NSView](https://developer.apple.com/documentation/appkit/nsview?language=objc) 和 [UIView](https://developer.apple.com/documentation/uikit/uiview?language=objc) 的子类的 designated initializers 未被禁止,即便 `init()` 在 NSView 和 UIView 中是 convenience initializer。使用 `self.init()` 可能会导致储存属性被多次初始化,最终可能导致内存泄漏或者是其他问题。(SR-9836) (47734208) + + 暂时解决方案:使用 `super.init(frame:)` 来替代 `self.init()` + +### Resolved Issues + +- 除非你安装 Swift 5 命令行工具包的运行时支持,否则 Swift 命令行项目将无法在 macOS 10.14.3 及更早版本上运行。 如果没有该工具包,Swift 命令行项目会在启动时因“dyld:Library not loaded” 错误而崩溃。(46824656) + +- 直接从命令行用 swiftc 编译器链接一个 Swift 项目,现在可以在 macOS Mojave 10.14.4 上输出正确的结果。(43616773) + +- 与 Xcode 10.1 相比,Xcode 10.2 中的编译时间倒退现在在大多数情况下得到解决。 有些项目可能会继续经历小幅倒退;文件错误报告会记录您遇到的案例。(47304789) + +- 即使引用了 [UIAccessibility](https://developer.apple.com/documentation/uikit/uiaccessibility?language=objc) 结构体的成员或包含 NS_ERROR_ENUM 嵌套类型的其他类型,Swift 编译器也会完成“Merge swiftmodule”构建步骤。(47152185) + +- 在某些上下文中允许使用单元素标记的元组表达式,如 (```label:123```),但通常会导致令人惊讶的,不一致的行为,这些行为在编译器版本中会有所不同。 他们现在完全被禁止了。 +在 Swift 3 中已经禁止使用单元素标记类型,如```var x:(label:Int)```。([SR-8109](https://bugs.swift.org/browse/SR-8109)) (41474370) + +- 如果 KeyPath 字面量引用了在 Objective-C 中定义的属性或者在 Swift 中使用 @objc 和动态修饰符定义的属性,它 +现在可以成功编译并在运行时生成正确的哈希值或与其他 KeyPath 的相等比较。(47184763) + +- 扩展绑定现在支持嵌套类型的扩展,这些类型本身是在扩展内定义的。之前可能会因为声明顺序问题而失败,出现“undeclared type”错误。([SR-631](https://bugs.swift.org/browse/SR-631)) (20337822) + +- In Swift 5 mode, inferred associated types are no longer exposed publicly when a public type conforms to a non-public protocol. Instead, they get the minimum possible access to be visible from both the protocol and the conforming type. For source compatibility, Swift 4 and 4.2 modes continue to expose inferred associated types as publicly as the enclosing type unless the inferred associated type is itself less public than the conforming type. + + 在 Swift 5 模式下,当公共类型实现非公共协议时,推断的关联类型不再公开。 相反,它们获得同时对协议和实现类型可见的最小访问权限。对于版本兼容性,Swift 4 和 4.2 模式继续将推断的关联类型公开为封闭类型,除非推断的关联类型本身不如实现类型开放。(46143405) + +- 在 Swift 5 模式下,返回 Self 的类方法不能再使用返回具体类类型(非 final)的方法来覆盖。这类代码不是类型安全的,需要将它们改掉。 ([SR-695](https://bugs.swift.org/browse/SR-695)) (47322892) + + 例如: + + ```swift + class Base { + class func factory() -> Self { /*...*/ } + } + + class Derived: Base { + class override func factory() -> Derived { /*...*/ } + } + ``` + +- 在 Swift 5 模式下,现在明确禁止声明与嵌套类型同名的静态属性,而之前可以在泛型类型的扩展中进行这样的声明。([SR-7251](https://bugs.swift.org/browse/SR-7251)) (47325738) + + 例如: + + ```swift + struct Foo {} + extension Foo { + struct i {} + + // Error: Invalid redeclaration of 'i'. + // (Prior to Swift 5, this didn’t produce an error.) + static var i: Int { return 0 } + } + ``` + +- 现在可以在子类中正确继承具有可变参数的指定初始化器。(16331406) + +- 在 Swift 5 模式下,@autoclosure 参数不能再被转发给另一个函数调用的 @autoclosure 参数。相反,你必须使用括号显式调用函数值。调用将被包含在一个隐式闭包中,保证了与 Swift 4 模式相同的行为。([SR-5719](https://bugs.swift.org/browse/SR-5719)) (37321597) + + 例如: + + ```swift + func foo(_ fn: @autoclosure () -> Int) {} + func bar(_ fn: @autoclosure () -> Int) { + foo(fn) // Incorrect, `fn` can’t be forwarded and has to be called. + foo(fn()) // OK + } + ``` + +- 现在完全支持复杂的递归类型定义,包括之前在运行时会导致死锁的类和泛型。(38890298) + +- 在 Swift 5 模式下,在将 Optional 值转换为通用占位符类型时,编译器在展开值时会更加保守。这种转换结果现在更接近于非通用上下文中获得的结果。([SR-4248](https://bugs.swift.org/browse/SR-4248)) (47326318) + + 例如: + + ```swift + func forceCast(_ value: Any?, to type: U.Type) -> U { + return value as! U + } + + let value: Any? = 42 + print(forceCast(value, to: Any.self)) + // Prints "Optional(42)" + // (Prior to Swift 5, this would print "42".) + + print(value as! Any) + // Prints "Optional(42)" + ``` + +- 协议现在可以将符合类型限定为给定类的子类。支持两种等效形式: + + ```swift + protocol MyView: UIView { /*...*/ } + protocol MyView where Self: UIView { /*...*/ } + ``` + Swift 4.2 接受了第二种形式,但还没有完全实现,在编译时或运行时偶尔会发生崩溃。([SR-5581](https://bugs.swift.org/browse/SR-5581)) (38077232) + +- Swift 4.2 接受了第二种形式,但还没有完全实现,在编译时或运行时偶尔会发生崩溃。 + - 在 Swift 5 模式下,当在自己的 didSet 或 willSet observer 中设置属性时,observer 现在只在 self 上设置属性(不管是隐式的还是显式的)时才会避免被递归调用。([SR-419](https://bugs.swift.org/browse/SR-419)) (32334826) + + 例如: + + ```swift + class Node { + var children = [Node]() + var depth: Int = 0 { + didSet { + if depth < 0 { + // Won’t recursively call didSet, because this is setting depth on self. + depth = 0 + } + + // Will call didSet for each of the children, + // as this isn’t setting the property on self. + // (Prior to Swift 5, this didn’t trigger property + // observers to be called again.) + for child in children { + child.depth = depth + 1 + } + } + } + } + ``` + +- 如果你使用 #sourceLocation 将生成文件中的行映射回源代码,那么诊断信息将显示在源文件中而不是生成文件中。(43647151) + +- 使用泛型类型别名作为 @objc 方法的参数或返回类型不会再生成无效的 Objective-C 标头。([SR-8697](https://bugs.swift.org/browse/SR-8697)) (43347303) + + diff --git "a/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" new file mode 100644 index 000000000..0ba1e2a95 --- /dev/null +++ "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245.md" @@ -0,0 +1,63 @@ +# 老司机技术周报 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly-juejin.png?raw=true) + +老司机技术周报是一个由移动端技术爱好者组成的公益技术团体。经过近 4 年发展,编辑组已经聚集了 38 位 iOS 圈内一线开发者,成员来自各个城市,涵盖了互联网行业的各个头部企业。我们致力于在信息爆炸的时代将真正有价值的内容输送给读者,为社区发展注入一点活力,曾联合 SwiftGG 和知识小集等一起组织了近 4 年的《WWDC 内参》活动,GitHub、公众号和掘金等平台均拥有广大的读者群体,2018 年至今共发布周报 160 余期,各个渠道累计阅读量达 500 多万次,同时运营有总共超过 2500 多人的微信读者群。 + +## 周报 + +每周一期推荐优质内容的期刊是我们的核心内容,从 2018 年 1 月 1 号开始,至今已经发布 166 期。分发的平台不限制于 GitHub、公众号、微博、RSS、掘金和 CSDN 等。全平台累计阅读量达到 500 多万次,深受国内粉丝的喜爱,也与许多国内头部开发者保持着良好的关系。 + +## 线下沙龙 + +2021 年,我们组织了两场超百人规模的线下沙龙活动,活动均是免费参与,不仅邀请了国内外优秀开发者来做主题分享,并且为到场的开发者朋友准备了精美伴手礼和茶歇。 + +### WWDC21.T 沙龙 - 杭州场(7.3,阿里巴巴西溪园区) + +杭州场我们联合了阿里巴巴淘系技术团队共同主办了这次活动,总共放出 200 张免费门票,均是当天内售罄。现场实际到达 170 多位开发者朋友,我们进行了 4 场线下分享和 2 场线上分享。 + +![](https://uc334c8ab79b1c4b3d81b0fc923f.previews.dropboxusercontent.com/p/thumb/ABNZXEoLJWAh36QqNsDUd6vQooBZyJiXwtgECHBqM7top5xRs8gv32XTEaNgp8EUhzJxrp62Lv3XjQR7VI-n2IhWSnEaVuaOJ98DnS_gTvbQL3QZZlH41SQkRpDuucWB6Jaut8TKg453FTVGbpqrqNkdi_q8yq7GlF0rtRYHf7HrDKmZCsf4G2P8zwXbrQ90afvGnjR1ER3p_x-h_9LQklT2uarAzpr85wjYyP727wBrCQXzcNpSH6Gv57vvHDlKJRQeNKIFek2zMeXuZftmV0Vw1tm1hrpklVy-E0qldqL8OSc4vAqvCbsNlr30R8ljWyDQuRhWWwVN9MRI0pLGyHdLldkRkr8BXofzkHvUqZ_cT7bki-2NScLSMOJGx0TI_g1gROkqcdj4A42_A81Umac0hcXB83SvhvR0yGi4C7bpFA/p.jpeg?fv_content=true&size_mode=5) + +![](https://uce2dd3bb20b579695ded8aefdb0.previews.dropboxusercontent.com/p/thumb/ABPOBjVPXTGCOJQJ6_9-t1n7XjJ4mSZRz3vZ070M4KxJ3QbyzQkIBlqMsrvGNapyybQdiGzDliIUzXOCaF7O3tvJD9jcgiC1Fs4CR7JTEb3Qwtue5qwRVEguGDWEdgb_9lwIsm3ASr0H3KyfgWkGSNNtDoLPWDIgwmNZmqtSuUOwCpMsWO1UirZe6PQEFdsh1MdtRKZBsnQHUMjHnAds5OpdR3psNVcGeZrlXJlusTezUohD4vXtNXGLza7h1auMI_WP9c6RdBLM4jH7mcraSWouM_UxSuOLRViiqxvvEBozCSuHPDslyp4fj1NLHkVJWcVKyYoIT1UIJB7MU2NkAINNZl9IKrSiu-7OEEP0dAPYl9XXhmX0QfMBnNguUXuJMVjshY0LrYHXBeKu36nGzGPghRJ2kxafURqpjhXmfQsZkA/p.jpeg?fv_content=true&size_mode=5) + +![](https://uc26585f7d73e8bb22c06b641a1d.previews.dropboxusercontent.com/p/thumb/ABOiHH0KppG4K5wFbcf2CCmtgUKNpfxQopHCHiZHqGRhQhCiCawFKVxgHj1DDeI4uF3CejsnvGQhslkZLdqQrqy5sFTjaYlRuTEsUNo8lbT8Ag41gdSvPwsPHNLZq1OjHAMa7DEcRRX5wwvPME2Ke6nJU7WJ0zxFt5EBrJI_x2yaqrmuVksigjpkxN31u8SJdKVpbtD0oungrNgCj1eByLGzp0L9mMei0gm1Vrp7yzr1yYQWLIkMlNOesGNbwCQWlsCSA6Il7LQ0FgsR2Cu-V6oRq_iYDkDAWXfl9ekSuc31JzkbLEi5UqnEeLSY9HjdlsrVFcT4XkDLaSVzChM-im3EtxtBJSvSJrQO6blTg61lRULzBpTZ50uYI5cuFapf4vqV9HyPmJKH9oUc-SkZVSldXEsmSO0ZkX9lztOe_NnIqg/p.jpeg?size=2048x1536&size_mode=3) + +更多现场照片:https://www.dropbox.com/sh/oychqg41nwvrj6s/AAC1BJfCshRSWNtPhCbhwJRpa?dl=0 +分享主题与嘉宾介绍:https://mp.weixin.qq.com/s/7NnD0Co2Xd9WPk61yO1aHQ +录像及 slide(更新中):https://wudnh5f9ky.feishu.cn/drive/folder/fldcn6BBmquvtnUf7fKjKnaZBTf + +### WWDC21.T 沙龙 - 上海场(7.10,字节音乐上海部) + +上海场我们找到了字节音乐技术团队联合主办线下沙龙,总共放出了 160 张门票,几乎在半小时内就售罄了,并不断在后台收到读者朋友要求增加门票。现场实际到达约 120 多人。同样是 4 场线下分享(每个城市不同)和 2 场线上分享。 + +![](https://uc530b871cd4e8cd35aed9150cbb.previews.dropboxusercontent.com/p/thumb/ABPeyBLBfqMZawUbS713dhQGdX-jesGkfCJoJq2q4d1tROyFPjKMhjbMqMeSl2T8HOPPvvz9KgZbLAdhNIHeiKvUHDreBE1oJuN_Jqyp7QixlqBdqylp7owyjeQSvWtyy7JF_8UreTvfzWYpNUFVSbHUeMIKwFhAo61wH5ChUdqw25SuRYoC2O8qwd4fjH00EdXIWzmGIE5LAsg3x5kfY-Gddd8W-rNfUcwby1F323XFXW0Gq0X3oca-KBBjYTroPaB6Et0dYyext8LYcUGGq4bnxpbKotGjtWuJ4gzCPJfXG1BcNTJLxlBP7EC31XLSJN89x09SBEiAfZnnpWUgtizPghEujZR-I5ULBUbK5FZU8otUxSehdDKv2--2PH4oLGFBvvnXK2h6FddJlujCbGwjoLoQx34-X4m8UA6I6yu6e1KWrKZ_xY2NOLUqTuIy726jH2dBsBVzqG1bxvTfT9gn/p.jpeg?size=2048x1536&size_mode=3) + +![](https://uc301588ae5527d3969f4b8e2e4b.previews.dropboxusercontent.com/p/thumb/ABMOxBvq-Ix1GQWgUhrDJtZgpEfwAOsgXZc9-ah-CFNlScsrsYMRyKZSH4rKDjVjsEWO3_EJfZM_Z2zrNOX8hT4j3wIFpLMtsb_veke2UF1AkXAf6y-jPOJsn5W9Yq06gz_WHnjxe_yBz5XFRY8vObAucoWdUmm5jHYQAIY8SQk3Rt9dZ77db6rtxvJMFzYnKYlifhwTya5CBZPoEGoribhSoS4o9hEbsHg0Xhcc9P8YVF98Y6RPWpew2qX1mV1iR_5Bn1vEacJS7mXcPSqsVOClEl1L8fLz6U1PEr4WlKsnnOmAE-XlV84LLDAOtUTa26EpDuAZ7AUoEv-8h4Tbf1FrEyOeSEpTow-r5io63KbIN0qywLBsoUK9JTH1b4w468x1-SaZen-qhBcZ4bPyJz-D9A4QjEYu4AhdDb3FTS1K2XYozW8RLmJuHcXp-0RqUHYcvsXxSUOqpASwG6lX75JB/p.jpeg?size=2048x1536&size_mode=3) + +![](https://ucaf23691e0bc2191620b5ae26fa.previews.dropboxusercontent.com/p/thumb/ABOeh0JcG3l_Jlo05VbbgJcZ-CRJzZzcUiBgB3pfiU-F8cdA_ctmhK5c5leuHkXX88BF65b7AfAfnGYAUKQbP-BbtEVwscF6Bd3-UNf-IUIEjFDQtPN-VdqkeOID8HhyPy2bNb01RwGQ4AUgEHEP9NHEZs77nVCxPznlnB6aWGA90Nb2v9xaqVhXs1gsViVDQmBzKUD7_oJrawziHPrgR375U7-R6DZ-EFa9GhlPFdF0t5WzeghyFZbGQm8umMdnvb1CH75lSVeTnPolfgQoqBk-lLoj3LFPDaSbYIWFlcmpOPlZZmXo3PP3VNN-UcbPXNDDx9Iypl-3ut4dN85IdQFE8AlyTDYyPRnSAOyrUkwbd3LVXweEHhP2nOQ5DL_zh6hXaa_1dPkIdV306Cy6Y4khuNTw5aHw8m7nV_aQKIOa9e5oSxC7HxwTHHB3-WjXLjNrr8KuYZSEs9rCJBfp5m0d/p.jpeg?size=2048x1536&size_mode=3) + +分享主题与嘉宾介绍:https://mp.weixin.qq.com/s/-bRXpilEk4PRraOc7ZWELQ +录像及 slide(更新中):https://wudnh5f9ky.feishu.cn/drive/folder/fldcn6BBmquvtnUf7fKjKnaZBTf + +## WWDC 内参系列活动 + +从 2017 年开始,为了和社区开发者一起享受这场 iOS 圈的 WWDC 技术盛宴,老司机技术周报开始组织 WWDC 内参系列活动,累计已有上万的读者订阅。我们会组织业内的优秀开发者针对 WWDC 中的 Session 进行学习和实践,并将他们的学习成果写成技术文章分享出来。所有人都是基于兴趣出发来参与这个活动,因而早期内参的发布是完全免费的。但根据我们很长一段时间的读者反馈来看,免费发布这样的形式虽然说门槛低了,但同样导致了很多读者订阅之后并没有很认真地来看我们的内容。于是我们在最近几年的内参的发布策略调整为了设置一定的门槛价格,来引导读者来付费重视,而在发布一年后再免费发给读者。 + +WWDC 21 我们尝试了全新的创作者参与机制,由原来的邀请参与变为了公开募集,并引入多人审核机制来把控内容质量。今年总计吸引了 200 多名开发者共同参与到内参活动中,大家一起编写和审核文章内容,预计将产出超过 100 篇的高质量精华文章。现在正在活动宣传期,已经有超过 2400 多读者订阅。我们承诺内参活动所有所得收入,除了活动宣传的部分开销外,我们会按内容质量全部用于给参与者稿费,并且老司机技术周报也会单独拿经费给参与者赠送活动纪念品等。 + +- WWDC 17:https://xiaozhuanlan.com/wwdc17 +- WWDC 18(与掘金社区合作):https://juejin.cn/post/6844903618823340040 +- WWDC 18:https://xiaozhuanlan.com/wwdc18 +- WWDC 19:https://xiaozhuanlan.com/wwdc19 +- WWDC 20:https://xiaozhuanlan.com/wwdc20 +- WWDC 21:https://xiaozhuanlan.com/wwdc21 + +## 其他内容 + +除了周报、线下沙龙以及内参活动外,我们还会不定期地向业内的优秀开发者约稿,鼓励大家进行原创优秀博文;另外针对很多读者感兴趣的话题,我们也会不定期组织周报编辑一起热议,并将结果输出给社区。 + +## 渠道 + +GitHub:https://github.com/SwiftOldDriver/iOS-Weekly +RSS:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom +公众号、掘金等全网平台:老司机技术周报 diff --git "a/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" new file mode 100644 index 000000000..79e52fe93 --- /dev/null +++ "b/Posts/\350\200\201\345\217\270\346\234\272\346\212\200\346\234\257\345\221\250\346\212\245\347\262\276\345\223\201.md" @@ -0,0 +1,79 @@ +# 老司机技术周报 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly-juejin.png?raw=true) + +## WWDC 内参 + +- WWDC 17:https://xiaozhuanlan.com/wwdc17 +- WWDC 18(与掘金社区合作):https://juejin.cn/post/6844903618823340040 +- WWDC 18:https://xiaozhuanlan.com/wwdc18 +- WWDC 19:https://xiaozhuanlan.com/wwdc19 +- WWDC 20:https://xiaozhuanlan.com/wwdc20 +- WWDC 21:https://xiaozhuanlan.com/wwdc21 + +## 技术沙龙 + +### [淘系技术](http://t.cn/A6IZpL06) + +淘宝工程渐进式拥抱 Swift +- 视频:https://mp.weixin.qq.com/s/67TM_ljN_OH96TroyUFGFA +- 文字版本:https://mp.weixin.qq.com/s/T8iwgSk1MiB3Xg9CGzgYbw +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/%E6%89%8B%E6%B7%98%E5%B7%A5%E7%A8%8B%E6%B8%90%E8%BF%9B%E5%BC%8F%E6%8B%A5%E6%8A%B1Swift%20-%20%E5%80%BE%E5%AF%92.pdf + +西瓜视频的 IAP 支付实践与 StoreKit 新特性 +- 视频:https://mp.weixin.qq.com/s/GWSBYEPB5bjjEAkxNEXWoQ +- 文字版本:https://mp.weixin.qq.com/s/XGj95MLg4HWU6dhuqGdEOg +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E2%BB%84%E7%93%9C%E8%A7%86%E9%A2%91%E7%9A%84IAP%E6%94%AF%E4%BB%98%E5%AE%9E%E8%B7%B5%20%E4%B8%8EStoreKit%E6%96%B0%E7%89%B9%E6%80%A7%20-%20%E9%BB%84%E9%AA%8B%E5%BF%97.pdf + +Flutter 混编工程的模块化架构设计实践 +- 视频:https://mp.weixin.qq.com/s/ciztZLEH-ZrDgAamjvZuOg +- 文字版本:https://mp.weixin.qq.com/s/A2gYRPJ0u8TVXZyMtEArlA +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Flutter%E6%B7%B7%E7%BC%96%E5%B7%A5%E7%A8%8B%E7%9A%84%E6%A8%A1%E5%9D%97%E5%8C%96%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%E5%AE%9E%E8%B7%B5-%20Jackie.pdf + +抖音智能创作如何做防劣化 +- 现场:https://mp.weixin.qq.com/s/PV9mcPZnPNY-OtUxKfraLQ +- 文字版本:https://mp.weixin.qq.com/s/_c3y9KnbKS6VnqTb0AKRWg +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E6%8A%96%E9%9F%B3%E5%88%9B%E4%BD%9C%E5%B7%A5%E5%85%B7%E9%98%B2%E5%8A%A3%E5%8C%96%E5%AE%9E%E8%B7%B5%20-%20Crespo.pdf + +### [字节音乐](http://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491558&idx=1&sn=4ca4f3a9c1eb31f5052272e2649cbd6f&chksm=eaa280edddd509fbe6af2f3fa7d5a2800c01d054257e0ef8ed63bb0705155c517d7bcfe5e19c&token=1167868960&lang=zh_CN#rd) + +Async and Await in Swift 5.5 +- 现场视频:https://mp.weixin.qq.com/s/Yu9eQywcPiZgNME4y5sXfw +- 文字整理版:https://mp.weixin.qq.com/s/DopuYyy479eSjgns3iaWaw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E9%BB%84%E6%99%BA%E6%9D%B0%20-%20Advanced%20Property%20Wrapper%20in%20Swift.pdf + +From Idea To Product +- 现场视频:https://mp.weixin.qq.com/s/tFpxHTnGY7DgDN60gWON3g +- 文字整理版:https://mp.weixin.qq.com/s/TZHrFOU65iG7QQwP8b96-w +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Roc%20Zhang%20-%20From%20Idea%20to%20Product.pdf + +Advanced Property Wrapper in Swift +- 现场视频:https://mp.weixin.qq.com/s/4drAztYJR3Cte1z5qVi_vg +- 文字整理版:https://mp.weixin.qq.com/s/psgRgIZlVDtIeQeDmUmXOw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E9%BB%84%E6%99%BA%E6%9D%B0%20-%20Advanced%20Property%20Wrapper%20in%20Swift.pdf + +基于 Bazel 的 iOS MonoRepo +- 文字整理版:https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E5%BC%A0%E5%BF%BB%E6%AD%A3%20-%20%E5%9F%BA%E4%BA%8E%20Bazel%E7%9A%84%20iOS%20MonoRepo%20%E5%AE%9E%E8%B7%B5.pdf + +### [得物技术](http://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247492047&idx=1&sn=dbdf8bb3f6cb8746fcaeb41ccfb40a60&chksm=eaa17ec4ddd6f7d2074a9caa01a24edfcd160c0e22c1e9bfb62f3e75721bbca55f81fbb6cd95&token=1167868960&lang=zh_CN#rd) + +得物 iOS 工程演进之路 +- 现场视频: + - 上 https://mp.weixin.qq.com/s/bl7DgIv5ICX7hBXF26Q2zA + - 下 https://mp.weixin.qq.com/s/o-gRZZzQBdP33EhFZh2_Ow +- 文字整理版:https://mp.weixin.qq.com/s/Lr6tDxacQKGZ19cKdmNg1w +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/Casa%20-%20%E5%BE%97%E7%89%A9iOS%E5%B7%A5%E7%A8%8B%E6%BC%94%E8%BF%9B%E4%B9%8B%E8%B7%AF.pdf + +字节跳动移动研发工具链 - MBox +- 现场视频:https://mp.weixin.qq.com/s/-oGRc22gkk-HVHUA7hBVpg +- 文字整理版:https://mp.weixin.qq.com/s/OD2lYfA9tkdgEp4QGRtdog +- PPT: https://github.com/SwiftOldDriver/PPT/blob/main/%E6%9D%8E%E5%B0%A7%20-%20%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8%E7%A7%BB%E5%8A%A8%E7%A0%94%E5%8F%91%E5%B7%A5%E5%85%B7%E9%93%BEMBox.pdf + +基于 MNN 的端侧 AI 实践 +- 现场视频:https://mp.weixin.qq.com/s/I8Vq7h3ODnWt81NM13onmw +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/%E4%BA%94%E5%AD%90%E6%A3%8B%20-%20%E5%9F%BA%E4%BA%8E%20MNN%20%E7%9A%84%E7%AB%AF%E4%BE%A7%20AI%20%E5%AE%9E%E8%B7%B5.pdf + +视频特效揭秘 +- 现场视频:https://mp.weixin.qq.com/s/EGFi0A21tzB6XMlDimlFUQ +- PPT:https://github.com/SwiftOldDriver/PPT/blob/main/Matrix%20-%20%E8%A7%86%E9%A2%91%E7%89%B9%E6%95%88%E6%8F%AD%E7%A7%98.pdf diff --git "a/Posts/\350\256\251\351\235\242\350\257\225\345\256\230\346\235\245\345\221\212\350\257\211\344\275\240\357\274\214\345\223\252\347\261\273 iOS \345\274\200\345\217\221\346\233\264\345\256\271\346\230\223\350\242\253\351\235\222\347\235\220\357\274\237.md" "b/Posts/\350\256\251\351\235\242\350\257\225\345\256\230\346\235\245\345\221\212\350\257\211\344\275\240\357\274\214\345\223\252\347\261\273 iOS \345\274\200\345\217\221\346\233\264\345\256\271\346\230\223\350\242\253\351\235\222\347\235\220\357\274\237.md" new file mode 100644 index 000000000..baeba6ed1 --- /dev/null +++ "b/Posts/\350\256\251\351\235\242\350\257\225\345\256\230\346\235\245\345\221\212\350\257\211\344\275\240\357\274\214\345\223\252\347\261\273 iOS \345\274\200\345\217\221\346\233\264\345\256\271\346\230\223\350\242\253\351\235\222\347\235\220\357\274\237.md" @@ -0,0 +1,83 @@ +# 让面试官来告诉你,哪类 iOS 开发更容易被青睐? + +![](https://ws1.sinaimg.cn/large/bf676845ly1g22g0mpeo0j232m1zn177.jpg) + +在当下这个**金三银四**的时期,我们经常会看到「XXX 的面试准备」、「XXXX 面试心得」、「XXX 面试之路」之类的文章。但是这些都是站在**面试者**的角度出发的文章。总结了各大公司的面试流程,分享面试深度、广度。对于自己面试的表现只能从自身的表现,亦或者是从面试官的微表情中透露出来的一些动作来感知。但是我认为这些不一定准确的,只是自己的主观意识罢了~ + +所以今天,我们换个角度,我们来问问看**面试官**,在我们的面试过程中,面试官们更青睐于哪类人呢?下面的回答,我期望读者们能类比一下自身,小编自己看完之后,也是深有体会💪💪💪。那么就让我们开始吧~ + +## 折腾范儿_味精 +蚂蚁金服会员技术部面试官,江湖俗称味精,在 Web 方面有很深的了解 + +1. **探寻机制原理**,不满足于只完成功能需求的。这一点侧面可以证明候选人有解决疑难杂症的优秀潜力,见识过更多优秀的代码,只停留在遇到问题再谷歌百度,最终完成功能需求的,并不是我青睐的。 +2. 对于工作有自己的**主动性设计与产出**,并且能体现出**技术深度与成长**的。简单的来说如果有一天老板不给你安排任务了,不给你提明确的需求做 xxx 了,你自己能有什么样的规划思考以及对项目对自己的技术提升,这一点体现主观能动性与发现问题解决问题的潜质。 + +## 没有故事的卓同学 +老司机周报发起人,目前是奇志科技 iOS 团队负责人 + +我们当下的主要业务是利用无人机采集数据,推动行业作业效率。移动端要处理:无人机的任务控制(按规定的航线、动作采集数据)、无人机的数据处理(拍到的图片、视频)。和服务器的通讯是很重要的一环,也有类似直播推无人机的图传视频流的场景。我们的产品 UI 的比重少,没有那么多页面,更多时候是针对一个需求,提出一个合理的技术方案,然后保证这个方案高质量的实现。 + +按照前面提到的要求,我们会要求移动端的开发人员一定要有良好的**计算机基础知识**。不是计算机专业,培训班了几个月 UI 写的溜的就完全不合适。在大的业务型公司中写了几年 UI 的也不匹配。我们要解决一个需求时,要考虑无人机硬件上的能力、飞控的能力、无人机通信上的限制、数据到 native 层后如何处理。如果计算机基础知识掌握的好,遇到我们业务上的难题就能解决的越好。所以背后还隐含了对新技术的探索、理解能力。 + +因为看中**新技术的探索**、**学习能力**,所以喜欢**折腾**其他端技术的程序员我们也很偏爱。为了保证移动团队可以有效的沟通,会尽量 iOS 和 Android 大的架构上保持一致。两端也都深度使用了 Rx。我们面向不同行业应用的 UI 是使用类似 RN 技术实现的,UI 构建代码是 js。因此 iOS 团队提供了接触安卓、前端的机会。如果一个程序员有兴趣,在我们这边就可以实现一个功能,三端代码一个人写。 + +## Tom +广州头条 EE 团队初创成员,资深面试官 + +1. **沟通能力**第一位,其次考察学习能力和知识深度,特别喜欢能够举一反三的候选人。 +2. 有强烈的**学习自驱力**会加分,另外能够经常了解项目上下游事情的候选人也会加分。 +3. 软素质部分,比较看中是否能够在相对苛刻的外部压力下找到解决方案,譬如对一个随机出现的 BUG 揪住不放,用了较多的个人业余时间赶上当前版本周期解决。 + +> 广州头条急招各种岗位,求简历ing,小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +## Parsifal +老司机周报负责人,微医生 iOS 团队负责人 + +对不同职位要求倾向性也会有一定区别。若招的是初中级或者实习生,我想基本功和学习能力是会占到比较大的比重的。而相对若招的是更深层次的人才,则对于技术深度和广度都会有更大的要求。在硬能力差不多的前提下,我谈谈在面试过程中会让我感觉眼前一亮有加分的一些表现吧。 + +1. 认真听题目,理解考察目的,针对性和有**条理性**地梳理思路而后开始回答。一类应聘者在面试过程中,会试图打断面试官提问做抢答,这是极不好的一个习惯。不仅会让面试官觉得你会较急躁,且不太礼貌,而且往往回答得并不是面试官真正想要问的。另一类应聘者则是回答问题并没有一个很清晰的思路,自顾自地侃侃而谈了很多,最后越来越偏离主题,反而是起到反效果。相应地,如果你能够分点有层次地答题,不仅自己不会答漏,也能让面试官轻松得 get 到你的掌握程度。 +2. **气质**与团队的**气质**能够有较大地契合。每个团队都会有自己的**气质**,这会在平常工作中体现的很明显。如果你应聘的团队是较激进有活力的,对各类新技术都很热衷尝试和沉淀,而你属于较沉稳保守的,那到团队内久了就会显得格格不入。 +3. 喜欢自己从事的工作,关注业内的技术和生态发展,对近期圈子里能够有一定的了解。这一点很可能会映射出你是否会持续成长。在 WWDC 期间,我往往会聊一些相关的作为破冰话题。 +4. 定期有**计划**地梳理自己的知识体系。如果你有这个习惯,可以提前传到 GitHub 等地方,并在简历上体现。 +5. 保持**谦逊**,不要浮夸和自以为是。遇到过太多对自己迷之自信的应聘者,但往往技术是越到深处越觉得学无止境的。 + +## 享耳先森 +丁香园 iOS 团队负责人 + +1. iOS 及软件工程上有足够的硬实力。 +2. 软实力方面,比较考察 **学习能力**、**主动性**,我们比较喜欢做事能够做到实时反馈的人,而不是需要其他人去推动。 +3. 心态方面,我们会要求候选人 **心智成熟、心态开放**,并不太喜欢甩锅的行为,能够主动承担责任。 + +## Jason +即刻 iOS 团队负责人 + +除了专业技能、算法基本功符合岗位要求之外,我们还有一个 iOS 面试原则,不论职级高低都需要满足: + +1. 真实直接,是什么说什么,绕弯子的不要。 +2. 心态一定要开放,有旺盛的好奇心和想象力,不管自己 Level 是高是低,都愿意拥抱新的更好的技术和思想,**少年心气**。 +3. **沟通协作**能力一定要强,只喜欢单打独斗的不要。 +4. 遇到问题的时候,老从其他人身上找原因的不要。 + +我们认为公司氛围与个人能力都很重要。只要文化足够好,就算刚入职的时候经验不足,将来成长空间和速度也是非常可观的。 + +## 总结 + +OK~我们看完了这么多大佬的话语之后是不是都有一些自己的感触呢?小编我自己作为面试官的次数并不多,就不高谈阔论了。简单几个词,总结一下本篇的言论。(如果每个单题都是20分,你给自己打几分呢?评论区可以留言哦!打💯或者超过💯的童鞋,🙄让我们膜拜一下。) + +1. 探索精神 +2. 心智成熟、心态开放 +3. 沟通协作能力 +4. 主动性 +5. 强逻辑思维 + +最后,祝大家看完本文后都有所收获,面试顺利~😊😊😊 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 \ No newline at end of file diff --git a/README.md b/README.md index 2e0050ba4..2cc9916c7 100644 --- a/README.md +++ b/README.md @@ -1,177 +1,210 @@ -![](/assets/ios-weekly.png) +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/326.jpg?raw=true) -这个时代的问题不是缺乏信息,而是信息太多,不知道那些信息是有价值的,哪些是对我而言有效的信息。既然我们平时也在关注 iOS 开发相关的资讯信息,不如整理出来。我们并不只是资讯的搬运工,也是价值的布道者。关于内容,不局限于具体的 iOS 技术相关的内容。也包括我们认为对于 iOS 开发者有价值的信息,比如软件工程、程序员话题。 +这个时代的问题不是缺乏信息,而是信息太多,不知道哪些信息是有价值的,哪些是对我而言有效的信息。既然我们平时也在关注 iOS 开发相关的资讯信息,不如整理出来。我们并不只是资讯的搬运工,也是价值的布道者。关于内容,不局限于具体的 iOS 技术相关的内容。也包括我们认为对于 iOS 开发者有价值的信息,比如软件工程、程序员话题。 + +[查看往期周报](https://github.com/SwiftOldDriver/iOS-Weekly/releases) ## 欢迎参与 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues ](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues ](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 -## 支持我们:老司机精选专栏 - -我们在小专栏上开通了一个收费专栏:[SwiftOldDriver 精选](https://xiaozhuanlan.com/olddriver-selection) 。**专栏的收入会用于周报编辑部日常运营**。平均每周专栏会更新一篇文章,**持续更新至 18 年底**,专栏的价格为 59 元。如果愿意支持我们欢迎订阅,相信内容也不会让你失望。 - -## 归档 - -[周报列表](https://github.com/SwiftOldDriver/iOS-Weekly/tree/master/Reports) - -## RSS 订阅 - -[https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom](https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom) - -## 其他平台 - -掘金:[老司机 iOS 周报](https://juejin.im/user/5a52075e6fb9a01c9d31b107/posts) - -公众号:OldDriverWeekly - -![](/assets/qrcode_for_wechat.jpg) - -## 编辑 - - - - - - - - - - - - - - - - - - - - -​ - -​ - -​ - - - - - -​ -​ -​ -
- - - -

没故事的卓同学

-
- - - -

享耳先森

-
- - - -

mmoaay

-
- - - -

EyreFree

-
- - - -

四娘

-
- - - -

Damonwong

-
- - - -

折腾范儿_味精

-
- - - -

张嘉夫

-
- - - -

AidenRao

-
- - - -

ParsifalC

-
- - - -

叶孤城___

-
- - - -

Aaron

-
- - - -

方秋枋

-
- - - -

tom

-
- - - -

kyo

-
- - - -

anotheren

-
- - - -

水水

-
- - - -

looping

-
- - - -

JasonYuh

-
- - - -

老驴

-
+## 支持我们:[WWDC24 内参](https://xiaozhuanlan.com/wwdc23) + +**WWDC24 内参** 目前已经更新了 21 篇内容,并且我们今年做出了一个重大改变,关注老司机技术公众号并回复 ``2024`` 可以免费领取,后续也会在公众号上定期推送对应内容。 + +**WWDC 内参** 系列是由「老司机技术」牵头组织的精品原创内容系列。已经做了几年了,口碑一直不错。和往年不同,今年几乎没有脱水稿了,得益于组建的审核团队和不断优化的创作流程,大家创作的内容都已经超越了视频本身的内容,非常有学习和参考意义。 + +> 双审核机制:一位审核从专业性角度看内容是否正确,另外一位审核从读者角度看知识是否正确引导。 + +## 订阅周报 + +我们提供了多种订阅方式,大家可以按照自己的需求进行选择: + +-
邮件订阅:点击顶部 Watch 按钮选择 Release Only 模式

+-
公众号:老司机技术周报

+- RSS:[点击获取 RSS 源](https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom) +- 掘金:[老司机技术周报](https://juejin.im/user/5a52075e6fb9a01c9d31b107/posts) + +## 检索周报 + +利用 GitHub [Search In This Repository](https://github.com/SwiftOldDriver/iOS-Weekly/search?q=swift&unscoped_q=swift) 功能可以快速检索出往期周报收录的内容。 + +## 贡献名单 + +#### 轮值主编 +
+ + + + + + + + + +
+ +#### 现任编辑 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +#### 荣誉编辑 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +## 关于我们 + +老司机技术周报是一个由移动端技术爱好者组成的团体,致力于在信息爆炸的时代将真正有价值的内容输送给读者。我们曾联合 SwiftGG 和知识小集等一起组织了近 4 年的《WWDC 内参》活动,GitHub、公众号和掘金等平台均拥有广大的读者群体,2018 年至今共发布 180 余期,各个渠道累计周报的阅读量达 500 多万次。 ## 其他 -本周报图标及头图设计者为知名设计美学博主 [mmoaay](https://weibo.com/smmoaay),`Swift 老司机活动中心` 与 `mmoaay` 对其以及其衍生物保留一切权利。 +本周报图标及头图设计者为知名设计美学博主 [@SketchK](https://github.com/SketchK),`Swift 老司机活动中心` 与 `SketchK` 对其以及其衍生物保留一切权利。另外,非常感谢 [mmoaay](https://weibo.com/smmoaay) 为周报团队设计的第一代 Logo。 + +## 赞助者 + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** ## 协议 -Apache-2.0 license +Apache-2.0 license iOS-Weekly 基于 Apache-2.0 协议进行分发和使用,更多信息参见协议文件。 - + iOS-Weekly 所含文章使用以下协议进行保护:[署名-非商业性使用-禁止演绎](http://creativecommons.org/licenses/by-nc-nd/3.0/cn/)。 diff --git a/Report template.md b/Report template.md index 54d49fa11..4f7ff3747 100644 --- a/Report template.md +++ b/Report template.md @@ -1,55 +1,60 @@ -# 老司机 iOS 周报 #1 | 2018-03-25 +# 老司机 iOS 周报 #319 | 2025-01-06 -![ios-weekly](../assets/ios-weekly.png) +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) 老司机 iOS 周报,只为你呈现有价值的信息。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 ## 新闻 -新闻 +> 行业相关的新闻、趣事、看法 +##  Developer - 设计开发加速器 -## 文章 +> 设计开发加速器相关活动 + +## 新手推荐 -文章 +> 收集一些对新手友好且质量不错的文章 + +## 文章 -## 设计 +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 ## 工具 -第三方工具服务 +> 开发过程中常用的工具,及一些新工具的介绍 ## 代码 -库,代码段,开源app +> 库,代码段,开源app ## 书 -可选 +> 比较不错的书的推荐和书评 ## 音视频 -可选,音视频 +> 比较不错的书的推荐和书评 ## 内推 -可选,内推招聘 +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 -## 关注我们 +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) -我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 +## 关注我们 -![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** -## 本期编辑 +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445) +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 说明 -🚧 表示需翻墙,🌟 表示编辑推荐 +🚧 表示需某工具,🌟 表示编辑推荐 -预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) \ No newline at end of file +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/#36-2018.09.17.md b/Reports/#36-2018.09.17.md deleted file mode 100644 index d05ca4080..000000000 --- a/Reports/#36-2018.09.17.md +++ /dev/null @@ -1,70 +0,0 @@ -# 老司机 iOS 周报 #36 | 2018-09-17 - -![ios-weekly](../assets/ios-weekly.png) -老司机 iOS 周报,只为你呈现有价值的信息。 - -你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 - -## 新闻 - -新闻 - - -## 文章 - -### 🐎 [你的标签是什么?](https://github.com/SwiftOldDriver/iOS-Weekly/issues/722) - -每个人都会被打上标签,可能是正向的善于解决问题、Web 安全专家或者是擅长创新。也可能是负向的粗心、眼高手低。程序员不能一直埋头苦干,要适当建立起自己的标签,尤其对职场新人而言,好的标签会让你脱颖而出,更多的机会会垂青于你。 - - -### 🐢 [Swift for TensorFlow 官方教程](https://github.com/tensorflow/swift-tutorials/blob/master/iris/swift_tensorflow_tutorial.ipynb) - -Swift for TensorFlow 是今年的 TensorFlow 峰会上,Chris 团队发布的一项新的技术,旨在为 Swift 提供内置的、first class 的机器学习的能力。Swift for TensorFlow 使用一系列很有趣的技术来实现了同时具备可用性和性能,有兴趣的同学可以进一步了解。同时,Swift for TensorFlow 也提供了 jupyter kernal 得支持,使得可以使用 notebook 来写 swift。 - -机器学习入门教程最经典就是识别鸢尾花,iris detection。本篇教程就是 Swift for TensorFlow 版本的 iris detection,对 Swift 做机器学习感兴趣的筒子不要错过。 - -### 🐢 [镣铐之舞:美团安全工程师Black Hat USA演讲](https://juejin.im/post/5b9b178ce51d450e5d0aec26) - -这是一篇来自美团安全团队的分享。美团安全团队在今年的 Black Hat USA 上做了关于 App Store Malware Automatic Hunting System 的演讲分享。团队设计了一套可自动大规模获取应用样本的 Crawl 系统,通过使用基于树莓派的构建集群来实现沙盒自动分析系统,最终实现了自动化收集样本并对样本进行自动化安全分析的APT攻击捕获及分析系统。 - -这篇文章中很多概念对于不做安全或者对安全领域接触较少的同学来说比较难理解,但是不妨边搜索概念和知识点边读,可增加一些安全方面的基础概念知识。 - -## 设计 - -## 工具 - -第三方工具服务 - -## 代码 - -库,代码段,开源app - -## 书 - -可选 - -## 音视频 - -可选,音视频 - -## 内推 - -可选,内推招聘 - -## 关注我们 - -我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 - -![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) - -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 - -## 本期编辑 - -[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445) - -## 说明 - -🚧 表示需翻墙,🌟 表示编辑推荐 - -预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/#1.md b/Reports/2018/#1.md similarity index 100% rename from Reports/#1.md rename to Reports/2018/#1.md diff --git a/Reports/#10.md b/Reports/2018/#10.md similarity index 100% rename from Reports/#10.md rename to Reports/2018/#10.md diff --git a/Reports/#11.md b/Reports/2018/#11.md similarity index 100% rename from Reports/#11.md rename to Reports/2018/#11.md diff --git a/Reports/#12-2018.03.25.md b/Reports/2018/#12-2018.03.25.md similarity index 99% rename from Reports/#12-2018.03.25.md rename to Reports/2018/#12-2018.03.25.md index 1480ece1f..afbb254c0 100644 --- a/Reports/#12-2018.03.25.md +++ b/Reports/2018/#12-2018.03.25.md @@ -6,7 +6,7 @@ ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 diff --git a/Reports/#13-2018.03.31.md b/Reports/2018/#13-2018.03.31.md similarity index 99% rename from Reports/#13-2018.03.31.md rename to Reports/2018/#13-2018.03.31.md index 54f260a1f..39f1ca96a 100644 --- a/Reports/#13-2018.03.31.md +++ b/Reports/2018/#13-2018.03.31.md @@ -8,7 +8,7 @@ ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 diff --git a/Reports/#14-2018.04.09.md b/Reports/2018/#14-2018.04.09.md similarity index 99% rename from Reports/#14-2018.04.09.md rename to Reports/2018/#14-2018.04.09.md index 8e2ee276d..63944143b 100644 --- a/Reports/#14-2018.04.09.md +++ b/Reports/2018/#14-2018.04.09.md @@ -8,7 +8,7 @@ ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 diff --git a/Reports/#15-2018.04.16.md b/Reports/2018/#15-2018.04.16.md similarity index 99% rename from Reports/#15-2018.04.16.md rename to Reports/2018/#15-2018.04.16.md index 8f0f33a11..adf75200e 100644 --- a/Reports/#15-2018.04.16.md +++ b/Reports/2018/#15-2018.04.16.md @@ -110,7 +110,7 @@ alpha 版本发布了。其实关于公司的自动化也是老生常谈的问 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#16-2018.04.21.md b/Reports/2018/#16-2018.04.21.md similarity index 99% rename from Reports/#16-2018.04.21.md rename to Reports/2018/#16-2018.04.21.md index 44eff7cb2..caeb74ea7 100644 --- a/Reports/#16-2018.04.21.md +++ b/Reports/2018/#16-2018.04.21.md @@ -115,7 +115,7 @@ BTW,这是 Kickstarter 两位前任工程师,创办的网站 [Point Free](ht ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#17-2018.05.02.md b/Reports/2018/#17-2018.05.02.md similarity index 99% rename from Reports/#17-2018.05.02.md rename to Reports/2018/#17-2018.05.02.md index 30daa9372..02b1396f8 100644 --- a/Reports/#17-2018.05.02.md +++ b/Reports/2018/#17-2018.05.02.md @@ -120,7 +120,7 @@ App Builders Conference 是由来自欧洲各国的 Android 和 iOS 移动开发 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#18-2018.05.07.md b/Reports/2018/#18-2018.05.07.md similarity index 99% rename from Reports/#18-2018.05.07.md rename to Reports/2018/#18-2018.05.07.md index 646d443d2..a09585d21 100644 --- a/Reports/#18-2018.05.07.md +++ b/Reports/2018/#18-2018.05.07.md @@ -69,7 +69,7 @@ Lobe 可以让开发者不需要撰写任何代码,即可为应用程式加入 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#19-2018.05.14.md b/Reports/2018/#19-2018.05.14.md similarity index 99% rename from Reports/#19-2018.05.14.md rename to Reports/2018/#19-2018.05.14.md index 585d6a04e..a11027feb 100644 --- a/Reports/#19-2018.05.14.md +++ b/Reports/2018/#19-2018.05.14.md @@ -88,7 +88,7 @@ Swift 4 的新功能 Codable 可以自动生成解析 JSON 的构造器,但这 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#2.md b/Reports/2018/#2.md similarity index 100% rename from Reports/#2.md rename to Reports/2018/#2.md diff --git a/Reports/#20-2018.05.21.md b/Reports/2018/#20-2018.05.21.md similarity index 99% rename from Reports/#20-2018.05.21.md rename to Reports/2018/#20-2018.05.21.md index 28e430a32..26edfe6c9 100644 --- a/Reports/#20-2018.05.21.md +++ b/Reports/2018/#20-2018.05.21.md @@ -99,7 +99,7 @@ Google I/O 大会推出了谷歌的全新移动端机器学习框架 MLKit,可 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#21-2018.05.28.md b/Reports/2018/#21-2018.05.28.md similarity index 99% rename from Reports/#21-2018.05.28.md rename to Reports/2018/#21-2018.05.28.md index 898d0bfd0..c52f2da9d 100644 --- a/Reports/#21-2018.05.28.md +++ b/Reports/2018/#21-2018.05.28.md @@ -75,7 +75,7 @@ Ray Wenderlich 的新书《ARKit by Tutorials》,在这本书里会教你如 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#22-2018.06.04.md b/Reports/2018/#22-2018.06.04.md similarity index 99% rename from Reports/#22-2018.06.04.md rename to Reports/2018/#22-2018.06.04.md index 2a93c6f01..745567d45 100644 --- a/Reports/#22-2018.06.04.md +++ b/Reports/2018/#22-2018.06.04.md @@ -163,7 +163,7 @@ macOS 平台上的 Unofficial WWDC app for macOS 这款第三方 WWDC 应用更 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#23-2018.06.18.md b/Reports/2018/#23-2018.06.18.md similarity index 99% rename from Reports/#23-2018.06.18.md rename to Reports/2018/#23-2018.06.18.md index 2fbdd33f8..9abaa7a76 100644 --- a/Reports/#23-2018.06.18.md +++ b/Reports/2018/#23-2018.06.18.md @@ -135,7 +135,7 @@ Facebook 出品,一个可扩展的移动应用调试工具,同时支持 iOS ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#24-2018.06.25.md b/Reports/2018/#24-2018.06.25.md similarity index 99% rename from Reports/#24-2018.06.25.md rename to Reports/2018/#24-2018.06.25.md index c4fd8181b..1fb9c7729 100644 --- a/Reports/#24-2018.06.25.md +++ b/Reports/2018/#24-2018.06.25.md @@ -134,7 +134,7 @@ StyledTextKit 是一款支持后台渲染和 LRU 缓存的富文本框架。在 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#25-2018.07.02.md b/Reports/2018/#25-2018.07.02.md similarity index 99% rename from Reports/#25-2018.07.02.md rename to Reports/2018/#25-2018.07.02.md index 5435f92fe..8d4ffffa7 100644 --- a/Reports/#25-2018.07.02.md +++ b/Reports/2018/#25-2018.07.02.md @@ -161,7 +161,7 @@ Ole Begemann 大神出品的 What's New in Swift 系列,使用 Playground 为 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#26-2018.07.09.md b/Reports/2018/#26-2018.07.09.md similarity index 99% rename from Reports/#26-2018.07.09.md rename to Reports/2018/#26-2018.07.09.md index 0d3050688..92c6a439e 100644 --- a/Reports/#26-2018.07.09.md +++ b/Reports/2018/#26-2018.07.09.md @@ -225,7 +225,7 @@ Bartinter 是一个状态栏外观管理器,根据状态栏的背景内容来 我们开通了公众号【OldDriverWeekly】,每期发布时公众号会推送消息,欢迎关注。 -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#27-2018.07.16.md b/Reports/2018/#27-2018.07.16.md similarity index 99% rename from Reports/#27-2018.07.16.md rename to Reports/2018/#27-2018.07.16.md index 33713dafc..deb5d2c80 100644 --- a/Reports/#27-2018.07.16.md +++ b/Reports/2018/#27-2018.07.16.md @@ -166,7 +166,7 @@ GPUImage 的作者实在是太高产了。GPUImage3 的 shader 处理部分完 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#28-2018.07.23.md b/Reports/2018/#28-2018.07.23.md similarity index 99% rename from Reports/#28-2018.07.23.md rename to Reports/2018/#28-2018.07.23.md index 6a81d4a86..0817a895c 100644 --- a/Reports/#28-2018.07.23.md +++ b/Reports/2018/#28-2018.07.23.md @@ -127,7 +127,7 @@ Twitter Network Layer (TNL) 是 Twitter 开源的一套基于 NSURLSession 的 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#29-2018.07.30.md b/Reports/2018/#29-2018.07.30.md similarity index 98% rename from Reports/#29-2018.07.30.md rename to Reports/2018/#29-2018.07.30.md index 992da7557..d426ccd42 100644 --- a/Reports/#29-2018.07.30.md +++ b/Reports/2018/#29-2018.07.30.md @@ -68,7 +68,7 @@ Mattt 重启了 NSHipster.cn 之后,更新了一篇关于 WKWebView 的旧文 ## 代码 -### [DBDebugToolkit](https://github.com/dbukowski/DBDebugToolkit) | [Wormholy](https://github.com/pmusolino/Wormholy) | [CocoaDebug](https://github.com/CocoaDebug/CocoaDebug) | [GodEye](https://github.com/zixun/GodEye) +### [DBDebugToolkit](https://github.com/dbukowski/DBDebugToolkit) | [Wormholy](https://github.com/pmusolino/Wormholy) | [GodEye](https://github.com/zixun/GodEye) 最早看到监控或是 Debug 类 SDK 完整功能的实现是子循的 Godeye ,最近似乎此类 SDK 又重新被大家关注起来了。 @@ -111,7 +111,7 @@ Appdevcon 是由 App 开发者组织,面向 App 开发者的技术大会,它 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#3.md b/Reports/2018/#3.md similarity index 100% rename from Reports/#3.md rename to Reports/2018/#3.md diff --git a/Reports/#30-2018.08.06.md b/Reports/2018/#30-2018.08.06.md similarity index 99% rename from Reports/#30-2018.08.06.md rename to Reports/2018/#30-2018.08.06.md index d82f38fdc..4b2bcb2dc 100644 --- a/Reports/#30-2018.08.06.md +++ b/Reports/2018/#30-2018.08.06.md @@ -101,7 +101,7 @@ ADDC 是 2018 年 7 月 4 日至 6 日在西班牙巴塞罗那举办的 App 设 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#31-2018.08.13.md b/Reports/2018/#31-2018.08.13.md similarity index 99% rename from Reports/#31-2018.08.13.md rename to Reports/2018/#31-2018.08.13.md index f2e436fa6..d48d18e82 100644 --- a/Reports/#31-2018.08.13.md +++ b/Reports/2018/#31-2018.08.13.md @@ -115,7 +115,7 @@ Knil 是一款帮助你测试和验证 Universal link 是否有效的工具。 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#32-2018.08.20.md b/Reports/2018/#32-2018.08.20.md similarity index 99% rename from Reports/#32-2018.08.20.md rename to Reports/2018/#32-2018.08.20.md index 106bbdfc1..6dbb58826 100644 --- a/Reports/#32-2018.08.20.md +++ b/Reports/2018/#32-2018.08.20.md @@ -103,7 +103,7 @@ Swift Codable 优化了解析 JSON 的体验。但是如果有一个属性的解 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#33-2018.08.27.md b/Reports/2018/#33-2018.08.27.md similarity index 99% rename from Reports/#33-2018.08.27.md rename to Reports/2018/#33-2018.08.27.md index 9e079e182..54778e68b 100644 --- a/Reports/#33-2018.08.27.md +++ b/Reports/2018/#33-2018.08.27.md @@ -128,7 +128,7 @@ zip(with: User.init)( ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#34-2018.09.03.md b/Reports/2018/#34-2018.09.03.md similarity index 99% rename from Reports/#34-2018.09.03.md rename to Reports/2018/#34-2018.09.03.md index 086f789ad..6609a96c4 100644 --- a/Reports/#34-2018.09.03.md +++ b/Reports/2018/#34-2018.09.03.md @@ -145,7 +145,7 @@ Xcode 10 快要发布正式版本了,所以有必要了解一下新的改动 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/#35-2018.09.10.md b/Reports/2018/#35-2018.09.10.md similarity index 99% rename from Reports/#35-2018.09.10.md rename to Reports/2018/#35-2018.09.10.md index c35182229..48046c7fd 100644 --- a/Reports/#35-2018.09.10.md +++ b/Reports/2018/#35-2018.09.10.md @@ -159,7 +159,7 @@ Docker用类似git的方式管理了我们对容器的修改,这也就意味 ![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) -同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/wiki.atom 。 +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 ## 本期编辑 diff --git a/Reports/2018/#36-2018.09.17.md b/Reports/2018/#36-2018.09.17.md new file mode 100644 index 000000000..f6b1e50d3 --- /dev/null +++ b/Reports/2018/#36-2018.09.17.md @@ -0,0 +1,169 @@ +# 老司机 iOS 周报 #36 | 2018-09-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [DCloud 发布又一个跨端开发框架 uni-app](https://mp.weixin.qq.com/s/oujjGXFaK4qc44KWuj0zXw) + +随着微信、支付宝、百度陆续发布小程序,手机厂商联盟发布快应用,移动互联网快速向以 js 为核心的动态 App 发展。手机硬件性能日益提升,动态App体验也越来越好。一方面前端工程师迎来历史性的机遇,另一方面又发现开发如此多版本让开发者苦不堪言。 + +DCloud 大力投入资源为开发者打造动态 App 时代的最佳解决方案:**uni-app**。开发者使用vue技术,开发一次,可以同时生成 iOS、Android、微信小程序。接下来 uni-app 还将覆盖到 H5、其他厂商小程序及快应用。 + +### [提交 app 适配 iOS 12,watchOS 5, and tvOS 12](https://developer.apple.com/news/?id=09122018c) + +现在,可以使用 Xcode10 GM 版本构建您的应用,并对 iOS 12, watchOS 5, and tvOS 12的最新版本进行测试。从2019年3月开始,苹果会要求所有 iPhone 的应用更新都要使用 iOS12 SDK,以支持 iPhone XS Max;而手表的应用更新需要使用 watchOS 5 SDK 以支持 Apple Watch Series 4. + +## 文章 + +### 🌟 🐎 [老司机推荐书单](https://xiaozhuanlan.com/topic/6134790258) + +周报编辑们根据各自喜好推荐给程序员的书单。每一本被推荐的书都有它的独到之处,按照自己的兴趣挑几本去买来看看吧。 + +### 🐎 [你的标签是什么?](https://github.com/SwiftOldDriver/iOS-Weekly/issues/722) + +每个人都会被打上标签,可能是正向的善于解决问题、Web 安全专家或者是擅长创新。也可能是负向的粗心、眼高手低。程序员不能一直埋头苦干,要适当建立起自己的标签,尤其对职场新人而言,好的标签会让你脱颖而出,更多的机会会垂青于你。 + +### 🐢 [Swift for TensorFlow 官方教程](https://github.com/tensorflow/swift-tutorials/blob/master/iris/swift_tensorflow_tutorial.ipynb) + +Swift for TensorFlow 是今年的 TensorFlow 峰会上,Chris 团队发布的一项新的技术,旨在为 Swift 提供内置的、first class 的机器学习的能力。Swift for TensorFlow 使用一系列很有趣的技术来实现了同时具备可用性和性能,有兴趣的同学可以进一步了解。同时,Swift for TensorFlow 也提供了 jupyter kernal 得支持,使得可以使用 notebook 来写 swift。 + +机器学习入门教程最经典就是识别鸢尾花,iris detection。本篇教程就是 Swift for TensorFlow 版本的 iris detection,对 Swift 做机器学习感兴趣的筒子不要错过。 + +### 🐢 [镣铐之舞:美团安全工程师 Black Hat USA 演讲](https://juejin.im/post/5b9b178ce51d450e5d0aec26) + +这是一篇来自美团安全团队的分享。美团安全团队在今年的 Black Hat USA 上做了关于 App Store Malware Automatic Hunting System 的演讲分享。团队设计了一套可自动大规模获取应用样本的 Crawl 系统,通过使用基于树莓派的构建集群来实现沙盒自动分析系统,最终实现了自动化收集样本并对样本进行自动化安全分析的APT攻击捕获及分析系统。 + +这篇文章中很多概念对于不做安全或者对安全领域接触较少的同学来说比较难理解,但是不妨边搜索概念和知识点边读,可增加一些安全方面的基础概念知识。 + +### 🐕 [How Apps Adapt to the Series 4 Apple Watch Screen Sizes](https://medium.com/@hacknicity/how-apps-adapt-to-the-series-4-apple-watch-screen-sizes-2be49f8ae8f5) + +9 月 21 日新一代 Apple Watch Series 4 就要开始发货了,包含 40、44 毫米两个新屏幕尺寸,文章介绍了 watchOS App 如何适配新的设备:对于 watchOS 4 的 App, watchOS 5 默认兼容,只是还是以老的 38、44 毫米显示,以 Xcode 10 编译后,再辅以适当的调整,就能在不同屏幕尺寸上以实际大小显示。 + +### 🐕 [JSPatch 的 dealloc 忧伤](http://lingyuncxb.com/2018/01/21/JSPatch%E7%9A%84dealloc%E5%BF%A7%E4%BC%A4/) + +有挖过 JSPatch 源码的同学应该都会留意到,它为了让 JS 能够更安全合理地 Hook `dealloc`,做了以下的处理: + +1. 调用 dealloc 时 self 不包装成 `weakObject`,而是包装成 `assignObject` 传给 JS,解决了 over-released crash 问题; +2. 调用 `ORIGdealloc` 时因为 `selectorName` 改变,ARC 不认这是 `dealloc` 方法,所以需要欺骗 ARC,解决了对象正常释放的问题; + +这样的处理可谓巧妙,但这位细心的读者却发现了另一个遗留问题 - JS 的 `dealloc` 方法和 `OC` 里面的 `dealloc` 方法会同时被调用。于是他针对这个问题进行了深挖,从 OC 对象的 `dealloc` 原理开始,一步步尝试,最终仅使用几行代码便解决了这个遗留问题。目前该问题已经反馈给 Bang,相信很快便会发版解决。值得一提的是,这是小编看到的第一篇从解决实际问题角度出发,来解读 Runtime 中 `dealloc` 原理的好文,好奇作者解决方案的同学快点开文章链接阅读吧。 + +### 🐕 [iOS 中的多进程,下拉关闭系统的词典界面(Tweak 开发)](http://iosre.com/t/ios-tweak/12806) + +本文作者就下拉关闭系统的词典界面需求的实现过程进行了记录,从发现 `_UIRemoteViewController` 到找目标进程,再到 hook delegate 实现功能。整个过程都比较常规,但是 iOS 多进程这块确实是个冷门,资料也很少,iOS 开发一般是接触不到这块知识的,就算知道,也很难在实际开发中得到运用。不过当作扩展知识了解一下还是很有意思的,特别是文中提到的 Ole Begemann 写的那几篇 [关于 Remote View Controllers 的博文](https://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/)。 + +### 🐕 [关于 iOS 私有 API 扫描](https://www.jianshu.com/p/24026b30975f) + +作者就网易游戏开源的 iOS private api checker 项目,一一阐述了如何构建私有 API 库、该项目又是如何识别 APP 中的私有 API、该方案存在哪些问题。并提出了行之有效的改进建议。 +构建私有 API 库需要先构建 documented API 数据集,而新版 Xcode 的 API 文档不再使用 docSet 这种格式。[这篇文章](https://www.jianshu.com/p/999f4cc7e1fc)分享了 Xcode 9 在 Mac 上存储 documented API 的细节。 + +> 推荐人:[balloonsys](https://github.com/balloonsys) + +### 🐕 [Preparing Your App For iOS 12 Notifications](https://www.smashingmagazine.com/2018/09/preparing-your-app-for-ios-12-notifications/) + +iOS 12 带来了一些新的与用户通知相关的功能,如新的授权选项、动态的快速操作与在通知内进行的用户交互。了解并适配这些新特性以助于改进应用通知在 iOS 12 中的体验。 + +> 推荐人:[RocZhang9673](https://github.com/RocZhang9673) + +### 🐢 [一次高效的依赖注入](https://juejin.im/post/5b960cbfe51d450e4f388296) + +本文分析了 iOS 目前依赖注入的几个开源库。 并选择 EXTConcreteProtocol 进行了详细的分析,给出了实际项目中遇到的问题与解决方案。 + +### 🐎 [DRIVING CARS WITH ARKIT](https://martinmitrevski.com/2018/09/13/driving-cars-with-arkit/) + +这篇小短文会教你如何利用 ARKit 制作一款增强现实的奥迪 Q7 驾驶 app。利用平面检测模拟真实的驾驶效果,而不至于漂浮在半空中。 + +### 🐎 [利用 ARkit,eBay 用头部运动控制 iPhone X 屏幕进行购物](https://mp.weixin.qq.com/s/me_uVJYpFsSCT0Yxp7uSMw) + +电商巨头 eBay 日前揭晓了一项新技术 HeadGaze,利用了苹果 ARKit 平台和 iPhone X 的原深感前置摄像头(支持 Face ID)来支持残障人士通过头部运动来与 iPhone X 屏幕进行交互,并已经将底层技术开源托管至 GitHub。简而言之,HeadGaze 会通过虚拟触针紧跟用户的头部运动,把游标移向滚轴或其他交互式按钮。系统可检测游标停留在一个位置的时间,并在达到一定阀值时予以触发,实现激活点击操作。 + +### 🐕 [利用柯里化去除重复代码](https://iweiyun.github.io/2018/09/04/curry-cleancode/) + +柯里化是把接受多个参数的函数,变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数,的函数式编程方式,本文通过一个实际案例尝试了使用柯里化来完成对代码的精简,对于理解柯里化是很好的案例。 + +### 🐢 [JSPatch VS Aspects](http://lingyuncxb.com/2018/01/24/iOS%E6%B6%88%E6%81%AF%E8%BD%AC%E5%8F%91%E7%9A%84%E6%AD%A3%E7%A1%AEHook%E5%A7%BF%E5%8A%BF/) + +JSPatch 应该已经无需过多介绍。Aspects 是 iOS 上的一个轻量级面向切面编程(AOP)的库。本文先后介绍了 JSPatch 和 Aspects 如何利用 forwardInvocation 将实现自己的功能,同时介绍了 iOS 上消息转发机制的 Hook 原理。而Hook 是有风险的,那么项目中同时接入这两个库会有什么样的问题呢?文章作者通过实践列出了可能遇到的一些问题。现实中,一个工程往往会接入更多的一些三方库,以及自己的一些功能也可能使用 Hook,所以,在对 Hook 的处理上要格外小心,关于如何正确使用这一点,作者也给出了自己的答案。 + +## 工具 + +### [pointfreeco/swift-html](https://github.com/pointfreeco/swift-html) + +swift-html 是一款 server side swift 的工具,能够帮助swift使用者在开发服务器后端的时候方便快捷的生成html,从而进行后端渲染页面,并且类型安全,可扩展性强。 + +## 代码 + +### [VideoFlint/Cabbage](https://github.com/VideoFlint/Cabbage) + +Cabbage 是一个基于 AVFoundation 封装,易于使用和方便扩展的视频编辑框架,能够缩短开发者在短视频功能上的开发时间。 + +> 推荐人:[vitoziv](https://github.com/vitoziv) + +## 专栏 + +### 🌟 [WWDC18 内参](https://xiaozhuanlan.com/wwdc18) + +6 月的时候我们联合一些开发者翻译了一些 WWDC 18 的 session([老司机x知识小集xSwiftGG WWDC 18 专题目录](https://juejin.im/post/5b1d284df265da6e572b3d87)),当时为了尽快呈现一些内容给大家,也只是挑选了一部分 session 讲解。于是剩下的几篇 session 的内容就留到了这个专栏上发布。 + +如果没有时间看 session 的同学强烈推荐购买支持一下作者们了。 + +## 音视频 + +[提交镜像到 DockerHub](https://boxueio.com/series/docker-based-vapor-env/episode/424) +Docker 提供了一种和 git 类似的机制来管理我们对容器的修改,因此我们也可以利用这种机制来提交和分享镜像。这段视频里,我们就来分享 DockerHub 的用法。 + +[构建 Vapor 开发环境 1](https://boxueio.com/series/docker-based-vapor-env/episode/425) +这段视频里,我们和大家分享如何让 Nginx 容器作为一个反向代理,把需要动态请求的部分,转发给 Vapor。 + +[构建 Vapor 开发环境 2](https://boxueio.com/series/docker-based-vapor-env/episode/425) +Docker 提供了一个 link 的功能,我们可以使用它把之前创建的 Nginx 和 Vapor 容器连接起来,这样,就有一个最原始的 Vapor 开发环境了。 + +[关于 iPhone Xs, iPhone Xs Max, iPhone Xr, 和 Apple Watch Series 4 的适配](https://developer.apple.com/videos/) +苹果官方提供了新的视频,用于指导开发者如何适配新的手机和新的watch,Apple Watch Series 4 堪称超级传感器的集合,因此对于开发者来说需要适配的东西还是蛮多的,建议大家在9月份发布新版app之前都先用`Xcode10-GM`版过一下模拟器,看看有没有明显的问题。 + +[Building Apps for iPhone XS, iPhone XS Max, and iPhone XR](https://developer.apple.com/videos/play/tech-talks/207/) +[Designing for Apple Watch Series 4](https://developer.apple.com/videos/play/tech-talks/802/) +[Developing Complications for Apple Watch Series 4](https://developer.apple.com/videos/play/tech-talks/208/) +P.S. 我们团队发现如果用 `Xcode10-GM` 打包 IPA,里面的 Assets.car 文件,包含了重复的 png 图片信息,而之前 `Xcode9.4.1` 却没有此问题。`Xcode10-GM` 版的这个 bug,会导致 iOS9.0 ~ iOS9.2 的机子在使用 Assets.xcassets 里面的图片后,发生随机 Crash。 +解决方法有二:要不不使用 Assets.xcassets 而改用 Bundle 取图片(对旧项目改动较大),要不就将 APP 支持的最低版本升级到 iOS9.2 以上。目前已将此 bug 报告给苹果,希望在 `Xcdoe 10 正式版`中得到改善。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [杭州-丁香园招 iOS 开发](https://app.dxy.cn):招中高级 iOS 开发,要求有 Swift 开发经验,简历请邮件至 gp@dxy.cn。 + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱) 或这微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#37-2018.09.24.md b/Reports/2018/#37-2018.09.24.md new file mode 100644 index 000000000..623771522 --- /dev/null +++ b/Reports/2018/#37-2018.09.24.md @@ -0,0 +1,182 @@ +# 老司机 iOS 周报 #37 | 2018-09-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 4.2 正式发布](https://swift.org/blog/swift-4-2-released/) + +Swift 4.2 正式发布。我们可以通过 WWDC 2018 的 Session [What’s New in Swift ](https://developer.apple.com/videos/play/wwdc2018/401/) 快速了解新特性。Ole Begemann 总结的 [Playground](https://oleb.net/blog/2018/06/whats-new-in-swift-4-2-playground/) 也方便我们上手试验把玩。 + +### [一本走心的 JS-Native 交互电子书](https://juejin.im/post/5ba03ea25188255c3f6bcc8c) + +知识小集团队 @lefe_x @halohily 同学潜心著作的一本学习 JS-Native 交互的电子书,这个专题旨在能够帮助更多的同学掌握 Hybrid 在 iOS 中的应用。整个专题总共分为四章,强烈推荐给大家 + +第一章 主要介绍 JS 语法,为后续的章节做好铺垫,不过建议读者系统地学习一下 JS,对整个专题的理解有很大的帮助; + +第二章 介绍了 JavaScriptCore 这个框架与 OC 间的通信; + +第三章 介绍了 WKWebView,以及一些调试技巧; + +第四章 主要对前面讲到的知识进行实践,其中 JSPatch 部分理解起来比较吃力,如果读者想深挖 JSPatch可以结合源码一起看本章内容,理解起来更透彻。 + +### [微信开源基于 mmap 内存映射的 key-value 组件 MMKV](https://github.com/Tencent/MMKV) + +微信团队于最近宣布开源 MMKV,这是一个基于 mmap 内存映射的 key-value 组件。而这个组件在微信内部已经使用了 3 年,稳定性上得到了验证。而在性能上,也比传统的 NSUserDefaults 等方案更加出色。并且也移植到了 Android 平台,在这次一起开源。 + + +## 专栏 + +### 🐢 [Swift for TensorFlow, First Class Machine Learning in Swift](https://xiaozhuanlan.com/topic/6123854970) + +Swift for TensorFlow 是 Chris 到 Google 之后发布的新项目,目的在为 Swift 提供内建的机器学习能力。整个技术用了非常巧妙的方式,在编译器层面实现了对 TensorFlow 的支持,非常创新。并且从项目的设计思路也能够感受到 Chris 对 Swift 这门语言的一些想法,Swift 绝不简单是客户端或者服务端编程语言,而是一个全新的编程平台,开放优雅的架构使其能够无缝和其他语言进行交互,而且是在类型安全的前提下。 + +我在 2018@Swift 大会上分享了一这项技术的一些原理和应用,这篇文章是分享的文字版。 + +Swift for TensorFlow + + + +### 🐢 [[译]SE-0206 Hashable 加强](https://xiaozhuanlan.com/topic/1470362958) + +Swift 4.2 其中一个比较大的改动就是 `Hashable` 协议,对这么一个基础的协议做改动,即使在一年出一门新语言的 Swift 大家族里也几乎是第一次🤷‍♂️,看到这篇提案的时候我就产生了这么几个疑问: + +1. 为什么要用 `inout` 这种大家很陌生的概念? +2. Hasher 好像是哈希函数的抽象,那为什么它不是一个泛型,而是结构体?那应该怎么去自定义哈希函数? +3. 而且为什么要去改动这么一个基础协议?之前的协议有哪些不足? + +在查阅了一些资料之后,我发现国外对于这件事情的讨论其实也不多,最好的资料还是 Swift-Evolution 的提案,所以特意翻译出来,希望能够帮助大家更好地了解这一次基础协议改动的来龙去脉。 + +## 文章 + +### 🐎 [这次 swift 大会分享准备的幻灯片和 demo](https://www.jianshu.com/p/57331c22d788) +这次 2018@Swift 大会,戴铭的幻灯片惊艳全场,把本身就比较晦涩的编译原理相关的知识,用美轮美奂的漫画体现出来,给人一种耳目一新的感觉。这篇文章讲了一些分享的背景还列出了全部幻灯片的截图,错过大会的同学不容再错过文章。 + +个人最喜欢的是 AST 那几 p,你们呢? + +### 🐎 [Facebook 工作体验之绩效考核](https://mp.weixin.qq.com/s/eJ1ue5l5f0W1jvZ4unJJkA) + +本文讨论了 Facebook 和国内公司的业绩考核之间的异同。讲来不同的考核制度本身并没有什么好坏之分,更多的还是在不同环境下取得对公司和员工最有利的情况。 + +Peak 老师自加入 Facebook 后贡献了好多篇国内和湾区的工作生活比较的文章,对于好奇湾区这边(不代表美国其他地区)码农的工作生活状态的同学,值得一读。 + +### 🐎 [员工之间可不可以讨论工资收入?](http://mrpeak.cn/blog/salary-share/) + +Peak 大神抛出了一个比较有意思和值得讨论的问题,员工之间可不可以讨论工资收入?Peak 大神还贴出了阿里和Facebook在这个问题上的态度对比并附上了自己的见解。不知你们对这个问题又有什么看法呢? + +### 🐢 [深入浅出 Swift Numerics](https://github.com/xwu/xwu-swift-numerics) + +Swift 社区开发者 [Xiaodi Wu](https://github.com/xwu) 写了一系列文章,介绍了 Swift 中数字类型背后的设计思想(如 Int、Float 等)以及许多 `Numeric Protocols` 间的关系,建议有 Swift 开发经验的开发者们精读。 + +### 🐕 [FastImageCache 原理](https://mp.weixin.qq.com/s/5rgQjokaUduSuiPKbJIudw) + +对于大多数 app 来说,图片存取/编解码都是绕不过去的话题,而这通常会占用相当一部分的计算/存储资源,值得大家反复研究。本文作者分析了 path 维护的 FastImageCache,从 mmap、decoding 和 byte alignment 几个角度来分析其对图片加载性能的优化。 + +### 🐎 [iOS 12 JS 数组 Bug,可能带来互联网风波,附解决方案](https://juejin.im/post/5ba1c129e51d450e6237da01) + +iOS 12 发布了,但很多前端同学却发现 iOS 12 中 WebView 的一个大 BUG ,对数组进行 reverse 操作会导致 webview 将该数组的最后形态进行缓存,关闭页面退出页面都不会清掉,在 StackOverFlow 上也有人探讨,好在博主给了一个解决方案,快来看看吧。 + +### 🐎 [Capturing Self with Swift 4.2](https://benscheirman.com/2018/09/capturing-self-with-swift-4-2) + +Swift 4.2 中 `self` 在 optional binding 中不再作为保留关键字。现在可以忘记 strongSelf 了,直接这样写吧: + +```swift +guard let self = self else { return } +``` + +### 🐕 [Adding Padding To A Stack View](https://useyourloaf.com/blog/adding-padding-to-a-stack-view/) + +UIStackView 是苹果在 iOS9 中引入的一个新的视图类。Stack View 可以高效的排列一行或者一列视图。在使用中,我们的子 View 很可能是需要动态调整高度的,这时候,我们既可以通过 Interface Builder,也可以通过代码在需要调整高度时候重新布局。但是,实际上,我们可以更简单高效的解决这个问题,就是使用 Readable Content Guides。 + +### 🐎 [Async/await in Swift unit tests](https://www.swiftbysundell.com/posts/asyncawait-in-swift-unit-tests) + +Async/await 一直是 Swift 开发者期待的功能,但是由于在写单元测试的时候需要一些异步测试场景,所以 sundell 通过对 Futures & Promises 的进一步改造实现了一个 await 函数 的作为 Swift 还没支持 Async/await 的折中方案。整个实现思路还是很通俗易懂的。 + +### 🐕 [What I Learned Making 5 ARKit Prototypes](https://medium.com/@nathangitter/what-i-learned-making-five-arkit-prototypes-7a30c0cd3956) + +5 个基于 ARKit2 的原型,用来提升购物体验、给报纸添加视频、观看绘画时增强关键人物,使涂鸦墙能够观看历史,给穿戴设备做屏幕延展。 AR 有非常大的潜力,这 5 个原型也许能激发你的灵感。 + +### 🐕 [2018 Google 开发者大会现场纪要](https://juejin.im/post/5ba5b94ae51d4527ed0023dc) + +Google 今年在上海的 GDD (Google Developer Days) 上周末圆满结束,算是一次做的非常成功的国际公司在国内搞的 Developer 相关的活动。如果你没有去现场参加的话,赶紧跟着去参加了的开发者们去看看 GDD 上的亮点吧。 + +### 🐕 [What’s new in Swift 5.0](https://www.hackingwithswift.com/articles/126/whats-new-in-swift-5-0) + +Swift 的下一个版本是5.0,首要目标就是让 ABI 稳定(存疑,现在还有好几个[issue](https://swift.org/abi-stability/)没动静),另外还有一些比较重要的特性,通过[预设置好的playground](https://github.com/twostraws/whats-new-in-swift-5-0)可以体验这些特性 +* Raw strings:可以将字符串的转义操作变得更好用了 +* Handling future enum cases:switch 操作中,default 的处理通常意味着一些未能处理得很好的逻辑,现在可以在 default 前加上`@unknown`标记,让编译器在编译时产生一个 warning +* Checking for integer multiples:增加了`isMultiple(of:)`函数,相当于之前的模除操作,譬如`if rowNumber % 2 == 0`跟`rowNumber.isMultiple(of: 2)`等价 +* Counting matching items in a sequence:数组的 count 函数也可以加上一些 filter 操作了 +* Transforming and unwrapping dictionary values with compactMapValues():对于 Dictionary 对象增加了`compactMapValues()`函数,将`compactMap()`和`mapValues()`结合起来,变得更加方便 + +### 🐢 [i​OS 12](https://nshipster.com/ios-12/) + +NSHipster 出品,从 API 角度解析 iOS 12 中值得关注的改进。主要包括了以下几部分内容:为重要数据请求提高网络优先级、后台读取 NFC 标签、使用电话号码和电子邮件地址来匹配通讯录、在航空中更新位置、识别平放的设备、输入框中的自动填充新密码和短信验证码。十分推荐阅读。 + +### 🐕 [操作系统是如何管理内存的](http://limboy.me/tech/2018/09/14/os-memory.html) +作者针对[Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/)这本书中关于内存管理这块的做了一个小结,介绍了操作系统在处理内存管理中遇到的问题和演化方案,帮助读者增加内存管理方面的知识 +* 如果是单进程模型,很简单,一块内存空间是内核的,一块内存空间是进程的 +* 如果是多进程模型,考虑一下上下文切换问题,就需要有 base 和 bounds 来表示如何切换 +* 考虑多进程间使用内存的空间利用效率问题,出现了分段的解决方案 +* 为了解决分段方案带来的内存碎片问题,出现了分页的解决方案 + +## 工具 + +### [Xcode 10 小技巧: NSData 的 popover 里可以直接下载内容](https://twitter.com/weichsel/status/1042794107259764736) + +Xcode 在 debug 的时候,能够直接查看 `UIImage`、`NSString` 等类型数据,但是一直不支持 `NSData` 的查看。现在 Xcode 10 已经提供了这么一个功能,可以允许你通过预览小窗导出当前正在 debug 的 `NSData` 对象到本地,再进行查看。 + +## 代码 + +### [2018 中国 Swift 开发者大会源文件,包括 pdf 和源工程文件](https://github.com/atConf/atswift-2018-resources) + +@Swift CON 2018 - 一场面向 Swift 开发者的知识盛宴,已于 09 月 15 日在北京顺利举行。由于各种原因未能去参加的各位同行,现如今可以通过这个开发者大会源文件了解到此次大会的主要内容。 + +### [Awesome README](https://github.com/matiassingers/awesome-readme) + +好的 README 包括但不限于配图、屏幕截图、GIF、文本排版等。这是一个优秀 README 列表,以及一些帮助你写好 README 的工具。 + + +## 设计 + +### [Designing and Developing for Siri Shortcuts](http://blog.maxrudberg.com/post/178153402778/designing-and-developing-for-siri-shortcuts) + +作者从代码和 UI/UX 设计角度展示了如何为现有的 app 加入 Siri Shortcuts 功能,包括增加 App Store 截屏、启动屏通知并且在设置界面里着重展示。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱) 或这微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#38-2018.10.08.md b/Reports/2018/#38-2018.10.08.md new file mode 100644 index 000000000..954fb9476 --- /dev/null +++ b/Reports/2018/#38-2018.10.08.md @@ -0,0 +1,184 @@ +# 老司机 iOS 周报 #38 | 2018-10-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight 开始支持邀请链接](https://developer.apple.com/news/?id=09262018a) + +在今年的 WWDC 中,苹果就已经透露将在下半年推出 TestFlight 的公开链接邀请功能,现在这个功能已经正式开放。 + +> 另外 [dustturtle](https://github.com/dustturtle) 也第一时间分享了自己的实践成果 - [千呼万唤始出来 - TestFlight public link 功能正式发布了!](https://juejin.im/post/5bac3ba7e51d450e531c9d2c)。 + +### [Apple’s use of Swift in iOS 12](https://blog.timac.org/2018/0924-state-of-swift-ios12/) + +iOS 中使用 swift 的地方在持续增加,在 iOS 12 中包含 swift 的库相比 iOS 11 增加了一倍。 + +### [Swift 5.0 Release Process](https://swift.org/blog/5-0-release-process/) + +Swift5.0 离我们越来越近了,了解一下最近的进展吧 +1. 二进制不向下兼容,容易理解,Swift 新版本就没有向下兼容过 +2. 必须强制迁移 Swift3.0 的代码,不然你只能使用 Swift4.2 来编译了 +3. 现在提供了 Swift5.0 的[尝鲜版](https://ci.swift.org/) +4. 预计2018年11月16日对于 Swift5.0 是一个很关键的时间结点(真的吗?) +5. 希望你们会喜欢 Swift5.0 的新编程思想(又变?) + +## 专栏 + +### [iOS 上修改私有方法的几种方式解析](https://xiaozhuanlan.com/topic/1278405369) + +iOS 开发中,或多或少都会有遇到修改私有方法的需求,这篇文章总结了目前我们能够使用的方式,并从面试官的角度推荐应聘者应该怎么回答这类开放性问题。 + +## 文章 + +### 🐢 [Mirror 的工作原理](https://swift.org/blog/how-mirror-works/) + +这篇文章主要介绍了 Mirror 的工作原理,Mirror 简单来说就是用来做类型反射的 API,可以在运行时里获取实例的类型信息,例如 Playground 里的变量数据预览就是基于这一套 API 来完成的。 + +文章主要分为两个部分,第一部分是元类型的抽象(类型的类型),运行时函数动态派发的实现原理,第二部分就是 enum / struct / class / tupe 四种元类型各自的实现。 + +通篇看完感觉其实 Mirror 的实现非常直截了当,因为 Swift 的泛型功能要求它必须有足够丰富完整的 Metadata,才能在运行时更好的描述泛型实例的存在,完成函数派发,属性存取和类型转换的工作。 + +在这么一个背景下,Mirror 的实现基本就是从已有 Metadata 里获取类型数据,然后展示出来,或者是通过 Metadata 定位成员变量的相对位置,然后进行存取操作。 + +### 🐢 [AR Face Tracking Tutorial for iOS: Getting Started](https://www.raywenderlich.com/5491-ar-face-tracking-tutorial-for-ios-getting-started) + +Ray Wenderlich 的又发新教程了。这次是教你如何用 TrueDepth Camera 来做 AR 面部追踪。 + +和往常一样,他家教程类文章会有非常详细的步骤和截图,带你一步一步的操作,非常适合对文章中涉及的知识领域不是很熟悉的同学们。 + +另外这篇文章也是免费教程的一部分,所以并不需要进行任何付费。 + +### 🐎 [Why #if DEBUG Conditional Should Be Avoided in Library Code](http://holko.pl/2018/09/24/compilation-directives-in-libraries/) + +文章作者分享了一次自己使用 Carthage 导入自己的库时遇到的坑,来说明了为什么在 SDK 的开发中尽量避免条件编译指令,因为你不知道使用你 SDK 的人的编译环境会有怎样的变数,文章很短,算是一次有趣的小分享。 + + +### 🐢 [[译] Metal 渲染管线教程](https://juejin.im/post/5b9dbd76e51d450e877f3780) + +Apple 在 2018 的 WWDC 上正式宣布 OpenGL ES 标记为 deprecated,推荐使用 Metal 来做 3D 渲染,很有勇气。在细致的了解 Metal 后,就能发现苹果的勇气不是没有原因的,Metal 几乎最大限度的利用了 iOS 的硬件特性来提升性能,是 iOS 的首要选择。 + +本篇文章的文风很像很多经典的 OpenGL 教程,从渲染的概念,流程讲起,并一步步教你如何画出第一个三维的物体,强烈推荐有兴趣的同学仔细阅读。 + +> 推荐人:[史前图腾](https://juejin.im/user/5a311af051882554bd510dd0) + +### 🐢 [beeshell:开源的 React Native 组件库](https://mp.weixin.qq.com/s/c1WId0Rr4m7hUOa2HDGnXg) + +文章介绍了美团所开发的基于 React Native 的组件库,提供了一系列基础 UI 组件,包括按钮、弹窗、表单、输入框等等,覆盖了 iOS 和安卓两端,并分析了一些设计理念。 + + +### 🐕 [从 FE 视角看大前端](https://zhuanlan.zhihu.com/p/45421800) + +大前端是现在比较流行的话题与方向,相信也有很多移动端的同学对这个方向有很浓厚的兴趣,而这篇文章的目标阅读群体刚好适合对前端 FE 感兴趣的 Native 开发同学, 聚焦在 PC 和 H5 浏览器层面。可以让你对前端开发有全景方式的了解, 以及引发大家的兴趣。很多 native 开发可能苦于前端众多的名词,众多的框架不知从何下手,这篇文章刚好适合你。 + +### 🐕 [UIField​Behavior](https://nshipster.com/uifieldbehavior/) + +文章以悬浮框为例,讲解了 iOS 物理引擎 UIKit Dynamics 中的 UIField​Behavior 的相关内容。首先描述了 Field Behaviors 是什么,接着讲解了 Spring Fields 怎么用,最后结合 Behaviors 的一些特性实现了一个适用于开发调试的悬浮框。 + +> 推荐人:[WXGBridgeQ](https://github.com/WXGBridgeQ) + +### 🐕 [巧妙实现 debugOnly 函数](https://kemchenj.github.io/2018-09-24/) + +作者在学习 Vapor 的源码看到一段不需要宏定义的 debugOnly 函数实现。代码如下: + +```Swift +func debugOnly(_ body: () -> Void) { + assert({ body(); return true }()) +} +``` + +对于大部分项目来说,这个功能看似没有什么用处,但是仔细考虑一下,对于一个可以被任何一个项目依赖的 SDK 来说,这个 debugOnly 实现可以说是很完美了。 + +### 🐢 [Bloom Filters and Swift 4.2](http://khanlou.com/2018/09/bloom-filters/) + +文中实现了 Bloom Filter,并使用了 Swift 4.2 中 Hasher 新特性来优化代码。 + +### 🐕 [驴妈妈客户端频道页模块化设计思路](https://juejin.im/post/5bad0632f265da0ab41e62fe) + +对于做偏运营类的应用开发,有一项很重要的技术需求就是能够做到对应用内容进行实时更新,而且是越灵活越好。本文就详细介绍了驴妈妈客户端团队在 SOLID 原则的指导下,重点围绕面向接口、数据驱动、模块隔离这三个点设计了适合自身业务场景的模块化框架。它既满足了缩短内容上线周期的需求,也为创建一个统一规范的业务组件库提供了思路和方向,同时框架的整体设计也是非常值得参考和学习的。 + +### 🐕 [INSIDE AUDIOKIT SYNTH ONE: A BRIEF TOUR FOR DEVELOPERS](https://audiokitpro.com/inside-audiokit-synth-one/) + +本文的大部分内容是作者在对 Synth One 应用添加 AUv3 扩展时的开发笔记。后来他为了分享自己捣鼓开源项目 [AudioKit](https://github.com/AudioKit/AudioKit) 和 [Synth One](https://github.com/AudioKit/AudioKitSynthOne) 的经历,就写了这篇文章,也希望借此帮助那些想要做类似 iOS 音乐合成器开发的人能够快速了解框架内部的设计。 + +### 🐎 [代码评审的不可能三角](https://juejin.im/post/5ba99fa35188255c8138f4d2) + +Code Review 是保证代码质量的重要手段之一,但许多研发团队中它常常由于各种原因并未得到真正的落地。为什么会这样呢?本文作者用一个非常简单的观点理解了这个现象,并据此给出一点优化的想法。希望本文的想法对同样被评审困扰的同学有帮助 :) + +### 🐕 [利用函数组合提升代码可维护性](https://iweiyun.github.io/2018/10/03/func-compose/) + +在平时的开发中,我们可能会遇到一些场景,开发起来,代码写的很繁琐,例如文中作者举的例子: + +```Swift +process1(_ param: String) -> String +process2(_ param: String) -> String +process3(_ param: String) -> String +process4(_ param: String) -> String +``` + +这种情况,如果直接采用函数式编程,可读性又不会太好。而为了重构让代码变得具有更好的可维护性,作者利用函数的组合来解决这个问题。除了上面函数签名致的例子,作者还提到了函数签名不一致,以及异步操作这两种情况的解决方案。 + +> 推荐人:[matthew](https://github.com/matthewyan) + +### 🐎 [MMKV 中的简单 LRU 缓存(LRUCache)](https://mp.weixin.qq.com/s/KbUHec1_sMiV1S5V-9QxlQ) + +本文简明地分析了开源库 [MMKV](https://github.com/Tencent/MMKV) 中 LRUCache 的实现。MMKV 中的 LRUCache 实现简单易懂,文章中的源代码也加上了注释,大家看一遍这篇文章就能明白具体的实现原理。 + +### 🐕 [Migrating to Unified Logging, Swift Edition](https://www.bignerdranch.com/blog/migrating-to-unified-logging-swift-edition/) + +本文介绍了一种更优雅的打log方式,使得开发人员不要再混乱地管理log代码 +1. 正确对待 OSLog,他本来就帮你分了 log 的等级 +2. Console.app 能够帮你更好地查看客户端的 log (如果你用的是 os_log 的话) +3. 尽量使用 os_log +4. 更多应该注意的细节 + + +## 代码 + +### [andreamazz/SubtleVolume](https://github.com/andreamazz/SubtleVolume) + +SubtleVolume 是一个音量条组件,也支持在 iPhone X(S/R) 的刘海上做文章,如果你的播放器需要一个自定义音量条,不妨看看它。 + +## 设计 + +### [一定要会的Sketch设计方法和工作流](https://boxueio.com/series/sketch-basics) + +泊学关于 Sketch 入门相关的视频课程。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#39-2018.10.15.md b/Reports/2018/#39-2018.10.15.md new file mode 100644 index 000000000..67086ba3f --- /dev/null +++ b/Reports/2018/#39-2018.10.15.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #39 | 2018-10-15 + +![ios-weekly](../assets/ios-weekly.png) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift in 2018](https://www.jetbrains.com/research/devecosystem-2018/swift-objc) + +JetBrains 针对 Swift 编程生态做了一个调查。结果显示只使用 Swift 的开发者占比 54%,混编的占 16%。83% 的 Swift 开发者在使用 4.0 或者以上的 Swift 版本。 + +### [仅 23 天,iOS 12 安装率超过 50% ](https://9to5mac.com/2018/10/06/ios-12-now-installed-on-50-of-devices-outpacing-ios-11/) + +iOS 12 推出仅 23 天装机量超过 50%,而 iOS 11 达到这个成绩用了超过一个月。相比 iOS 11 发布后的 bug 满天飞,iOS 12 的改进赢得了用户口碑。 + +## 文章 + +### 🐎 [质量监控 - 卡顿检测](https://juejin.im/post/5bb09795f265da0ac84946e0) + +卡顿检测是 APM 里体验是否流畅的重要标准,被大家熟知的卡顿检测方式通常是基于主线程是否执行任务过载来进行。这篇文章较为系统地分析了卡顿检测的各种手段及其实际效果和性能损耗,除了借助 Instruments 工具,在代码侧还有 FPS、Ping、Runloop、Stack Backtrace 和 msgSend observe 5 种手段。 + +### 🐎 [It’s wrappers all the way down](https://oleb.net/2018/lastindex-reversed/) + +"Swift 标准库目前的求值策略是:如果一个操作的惰性求值是无需消耗性能的话,那就应该让它成为一个惰性操作。如果惰性求值的实现反而会消耗性能的话,那应该就让它及早求值,如果它有一种等价的 lazy 实现的话,那就应该通过 .lazy 去实现。" + +基于这种求值策略,我们在对数组进行一些复杂的操作时,更 Swifty 的方式是考虑如何为这一种操作创建合适的 wrapper。这篇文章带着我们重新实现 `lastIndex(of:)` 函数,为这一种集合操作创建 `ReversedCollection2` 的抽象,并解释 `joined` / `reversed` 之类的集合操作的原理。 + +### 🐕 [如何实现可以获取最小值的栈?](https://mp.weixin.qq.com/s/tLaRUCEgtQwoFdELZlcsZA) + +这是前几周微博上和微信大家争相转发的一篇公众号文章。文章用漫画的形式讲了一道算法题目的解题过程、文中一步一步逐渐深入,逐渐优化,最后得出最优解。 + +其实在真正的面试过程中,情况也是一样的。面试官很多时候并不希望你能一次就给出最优解,反而是期待你能从最简单的暴力解法开始,一步一步优化出最优解。面试中很多同学一旦遇到了自己曾经准备过的题目,往往会选择直接写出最优解,殊不知很多时候反而会得到一个负面评价,原因是你曾经做过了这道题,但是却没有主动让面试官换一题新的,不够诚实。这种时候,跟着面试官的思路,从暴力解法开始一步一步优化,最后得出最优解,反而更能体现你的解决问题的能力。 + +没读过这篇文章的同学不妨读读文章,来看看解题应该是个怎么样的思考过程。 + +### 🐕 [[译] 揭秘 iOS 布局](https://sq.163yun.com/blog/article/200743376636538880) + +iOS 的布局系统是每个 iOS 工程师都需要具备的基础知识,我们可能每天都在跟诸如 setNeedsLayout()、updateConstraints() 之类的方法打交道,但是可能并没有形成一个非常系统的认识。本文作者详细讲解了每个方法的作用以及不同方法之间的联系,相信能带给大家一个相对全面的认识,加强对布局原理的理解。 + + +### 🐢 [iOS Memory Deep Dive](https://www.jianshu.com/p/dad9f27e412e) + +这是一篇内容非常详实的文章,作者围绕着内存这个话题,从现代计算机操作系统的虚拟内存机制一步步讲到 iOS 的虚拟内存机制,最后给出了在实际开发中一些如何高性能运用内存的建议。 + +### 🐕 [Access Control Management with Swift](https://medium.com/ios-os-x-development/access-control-management-with-swift-cc3c3d68cbc3) + +本文介绍了用户权限管理的抽象方式,构建了一个基于用户属性的访问控制框架(Attribute Based Access Control),利用了 swift 中 protocol 的强大功能,以策略(Policy = Role ShouldBeAbleTo Action when Condition)的形式,对需求进行建模。该框架可以以非常小的变更成本,增加新的策略来维护权限要求,最后产生的判断用户权限的 API 也非常优雅。 + +### 🐢 [How to Write Clean Code](https://medium.com/quick-code/how-to-write-clean-code-bbcf35ac1aef) +本文是一篇介绍 Code Review 工作流程的文章,从以下四个维度介绍了作者的经验 +1. Code Review 的必要性和最佳时间点 +2. 如果已经准备提交 Review ,注意代码规模(太多别人看不来,太少看不出端倪) +3. 执行 Code Review +4. Code Review 的例子 +总体而言,Code Review 应该是审查代码内容、代码逻辑和安全边界,如果可以的话连测试用例也一起进行 Review,对于代码风格类的东西应该借助 Checkstyle、TSLint、Baseline、Prettier 等工具完成,而 Review 的记录应该保存在一个平台上以供参考,可以使用 Reviewable、Gerrit、GitHub 等工具 + +### 🐕 🚧 [On Learning to Code (for 2019)](https://medium.com/coderbyte/on-learning-to-code-for-2019-aa086284a218) + +通过[谷歌 learn to code 趋势](https://trends.google.com/trends/explore?date=all&geo=US&q=learn%20to%20code,learn%20coding)可以看出从 2012 年开始人们学习编码并成为职业人员的趋势开始有所增长。作者就自己从业 7 年的经验,给大家分享作者认为很重要的三点。 +1. 学习的初始编程语言应与您的目标保持一致 +2. 计算机科学≠软件工程 +3. 技术面试并不是完美的 + + +## 工具 + +### [JSDebugger 一款iOS的动态调试器 ](https://github.com/SatanWoo/JSDebugger) + +一款可以动态在 iOS 中执行调试代码的工具,原理是利用 JavascriptCore 与强大的 iOS Runtime 还有很多其他的 dynamic call 方式来结合形成的一套可以动态调试 iOS app 的工具。工具内的代码堪称对 JSCore 还有 iOS Runtime 学习的样本,值得一看,值得一学 + +### [Sizes](https://github.com/marcosgriselli/Sizes) + +Sizes 这款工具可以根据不同 iPhone/iPad 设备及尺寸规格、横竖屏、字体预览界面显示效果,省去同时打开很多模拟器并来回切换的麻烦,提高布局测试的效率。 + +## 代码 + +### [smoke-framework](https://github.com/amzn/smoke-framework?utm_source=gold_browser_extension) + +SwiftNIO 的推出被视作 APPLE 终于肯“认真对待” server-side swift 的标志。目前各大 swift 服务端框架都纷纷接入了 SwiftNIO 的支持。简单的总结 SwiftNIO 就是:很强。 + +smoke-framwork 是 Amazon 推出的 server-side swift 的框架,默认使用 SwiftNIO 来做网络层,并且支持 OpenAPI 这样的代码自动生成工具。Amazon 作为行业主要是云服务提供商,这个发布是极具指导意义的,代表 swift 真正被服务端市场所接纳、认可。虽然目前针对 smoke-framework 的评测还不多,但基本可以确定的是该框架会和 Amazon 的 AWS 生态有较好的融合,这对于绝大多数公司而言绝对是利好。 + +还等什么呢,学就 vans 了。 + +> 推荐人:[LeeCenY](https://github.com/LeeCenY) + +### [Logan](https://github.com/Meituan-Dianping/Logan) + +对于一个 App 来讲,日志的收集、上报、查询是非常重要的。而目前在各个公司中,对日志的处理大多并没有形成一套完整的体系,都是针对不同的日志类型,如crash、性能、打点等等进行单独的处理。近日,美团点评开源了移动端基础日志库 Logan ,Logan 是一个功能完善、无侵入的日志框架,解决了很多移动端日志方面的痛点,并且拥有较好的性能,可以很方便的接入。 + +## 音视频 + +### [NSSpain](https://vimeo.com/nsspain) + +一份来自西班牙 Cocoa 开发者的视频合集,最近一篇就来自 Mattt 大神,同时,作为英语听力材料也是很棒的说。 + +### 🚧 [SwiftConf '18](https://www.youtube.com/playlist?list=PLgUjQUYKwG_hkD2ZcfAs7bTZwbEtAnNFs) + +Swift Conf 是欧洲技术爱好者组织的 Swift 大会,今年大会的主题演讲视频在大会完成之后立刻放了出来,里面包括一些今年比较火的主题,例如机器学习,ARKit,Swift ABI 稳定,Swift 服务端开发等,有兴趣的同学可以看一下。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/#4.md b/Reports/2018/#4.md similarity index 100% rename from Reports/#4.md rename to Reports/2018/#4.md diff --git a/Reports/2018/#40-2018.10.22.md b/Reports/2018/#40-2018.10.22.md new file mode 100644 index 000000000..e7a694fb9 --- /dev/null +++ b/Reports/2018/#40-2018.10.22.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #40 | 2018-10-22 + +![ios-weekly](../assets/ios-weekly.png) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [New LSP language service supporting Swift and C-family languages for any editor and platform](https://forums.swift.org/t/new-lsp-language-service-supporting-swift-and-c-family-languages-for-any-editor-and-platform/17024) + +这应该是过去一周 Swift 社区最大的新闻,Apple 将主导一个新的开源项目,来为其在 Xcode 生态中的 Swift 和 C family 的语言添加 LSP 的支持,这意味着之后在 VS Code 上写 Swift 也能享受自动完成,定义跳转等功能。目前来看,Swift 已经成为全域通用型程序设计语言,但目前对于非 Apple 生态下的 Swift 开发的工具体验并不友好,Apple 此举无疑对于 Swift 社区是重大福音。 + +### [Photoshop for iPad hands-on: an exclusive look](https://www.theverge.com/2018/10/15/17969754/adobe-photoshop-apple-ipad-creative-cloud) + +Adobe 在近期的 Max 大会上发布了 Photoshop iPad 版本的预览版,正式版将在 2019 年发布。The verge 进行了评测,结合月底苹果的发布会,随着全面屏 iPad Pro 的更新,可能会有一系列生产力 app 随之发布。 + + +## 文章 + +### 🐕 [SwiftOldDriver 精选: Diff 算法在 iOS 中的应用(一)](https://xiaozhuanlan.com/topic/6921308745) + +文章来自 [SwiftOldDriver 精选](https://xiaozhuanlan.com/olddriver-selection),将是一个系列,本文是开篇:讲 Diff 算法的一些基本概念。 +> 在计算机领域中,Diff 是一个很重要的概念,被广泛的运用于各式各样的场景。比如说,React 利用 Diff 优化 Dom 刷新导致的性能问题;Git 借助 Diff 算法实现了版本之间的差异化对比;腾讯 Tinker 热修复借助 Diff 算法生成 patch 包等。 + +### 🐎 [Xcode 10 Library Tips](https://useyourloaf.com/blog/xcode-10-library-tips/) + +相信不少人已经更新到了 Xcode 10。Xcode 10 的 UI 控件窗口从右下角挪到了右上角。默认的使用逻辑是点开后,拖拽一个控件到界面上控件窗口会自动消失。如果一个页面需要连续拖几个控件就会很痛苦。所以分享一个重要的 tip:**按住 option 建点击弹出控件窗口的按钮,窗口就会常驻**。 + +### 🐎 [拍照聚焦和曝光,AVFoundation 简明教程](https://juejin.im/post/5bc2123ee51d450e6c75157d) + +这是利用 `AVFoundation` 实现拍照、聚焦和曝光等功能后的一篇总结文章,包含代码和示例,对有这方面应用需求的朋友可以花点时间看看。 + +### 🐕 [Unleashing the power of asset catalogs and bundles on iOS](https://rambo.codes/ios/2018/10/03/unleashing-the-power-of-asset-catalogs-and-bundles-on-ios.html) + +对于 iOS 开发者来说,`Bundles` 和 `Asset catalogs` 应该是再熟悉不过了。文章介绍了一些高级用法,特别是利用 Asset Catalogs 存储一些配置文件,可以给不同的设备配置不同的值,打开了另一个世界。文末还结合 `Bundles` 和 `Asset catalogs` 介绍了一个实际 App 中的使用场景。 + +### 🐕 [Tricky UIViewController transition animations](https://medium.com/rosberryapps/tricky-uiviewcontroller-transition-animations-59131b540b33) + +目前有很多为初学者准备的简单过渡动画教程,但鲜有为高级开发者准备的。在这篇文章里,作者图文并茂地分享了他最近实现的几个复杂过渡动画,以及几个他在实现过渡动画时的小技巧。 + +### 🐕 [揭秘Flutter Hot Reload(原理篇)](https://juejin.im/post/5bc80ef7f265da0a857aa924) + +本文介绍了 Flutter 的`热重载(HotReload)`的实现原理,如果有兴趣自行实现`热重载(HotReload)`特性的同学可以关注一下。 +* Flutter 热重载的关键代码位于`/flutter/packages/flutter_tools/lib/src/run_hot.dart` +* 在需要重新加载时,扫描有修改的文件,通知 UI 线程重绘 View 树 +* 在 Flutter 中,因为 Dart 代码是工作在自己的 VM 下,所以 UI 层的 reload 是通过服务注册的方式来跟外界进行打交道的 + +### 🐕 [Time​Interval, Date, and Date​Interval](https://nshipster.com/timeinterval-date-dateinterval/) + +作者讲述了 Time​Interval、 Date、 Date​Interval 的历史由来。使用这些 API 的同时了解这些有趣的历史,不失为一个愉快的过程。 + +## 代码 + +### [Panda - 基于 Swift 的 Autolayout 实现](https://github.com/nangege/Panda) + +使用 Swift 重新实现 Cassowary 算法、不依赖 UIView 的 Autolayout 机制,使得 Layout 和渲染都可以在后台进行。抛去多线程的影响,算法本身的效率也是略高于 Apple 的实现,即使不用的话,也可以通过源码了解 Autolayout 内部的运作原理。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@没故事的卓同学](https://weibo.com/1926303682/profile),[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#41-2018.10.29.md b/Reports/2018/#41-2018.10.29.md new file mode 100644 index 000000000..2d833ca2c --- /dev/null +++ b/Reports/2018/#41-2018.10.29.md @@ -0,0 +1,157 @@ +# 老司机 iOS 周报 #41 | 2018-10-29 + +![ios-weekly](../assets/ios-weekly.png) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 小专栏 + +### [[译] Swift 标准库源码阅读指南](https://xiaozhuanlan.com/topic/8732549601) + +对于 Swift 开发者来说,Swift 标准库的开源可以说是很值得高兴的事情,因为我们可以在标准库中学到很多优秀的设计以及了解具体的实现逻辑。当然,很多人可能和我一样,不知道如何在本地搭建一个可编译的 Swift 标准库。这篇文章就提供了一个很通俗易懂的教程,如果你对阅读源码感兴趣,可以借助这篇文章,在自己的电脑搭建一个 Swift 标准库项目,然后在闲暇之余看一看里面的代码。 + +## 文章 + +### 🌟 🐕 [iOS 内存管理研究](https://medium.com/@jasonyuh/ios-%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86%E7%A0%94%E7%A9%B6-9bf37fc209c6) + +来自周报编辑 Jason Yu 同学的大作。 + +虽然现在 iOS 设备的内存容量越来越大,很多时候开发者也不再需要去考虑内存占用的问题。但是,当产品越来越大,功能越来越复杂的时候,内存优化依然会成为一个避不开的问题。 + +本文介绍了 iOS 内存管理的一些基本知识,同时也涵盖了在解决 OOM 问题时候的一些小技巧。若是你对 iOS 的内存优化依然存在一些问题,相信读完文章能让你有更加清晰的了解。 + +### 🌟 🐢 [iOS 系统中导航栏的转场解决方案与最佳实践](https://mp.weixin.qq.com/s/CQ-uUJuX-nlPrM_tHBdbNQ) + +在 App 开发阶段,涉及到导航栏样式改变的需求时,经常会遇到转场效果不佳或者与预期样式不符的“小问题”。本文由美团技术团队出品,详细讲解了 UINavigationBar 的生命周期、导航栏样式转换的时机,同时给出了相关最佳实践,建议仔细阅读。 + +### 🌟 🐢 [iOS UI Automation Tests at Babylon](http://ilya.puchka.me/ios-ui-automation-tests-at-babylon/) + +UI 自动化测试是非常不好做的,如果拿捏不准很容易导致它变成投入产出比低、维护成本高、稳定性差的一个失败项目。所以在使用自动化测试验证产品功能的同时,也要投入人力在解决技术本身的问题上做深入研究。本文就描述了他们在使用自动化测试时遇到的问题,以及如何解决的。可以看出他们在处理测试场景失败率高和测试效能低这些问题上有自己的最佳实践,特别是对网络请求这块问题的处理思路,非常值得借鉴。要想把自动化测试做好或者正打算做自动化测试的团队可以仔细研读参考下。 + +### 🐎 [【QCon2018】Flutter & Dart三端一体化开发](https://juejin.im/post/5bcd470e6fb9a05d2469f723) + +Flutter 可以说是 2018 年移动开发领域最热的技术, 不论是跨平台+独立渲染的工作机制,还是 Google 积极推广的下一代移动 OS:fuchsia 的核心开发框架,都为 Flutter 赚足了眼球。而闲鱼作为国内第一个认真使用 Flutter 的团队, 为 Flutter 社区带来了非常多有价值的内容。本文介绍了闲鱼目前正在践行的“三端一体化开发”概念。什么意思?就是不仅通过Flutter 实现 iOS,Android 端都用Dart 来开发,而且还使用 Dart 来构建微服务的胶水层,由客户端开发同学自己构建需要用到的服务与接口,并且通过一系列工具链的完善提升开发效率。当然,任何听起来过于优雅的方案都免不了会踩坑,不过可以预见的是这套架构在绝大多数场景下能够显著提升整个业务迭代的效率。(麻麻再也不用担心客户端和后台 debug 时互相甩锅了)。 + +当然,这样“胶水层”要 work 的前提是,有一套很优雅鲁棒稳定的底层服务与接口,能够让胶水层中各种组合与调用,这一点对于目前国内很多野蛮生长的互联网公司来说还是挺难的。 + + +### 🐎 [Flutter瘦身大作战](https://juejin.im/post/5bd2ac975188252928653585?utm_source=gold_browser_extension) + +这篇文章依然是闲鱼团队带来的 Flutter 使用经验,从 iOS 的编译产物构成角度,深度探讨了如何对 Flutter 项目进行瘦身优化。从文章中可以看出,除了一些常规的编译指令优化,符号文件移除,资源精简等方面,显示的进行类型转换也会导致包大小的增加,看起来主要是编译系统自动增加的一些异常处理导致的。 + + +### 🐎 [从爬虫攻击者角度谈客户端 API 安全设计](https://mp.weixin.qq.com/s/yv9Ph_8pzej3Wasbsc-fXQ) + +本文介绍了基本的 API 被逆向的实例,提醒开发者需要多注意安全防护。 +常规的 API 安全,需要做好安全保护,见招拆招,加大逆向难度: + +- `Android` 必须混淆加固,防止源码简单被逆(iOS混淆作为可选项) +- 请求使用 `HTTPS`,防止内容被抓包,安全要求高的,可以开启**双向校验**,需要注意证书的**过期**问题,做好**证书更新功能**。证书内容最好以**字符串**的方式写入到程序内,以防止文件容易被解压得到 +- 请求携带**签名**,**签名**算法通常使用 `token` + `params` + `盐值` 进行算法计算,算法最好使用 `C/C++` 编写,并且混淆加固,防止被轻易破解进行篡改或者伪造请求 +- 对**异常请求**进行限制,如:`ip` 在短时间内大量访问,请求重复提交 +- 通过 `Cookie Session/OAuth/JWT` 等方式进行鉴权校验,进行权限管理(可阅读下方链接深入了解) + +延展阅读: +- [深入聊聊微服务架构的身份认证问题](http://www.infoq.com/cn/articles/identity-authentication-of-architecture-in-micro-service?spm=a2c4e.11153940.blogcont593230.23.2b0b19e51HRJAx) + +### 🐕 [Best strategies for configuring multiple environments in Xcode projects](https://kenb.us/best-strategies-for-configuring-multiple-environments-in-xcode-projects) + +在 Xcode 项目中配置不同环境,很多人会选择添加 Target,但这并不是一个很好的方法,太重了,你需要维护多个 Target 及它们的 Info.plist。最好的策略是添加新的 Configurations,然后给其设置该环境下的 xcconfig 配置文件。还能在 Build Settings 里为 Configuration 设置不同的 bundle identifier、产品名称,应用图标,使它们能同时运行在一个手机上,并得到很好的区分。 + +### 🐕 [将 75000 行原生 iOS 应用程序移植到 Flutter 后,结果太惊讶!](https://www.toutiao.com/i6615151835814560264/?tt_from=dingtalk&utm_campaign=client_share&wxshare_count=2&from=timeline×tamp=1540228468&app=news_article&utm_source=dingtalk&isappinstalled=0&iid=42369912095&utm_medium=toutiao_ios&dtshare_count=1&group_id=6615151835814560264&pbid=6615388314311558670) + +原文:[Porting a 75,000 line native iOS app to Flutter](https://medium.com/flutter-community/porting-a-75-000-line-native-ios-app-to-flutter-57c6571c57b4) + +吐槽一下翻译文的标题,浓浓的国内枪文的感觉。但是,讲回来这篇文章本身的质量还是非常不错的。 + +文章作者是澳大利亚的 Easy Diet Diary App 的作者。他们之前有 iOS 版本,也一直计划出一个 Android 版本,鉴于两个代码库的复杂度一直没有施行。 + +在进行了 Flutter 重构之后,作者发现代码量相对于之前 Objective-C 和 Swift 混编有了很明显的下降。大部分少掉的代码量来自于 Storyboard 被 Widget 替换,这也是 Flutter 从一开始就在设计上的一个优势。 + +文章对还没尝试过 Flutter 的开发者来说,是个可以借鉴的参考。 + +### 🚧 🐕 [Building an iOS App Without Xcode’s Build System](https://medium.com/@vojtastavik/building-an-ios-app-without-xcodes-build-system-d3e5ca86d30d) + +本文主要介绍了一个简易 App 的构建流程。 + +其并非一个纯理论的构建描述,而是将整个过程分解成多个步骤,主要分为编译源文件、编译&拷贝资源文件、拷贝 Info.plist、拷贝 Swift 运行库、签名和安装。文中作者有心地附注了相应脚本以及相关原理,读者可以跟着作者,完整实验作者的每一个步骤,更加深刻地了解到一个 App 整体的构建流程。另外,在文末作者留了几个可继续实验钻研的方向,可供读者继续深入探究。 + +文章对于未了解过 App 构建流程的开发者来说,是个不错的参考。 + +### 🐕 [从汇编代码探究 NSClassFromString 实现](https://xiaozhuanlan.com/topic/5781026934) + +虽然在 iOS 中,Foundation 库是不开源的,但是可以通过一定的方法,取得其编译后的汇编指令,对于有一定汇编知识的人来说,可以大致推断出某些接口的大体实现细节。本文作者通过开发中遇到的一个问题,刨根问底,对于 `NSClassFromString` 这个方法的具体实现进行了细致的分析。 + +诚然,iOS 的各种官方闭源框架里,我们不可能一个一个接口去推断其实现。但当遇到具体困扰我们的问题时候,我觉得我们正需要本文作者那样,可以深入研究的精神。通过阅读本文,相比于知道 `NSClassFromString` 的实现细节,了解如何通过汇编来推敲接口的实现细节更加重要一些。 + +### 🐕 [Swift​Syntax](https://nshipster.com/swiftsyntax/) + +[libSyntax](https://github.com/apple/swift/tree/master/lib/Syntax) 是 Swift 项目的工具库,目前被用于 Swift 项目的迁移工作。通过直接操作 AST 的方式,生成结构化的代码。而 [SwiftSyntax](https://github.com/apple/swift-syntax) 则是 libSyntax 的封装,为我们提供了 Swift 类型安全的方式,来操作和生成代码。 + +Mattt 在文章前半部分主要讲了什么是 AST 以及 Swift​Syntax 如何通过 AST 生成代码,在文章后半部分描述了如何通过 Swift​Syntax 生成 Swift 代码、如何通过 Swift​Syntax 替换 Swift 代码以及如何通过 Swift​Syntax 实现 Swift 代码高亮的功能。 + +### 🐎 [Dealing with Swift toolchain](https://blog.krzyzanowskim.com/2018/10/11/dealing-with-a-swift-toolchain/) + +文章重点介绍了各系统下如何安装 Swift toolchain、不同版本的 Swift 如何共存?以及各执行文件之间的关系,如 `swift-build`, `swift-package` 和 `swift-run`。 + +### 🐕 [Using PromiseKit](https://agostini.tech/2018/10/08/using-promisekit/) +当你需要连续地执行多个异步过程时,总会无可避免的出现地狱回调。为此,PromiseKit 是一个不错的解决方案。本文从实际的案例出发,为你深入浅出的讲解了如何优雅的使用它,建议阅读。 + +### 🐎 [通过 internal 隐藏内部属性](https://holko.pl/2018/10/08/internal-modifier/) + +这篇文章介绍了作者在封装数据库时遇到的问题——如何处理 public 类型的 internal 属性,让外部调用者可以在无法得知 internal 属性的同时生成这个 public 类型的实例。在暴露必要接口的同时隐藏实现细节,是一件不容易做对的事情,文章很简短,希望大家看完之后可以更好地处理类似的接口设计问题。 + +### 🐢 [从Xcode10不再支持libstdc++说起](https://juejin.im/post/5bcff7b1f265da0adc1909e7) + +Xcode10起,苹果摒弃了对 libstdc++ 库的支持转而支持 libc++ 库。本文对 Xcode 中的 C++ 标准库进行了深入的研究。值得对编译器话题和 C++ 有兴趣的读者阅读。 + +### 🐕 [Prefetching images size without downloading them [entirely] in Swift](https://medium.com/ios-os-x-development/prefetching-images-size-without-downloading-them-entirely-in-swift-5c2f8a6f82e9) + +如果在处理自定义布局时遇到需要远程加载的图片,很容易出现先有鸡还是先有蛋的问题——需要为图片预留出合适的空间,但不下载图片就无法知道它的尺寸。如果一边下载一边调整布局,这些元素就会出现和 web 一样胡蹦乱跳的滑稽效果,直到下载结束才能停下来,从而导致糟糕的 UX/UI 体验,让用户大感失望。在这篇文章里,作者会教你如何在显示图片之前预加载图片的尺寸信息,以便用在 UICollectionView/UITableView 的 pre-fetching 方法中。 + +## 工具 + +### [iOSLocalizationEditor](https://github.com/igorkulman/iOSLocalizationEditor) + +通常 iPhone 上的一些应用需要支持多国语言,这要确保所有内容都已翻译,任何语言都不能丢失任何字符串,这是一件比较痛苦的事情。而 `iOSLocalizationEditor` 是一款在 macOS 上帮助用户编辑和管理 app localizations 的图形化工具,它会显示每种语言的所有本地化版本,并能方便快捷的找出你缺失的 key 。如果想要试试看的朋友,也可以参考下这篇文章:[Checking for missing translations in iOS projects](https://blog.kulman.sk/checking-for-missing-translations-in-ios/) + +## 代码 + +[MVCTodo](https://github.com/davedelong/MVCTodo) + +我们曾在 [17 期周报中推荐过 - A Better MVC](https://github.com/SwiftOldDriver/iOS-Weekly/blob/48427eac5663bacdb00beddf2653ff1c32f4d5d1/Reports/%2317-2018.05.02.md#-a-better-mvc) 的文章和视频,现在时隔半年,作者为这篇文章提供了一个简单的 demo,帮助读者去理解和实践他推荐的 MVC 架构。强烈建议阅读下这个 repo 的 readme,作者很有心地列出了这个 demo 你应该重点看哪些,略过哪些东西。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#42-2018.11.05.md b/Reports/2018/#42-2018.11.05.md new file mode 100644 index 000000000..07ac3e827 --- /dev/null +++ b/Reports/2018/#42-2018.11.05.md @@ -0,0 +1,161 @@ +# 老司机 iOS 周报 #42 | 2018-11-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 小专栏 + +### [北美软件工程师面试简单介绍](https://xiaozhuanlan.com/topic/4263189057) + +好多同学都比较好奇北美的软件工程的面试和国内的有什么不同,具体情况又是如何的,这篇小专栏就简单的给大家介绍了一下北美的 Software Engineer 的面试情况,有兴趣的不妨读一读了解一下。 + +## 新闻 + +### [App Store Connect API Now Available](https://developer.apple.com/news/?id=11022018) + +WWDC 2018 中苹果提及了 App Store Connect 将迎来一次比较大的更新,其中有两个内容比较受国内开发者关注 - TestFlight Public Links 和 App Store Connect API。前者已经在前一段时间发布了,而后者这周也正式发布。 + +> 相关功能介绍可以在 [What’s New in App Store Connect](https://developer.apple.com/videos/play/wwdc2018/301/) 和 [Automating App Store Connect](https://developer.apple.com/videos/play/wwdc2018/303) 中进一步了解。 + +## 文章 + +### 🌟 🐕 [支付宝客户端架构解析:iOS 容器化框架初探](https://mp.weixin.qq.com/s/KGDD-Qe1TLzIVlDIEzM25g) + +你是否好奇一款航母级 App 他的内部客户端架构是怎样实现的?到底什么样的架构设计才能满足几十上百人共同开发迭代一款 App ?这篇文章会带大家深入到支付宝的 mPaaS 框架之中,了解一下支付宝客户端业务容器化的实践 -- 将业务隔离成相对独立的模块,而整个框架作为容器管理着众多子业务子模块,并着力追求模块与模块之间高内聚、低耦合,灵活的插件式开发。 + +mPaaS iOS 框架源自于支付宝客户端,为了实现这种上千个工程之间的低耦合和相关依赖调用,mPaaS 框架直接接管了 App 的生命周期,负责整个 App 启动托管、App 生命周期管理、处理与分发 UIApplication 的代理事件。mPaaS 框架提供了容器化环境,业务开发人员在这个容器化环境中使用 `微应用` 和 `微服务` 进行具体的业务需求开发。 + +### 🌟 🐎 [The power of key paths in Swift](https://www.swiftbysundell.com/posts/the-power-of-key-paths-in-swift) + +由于 Swift 是一门追求编译时安全和静态类型的语言,它缺少其它更注重运行时的语言(Objective-C、Ruby 和 JavaScript 等)所拥有的动态特征。例如在 Objective-C 里,我们可以在运行时动态访问对象的任意方法和属性,甚至可以替换其实现。虽然动态性的缺失是 Swift 的一大优势之一,有助于写出容易预测、正确率更高的代码,但在某些时候,如果能用更动态的方式来使用代码,会很有帮助。幸运的是,Swift 正在不断推出更多更动态的功能,同时仍然保持类型安全的原则,key path 就是其中之一。在这篇文章里,会为你展示 key path 在 Swift 中的使用方式,以及利用它实现的一些强大功能。此外,还可以参考这篇文章 [Swift Tip: Auto Layout with Key Paths](https://www.objc.io/blog/2018/10/30/auto-layout-with-key-paths/)。 + +### 🌟 🐢 [Protocol Oriented Programming(POP) in Swift: Is it better than Object Oriented Programming(OPP)?](https://www.appcoda.com/pop-vs-oop/) + +自从 Swift 2.0 引入面向协议编程(POP)这一概念以来,已经有成百上千篇关于这一概念的讨论文章,本次作者以专注编码 30 年老司机的身份,在实际开发中大量运用 POP 模式之后,写出了他心目中的 POP。本文将由以下几点展开讨论: + +- 为什么 Swift 被认为是一门面向协议的语言; +- 比较 POP 与 OOP 的异同,指出他们主要区别在于能否实现多继承; +- 对比值语义与引用语义的区别; +- 分析了苹果在 WWDC 2016 提出的 “局部推断(Local reasoning)”; +- 举了 Protocol 的几个使用场景:如实现委托模式、作为类型和实现多态; +- Review 作者在 Swift 项目中的实践代码; + +至于作者对 POP 最终的态度,点进来看看吧,另外有兴趣的话不妨看看作者的前一篇[关于 POP 的入门文章](https://www.appcoda.com/protocol-oriented-programming/)。 + +### 🐕 [React Native 重构路线图发布!](https://mp.weixin.qq.com/s/-BXsXp0HnrGMS3CLLvfEtQ) + +Facebook 6月中旬发布了他们即将“大规模重构 RN” 的消息,时隔四个月,近期终于公布了他们的一些计划细节,不过大部分都是工具链,流程上的增强。颇有一种裤子都脱了就给我看这个的感觉,不知道是不是对“大规模重构”有什么误解。这些增强虽然普通开发者可能感触不深,但对于一个团队做技术选型时候肯定是有帮助的,但是不是真能抵挡住 Flutter 的冲击呢?我表示不乐观。 + +### 🐎 [Speeding Up Custom Script Phases](https://indiestack.com/2014/12/speeding-up-custom-script-phases/) + +文章主要介绍了三种方案来加速 Xcode 自定义脚本的执行。 + +- 第一种:勾选配置项中的 `when installing`,标识 APP 只在 `Archive` 模式下才执行脚本。 +- 第二种:添加你自己的逻辑代码来标识脚本的执行程度。 +- 第三种:利用两个可选项 Input Files 和 Output Files,这两个列表中填写为文件路径或文件夹路径,它们就是 Xcode 来判断脚本是否需要执行的依据。 + +对于最后一种方案,文中表达不是很明确,我花了点时间做了一个实践,最后归结如下,Xcode 会重新执行脚本的条件如下:1. 两者中任一`文件`有`修改`。 2:两者中任一`文件夹`内有文件`添加/删除/替换`。 + +> 在 Xcode 10 之后脚本增加为4个可选项,除上面表述的两个外,还有 Input File List 和 Output File List。如有兴趣可以参考 [\[New Feature\] Generate xcfilelist for Script Build Phases](https://github.com/SwiftGen/SwiftGen/issues/441) 文中对于 File List 的看法。 + +### 🐎 [Running Other Apps' Siri Shortcuts Through Deep Links in Swift](https://swiftrocks.com/running-other-apps-siri-shortcuts-through-deep-links-in-swift.html) + +文中作者展示了使用 Deep Link 来打开捷径的案例。通过 `shortcuts//` 这个 URL Scheme 来跳转捷径应用。若 URL 中的 Path 为 `run-shortcut` 则可以去执行捷径,当然我们可以通过参数 `name` 来指定执行对应的捷径,`input` 参数来为你的捷径增加入参,`x-success`/`x-cancel`/`x-error` 参数来为你的捷径提供执行状态的回调处理。此外,作者还介绍了具有导入功能的捷径 URL 和 一些捷径 APP 的配置页面。 + +### 🐕 [Let's Set Up Your iOS Environments](https://robots.thoughtbot.com/let-s-setup-your-ios-environments) + +本文介绍了一些对于新手来说非常实用的 Xcode Project 设置的小知识:使用 .xcconfig 文件来合理设置工程。这东西可能在工程体量还不是很大的时候,显得不是那么的重要,但是当工程逐渐变大,结构也变的越来越复杂的时候,有一个清晰合理的结构,容易配置的工程对整个团队来说都是一个福音。 + +### 🐕 [Text Kit Tutorial: Getting Started](https://www.raywenderlich.com/5960-text-kit-tutorial-getting-started?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more) + +`TextKit` 是 iOS 7 开始推出的图文混排框架,其基于底层的 `CoreText`。`UIKit` 中的 `UILabel`、`UITextView`、`UITextField` 都构建在 `TextKit` 之上。本文介绍介绍了两部分内容:如何适配 `Dynamic Type` 特性;如何实现图文混排及文字环绕图片布局。 + +### 🐕 [【基本功】深入剖析Swift性能优化](https://mp.weixin.qq.com/s/U95QmOOjeXkk-yC23cuZCQ) + +这篇文章的核心内容出自 [Understanding Swift Performance](https://developer.apple.com/videos/play/wwdc2016/416/),主要讲了 Swift 的一些优势以及苹果做了哪些方面的优化。所以推荐每个 Swift 的开发者都要仔细看一下这个 Session 的内容。 + +当然,因为 Swift 在不断的优化,视频内容的部分东西已经有点点过时了。我稍微补充一下: + +- Existential Container 目前虽然是用 3 个 word 存储数据,但是在 ABI 稳定之前,这个大小一直还没有确认。同时,文中所说的 Existential Container 是 5 个 word 也不太恰当,更合理的是大于 4 个 word。比如 `Any` 的 Existential Container 只有 4 个 word,而 `Codeble` 的 Existential Container 大小为 6 个 word。 +- 其次,对于 Indirect Storage With Copy-On-Write 的说法,在 [Understanding Swift Performance](https://developer.apple.com/videos/play/wwdc2016/416/) 指的是 Swift 3 的时候,类似于 Array 这类基础库的大数 struct 如何解决 Copy 问题。而不是对于所有 struct 实现了这个 COW。但是 Swift 4 的时候,苹果改变了策略,在编译器这边做了一定的优化,实现了“自动”实现 COW。 + +### 🐕 [One Quick Way to Drastically Reduce your iOS App’s Download Size](https://medium.com/@michael.eisel/one-trick-to-drastically-reduce-your-ios-apps-downlsize-ae68aad0d369) + +大家都知道,app 的下载体积越小,用户需要等待的时间就越短,尤其是对于用 Swift 开发的 app,体积动辄几十兆,令人头疼。本文作者分析了影响 app 体积的几个方面和一些优化的方法,包括 bitcode、使用 xcrun 命令分析各部分所占空间等等。 + +### 🐕 [深入理解 Autolayout 与列表性能 -- 背锅的 Cassowary 和偷懒的 CPU](https://juejin.im/post/5bd5a546f265da0af033cee6) + +Autolayout 的性能一直为人所诟病,也是列表卡顿的原因之一。本文作者从 Autolayout 的算法角度进行分析,介绍了 Cassowary 的基本原理,并根据文字渲染结果做了一些详细的测试,判断性能问题是苹果实现不当所致,而不完全是算法的原因。最后也介绍了作者自己实现的 Panda 框架,基于 Autolayout 算法的概念进行优化,感兴趣的朋友可以试一下。 + +### 🐎 [Class written in Swift](http://yulingtianxia.com/blog/2018/10/28/Class-written-in-Swift/) + +纯 Swift 类的函数调用跟 OC 中的运行时消息发送机制是不同的,是在编译阶段就确定了调用哪一个函数。虽然 Runtime 的接口可以使用,但是却并不能保证返回结果的正确性。作者在自己写的某个开源库上的一个 issue,由于和 Swift 类有关,研究了下 Swift 编写的类。对于在使用 Swfit 过程中,在 Debug 或者其他情况有疑问的同学,可以看一下本文的分析。 + +### 🐕 [Specializing protocols in Swift](https://www.swiftbysundell.com/posts/specializing-protocols-in-swift) + +这周的 Swift by Sundell 介绍了一个很有趣的泛型功能 —— 泛型协议特例化。这是 [Swift 4 时引入的功能](https://github.com/apple/swift-evolution/blob/master/proposals/0142-associated-types-constraints.md),让我们在继承泛型协议的同时约束 associatedType 的类型,听起来很拗口难懂,目前在标准库里有一个非常标准的示例 `SubSequence`,大家一看就能理解: + +```swift +protocol Sequence { + associatedtype SubSequence : Sequence + ... +} + +protocol Collection: Sequence where SubSequence: Collection { ... } +``` + +`Collection` 通过 `where` 从句对子序列的类型进行约束,让 `Collection` 的子序列必须也遵循 `Collection`(而不只是 `Sequence`)。 + +如果你觉得这个例子离业务太远的话,那就可以看看 Sundell 在文章里介绍的一些离业务更近的用例。 + +## 工具 + +### [iOS Project Template](https://github.com/messeb/ios-project-template) + +这是一个可进行代码签名、持续集成、项目分发的项目模版。它为新项目提供了一个起点,可以方便的进行项目构建。这个模版中提供了一个 `Core` 框架,要想用于自己的项目,还需要修改一些文件的某些配置和内容。感兴趣的朋友可以试试看,或许它能够帮到你。 + +### [Eliminate Unused Swift Code](https://peripheryapp.com) + +这是一个可以移除 Swift 项目中所有没用到的代码的工具,帮助你把项目变得更加干净。注意目前版本的 CocoaPods(1.5.3) 会导致它不能正常工作,升级到 1.6.0.beta.2 即可。这个工具免费即可使用,但是充钱可以变得更强。 + +## 代码 + +### [CodyFire](https://github.com/MihaelIsaev/CodyFire) + +CodyFire 是基于 Alamofire 的 Codable 协议 API 请求管理库,使你庞大的网络请求代码,变的更简洁,易于维护。Swift 由于类型安全的特性,对于像 JSON 这类弱类型的数据处理一直是一个比较头疼的问题。Swift 4 中新增的 Codable 协议解决了字典与模型之间转换的问题,Codable 协议也让 API controller 的构建代码变的十分优雅。 CodyFire 能自动根据所运用的环境,切换 baseURL,能方便的添加公共头、对异常状态统一处理、对请求进行取消、设置超时,或者预防请求返回过快,添加交互式延时(不用再担心,网络太快,等待动画没有很好的执行。小编和 CodyFire 作者都非常喜欢这个功能)。还能串行或并行,使用链式调用进行多个请求,并对结果进行统一处理。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[kyo](https://github.com/KyoLi),[tom510230](https://xiaozhuanlan.com/u/6682065345),[anotheren](https://anotheren.com),[水水](https://www.xuyanlan.com),[looping](https://github.com/looping),[@JasonYuh](https://weibo.com/jasonyuh),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#43-2018.11.12.md b/Reports/2018/#43-2018.11.12.md new file mode 100644 index 000000000..ea100528f --- /dev/null +++ b/Reports/2018/#43-2018.11.12.md @@ -0,0 +1,231 @@ +# 老司机 iOS 周报 #43 | 2018-11-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 小专栏 + +### [From Swift To C++](https://xiaozhuanlan.com/topic/7216403859) + +来自微信团队的周报编辑芒果最新出炉的一篇文章。这篇文章按照编程范式(programming paradigm)来组织脉络,从一个客户端工程师的角度来品味和对比这 Swift 和 C++ 两门语言。如果你也在或者即将同时把 Swift 和 C++ 当做主流编程语言,那么这篇文章你绝对值得一看。 + +## 新闻 + +### [适用于触控问题的 iPhone X 显示屏模块更换计划](https://www.apple.com/cn/support/iphone-x-display-module-replacement-program/) + +号外!号外!继“降频门”事件引起的 218 元换电池服务后,苹果又出免费更换 iPhone X 显示屏服务了。只要你的 iPhone X 经过测试满足以下两个问题,则苹果会替你免费更换显示屏。 + +- 显示屏或显示屏的一部分不响应或间歇响应触控操作。 +- 即使没有进行触控操作,显示屏也会作出反应。 + +另外友情提醒,218 元换电池只剩最后一个半月了,还没换的小伙伴抓紧上,绝对能让你的老设备焕然一新! + +## 文章 + +### 🌟 🐕 [Language Server Protocol](https://nshipster.com/language-server-protocol/) + +前段时间 Apple Swift 团队在 Swift Forum 上宣布他们会对 Swift 和 C 系列语言(C/C++/ObjC)增加 LSP (Language Server Protocol)支持。这对于饱受 Xcode 折磨的开发者来说是个极大的利好,意味着在这之后可以有更多的第三方 IDE 支持。 + +Matt 的这篇文章,解释了什么是 LSP,LSP 是怎么工作的,以及潜在的可能带来的好处。 + +虽然 Swift 支持 LSP 的具体时间表到现在还没有放出来,但是受苦于 Xcode 的大伙们也算是有点盼头了。 + +### 🌟 🐎 Tricks & treats to make UI testing less terrifying +[part1](https://blog.novoda.com/ui-testing-part-1/)、[part2](https://blog.novoda.com/ui-testing-part-2/)、[part3](https://blog.novoda.com/ui-testing-part-3/) + +自动化测试,尤其是 UI 的自动化测试,对于国内大部分的开发者应该都是“只闻其声未见其人”的感觉,知道有这么个事儿,但基本都没怎么实践过。这一系列文章系统性的讨论了 UI 自动化测试的最佳实践。从如何标记 UI 元素到如何访问,最后在第三部分还探讨了一种编写 UI 测试的“设计模式”,名叫 PageObject 的编程模型,来提升 UI 测试代码的可维护性。 + +### 🐎 [Stephen King's Advice To Software Developers](https://www.mokacoding.com/blog/stephen-king-advice-to-software-developers/) + +斯蒂芬·金,《肖申克的救赎》的作者。他曾在《On Writing》一书说,讲述了他的写作经验。学习技巧基本相通,因此本文作者将斯蒂芬·金的经验融合到软件开发实例中。 +1. 多输入,多输出 + - 多输入:多看源码,`CodeReview`,博客,书籍,如无从做起,可多关注**老司机周报**。 + - 多输出:对于想掌握的技巧,多进行刻意练习。 +2. 避免分心 + - 规划时间,**固定**的时间做**固定**的事情,效率更高。 + - 寻找**专门的空间**和可以集中精神的 **2 个小时**。 +3. 闭门,开门 + - 专注开发完成后(闭门),接受 `CodeReview` 或者开源,吸纳更多的意见进行优化(开门)。 +4. 杀掉你的所爱 + - 每次优化,果断删掉你自豪但无用的代码,炫技不如贴合业务。 +5. 花时间 + - 没有捷径,务必**坚持**(但是要注意**学习技巧**)。 + +### 🚧 🐕 [How to remove duplication from Swift tests with helper functions](https://www.mokacoding.com/blog/how-to-remove-duplication-from-swift-tests-with-helper-functions/) + +对于 XCTest 的单元测试来说,提取重复代码对于开发者而言并不友好,可能会出现如下几种问题: + + 1. 执行过程中,Xcode 的断言函数停止在了提取函数内部。 + 2. 多个单元测试同时报错时,需要展开错误信息才能了解到具体信息。 + +为了解决如上几个问题,作者巧妙的运用了 Swift 中 `XCAssert` 函数的另外两个入参 `file` 和 `line`,来传递辅助函数调用时的文件和行号,这样 Xcode 就能够帮助你将错误信息正确提示到辅助函数调用的地方。 + +### 🐕 [Keeping your code clean](https://www.netguru.co/codestories/keeping-your-code-clean) + +写得一手好字,对于普通人来讲是一个很好的加分项,而是否写得一手简洁漂亮的代码则对于我们开发者来说更为重要。招聘单位往往对应聘人的代码风格都会有一定要求。本文分享了如何写得一手好代码的几个小技巧,很值得大家关注,并在平常开发中重视起来。 + +- LOC(Lines Of Code):代码应该足够精简,函数是最小的执行单元,避免冗长的代码集中在一个函数实现上。 +- 正确的缩进:不管你是 “Tab” 党还是 “空格” 党,合适的缩进能让你的代码排版更加整齐,让人读起来更加舒适。 +- 标准的命名:虽然命名一直是程序员的难题,但我们仍然需要能够很好的名字来提高我们代码可读性。 +- 变量和函数的声明:在合适的地方做声明,按照功能进行分组。 +- 代码风格:每个团队都应该有一套代码规范,来统一团队成员的代码风格。 + +另外,该作者还在最后为我们推荐了几个 Lint 的工具,可以帮助我们自动化代码规范审核,如 **SonarQube**、**Tailor** 以及 **SwiftLint**。 + +### 🐕 [String’s ABI and UTF-8](https://forums.swift.org/t/string-s-abi-and-utf-8/17676) + +近日,Michael Ilseman 在 Swift 社区论坛发文 `String’s ABI and UTF-8` 表示 String ABI 相关改动已提交到 master 分支。具体来说,这是底层实现的一次显著改动(这些改动在 API 层面无任何影响),其中最主要的一点就是原生 Swift 字符串会统一使用 UTF-8 进行存储(在内存里),而之前是根据内容选择 ASCII 或者 UTF-16 进行存储。 + +文章还特地提到:传统意义上中文字符串是 UTF-8 性能最差的场景(需对多个 UTF-8 编码进行重排合并得到 Unicode 码位),得益于现代 CPU 的改进,这些已不再是问题。 + +### 🐢 [Result\ 还是 Result\](https://onevcat.com/2018/10/swift-result-error/) + +API 的错误处理一直是 Cocoa 做的不好的一部分。到了 Swift 时代,我们有了更好用的 enum,可以帮助我们统一 Data 与 Error 的封装。如果你常用 Alamofire,一定对它的 `Result` 非常熟悉,对于错误,它仅要求满足 `Swift.Error`。但是很多时候处理这个空协议依旧不是最方便。于是又有人提出了 `Result` 来指定错误类型,大部分情况下你会在这里定义一个 enum 来穷举所有可能的错误(注意这里的错误是 `Error` 而非 `Swift.Error`)。喵神在文中详细对比了这两种方式的利弊。 + +当然,官方不可能对这一不足置之不理,相关的提案 [SE-0235: Add Result to the Standard Library](https://github.com/apple/swift-evolution/blob/master/proposals/0235-add-result.md) 本周已经在讨论中,相信结果很快就会出来,让我们拭目以待。 + +### 🐢 [KVC/KVO 总结](https://juejin.im/post/5be25b256fb9a04a0279d217) + +对 KVC / KVO 做了到位的总结和代码示例。相信对想要详细了解或使用 KVC / KVO 的同学会有所帮助。 + +KVC +- Key-Value Coding基本原则 +- 访问对象属性 +- 访问集合属性 +- 访问者搜索模式 + +KVO +- 注册KVO +- 兼容KVO +- 注册从属keys +- Key-Value Observing 的实现细节 + +### 🐢 [Category 特性在 iOS 组件化中的应用与管控](https://mp.weixin.qq.com/s/5ucpVa6ku4b9_pfMP9CqlQ) + +关于组件化,在业界的文章和讨论已经很多了。但组件化其实是一个比较大的工程化问题,对于想要使用和已经采用组件化进行开发的团队来说,对于实施组件化的很多细节,其实很多文章并没有说的很清晰。本文主要围绕组件分层通信解耦的机制,先后列举了常见的几种方案对比,以及美团所采用的方案:Category+NSInvocation 和 CategoryCoverOrigin。对于这两个相对陌生一些的方案,文中也有一定的介绍,并且写了实际运用的代码,对此有兴趣的同学推荐可以认真看一下本文。最后,Category 的使用笔者一向认为需要比较慎重,否则往往会带来更坏的效果,至于采用哪种方案,就看大家自己的抉择了。这里并没有打太极的意思,而是对于组件分层通信,怎么做、是否要做到如此,以及各种方案所带来的代码量的增加和后期的维护成本是否值得,不同的团队也会有不同的见解。 + +### 🐕 [Void](https://nshipster.com/void/) + +NSHipster 介绍了很多和 Nothingness 相关的内容。这篇文章主要介绍的是 Swift 中的 Void。文章内容依旧是 Mattt 大神的写作三部曲: + +- Void 在标准库中的运用 + + 描述了 Swift 标准库在设计 ExpressibleByNilLiteral 的时候,如何巧妙的运用 Void 避免了和默认 init 冲突的情况。 + +- Void 一些被忽略的细节 + + 比如 Void 是一个 non-nominal 类型,如何在无法拓展的情况下如何相互比较、一些自相矛盾的写法等 + +- Void 实际开发中的秒用 + + 以网络请求为例,在使用 Void 的情况下,巧妙的把 `completion(.success(()))` 改成了 `completion(.success)` + +### 🐎 [Swift Tip: Lightweight Observation](https://www.objc.io/blog/2018/11/06/lightweight-observation/) + +对于静态视图结构和动态数据,我们可以使用内建的 `didSet` 属性观察器来观察数据的变更,并对应更新视图。这项技术的优势就在于简单性:不需要引入响应式框架、KVO 或其他东西。这篇文章用一个实际的例子演示了具体的做法。 + +### 🐕 [Swift 5 and ABI stability](https://theswiftdev.com/2018/11/06/swift-5-and-abi-stability/) + +Swift 5 的分支最近已经准备要合并到主干了,这一次合并意味着 ABI 在 Release 之前不会有大改动,并且在未来版本保持 ABI 的向后兼容性。 + +所以最近在 Swift 论坛上也能看到核心团队加快节奏在调整精简标准库的 API,包括加入 [Contiguous Collection Protocols](https://forums.swift.org/t/contiguous-collection-protocols/17875) 确立数组内存布局以便优化排序等操作,去除掉 [Sequence.SubSequence](https://forums.swift.org/t/se-0234-removing-sequence-subsequence/17750) 以便提升数组切片效率等等。 + +如果你还不了解 ABI 相关的内容,那么可以看看这篇文章,了解一下 ABI 稳定对我们日常开发的影响。 + +### 🐢 [【译】给 iOS 开发者介绍 Flutter](http://ie8384.com/blog/index.php/archives/1603/) + +本文是 Flutter for iOS 官方指南的翻译。iOS 知识和技能对 Flutter 开发非常有价值,如果你已经有 iOS 开发经验,可以通过这篇文章,用自己已有的 iOS 知识去使用 Flutter 构建应用。 + +文章主要介绍 UIView、UIViewController 等 iOS 常见知识在 Flutter 中怎样使用。共包含 12 个章节:View、页面导航、线程和异步、工程结构/本地化/依赖和资源、ViewController、布局、手势检测和 Touch 事件处理、主题和文字、表单输入、与硬件交互/第三方服务和平台、数据库和本地存储、通知。 + +作为给 iOS 开发者的入门 Flutter 的文章,本文内容全面,也可以作为开发手册来查阅。另外,作者还翻译了 [给 Android 开发者介绍 Flutter](http://ie8384.com/blog/index.php/archives/1602/),有兴趣可以阅读。 + +## 设计 + +### [Photopea: advanced image editor](https://www.photopea.com) + +Photopea 是一款免费的在线 Photoshop(替代品),拥有和 PS 几乎相同的界面和快捷键,并且支持多语言,已经有超过 150 万独立访客。 + +## 工具 + +### [手机上的抓包神器 Stream](https://itunes.apple.com/cn/app/stream/id1312141691?mt=8&ct=appshare-cn) + +配置简单,不需要改代理等繁琐操作,即可 + +1. 抓取手机上的 HTTP & HTTPS 请求和响应,方便开发和测试人员快速定位线上问题。 + +2. 重放和构建请求,高效调试服务端接口。 + +3. 支持在 iOS 上实现配置 Hosts 的效果,方便产品和测试切换线上和测试环境。 + +4. 集成一些常用工具,如 URL Decode/Encode,md5,base64,时间戳转化等。 + +### [另一款轻量级的 UI 实时调试工具 - Sherlock](https://sherlock.inspiredcode.io/) + +这是除 Reveal 外又一款支持实时调试 UI 的工具,相比于 Reveal,Sherlock 虽然没有 Reveal 那么强大的功能,但它更加轻量级,且无需任何配置,打开模拟器和 Sherlock 就可以直接使用。此外,它还支持调整屏幕大小以测试你的 UI 在各类屏幕上的展示效果,不需要你去启动各种模拟器。目前 Sherlock 正处于 Beta 测试中,暂时只支持 iPhone 模拟器。 + +### [SmartBaby](https://itunes.apple.com/us/app/smartbaby/id1438971945?mt=12) + +SmartBaby 是一款提高 Swift 开发者效率的工具。它能从 JSON 推断出 Codable 模型,且具有好用的自定义功能。创建的模型可按照 Project 分组,并使用 CloudKit 存储在 iCloud 的私有数据库中。 + +> 由 SmartBaby 开发者 [@nixzhu](https://github.com/nixzhu) 自荐 + +## 代码 + +### [AloeStackView](https://github.com/airbnb/AloeStackView) + +AloeStackView 是一个类似垂直 UITableView 的类。它着重于让 UI 的实现变得非常的快速、简单和直接。不过为了实现更简单、更安全的API,它放弃了 UITababieView 的一些特性,如视图循环。 + +特性 +- 允许您保持对视图的强引用并动态更改其属性,而自动布局让 UI 实时更新。 +- 允许视图动态添加、删除、隐藏和显示,并提供可选动画。 +- 包括对视图间可定制分隔符的内置支持。 +- 提供可扩展的 API ,允许添加专用功能而无需修改 AloeStackView 本身。 +- 在高流量的 iOS 应用程序中广泛使用和审查。 +- 小的、易于理解的代码库(在500行代码之下)没有外部依赖性,调试轻松。 + +## 音视频 + +### [LEARN TALKS AWESOME CONFERENCE AND MEETUP TALK](https://learntalks.com/) + +顾名思义,learntalks 是一个学习如何 talk 的网站,面向技术人员。网站收录了技术领域时下热门的技术大会的演讲视频,其语言涵盖了 Swift,Kotlin, Javascript 等,颇有一种足不出户就能阅遍天下大会的感觉,学技术和学 talk 同时进行。推荐关注。 + +### [Flutter 免费视频教程第一季:开发环境搭建](https://juejin.im/post/5be3d54cf265da611d6624d3) + +手把手带你配置 Flutter 开发环境的视频教程,除视频外作者还编写了非常详尽的文字教程,对正在入坑 Flutter 的小伙伴可以看看。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#44-2018.11.19.md b/Reports/2018/#44-2018.11.19.md new file mode 100644 index 000000000..7e0ded750 --- /dev/null +++ b/Reports/2018/#44-2018.11.19.md @@ -0,0 +1,152 @@ +# 老司机 iOS 周报 #44 | 2018-11-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [Implementing features with ReactiveFeedback](https://ilya.puchka.me/implementing-features-with-reactivefeedback/) + +本文作者通过一个实例演示来介绍他们团队写的单向数据流应用框架 [ReactiveFeedback](https://github.com/Babylonpartners/ReactiveFeedback)。由于作者所在团队用的是 `ReactiveCocoa`,所以他们就基于 `ReactiveSwift` 自己实现了一套类似 `RxFeedback` 的框架。 + +虽然是教程类的文章,而且还是写自家框架的,但是阅读本文还是会有三层收获: +- To 普通开发,了解应用开发还能这么玩。如果大家对 `Redux`, `ReSwift`, `RxFeedback` 这些比较熟悉的话,文中介绍的框架结构和用法还是很好理解的。即使不熟悉,认真看也是能懂的,因为文章写得真是超级详细; +- To 框架维护,理解他们做类似架构演进的思路。单向数据流应用框架的可维护、可预测以及可测试性等这些特点可以较好地解决一个复杂应用工程会面临的臃肿混乱难以管理的问题。文中也提到 `ReactiveFeedback` 没有设计全局的应用状态,但是每个功能模块与外部交互时都有明确的主入口,内部只有自己独立的状态,使用起来非常简单灵活和方便; +- To 技术管理,通过技术手段来提高工程质量和效率是非常有意义的,特别是大家一起维护一套开发框架。能对应用架构和编程模式不断地进行探索,也是工程师文化的很好体现。经常做这类技术输出的团队肯定也是大部分人所向往的有技术氛围的团队。 + +### 🐢 [Docker ❤️ Swift & Vapor](https://theswiftdev.com/2018/11/15/docker-loves-swift-and-vapor/) + +Docker 作为近几年来服务端最重要的技术创新之一,解决了无数配置与运维的噩梦。而另一边,Server-side Swift 的蓬勃发展,似乎和 Docker 拥抱已经是一个必然。本文既是一篇非常棒的 docker 入门文章,用很简洁的篇幅讲了 docker 是什么,能做什么,并且给出了相应的学习路径,同时,也是一篇介绍如何使用 docker 技术来提升 Server-side Swift 的开发与配置效率的文章。作者生动的介绍了如何制作 Swift 的 docker image,如何实时修改 docker image 中的代码,最后还提出基于 docker compose 来实现基于 Vapor 的微服务架构,非常酷! 推荐大家阅读。 + + +### 🚧 🐕 [Assertions in Production](https://medium.com/device-blogs/assertions-in-production-e587fef5bfbc) + +作者围绕断言的使用展开了以下探讨: + +- 如何上报断言(Assertion)? + + 首先作者分享了将断言上报的代码片段。作者认为相较于 Property Testing(性质测试),断言等于真正的用户产生的 Property Testing,更加随机、多样和不可预测,而且不需要写任何测试用例。 + +- 何时加断言? + + 作者一般的规则是,在没有 `else` 的情况下,应该加断言。以下情况下也会加断言:确保方法传参正确的时候;从字典里用已知的 key 取值的时候(如 `NSNotification``userInfo`);确保必须在主线程进行的操作当前是否在主线程的时候;打开关键的数据库或者文件失败的时候。 + +- 对于线上的产品,是否应该让断言处 Crash? + + 作者认为没有必要。断言可以当做错误上报,但不应该造成闪退。 + +### 🐕 [Avoiding race conditions in Swift](https://www.swiftbysundell.com/posts/avoiding-race-conditions-in-swift) + +Race condition, 即竞争条件。我们都知道,当多个线程同时访问相同的资源,就可能会出现意想不到的问题。对此,线程安全一直是开发中需要额外关注的一个问题。本文讲了在 Swift 中,race condition 可能存在的场景,以及在平时的编码中,如何尽可能避免这种问题。 + +### 🐕 [What's .self, .Type and .Protocol? Understanding Swift Metatypes](https://swiftrocks.com/whats-type-and-self-swift-metatypes.html) + +`Swift Metatypes`,可能每天都在用,却很难解释清楚到底是什么东西,Apple 文档对此描述也比较晦涩,只说 `type of a type`。 + +文章从最简单的 `String` 开始,讲 `String.Type`、`string.self` 之间的关系,串起 `.Type` `.self` `type(of:)` `Protocol`,最后还介绍了一些 `Metatypes` 使用场景。 + +### 🐕 [用 Swift 解读 React/React Native: Part 1 - React Element & React Component](https://tech.glowing.com/cn/react-native-explained-in-swift-part-1-element-and-component/) + +本文系列文章第一部分,作者希望将 `React/ReactNative` 中的主要编程思想,应用在 `Swift` 中,以此提高提升开发效率和代码质量。作者认为 `React` 的核心概念为,将数据转化成视图描述数据,也就是 `Data` 到 `React Element` 的过程。在这个过程中,无形中引入了单向数据流,提升了代码的规范性和开发效率。文中介绍了如何用 `Swift` 实现 `Componet, Element, Node` 这几个关键部分。 + +### 🐢 [Mirror / Custom​Reflectable / Custom​Leaf​Reflectable](https://nshipster.com/mirror/) + +相对于 `Objective-C` 来说,Swift 没有 `Runtime` 不能实现类似 `swizzing` 功能。但得益于 `Mirror` 的`反射`功能,我们可以得到对象信息的只读访问,`Playground` 就是 `Mirror` 的一个主要场景。文章介绍了 `Mirror` 及相关的 `Custom​Reflectable` `Custom​Leaf​Reflectable` 两个 `protocol` 使用细节。 + +### 🐕 [分析实现-倒计时设计](http://sindrilin.com/2018/01/06/count_down_design.html) + +倒计时器是一个日常开发中很常见的需求,通过 `NSTimer`、`GCD` 或者 `CADisplayLink` 都可以轻易实现。本文作者在看到一个基于 `NSOperation` 的全局计时器方案后,引发了如何完成一个更高效、接口设计更合理的倒计时器轮子的思考。从选择存储结构出发,到最后的逻辑封装,作者一步步完成了自己的倒计时器。 + +虽然是一个很小的需求,但却很考验开发人员的编码能力,希望各位读者都能够从作者这种软件设计思维中有所得。 + +### 🐕 [在 Flutter 中嵌入 Native 组件的正确姿势是...](https://www.jianshu.com/p/82bb88d1ffe5) + +闲鱼团队的新文章,他们算是最早用上 Flutter 重写自己 App 的大厂团队,趟过的坑一定不会少,也值得其他人学习经验。 + +Flutter 最近也在各个国内大厂掀起了应用浪潮,如果有打算应用 Flutter 或者是已经在尝试应用 Flutter 的同学们,不妨考虑先读一读闲鱼团队的系列文章,可以让你少踩很多坑。本文就介绍了闲鱼团队在项目中嵌入 Native 代码的做法和背后的源码中的原理,虽然 iOS 中还暂时没有出现和 AndroidView 对应的控件,但是相信之后一定会有对应的控件跟上。目前在 Android 端有需求的同学们不妨先学习参考。 + +### 🐕 [Custom​Playground​Display​Convertible](https://nshipster.com/customplaygrounddisplayconvertible/) + +本文介绍了我们熟悉的 `Playground`,它通过 `PlaygroundLogger` 框架来实现实时反馈。文章前半部分花了大篇幅介绍这个框架支持展现的类型和 `Custom​Playground​Display​Convertible` 协议的用法。文章后半部分则从 `Playground` 自身的特殊性展开,总结了 `Custom​Playground​Display​Convertible` 跟 `CustomStringConvertible`、`CustomDebugStringConvertible` 以及 `Debug Quick Look` 之间的关系。读完全文,不仅能让我们知道了 `Custom​Playground​Display​Convertible` 怎么用的,而且也清楚了它的具体使用场景。 + +### 🐕 [Debugging a subtle Swift bug that will make you facepalm](https://www.jessesquires.com/blog/debugging-subtle-swift-bug-facepalm/) + +Jesse Squires 在修复一个 UI 测试的崩溃时,发现是因为 json 序列化时使用了 `[String: Any]` 作为容器,赋值时少写了一对括号导致的问题: + +```swift +func toDictionary() -> [String: Any] { + var dict: [String: Any] = [:] + + // code setting other keys and values... + + dict[JSONKeys.dateClosed] = self.dateClosed?.toMongoDate + + return dict +} + +extension Date { + func toMongoDate() -> [String: Any] { + // return date in expected mongo date format + } +} +``` + +这段代码是 Codable 之前就存在的,从这方面也印证了 Codable 的好处。 + + +### 🐕 [支付宝客户端架构解析:iOS 客户端启动性能优化初探](https://mp.weixin.qq.com/s/ewYBMdqrjVJUthRxkFW_3g) + +支付宝 mPaaS 团队又向大家带来了一篇启动性能优化的实践,本片文章主要从另一个角度探索启动性能优化,利用苹果的 Background Fetch 让 App 在后台的时候就能处理一些预加载任务,来解决真正启动性能中比较耗时的图片加载问题。我们也可以借此了解一下 iOS 的这种 Background Fetch 伪后台的作用机制 + + +## 工具 + +### [Commander](https://github.com/devedbox/Commander) + +`Commander` 简单而言,就是你通过 `Decodable & Decoder` 协议的规则书写 `struct` 来描述 `cli` 参数的输入,该库会进行解析检查,并且提供对应的描述帮助信息,也提供自动补全的机制。 + +### [Code Friend](https://qvcodefriend.github.io) + +自 Xcode 8 开始,苹果提供了 `XcodeKit` 用于开发 Xcode Extensions,但是开发者们似乎并不买账。Code Friend 通过 `JavaScriptCore` 封装了 `XcodeKit` 的原生方法,并提供了使用 JavaScript 接口来快捷地开发 Xcode 插件。你可以直接在 Mac App Store 中找到它,但是还是建议你先读一读[这篇文章](https://mp.weixin.qq.com/s/oQJXtZYcO4u6m4SCHZUT_w)。 + +## 音视频 + +### ["Promises everywhere", with special guest Max Howell](https://www.swiftbysundell.com/podcast/36) + +15 年的时候,有位牛人,曾经在 Twitter 上吐槽自己去 Google 面试被拒经历。Google 说 90% 的工程师使用他写的软件,但是因为他不能在白板上翻转二叉树,so fuck off...这个事情相信很多人都听过,而这个人,正是大名鼎鼎的包管理软件 HomeBrew 的作者 Max Howell 。就在近期,Sundell 邀请了他作为嘉宾,在这期播客里讨论了包管理器的设计、异步编程、面试流程以及 Swift Package Manager 是如何诞生的。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解我所在项目组信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#45-2018.11.26.md b/Reports/2018/#45-2018.11.26.md new file mode 100644 index 000000000..7826c2dd3 --- /dev/null +++ b/Reports/2018/#45-2018.11.26.md @@ -0,0 +1,157 @@ +# 老司机 iOS 周报 #45 | 2018-11-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 小专栏 + +[Swift 开源项目精选导图](https://xiaozhuanlan.com/topic/5271086934) + +这份文档主要基于微博 [@SwiftLanguage](https://weibo.com/swiftlanguage) 跟踪过活跃于 Swift 语言领域的那些 GitHub 开源项目,顺便也是对于过去几年关注的内容进行一次系统化梳理。尝试整理出一份相对结构化且精练的 Swift 开源项目参考知识库,它将主要以思维导图形式呈现。 + +## 文章 + +### 🌟 🐢 [Hades:移动端静态分析框架](https://tech.meituan.com/hades.html) + +本文介绍了大众点评基于 Objective-C 的代码静态分析工具 Hades 的研发经验,重点解决了以下痛点: +- 开发成本高,收益有限,研发参与积极性不够。 +- 针对局部代码分析,跨编译单元以及全局性分析较难。 +- 增量分析困难,CI 静态检查效率低下。 +- 工具性较强,大部分只作代码规范检查,应用范畴局限。 +- 接入和维护成本高,难以平台化。 + +Hades 相对于市面上已有的工具,在研发端解决了代码检查规则维护困难的问题,在 CI 端解决了性能问题,因为针对每次检查都可以持久化 Model 对象,在扩展性上还有很大的想像空间,大众点评团队为我们提供了很好的代码静态分析工具研发思路。目前 Hades 还是闭源阶段,将来有可能转为开源。 + +P.S. 目前iOS平台上的代码静态分析工具一览表 +[SwiftLint](https://github.com/realm/SwiftLint) +[Appscreener](https://appscreener.us/) +[Checkmarx](https://www.checkmarx.com/technology/supported-coding-languages/) +[Fortify](https://github.com/mre/awesome-static-analysis) +[Infer](https://github.com/facebook/infer) +[oclint](https://github.com/oclint/oclint) +[Veracode](http://www.veracode.com/products/static-analysis-sast/static-code-analysis) + +### 🐕 [Swift Development with Visual Studio Code](https://nshipster.com/vscode/) + +Swift 在早些时候宣布将支持 LSP(Language Server Protocol),整个社区都沸腾了。人们涌上街头,奔走相告,一遍遍的确认着:我们可以摆脱 Xcode 了吗?VSCode 作为 LSP 支持的先驱者与佼佼者,目前基本已经是行业排行第一的通用型代码编辑器。 + +本篇文章由 mattt 大神出品,详细介绍了怎么在 VSCode 中配置 Swift 的开发环境。目前虽然 Swift 的 LSP 支持还处于 early stage,但已经可以支持最常用的自动完成、快速帮助以及跳转定义等功能。并且基于 VScode 强大的插件生态,还有 SwiftLint 这样的插件可以来提升代码的风格优化。不得不说,人们对于 Swift,尤其是非 Apple 生态下的 Swift 开发体验跨越式升级,已经发生。 + + +### 🚧 🐢 [Xcode and LLDB Advanced Debugging Tutorial](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-1-31919aa149e0) + +作者准备了一个简易项目,演示了如何利用 Xcode 和 LLDB 进行高级调试。 + +- [第一部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-1-31919aa149e0) 在断点处添加调试命令,注入一行新代码进行调试。 + +- [第二部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-2-8bfeae4cdfdb) 通过给属性添加观察点,当其变化的时候,会中断程序,观察到属性变化的前后值,及可以进行堆栈追踪。 + +- [第三部分](https://medium.com/@fadiderias/xcode-and-lldb-advanced-debugging-tutorial-part-3-8238aca63e7c) 在断点中,通过调试命令新增新的断点,使断点在某些场景下才开始执行,更高效的追踪问题。 + +### 🚧 🐢 [A taste of MVVM and Reactive paradigm](https://medium.com/flawless-app-stories/a-taste-of-mvvm-and-reactive-paradigm-5288a819cca1) + +本文通过一些简单的类讲述了什么是 MVC 和 MVVM,以及如何进一步研究 Rx。您可以自由地创建自己的架构,但无论您做什么,一致性都是关键,不要让别人看的时候感到困惑或惊讶。 + +所有设计模式的简单原则可总结为: + +- 确定应用程序的各个方面的变化,并将它们与保持不变的方面分开 +- 编程到接口,而不是实现 +- 组合好过继承 + +希望本文对正在为架构选型而头疼的朋友有所帮助。 + +### 🐕 [实用的可选项(Optional)扩展](https://swift.gg/2018/11/19/useful-optional-extensions/) + +`Option` 是 `Swift` 最基础的内容,它迫使开发者们处理好一些临界情况,使得程序更加健壮。标准库中 `Option` 的 API 非常少,编码过程中通常需要配合 `if let` `guard let` 一起使用,这容易造成多分支。作者参考了 `Rust` `Scala` 等语言的实现,给出了一些 `Option` 扩展,或许你可以用于自己的项目中。 + +### 🚧 🐕 [Stubbing in pair with Swift compiler](https://medium.com/@londeix/stubbing-in-pair-with-swift-compiler-c951770a295b) + +Unit tests 中 stubbing 是一个很常见的做法,现在也有很多成熟的框架。而本文却从另外一个角度来做: 利用 Swift 的语言特性来做另类的轻量级的 Stubbing。 +这种做法的应用面虽然比较有限,但是不妨可以了解一下作为参考。 + +### 🐕 [关于 performSelector:afterDelay: 的一个坑及思考](https://juejin.im/post/5bee9218e51d4520b7711fc8) + +本文通过对于 `performSelector:afterDelay:` 函数进行了研究,总结了以下三点内容: + +1. 在一个没有开启 `RunLoop` 的子线程中调用 `performSelector:afterDelay:` 函数,最终是不会被执行的 +2. 看似相近的 API,可能不是同一个模块提供的,其实现方式也不尽相同 + - `performSelector:` 来自于 `NSObject.h`,其是有 id 类型的返回值,并不依赖于子线程的 `RunLoop` 开启状态 + - `performSelector:withObject:afterDelay:` 来自于 `NSRunloop.h`,其并没有返回值,依赖子线程的 `RunLoop` 开启状态 + - `performSelectorOnMainThread:withObject:waitUntilDone:` 来自于 `NSThread.h`,其并没有返回值,依赖主线程的 `RunLoop` 开启状态 +3. `performSelector:` 中函数定义在其他地方就会引起编译警告,如果函数没有返回值可以使用 `performSelectorOnMainThread:` 或者 `performSelector:withObject:afterDelay:` 来避免编译警告 + +### 🐕 [函数式编程 - 有趣的 Monoid(单位半群)](https://www.jianshu.com/p/f935e54faad3) + +本文介绍了在函数式编程中比较核心的一个概念 Monoid(单位半群)。从半群到单位半群,从数学定义到 Swift 的展开实现,以引导教学的方式带领读者一步步深入了解 Monoid,极易消化理解。后半部分介绍了几个有趣实用的 Monoid 类的数据结构,且都有递进式的概念讲解及 Swift 实现。 + +另外,本文是近两年来作者关于[函数式编程系列](https://www.jianshu.com/c/884e7fb9b8ec)文章中的最新一篇。本系列文章同样都是采取引导递进式的行文风格,作者从 Haskell 这种标准化的、通用纯函数式的编程语言中汲取灵感,将诸多函数式编程的核心概念改造为 Swift 实现,让我们从新的角度去认识 Swift 以及 与 Swift 相关的函数式编程思想,Swift 或 函数式编程爱好者不容错过。 + +### 🐎 [Unit testing retain cycles](https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/) + +循环引用问题会造成内存泄露,轻则影响应用性能,重则导致应用闪退,非常影响用户体验。同时它也是不太容易被发现的。所以在开发测试过程中,增加对循环引用的检测很有必要。 + +本文就介绍了如何在单元测试中检查循环引用。思路很简洁,通过建立弱引用去检测。这样我们就能保证代码库本身没有问题,正如文末所说的 “get a level of comfort”。除了检测方式,作者所表现出的这种为代码负责任的态度也是值得我们学习的。 + +### 🐕 [Self-sizing Table View Cells](https://www.raywenderlich.com/8549-self-sizing-table-view-cells) + +这是一个关于 tableview cell 的布局教程,该本教程中,您将学习如何启用自动调整大小的 cell ,以及如何使它们按需调整大小并支持动态类型。该教程通过 storyboard 加代码的教程形式,一步步完成一个大家常见的 tableview 需求,并附上了项目 demo 。 + +### 🐕 [Extending optionals in Swift](https://www.swiftbysundell.com/posts/extending-optionals-in-swift) + +Swift 里的 Optional 虽然帮助我们保证了内存安全访问,但在很多情况下都需要我们解包后再进行操作,让代码显得比较啰嗦而且不连贯。 + +Sundell 这周就给我们带来了 Optional 的实用拓展,总结了一些 Optional 常见场景,并且构建对应的语法糖去优化 Optional 的使用。 + +### 🐕 [Swift Async Operations at Your Command](https://tworingsoft.com/blog/2018/11/19/swift-async-operations-at-your-command.html) + +当一个操作相对比较复杂时,使用 Operation 封装上下文会是一种比较合理的做法,这篇文章里作者分别介绍了 Fabric 封装的 FABAsyncOperation 和 FABCompoundOperation 以及各自的使用场景,并且讲述了他在项目中使用 Swift 重写的过程。 + +### 🐕 [关于 Swift defer 的正确使用](https://onevcat.com/2018/11/defer/) + +在 Swfit 中,defer 关键字即为延迟的意思,用 defer 声明的 block 并不会立刻执行,而是在当前代码执行退出后被调用,这类似于 JAVA 里的 try/finally。最近,喵神在重构 `Kingfisher` 的时候,因为 defer 的使用不但而造成了 bug。为此,喵神完整梳理了下 defer 的特性以及使用方法。 + +## 代码 + +### [30-seconds-of-swift-code](https://github.com/elizabethsiegle/30-seconds-of-swift-code) + +一个立志于让你 30 秒看懂一段 Swift 代码的项目,较为新手向,方便新人快速了解 Swift 的内建函数。当然老鸟也不妨一读,总有你漏掉的知识点。 + +### [LINE SDK for iOS Swift](https://github.com/line/line-sdk-ios-swift) + +用 Swift 开发的 iOS LINE SDK 可以让我们用现代化的方式来实现 LINE API,包括用户认证及通过 OpenID 获取用户信息等功能,为 iOS app 开发有吸引力的、个性化的用户体验。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳字节跳动研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@邦Ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#46-2018.12.03.md b/Reports/2018/#46-2018.12.03.md new file mode 100644 index 000000000..830d6364a --- /dev/null +++ b/Reports/2018/#46-2018.12.03.md @@ -0,0 +1,161 @@ +# 老司机 iOS 周报 #46 | 2018-12-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Apple 举办编程一小时活动](https://www.apple.com/cn/today/collection/hourofcode/) + +在 12 月 1 日至 14 日期间,Apple 将在全国的 Apple Store 零售店举办「编程一小时」活动,现在已开放报名。你将有机会从编程基础知识入手,用 Swift 语言写代码,为机器人编程。也许这一小时的课程,将开启你对编程一生的热爱。 + +### [App Store Connect Holiday Schedule](https://developer.apple.com/news/?id=11272018) + +因圣诞假期,App Store 将在 12 月 23 日至 27 日停止应用审核。 + +## 文章 + +### 🐕 [Animations are assets: using Core Animation archives on iOS](https://rambo.codes/ios/2018/11/11/animations-are-assets.html) + +作者在逆向过程中发现了 `Animations` 也可以作为资源归档,并且在2016年的时候已经上线了一款使用该技术的 APP。 +简单而言,就是将 `Core Animation` 添加完动画效果的 `layer` 利用 `NSKeyedArchiver/NSKeyedUnarchiver` 进行归档,然后在 APP 需要动画的时候进行加载,文中附有 `Demo`。 + +- 使用 [Kite软件](https://kiteapp.co/) 进行方便动画的制作,并且导出 `CAAR` 文件(也可以自行代码 `archiver` 后导出)。 +- 因为导出的文件是一个 `CoreAnimation layer tree`,你可以实现颜色改变,形变等 `CoreAnimation layer` 的动画效果。 +- `CAAR` 文件独立,意味着你可以放在 `Asset Catalog`, `Bundle`,甚至服务器下发。 +- 不需要依赖另外的第三方动画框架。 + +延展阅读: + +- [Kite Compositor:原型设计新玩具](https://zhuanlan.zhihu.com/p/25673691) + +### 🐢 [iOS 12 Password Tools: Improving User Security and Experience](https://www.raywenderlich.com/7162-ios-12-password-tools-improving-user-security-and-experience) + +在本教程中,您将使用这些 iOS 12 安全工具,使您的用户能够: +- 在您的网站和您的应用之间共享和同步密码。 +- 保存并更新iOS密码。 +- 自动生成安全密码。 +- 访问通过短信发送的验证安全代码,无需离开应用。 + +### 🐕 [Extending optionals in Swift](https://www.swiftbysundell.com/posts/extending-optionals-in-swift) + +Swift 中的可选值实际是定义了一个 `Optional` 枚举,所以我们可以通过扩展枚举,让我们以一种更好的方式处理可选值。 + +我们可以给枚举添加一个扩展方法,当值为 `nil` 的时候抛出 `error`,直接将方法接入到调用末尾,则能轻松将缺失值转换为一个错误。 + +当然你也可以发挥更多想象力,添加扩展将值的逻辑判断代码、类型匹配代码等等操作封装起来,最终得到一个更好,更容易阅读的调用链。 + +### 🐎 [When to use UserDefaults, Keychain, or Core Data](https://fluffy.es/persist-data/) + +本文总结了我们开发过程中常用的几种数据存储方式的使用场景,以及它们的使用方法和注意点。都是比较初级的知识,但作者写得很详细,总结的也很到位。 + +- UserDefaults + + 用来存储不敏感的少量数据,比如需要持久化的用户设置、游戏分数、播放的歌曲名等。 + +- Keychain + + 用来存储相对敏感的少量数据,比如用户密码、内购状态、令牌密钥等。 + +- Core Data + + 用来存储数据量大的列表、关系型数据,以及需要查询和筛选的数据,比如 Todo 列表、文章评论等。 + + +### 🐢 [A Comparison of Swift and Kotlin Languages](https://www.raywenderlich.com/6754-a-comparison-of-swift-and-kotlin-languages) + +尽管 Swift 和 Kotlin 在语法上有太多相似的地方,但也仍然有很多核心特性上的差异。本文重点介绍了 Swift 和 Kotlin 之间的异同。 + +从代码风格和语法层面详细对比了属性,数据结构,方法,闭包,可选类型,流程控制,类,扩展,协议,功能性语法等重要语言特性的相似点和不同点。同时推荐了许多其他对比 Swift 和 Kotlin 的文章。 + +### 🐢 [手把手教你给企业微信 Mac 客户端去除水印](https://zhaoxinyu.me/2018-11-24-crack-wew/) + +目前,许多公司使用了企业微信作为内部聊天工具,既然是企业级的,免不了界面会有水印,这可以使公司的内部信息被员工截图散播出去时候可以有效的溯源等等。 + +水印有两种情况,一种是在客户端合成的,另一种是 server 下发的图片就带有水印。前者通过反编译客户端进行去除,而后者相对较难,只能通过图像技术去做。企业微信 Mac 的客户端水印就属于前者。 + +所以,文中笔者就尝试反编译的手段成功去除了水印。不过,本文更适合作为反编译的实战教学文章来观看,一方面是截图公司的信息散布出去本事也并不好,另一方面是不能保证微信企业客户端没有暗水印。 + +### 🐕 [Evaluating SwiftSyntax for use in SwiftLint](https://www.jpsim.com/evaluating-swiftsyntax-for-use-in-swiftlint/) + +之前 SwiftLint 是基于 SourceKit 封装了一套 API 去处理语法规则的。现在 SwiftSyntax 出来之后,本来打算使用它去简化之前的语法规则,结果发现运行效率竟然变低了。文中笔者给出了具体原因:SwiftSyntax 对于每个文件解析都新开一个 Swift 编译器实例拖慢了整体速度。 + +### 🐕 [解读 App Store 审核黑箱政策 —— 远没有你想象的那么邪恶](https://juejin.im/post/5bfd2ae7f265da61141c4bf7?utm_source=gold_browser_extension) + +作者在 App Store 上架了 15 款应用,与 App Store 审核的往来超过几百次,在这篇文章里,作者分享了他对 App Store 的理解和看法,具体包括 App Store 采用黑箱审核的原因、为何难以得到清楚的答复、双标情况以及对于 App Store 审核的几点建议。 + + +## 工具 + +### [ReadyForBAT - iOS 面试准备之思维导图](https://github.com/MisterBooo/ReadyForBAT) + +作者在学习完慕课网 iOS 面试实战项目后利用思维导图做了总结。这套导图覆盖面较广,可以给正在跳槽或者准备年后跳槽的各位同行用作参考,好好梳理一遍自己的知识体系。 + +### [Komondor - Git Hooks for Swift projects](https://github.com/orta/Komondor) + +Komondor 是一款帮助简化 Git Hook 设置的工具,它依赖于 Swift Package Manager 的运行,只要在 Package.swift 里加上依赖,然后像这样去指定 hook 就可以完成设置: + +```swift +import PackageConfig + +let config = PackageConfig([ + "komondor": [ + "pre-push": "swift test", + "pre-commit": [ + "swift test", + "swift run swiftFormat .", + "swift run swiftlint autocorrect --path Sources/", + "git add .", + ], + ], +]) +``` + +## 代码 + +### [appstoreconnect-swift-sdk](https://github.com/AvdLee/appstoreconnect-swift-sdk) + +上个月苹果终于将 WWDC 2018 里提到的 App Store Connect API 开放给广大开发者。这是一个基于 Swift 编写的 SDK,可以让开发者方便地使用苹果开放的这些接口。 + + +## 音视频 + +### [ggtalk | 聊聊 Swift 这四年(上)](http://talk.swift.gg/5) + +Swift 自第一次推出到现在,已经有了四年的时间。这四年语言本身经过了很多发展,很多改变,而国内的 iOS 开发行业,Swift 开发者的生活和工作,也发生了很多变化。从 14,15年的黄金时代到16年的 ‘iOS 没人要了’,再到18年的 ‘iOS 又有人要了’,今年,Swift 5.0 终于提出要把 ABI 稳定放在首位,这应该算一个 Swift 重要的一个里程碑。在这样一个时间点,ggtalk 请了几个使用 Swift 的程序员,一起聊了聊 Swift 的这四年(ggtalk 是国内 Swift 社区 SwiftGG 推出的程序员闲聊节目)。有空的时候可以听听,相信同样写 Swift 的你,会有共鸣。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#47-2018.12.10.md b/Reports/2018/#47-2018.12.10.md new file mode 100644 index 000000000..99ea5b85c --- /dev/null +++ b/Reports/2018/#47-2018.12.10.md @@ -0,0 +1,179 @@ +# 老司机 iOS 周报 #47 | 2018-12-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +🌟 [我们发福利啦~](https://www.wjx.top/jq/32164990.aspx) + +周报已经快陪伴大家走过一年的时间,非常感谢各位朋友的支持和厚爱。为了在 2019 年能更好地为大家服务,我们举办了一个问卷调查活动。在 12 月 27 日,我们会在参与问卷的朋友中选取合适的几个人赠与学习大礼包和现金奖。至于奖品是什么,大家可以在[这条微博](https://weibo.com/3165754627/H6t1EmqRh)中了解,转发还有额外的抽奖~我们渴望听到你们的声音! + +## 新闻 + +### 🌟 [Result 类型将加入标准库](https://forums.swift.org/t/accepted-with-modifications-se-0235-add-result-to-the-standard-library/18603) + +Result 类型经历了一整个月的讨论终于决定加入标准库,预计 Swift 5 就能完成实现,这次的提案关注的人非常多,经历了两次修改三次讨论才最终通过。 + +讨论的焦点主要集中在 Result.Error 的定义上,喵神也写了一篇文章[讨论这个问题](https://onevcat.com/2018/10/swift-result-error/),一句话总结就是,Swift 出于兼容性和实现的考虑,一直没有实现 Typed Throw,所以 Result.Error 很难实现为一个泛型参数,甚至在草案阶段决定让 Result.Error 不遵循 Swift.Error。 + +后来 Swift 团队专门给这个提案开了后门,调整了[泛型参数的实现](https://github.com/apple/swift/pull/20629),让 Swift.Error 成为了目前唯一一个可以作为泛型参数存在的泛型类型,以便与 Cocoa 的 API 进行更好的交互,才结束了这场讨论。 + +从这一次也可以看出,Swift 核心团队还是希望让抛出的错误能够有具体的类型(而不是一个泛型的 Swift.Error),所以才会开后门使用这种过渡性的方案,这次的提案让我感觉 Typed Throw 还是有希望的。 + +另外如果大家有兼容性方面的担忧的话,由于提案的作者是 Alamofire 负责人之一,所以最终通过的版本与 Alamofire 采用的 Result 差异很小,如果你采用的是这个版本的 Result 的话,就不必过多担心。 + +### [Flutter 1.0 正式版: Google 的便携 UI 工具包](https://mp.weixin.qq.com/s/hCIN42OMmmc6HkOveegwWQ) + +万众瞩目的 Flutter 1.0 终于正式发布,从我们首次看到 Flutter 的 Beta 测试版,到如今的 1.0 正式版,总共经过了 9 个多月。Flutter 的高性能跨平台渲染与热重载等优秀的特性相信会让移动开发者们眼前一亮,在早先 beta 期就已经有很多公司与团队进行了这方面实践,现在 1.0 来了,作为移动开发者当然要感受一下 + Flutter 的魅力。 + +## 文章 + +### 🌟 🚧 🐢 [Dependency Injection on iOS — part 1-4](https://medium.com/@fernandodelrio/dependency-injection-on-ios-part-1-4-8847f302b3d9) + +本长文的主题是关于架构的,切入点是依赖注入在 iOS 上的应用,共分成了四篇文章。作者从描述模块耦合的概念,到介绍使用依赖注入能带给我们的好处(可复用性、可维护性、可扩展性和可测试性),以及推荐了一款依赖注入的框架(Swinject)后开始进入正题 —— 通过编写和优化一个简单应用来实践依赖注入的概念和感受它带来的好处。全文结构非常清晰,举例也很详尽,是一篇学习和感悟架构,特别是依赖注入的好文章。 + +### 🌟 🐢 [iOS App冷启动治理:来自美团外卖的实践](https://mp.weixin.qq.com/s/jN3jaNrvXczZoYIRCWZs7w) + +文章整理了 APP 冷启动的三个阶段,对三个阶段分别提出了存量解决方案、管理增量方案和监控体系。下面几点是文章观点的总结: +- 冷启动阶段T1: 点击 APP 图标进入至 main 函数,这两者之间的耗时 + - 代码瘦身,废弃无用代码和资源文件 + - 延时 +load 函数,将函数延迟到合适的触发时机,比如说冷启动结束之后 +- 冷启动阶段T2: main 函数后至 didFinishLaunchingWithOptions 函数执行完毕,这两者之间的耗时 + - 整理 APP 启动阶段,顺序化子项目的启动顺序 + - 分阶段启动,利用自验的 `Kylin` 项目,将子项目的注册信息(启动阶段、启动需要执行的代码等)写入 `__DATA` 数据段中,运行期读取 `__DATA` 段代码,并赋予执行。 + - 利用工具(Time Profile/自研的 Caesium)整理执行过程中的一些隐晦耗时,比如归档操作、IO操作、资源任务等 +- 冷启动阶段T3: didFinishLaunchingWithOptions 函数至首页渲染完成,这两者之间的耗时 + - 将 APP 的 RootViewController 设置为闪屏,同时进行首页UI的构建,加快 RootViewController 的加载 + - 整理首页加载的串行操作,优化体验成并行操作 +- 数据监控:除了上述的优化外,建立监控体系,保证持续优化成果 + - 冷启动的开始与结束时间对比,值得注意的是这里的开始时间采用了 APP 进程创建时间 + - 冷启动过程中的关键节点都有手动添加的测速点,并自动上报 + +### 🐕 [如何提高工作效率 - 自动化篇](https://juejin.im/post/5bfac61ee51d454af013a900) + +在本文中,作者向我们介绍了 `macOS` 环境下几种自动化的实现方案,并以自己的亲身实践案例为我们讲述了大体的实现流程,以下为文中的案例: +- 利用 `Shell Script` 和启动加载任务,在开机过程中自动配置双网卡 +- 利用 `Apple Script` 访问 `Microsoft Outlook` 自动生成和填充邮件,完成每日邮件汇报工作 +- 利用 `Apple Script` 和热键,快速定位当前 Finder 路径到 iTerm 的窗口当中 +- 利用 `Apple Script` 和 `Alfred WorkFlows` 进行快速保存/搜索记录瞬间想法 +- 利用 `Shell Script` 和 `Apple Script` 定时拉取并编译代码 + +### 🐢 [iOS 内存管理的那些事儿](https://juejin.im/post/5c0744f6e51d45598b76f481?utm_source=gold_browser_extension) + +`iOS` 中的内存管理一直是令开发同学们比较头痛的事情,自 `ARC` 问世以后,虽然不再需要我们手动管理内存,但是掌握内存管理的相关知识依然是十分有必要的。 + +作者通过研读源代码的方式向我们详细讲解了内存管理的实现原理,并列举了一些日常开发中容易导致内存泄漏的常见场景,掌握这些有助于我们在复杂业务场景中更好的避免内存相关的问题。并且作者后续会介绍一些开源检测内存泄漏的工具及实现,大家可以持续关注。 + +### 🐕 [Rethinking Design Patterns in Swift: State Pattern](https://khawerkhaliq.com/blog/swift-design-patterns-state-pattern/) + +这篇文章展示了如何在 Swift 中实现状态模式(State pattern),借助 Swift 强大的能力,让模式实现变得简单而又灵活。此文通过一个实例来探索状态模式的各个方面,并且评估其处理需求变更的能力。然后还会讨论实现该模式的关键考量、收益以及实际应用。 + +### 🐎 [技术人的成长](https://xiaozhuanlan.com/topic/8719460352) + +作者从自身的经验和感悟出发,从三个维度描述了技术人的成长道路 +- 抵御所谓“全栈”的诱惑,聚焦领域。 +- 扩大视野,提高技术敏锐程度。 +- 多看多尝试,不要空想 + +总体来说,就是到了一定的技能熟练度以后,从广度上拓展自己的知识面,从深度上钻研某一个垂直领域,将能够极大的帮助大家从普通工程师进阶到高级工程师。 + +### 🐕 [Category:从底层原理研究到面试题分析](https://juejin.im/post/5c0332ba6fb9a049d4418cac?utm_source=gold_browser_extension) + +随着移动端的发展,从 `weak` 面试题的一步步升级就能明白,我们应该多进行深入了解底层实现细节。 + +作者从源码进行一步步分跟踪和分析,整理 `Category` 整个的执行顺序,非常适合想了解其工作原理的同学们看。并且还提供了一个简单动画示意图。通过阅读,可以清晰地回答面试中常见的几个 `Category` 相关的问题。 + +另外 `load` 和 `initialize` 也给出了源码分析和对比表格。在准备面试的同学,尤其适合阅读一番。 + +### 🐢 [iOS: ARM64不定函数传参问题调试剖析](https://github.com/SwiftOldDriver/iOS-Weekly/issues/950) + +从实际开发中遇到的一个平台相关的 crash 问题出发,通过代码对比,研究了在 x86-64 架构和 ARM64 架构对于不定函数参数传递的方式——特别是 iOS 系统的不同之处,同时也解答了为什么在调用带不定参数类型的 C 函数指针时,应该显示将其强转为对应参数类型的函数指针问题。 + +### 🐢 [【译】Swift 中的面向协议编程:是否优于面向对象编程?](https://swift.gg/2018/12/03/pop-vs-oop/) + +本篇是 SwiftGG 最新出炉的译文,原文在上月 [周报第42期](https://juejin.im/entry/5bdf9f8ae51d453bab19e546) 推荐过,可以再回顾一下。 + +### 🐢 [Swift Protocols: Tips and Tricks](https://www.hackingwithswift.com/articles/138/swift-protocols-tips-and-tricks) + +`Protocol` 是 `Swift` 的基础,我们可以定义方法,甚至提供默认实现。本文介绍了 `Protocol` 的一些小 tips,比如 `协议组合`、`Protocol extensions`、利用 Protocol 实现`模板方法设计模式`等。 + +### 🐎 [8 Useful Swift Extensions](https://www.hackingwithswift.com/articles/141/8-useful-swift-extensions) + +文中列举了 8 个Swift中比较实用的 Extensions,比如字符串中字符个数、计算两个日期之间的天数,给字符串添加前缀等。当然,我觉得这 8 个远远不能满足于日常的开发,所以我更推荐大家看一下 [SwifterSwift](https://github.com/SwifterSwift/SwifterSwift) 这个库,里面都是很实用的 Extension。如果你有什么不错的 Extension 推荐,也可以给这库贡献自己的代码哦。 + +### 🐕 [simctl](https://nshipster.com/simctl/) + +`simctl` 是苹果提供给开发者驱动 Xcode Simulator 的命令行工具。我们能够通过它做到:启动模拟器,在桌面和模拟器之间复制和粘贴,进行视频录制等。 + +### 🐢 [Swift Program Distribution with Homebrew](https://nshipster.com/homebrew/) + +本文介绍了当你创建了 mac 上的命令行工具的时候,如何进行分发,文中介绍的工具是 Homebrew 。 +1. 创建一个 Makefile 文件 +2. 编写一个 Homebrew formula (相当于编译打包) +3. 自测需要,可以先试试本地安装,确保安装过程顺利 +4. Homebrew 安装 formula 是基于 Tap 的,所以需要发布一个 Tap +5. 用户可以根据远端的 Tap 来安装 formula 了 + +### 🐢 [与 JOSE 战斗的日子 - 写给 iOS 开发者的密码学入门手册](https://onevcat.com/2018/12/jose-3/) + +JOSE (Javascript Object Signing and Encryption) 定义了一系列标准,用来规范在网络传输中使用 JSON 的方式,本文介绍了 如何使用 Security.framework 处理 JOSE 中的验证。对比已有的 JOSE 实现框架,譬如 [JOSESwift](https://github.com/airsidemobile/JOSESwift) ,[JSONWebToken.swift](https://github.com/kylef/JSONWebToken.swift) , [Swift-JWT](https://github.com/IBM-Swift/Swift-JWT) , [vaper/jwt](https://github.com/vapor/jwt) 等等,作者的方案优势在于同时支持 RSA 和 ECDSA ,并且不需要引入复杂的依赖关系 + +## 设计 + +## 工具 + +### [Publish Your Flutter App on macOS](https://feather-apps.com/) + +最近 Flutter 扩张势头似乎没有停下来的意思,反而看起来越来越凶猛了。 + +Flutter 除了可以写 iOS,Android App 之外,其实,也是“支持” macOS, Windows 和 Linux 的。只是这并不是那种官方支持,而只是把移动版 App 直接跑在 Desktop 上, 类似明年 macOS 要支持 iOS App 运行一样。 + +Google 的 Github Repo 下有一个叫 [flutter-desktop-embedding](https://github.com/google/flutter-desktop-embedding/) 的项目,就是做这样的桥接工作的,只是这库确实不是很好用,使用比较麻烦。 + +于是有第三方开发者做了基于 flutter-desktop-embedding 的工具,可以方便的将你已有的 Flutter 工程打成 macOS 包。同时他们还做了一个小型商店,开发者可以一键上传,其他人也可以很方便的下载安装。 + +有兴趣的童鞋可以尝试一下把自己的 Flutter App 跑在 macOS 上,来看看那是什么样的感觉。 + +## 音视频 + +### [ggtalk | 聊聊 Swift 这四年(下)](http://talk.swift.gg/6) + +上周推荐了上部,收到了不错的反响。在这期(下)中,几个程序员聊了最近几年 Swift 领域发生的事情,比如 jspatch 导致的大规模下架事件,第二第三届 Swift 开发者大会的一些故事。最终探讨了 Swift 的未来,内容同样精彩,不容错过。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦Ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#48-2018.12.17.md b/Reports/2018/#48-2018.12.17.md new file mode 100644 index 000000000..7f207c82f --- /dev/null +++ b/Reports/2018/#48-2018.12.17.md @@ -0,0 +1,195 @@ +# 老司机 iOS 周报 #48 | 2018-12-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +🌟 [我们发福利啦~](https://www.wjx.top/jq/32164990.aspx) + +周报已经快陪伴大家走过一年的时间,非常感谢各位朋友的支持和厚爱。为了在 2019 年能更好地为大家服务,我们举办了一个问卷调查活动。在 12 月 27 日,我们会在参与问卷的朋友中选取合适的几个人赠与学习大礼包和现金奖。至于奖品是什么,大家可以在[这条微博](https://weibo.com/3165754627/H6t1EmqRh)中了解,转发还有额外的抽奖~我们渴望听到你们的声音! + +## 新闻 + +[2018 App Store 年度颁奖典礼](https://mp.weixin.qq.com/s/rd3flwSuuXpHeKgtnwXnfg) + +Apple 的年度 app 精选又出炉了,为了介绍和表彰获选 app,这是 App Store 和 Apple 官方微信联合呈献的 2018 App Store 年度颁奖典礼,欢迎围观下载。 + +[Perfect 4 将会使用 SwiftNIO](https://github.com/PerfectlySoft/Perfect-NIO) + +[SwiftNIO](https://github.com/apple/swift-nio) 是一个跨平台、异步、事件驱动的网络应用框架,可用于快速开发和维护高性能的网络协议服务器和客户端。对比同样是 Swift 服务端的框架的 Vapor,已在今天 5 月发布的 Vapor 3 中全面使用了该框架。当然作为一个底层框架,你一般不会直接和它打交道。 + +## 文章 + +### 🌟 🐕 [解密 Runloop](https://mp.weixin.qq.com/s?__biz=MzI5MjEzNzA1MA==&mid=2650264704&idx=1&sn=c32d676f7c8a7803ac795442cd5fc377&chksm=f40685b5c3710ca3c2dc022e6703d3fd5e66545977c9e9fdc63ee71714123f8698639fe6f0a2) + +很显然,`Runloop` 是一个很熟悉的名词,熟悉到每次面试都会碰到有人问你,请说说你对 `Runloop` 的理解。`Runloop` 是开源的,因此本文作者通过精简后的源码示例来解释 `Runloop` 的基本执行顺序。 + +- 基本流程:循环执行(执行任务->通知外部->休眠)。 +- `Runloop` 依赖 `mach_msg` 进行进程间通信,也就是消息接收发送。 +- `Runloop` 里面会执行 `source0`(可调用 `CFRunLoopAddSource` 创建),`source1`(仅系统调用)。 +- `Runloop` 会执行5类任务 `timer, mainQueue, source0, source1, block`。 +- `Runloop` 通过注册 `observer` 的方式来通知外部当前的任务执行状态,而5类任务中 `mainQueue,source1,block` 不支持注册 `observer`,也就是你无法通过 `obsever` 来得到准确的执行时间。 +- `Runloop` 的 `Activity` 也是通过 `observer` 来通知外部当前处于哪个 `Activity`,当 `source0` 被执行的情况下,`kCFRunLoopBeforeWaiting` 和 `kCFRunLoopAfterWaiting` 会被跳过,意味着单纯通过对 `Activity` 的回调进行分析业务代码的执行状态是不可靠的。 +- `Runloop mode` 分为 `common mode` 和 `private mode`,作者通过捕获 `mode` 得到了很多陌生的 `private mode`,分别用来处理不同的场景,例如 `_kCFStreamBlockingOpenMode` 用来调度网络任务。因此,`NSTimer` 在设置 `kCFRunLoopCommonModes` 的时候,也有可能因为 `private mode` 的调用从而导致延时。 +- `Runloop mode` 可以中途切换,有以下几种切换位置: + - sleep 之前 + - 执行 mainqueue 任务前 + - exit 之后 +- `Runloop` 的运用场景: + - 执行自己的任务,如 timer + - 用于观测主线程的运行状态 + +延展阅读 + +- [深入理解RunLoop](https://blog.ibireme.com/2015/05/18/runloop/) + +### 🌟 🐢 [一个 Demo 入门 Flutter](https://limboy.me/tech/2018/12/07/flutter-demo.html) + +最近,已经有许多的公司开场尝试使用 Flutter 进行开发。就在前两天,Google 刚刚在北京举办了 Flutter Live 大会,可以说,Flutter 的生态已经越来越庞大。今年,如果对 Flutter 还是一无所知的话,是不是有点 out 了呢?没关系,这不,就有一篇教大家入门的文章。文章不仅讲了 Flutter 的基本结构,还用实际的代码编写了一个 Demo,想学 Flutter 的同学不妨跟着做一遍,相信比单单看文章更有效果哦。 + + +### 🐕 [A modular analytics layer in Swift](https://www.lordcodes.com/posts/a-modular-analytics-layer-in-swift) + +在公司里撸业务的开发同学对数据打点应该都不陌生,很多需求甚至一半的时间会花在实现打点逻辑上面,本文提出了一种抽象打点层的设计,用很 Swifty 的方式实现了可扩展(无痛添加新的 event),和后端解耦(切换打点 backend 不需要重构客户端打点代码)以及易配置(不同的打点携带不同的参数)。本文所体现的设计方面的思考对打点之外的一些公共组件的设计也能起到一定的指导作用,值得学习。 + +### 🐢 [Seemingly Impossible Swift Programs](https://www.fewbutripe.com/2018/12/05/seemingly-impossible.html) + +本文借助 “Swift 中判断函数相等性” 的命题极力使用简单的描述和循序渐进的过程来讲解复杂的拓扑数学。 + +在建设性数学中,任何命题都可以转化为类型,任何证据都可以转化为这种类型的值。这使得我们能够将函数抽象成计算过程和返回值。在拓扑数学中,无限多数据的行为也会表现得像有限集合。 这使得我们可以证明这些计算过程的相等性。 + +虽然论证的过程和结果对于日常的 Swift 开发并没有用,但希望它们可以让你对数学燃起兴趣并感到敬畏。要知道数学已经能够产生这样一个违反直觉的结果,并对其原因进行极其简洁的解释。你甚至可以相信数学是指导你如何更好完成编程的灯塔。这些简单的数学结构(Functions, Monoids)构成了抽象的强大基础,而不像项目中的那些设计模式,过于复杂且只解决特定问题。 + +### 🐕 [使用 Metal 和 Core ML 评价照片质量](http://yulingtianxia.com/blog/2018/11/30/Photo-Assessment/) + +文章展示了常规算法+机器学习来评价照片质量的方法,常规算法使用 Metal 处理图片,根据饱和度、亮度、模糊度和颜色分布得出客观评分,机器学习则使用 Core ML 加载 NIMA 模型预测主观评分。得到照片评分后,再检测相似照片,最终挑选最优的照片推荐给用户。 + +demo 中给出了 Metal 版边缘检测滤镜与图片特征向量提取的代码,可供学习参考。文章还总结了开源模型转化为 mlmodel 过程踩的坑。 + +### 🐢 [Why should we use Swift over Objective-C?](https://medium.com/@chungbkhn87/why-should-we-use-swift-over-objective-c-78b71725e63f) + +Swift vs Objective-C,到底该怎么选?如果你正在纠结这个问题,请细读此文。 + +Objective-C 有着几十年的历史,更稳定;Swift,更现代化的语言,有许多先进特性,文章从多个角度对比了两种语言的优势和劣势。 + +### 🐕 [Strategy pattern in Swift](https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe) + +文章作者提出了一种用 Strategy pattern 思路来统一代码接口的做法。如果你对 Strategy pattern 不是很熟悉的话,可以看一下 Wiki 中[这里](https://zh.wikipedia.org/wiki/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F)的介绍。 + +这种模式在现实场景中有时候还是能起到一定的作用的,有兴趣的同学不妨读一读文章,说不定以后就用上了呢? + +### 🐕 [Using errors as control flow in Swift](https://www.swiftbysundell.com/posts/using-errors-as-control-flow-in-swift) + +本文重点集中在使用 errors 上,主要介绍了一些用 errors 来进行处理能有明显优势的场景,而这些场景主要包括了函数输出结果的错误的处理,输入参数验证和测试中错误的抛出等。 + +由于 Objective-C 或多或少的影响,很多同学在写 Swift 的时候依然没有习惯用 errors 来进行错误处理。如果存在这样的情况的话,不妨可以从下一次小 refactor 中出发去寻找有没有可以使用的场景,多尝试,逐渐就能习惯使用。 + +### 🐕 [Xcode UI Testing Cheat Sheet](https://www.hackingwithswift.com/articles/148/xcode-ui-testing-cheat-sheet) + +文章列出了 UI Testing 常用的代码片段,除了对 API 的梳理,还有对各种常见问题的解决方案,可以作为 UI Testing 的快速入门,也可以作为知识库以备日后查阅。 + +### 🐢 [质量监控-图片减包](http://www.sindrilin.com/2018/12/11/image_subtraction.html) + +本文作者提供了三种方法,通过对图片资源的处理以达到减小包大小的目的。这三种方法分别是: + +- 使用工具压缩图片 +- 查找删除重复图片 +- 查找复用相似图片 + +作者不仅详细讲解了具体的实现原理,还提供了相关实现代码。有兴趣的同学可以参考作者提供的方法,对自己的项目进行改造优化。 + +### 🐢 [Metal 专辑](https://www.jianshu.com/c/ac17a2f93445) + +Metal 官方文档的中文翻译和 Metal 相关技术博客,适合英文不太好的同学。 + +### 🐎 [【AR 开发】ARKit 和 ARCore 功能对照表与定位场景总结](https://zhuanlan.zhihu.com/p/47839718) + +ARKit 和 ARCore 功能对照表与定位场景总结,如果您同时开发 ARKit 和 ARCore,可能会用得上。 + +## 设计 + +### 🐎 [Animations in iOS: 30 beautiful examples](https://medium.com/flawless-app-stories/animations-in-ios-30-beautiful-examples-80cb2663c559) + +有一些 iOS 动画真的很神奇,顺滑和友好的过渡动画能够指引流程,让用户理解下一步操作,即使盯着进度条也能感觉愉悦。下面请欣赏文中列出的 30 个动画杰作。 + +## 代码 + +### [Kingfisher 5.0 发布](https://github.com/onevcat/Kingfisher/releases/tag/5.0.0) + +喵大的 `Kingfisher` 迎来了5.0的大版本更新,更新日志中的 `Reborn` 一词意味着重大更新。 + +`Kingfisher` 是一个轻量级的、纯 `swift` 网络图片加载库。虽然是大版本更新,但是 `API` 的变化不大,如果你从4.0升级到5.0或许只需要几分钟处理一下警告和错误。其中最大的变化就是提供了更好的缓存策略。因此,同学们可以考虑升级一番。 + +- 加入 `Result` 类型取代原来的 `tuples` 回调 +- 为了方便调试追查错误,返回错误信息增加了错误原因和必要的关联信息 +- `ImageCache` 重写,提供内存和硬盘缓存策略,`API` 兼容旧版本,同时提供了控制缓存最大值,是否预缓存等等配置 +- 缓存策略:先搜索内存,没命中则搜索硬盘 +- 支持 `ImageDataProvider` 协议加载本地图片 + +更新详情请参考: + +- [Kingfisher 5.0 更新要点](https://github.com/onevcat/Kingfisher/wiki/New-In-Kingfisher-5) +- [Kingfisher 5.0 迁移指南](https://github.com/onevcat/Kingfisher/wiki/Kingfisher-5.0-Migration-Guide) + +### [Swift 官方 Docker 镜像](https://github.com/apple/swift-docker) + +苹果维护的 Swift 镜像,现在已经被[ Docker 官方](https://hub.docker.com/_/swift/)收纳。因此只需要执行 `docker pull swift` 即可方便搭建 Swift 的各个版本环境。目前来看苹果对于此镜像的维护程度还是蛮高的,最新支持到 Swift4.2.1 版本,与开发版本同步。 + +## 音视频 + +### 🌟 [Functional Swift Conference 2018](http://2018.funswiftconf.com/) + +Swift 从诞生之日起,就具备了海量的函数式编程特性,无论是 enum 和 optional 的实现,或者是函数被当做一类公民,整个语言能看到不少 Haskell 的影子。自然,Swift 在实现一些函数式的思想和特性也非常的得心应手。Swift 的函数式编程,目前最经典的应用场景主要还是构建响应式的 viewmodel。如今,越来越多的人开始探索其他场景。Functional Swift Conf 是一个在纽约举行的,专门探讨函数式 Swift 的技术大会,如今已经放出所有的 presentation,其中除了一些 reactive view model 这样耳熟能详的话题之外,还有关于 state 管理、可组合 UI 等很有趣的内容。对函数式编程感兴趣的同学不容错过。 + +### [ggtalk | 要不要买 HHKB?我问了七位用户,听听他们怎么说](https://talk.swift.gg/7) + +键盘,尤其是机械键盘,一直是程序员们居家旅行最重要的单品。甚至对于大多数程序员来说,键盘可能是极少数不多的可以让自己愿意一直花钱的东西,这就牵涉出一个话题:对于大多数程序员而言,什么键盘才是自己的最后一把键盘呢?本期 ggtalk,几个程序员针对这个话题,聊了聊自己使用 hhkb 的感受,有兴趣的同学可以听听。 + +PS:节目里没有严谨客观的评测。主观感受居多,比较轻松。 + +### 🚧 [MVC is Not Your Problem - Joachim Kurz - UIKonf18](https://www.youtube.com/watch?v=A1vzcxR-Ss0) + +近年来,MVC 开发模式饱受争议,还经常被人抱怨说在这种模式下写出来的代码太多,耦合太重。于是就有很多人力图通过不断分解和改良 MVC 模式来解决它带来的问题。 + +UIKonf 上的这场分享就是从 MVC 切入来讲架构设计的。一开始先是介绍 MVC 模式,随后指出了很多人都误解以及用错了 MVC(分享中引用了很多参考资料,调研很充分),继而引出了大家容易忽视的点:有问题的不是架构模式,而是使用方式。即使是其他的架构也会带来其他的问题,如何通过 MVC 以及其他架构来达到开发目的才是重点。 + +本场分享者 Joachim Kurz,他的观点很明确,做架构设计,不需要刻板的遵循和套用规范,可以通过寻找合适的分解维度(分享的最后有介绍,27 分钟之后),让架构变得合理易懂即可。架构设计适可而止这个度是比较难把握的,需要深入具体需求场景(分享中举了几个例子,其中有介绍一个页面用到 10 个 ViewController 的),在平时的开发过程中不断实践和总结。 + +## 内推 + +- 小红书北京/上海招聘 iOS/Android 开发者:负责开发小红书 APP,APP 改变了大多数人的生活方式,我们改变了大多数女生看待生活的方式,加入我们,与一群年轻有趣的小伙伴一起打造下一个亿级用户产品。邮箱:cli2@xiaohongshu.com + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@张嘉夫](https://weibo.com/2949394297),[@AidenRao](https://weibo.com/AidenRao),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[XanderXu](https://github.com/XanderXu) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2018/#49-2018.12.24.md b/Reports/2018/#49-2018.12.24.md new file mode 100644 index 000000000..39b3a254a --- /dev/null +++ b/Reports/2018/#49-2018.12.24.md @@ -0,0 +1,167 @@ +# 老司机 iOS 周报 #49 | 2018-12-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +🌟 [我们发福利啦~](https://www.wjx.top/jq/32164990.aspx) + +周报已经快陪伴大家走过一年的时间,非常感谢各位朋友的支持和厚爱。为了在 2019 年能更好地为大家服务,我们举办了一个问卷调查活动。在 12 月 27 日,我们会在参与问卷的朋友中选取合适的几个人赠与学习大礼包和现金奖。至于奖品是什么,大家可以在[这条微博](https://weibo.com/3165754627/H6t1EmqRh)中了解,转发还有额外的抽奖~我们渴望听到你们的声音! + +## 新闻 + +### 🌟 [周报支持邮件订阅啦!](https://github.com/SwiftOldDriver/iOS-Weekly#订阅周报) + +在接下来的周报发布中,我们将会采用 GitHub 最新的 **GitHub Release** 特性进行,读者朋友们可以到我们 [GitHub 主页](https://github.com/SwiftOldDriver/iOS-Weekly#订阅周报) **点击 watch -> 选择 Release only** 订阅。之后每期周报发布,你 GitHub 账号关联的邮箱就会收到我们的发布邮件。 + +除新增的邮件模式之外,我们还提供了以下三种方式,大家可以按照自己的需求进行选择: + +- 公众号:[OldDriverWeekly](https://github.com/SwiftOldDriver/iOS-Weekly/raw/master/assets/qrcode_for_wechat.jpg) +- RSS:[点击获取 RSS 源](https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom) +- 掘金:[老司机 iOS 周报](https://juejin.im/user/5a52075e6fb9a01c9d31b107/posts) + +### [Cydia 商店宣布关闭](https://www.ithome.com/html/iphone/400752.htm) + +对 iOS 越狱有这些影响: + +- Saurik 决定关闭的仅仅只是 Cydia Store,也就是其中的支付系统,不会影响原有的安装/卸载/管理应用程序的功能,免费或已经付费的应用,依旧可以进行下载。如果希望继续购买付费应用,需要去其他存储库(如 Packix,Chariz 或 Dynastic Repo)进行下载 +- Saurik 决定关闭商店跟一个 BUG 有关,其可以通过用户的 PayPal 帐户启用任意 Cydia Store 软件包购买 +- Sileo 是 Cydia 的计划替代品,但是其还在开发阶段 + +## 文章 + +### 🌟 🐕 [我从写技术博客中收获到了什么](https://knightsj.github.io/2018/12/03/我从写技术博客中收获到了什么%20-%20J_Knight_/) + +相信不少程序员都有写博客/文章的习惯,或者正计划写,因为一方面可以总结和加深对技术的理解,另一方面也可以一定程度上增加一些知名度,这也有助于拿到更多的面试机会。但是,由于多数人工作毕竟已经很忙,真正能坚持写下来的人却不多。本文作者作为一个工作刚满 3 年的开发者,但写博客却有两年半的时间了。笔者大概看了下,大概写了有 50 多篇,可以说是很高产了。 + +本文分为三个部分 + +- 写技术博客的历程 +- 写技术博客的收获 +- 回答一些朋友(粉丝)的一些关于写博客的几个问题 + +在技术道路的探索上,每个人有每个人不同的方式,但对于任何一个人,坚持都是很重要也难得的品质。相信这篇文章能够解答你心中的一些疑问。 + +### 🌟 🐢 [从零开始学基于 ARKit 的 Unity3d 游戏开发系列](https://zhuanlan.zhihu.com/p/32224102) + +作者王寒,国内首批 iOS 应⽤开发者,首批 VR 应⽤开发者,知乎专栏 [笨猫学编程](https://zhuanlan.zhihu.com/kidscoding) 作者。[《Cocos2D权威指南》](https://item.jd.com/11206205.html),[《虚拟现实-引领未来的人机交互革命》](https://item.jd.com/11942259.html),[《Unity AR/VR开发:从新手到专家》](https://item.jd.com/12269697.html)的作者。 + +在本系列的教程中,作者带大家一起学习,如何从零开始学习基于 ARKit 的 Unity3d 移动游戏开发。全系列的教程都是基于实战项目的,而且尽可能考虑到初学者可能会遇到的种种困难和障碍,可谓是手把手教学。 + +虽然名称是零基础,这个课程有个前提是本身对 Unity 及 3D 图形有一定的了解,不是完全零基础。当然也不必灰心,作者还贴心地为初学者准备了 [iOS 入门课程系列](https://github.com/eseedo/iOSCourse) 和 [AR-VR 入门课程系列](https://github.com/eseedo/AR-VRCourse)。 + +- iOS 入门系列包括:[iOS7+OC 开发](https://github.com/eseedo/iOSCourse/tree/master/iOS%20Basic/iOS7%2BObjective-C)、[iOS12+Swift4.2 开发](https://github.com/eseedo/iOSCourse/tree/master/iOS%20Basic/iOS12%2BSwift4.2)、[ARKit 原生开发](https://github.com/eseedo/iOSCourse/tree/master/ARKit/ARKit%20Native)、[ARKit+Unity3d 开发](https://github.com/eseedo/iOSCourse/tree/master/ARKit/ARKit%2BUnity3d/pdf)、[CoreML 开发](https://github.com/eseedo/iOSCourse/tree/master/CoreML); + +- AR-VR 入门系列包括: [HTC Vive+Unity3d 开发](https://github.com/eseedo/AR-VRCourse/tree/master/HTC%20Vive%20Course)、[HoloLens 开发](https://github.com/eseedo/AR-VRCourse/tree/master/HoloLens%20Course)、[UE4 入门课程](https://github.com/eseedo/AR-VRCourse/tree/master/UE4%20入门课程)、[UE4 VR 开发](https://github.com/eseedo/AR-VRCourse/tree/master/UE4%20VR%20Course)、[Unity5.3 官方 VR 教程](https://github.com/eseedo/AR-VRCourse/tree/master/Unity%205.3官方VR教程)、[Unity AR:VR开发入门](https://github.com/eseedo/AR-VRCourse/tree/master/Unity%20AR:VR开发入门)。 + +### 🐕 [TikTok(抖音国际版)逆向,全球的小姐姐们,我来啦!](https://juejin.im/post/5c19a38ae51d453e0a209256?utm_source=gold_browser_extension) + +在 iOS 日常的开发过程中我们通常会做一些竞品分析或者研究竞品某些功能点的实现方案,其中就需要使用到逆向技术。 + +本文作者以逆向抖音国际版为例,通过 Frida 砸壳,Hopper 静态分析,配合 Reveal 动态分析,以及 Charles 抓包等一系列分析,编写 Hook 代码完成逆向功能,最后实现突破地区限制、移除水印、日区视频分享下载。文章思路清晰明了,带我们理清了 iOS 逆向工程的整个分析过程。 + +### 🐕 [Mocking With Protocols in Swift](https://www.bignerdranch.com/blog/mocking-with-protocols-in-swift/) + +单元测试可以覆盖我们的很多场景提高代码健壮性,但同时也有很多的代码其实是很难单元测试的,比如和数据相关的删除操作,逻辑迟早都是会跑到的,不在开发阶段就在上线后用户使用阶段,所以这类 “untestable code” 越多,软件的质量就会越有问题。本文作者通过使用 Swift 的 Protocol 的相关特性,来巧妙的构造一些测试机制来测试一些没那么好写单元测试的代码,并给出了一个具体的例子。值得借鉴! + +### 🐕 [Data-Driven Table Views](http://www.vadimbulavin.com/data-drive-table-views/) + +UITableView 称为所有 iOS 开发者最熟悉的控件并不为过,但 UITableView 存在代码重复、控制流过于复杂、违反依赖性倒置原则等痛点。文章前半部分指出了以上痛点,以及相对于 UITableView 来说 UITableViewController 所拥有的特性;后半部分针对上述痛点,基于 UITableViewController 逐步实现了一个基础版的数据驱动业务的模型,设计轻量,用法简洁,且方便扩展。 + +### 🐢 [Optimizing Images](https://www.swiftjectivec.com/optimizing-images/) + +图片一直是 App 内存消耗大户,本文从图片的`加载`、`解压`、`呈现`开始,特别介绍了列表型应用应该如何优化图片内存问题。 + +### 🐢 🚧 [How to convert your Xcode plugins to Xcode extensions](https://medium.freecodecamp.org/how-to-convert-your-xcode-plugins-to-xcode-extensions-ac90f32ae0e3) + +Xcode 插件和扩展,是我们日常开发中工具,作者针对它的发展做了以下几点的总结: + +1. 什么是插件:只是一个类型的包,Xcode 启动时的同时,会去加载指定的 Info.plist 文件 +2. 优秀的插件推荐:Alcatraz(包管理工具)、Xvim( vim 编辑器)、SCXcodeMiniMap(代码地图面板)、FuzzyAutocompletePlugin(函数模糊搜索)、KSImageNamed(图像名称列表)、ColorSense(颜色转换)、LinkedConsole(控制台打印跳转代码文件) +3. 插件的制作:作者以 [Xmas](https://github.com/onmyway133/Xmas)、[XcodeColorSense](https://github.com/onmyway133/XcodeColorSense) 和 [XcodeWay](https://github.com/onmyway133/XcodeWay/tree/1.0) 的制作为例向我们展示了如何 Hook Xcode 的方法,以及如何与 Xcode 中 UI 元素进行交互 +4. 插件的禁止:由于 2015 年末,[XcodeGhost](https://en.wikipedia.org/wiki/XcodeGhost) 事件,苹果从 Xcode8 开始禁止加载插件。当然,你可以通过 Xcode 重签名这种方式去绕过苹果的检查,重新加载插件 +5. 扩展的崛起:苹果爸爸关上了一扇门,肯定会开一扇窗。从此 Xcode8 中的扩展进入了人们的视线当中。利用现有的 XcodeKit,去获取文档信息,修改当前文档内容,但是跟以前优秀的插件相比,这个方式能实现的东西是在太少了。作者以 [XcodeColorSense2](https://github.com/onmyway133/XcodeColorSense2) 为例,向我们介绍了,如何去实现/调试/安装扩展。另外作者以 [XcodeWay](https://github.com/onmyway133/XcodeWay) 向我们介绍了如何使用去用新的扩展去调用 Apple Script + +### 🐕 [美团开源 Graver 框架:用“雕刻”诠释 iOS 端 UI 界面的高效渲染](https://tech.meituan.com/waimai_graver.html) + +美团开源了一款高性能的图文混排渲染框架,其特点是整个页面不使用 UIKit 的界面层级与布局渲染,而是采用自己的图文排版引擎,将所有元素绘制在一张 bitmap 上,然后辅助轻量级的交互控制。在这一整套自研的图文排班引擎的支持下,可以做到网络下载/排版算法/图形渲染都通过异步来进行控制,从而实现复杂界面的高性能渲染效果。 + +### 🐎 [Image Analysis Solutions for Mobile Apps](https://www.netguru.co/codestories/image-analysis-solutions-for-mobile-apps) + +本文介绍了几种移动端图片分析的解决方案。其中包括: + +- 云解决方案 +- Apple Vision API +- OpenCV +- BoofCV + +我们希望,通过这篇文章,我们可以让您更轻松找到最佳解决方案。 + +### 🐕 [Improving code testability with Swift protocols](https://medium.com/flawless-app-stories/solving-dependencies-in-swift-9ee6ad4a8941) + +Swift 是一门建议面向协议编程的语言,测试驱动是时下比较热门的工作方式。因此,提升 Swift 的 protocol 可测试性就非常重要了。本文介绍了一些接地气的方法 + +- 用工厂模式来封装 init 的细节 +- 通过 mock 的方式来只关注行为是否符合预期 +- 协议的设计要符合依赖倒置原则 + +## 工具 + +### [How to Add a Recent Items Folder to Your Mac's Dock](https://www.macrumors.com/how-to/how-to-add-a-recent-items-folder-to-your-macs-dock/) + +如何将最近打开的项目文件夹添加到 Mac 的 Dock 中?相信工作中很多同学都有这个需求。本文作者就图文并茂的给我们演示了整个过程,过程并不复杂,重要的是一劳永逸,可以有效提升我们日常的工作效率。 + +## 代码 + +### [iWeChat - 通过逆向还原和探索微信](https://github.com/lefex/iWeChat) + +iWeChat 项目作者希望通过逆向还原微信来学习构建微信用到的技术架构和交互设计,同时也想借此教会大家如何分析一款第三方 App。 + +项目介绍中罗列的逆向技巧、步骤和工具等,都是不错的入门实战教程,对逆向以及微信的设计感兴趣的同学可以关注下。 + +## 音视频 + +### [ggtalk | 和 Cee 聊聊如何拿 Google Offer](https://github.com/SwiftOldDriver/iOS-Weekly/issues/997) + +想来有很多程序员对 Google 非常憧憬,也一直希望能有机会去 Google 工作。 这期 Swiftgg 的 ggtalk 节目就和最近拿到 Google Offer 的翻译组同学 Cee 聊了这个话题。主要集中在 Google 的面试流程,怎么准备上。 + +有兴趣的同学可以听听看,虽然北美的面试准备这些会和国内的有一些区别,但是依然值得了解一波。 + +如果对北美面试有兴趣的同学们,还可以配合我们之前发的小专栏:[北美软件工程师面试简单介绍](https://xiaozhuanlan.com/topic/4263189057) 一起“食用”,效果更佳。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[XanderXu](https://github.com/XanderXu),[老峰](https://github.com/GesanTung) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/#5.md b/Reports/2018/#5.md similarity index 100% rename from Reports/#5.md rename to Reports/2018/#5.md diff --git a/Reports/#6.md b/Reports/2018/#6.md similarity index 100% rename from Reports/#6.md rename to Reports/2018/#6.md diff --git a/Reports/#7.md b/Reports/2018/#7.md similarity index 100% rename from Reports/#7.md rename to Reports/2018/#7.md diff --git a/Reports/#8.md b/Reports/2018/#8.md similarity index 100% rename from Reports/#8.md rename to Reports/2018/#8.md diff --git a/Reports/#9.md b/Reports/2018/#9.md similarity index 100% rename from Reports/#9.md rename to Reports/2018/#9.md diff --git a/Reports/2019/#50-2019.01.02.md b/Reports/2019/#50-2019.01.02.md new file mode 100644 index 000000000..648fb6423 --- /dev/null +++ b/Reports/2019/#50-2019.01.02.md @@ -0,0 +1,191 @@ +# 老司机 iOS 周报 #50 | 2019-01-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [我们一周岁了~](https://github.com/SwiftOldDriver/iOS-Weekly) + +这是周报成立一周年的第 50 期,也是我们新年的第 1 期。过去 2018 年里,在编辑团队的努力和大家的支持下,我们达成了以下几点小成就: + +- 一共连续为大家贡献了 49 期周报 +- GitHub 累计获得 2000+ star +- [掘金账号](https://juejin.im/user/5a52075e6fb9a01c9d31b107) 收获大家 8500+ 关注,近 2400 次获赞,平均每篇约获赞 40 次,总阅读数约 12.5w,并从近一个月开始尝试不定期推送沸点 +- 微博话题 [#iOS 周报](https://s.weibo.com/weibo/%23iOS%20%E5%91%A8%E6%8A%A5%23) 共 188w 阅读 +- [SwiftOldDriver 精选](https://xiaozhuanlan.com/olddriver-selection) 发表 23 篇文章,获得 255 个订阅 +- 联合兄弟团队 [知识小集](https://github.com/awesome-tips/iOS-Tips) 和 [SwiftGG 翻译组](https://swift.gg/) 共同参与了掘金 [WWDC 2018](https://juejin.im/post/5b1d284df265da6e572b3d87) 专题活动,并在近期组织了 [iOS 再就业联盟](https://www.yuque.com/iosalliance/article/ycyhf3) +- 周报编辑团队也不断成长,目前已有来自一线 iOS 开发的 28 位伙伴加入我们 + +另外,我们在 12 月初向大家发起了问卷活动,收集大家对周报的建议和希冀,目前我们正在整理和汇总,并尽快在最近几期周报中根据建议作出调整。祝愿周报在 2019 年和大家一起继续成长~ + +### 🌟 [老司机周报x知识小集xSwiftGG:iOS 内推职位召集](https://juejin.im/post/5c22deebe51d451a6b513aa3) + +最近很多公司的裁员的消息相信大家都有所耳闻,与此同时也有不少公司逆势而上在持续招聘技术人员。因此我们三大组织决定牵头收集一些可靠的招聘,元旦结束后在我们的资讯发布渠道上发布 [iOS 内推职位专题文章](https://www.yuque.com/iosalliance/article/bhutav)。 + +## 🌟 他们的 2018 年总结 + +2018 已经悄然离开,2019 已经站在我们面前。这一年,相信大家都有收获,也有过遗憾,这都是常事。下面几篇文章,是几位小伙伴自己的年终总结或者是 2018 年 iOS 的技术发展总结,相信看了他们的总结之后,大家也会有所收获。 + +- [2018 年终总结及下半年文章汇总 - 知识小集](https://mp.weixin.qq.com/s/m1ldQrRdFlaoh56WcGqbMQ) +- [2018 年终总结 - J_Knight_](https://juejin.im/post/5c1fa32751882537c0766e30) +- [2018 年终总结 - 提拉拉拉就是技术宅](http://corpus.enumsblog.com/corpus/18037) +- [2018 年终总结 - Lefex](https://mp.weixin.qq.com/s/PeNEft0iMQvC_pONo1AXwg) +- [2018 年终总结 - limboy](https://limboy.me/essay/2018/12/28/my-2018.html) +- [2018 年终总结 - 小道消息](https://mp.weixin.qq.com/s/ZqaTvVaJAM1oIvLJ7ASVHQ) +- [2018 年终总结 - Bang](http://blog.cnbang.net/living/3625/) +- [iOS 技术发展史:2018](https://www.jianshu.com/p/e37184b8587b?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weibo) + +## 文章 + +### 🌟 🐢 [The Layer Cake](https://medium.com/flutter-community/the-layer-cake-widgets-elements-renderobjects-7644c3142401) + +Flutter 现在有多火,相信已经无需多说。尤其 1.0 版本发布后,各个厂也都有在进行先关的调研,不少已经在实际项目中使用了。之所以选择 Flutter,一方面是因为跨平台,另一方面我相信很大一部分原因是因为其高效的渲染性能。相信很多同学对 Flutter 如何进行渲染的也比较好奇,本文讲了 Flutter 的渲染层级及如果工作的,并且在处理负责视图结构中如何保持高效。本文对于正在学习或使用 Flutter 的同学,在思考 Flutter 的架构以及性能的优化等问题上,会很有帮助。 + +### 🐕 [Advanced UIView shadow effects using shadowPath](https://www.hackingwithswift.com/articles/155/advanced-uiview-shadow-effects-using-shadowpath) + +虽然扁平化设计的 iOS 7 舍弃了大量的阴影,但最近几年阴影正在不断回归,以增加界面的深度。谨慎地使用阴影可以对 UI 中的内容进行区分、增加深度、吸引用户的视线。这篇文章介绍了用阴影实现的几种效果,全部通过操作图层属性实现。这些效果有的很简单有的很复杂,希望它们可以激发你的创造力! + +### 🐎 [A guide to writing your own iOS CI/CD integration script](https://medium.com/appssemble/a-guide-to-writing-your-own-ios-ci-cd-integration-script-186be1b99575) + +[Fastlane](https://docs.fastlane.tools/)、[Jenkins](https://jenkins.io/) 是构建 CI/CD(持续集成/持续部署)工作流的常用工具。本文另辟蹊径,不使用第三方工具,只基于苹果的基础工具链构建一个包含编译、测试、检查代码覆盖、签名、分发等相对完整的 CI/CD 工作流。 +如果你还不了解 CI/CD 原理,不妨对着本文做一遍,相信可以快速掌握其运行过程。 + +### 🐎 [ISO-8601, YYYY, yyyy, and why your year may be wrong](https://ericasadun.com/2018/12/25/iso-8601-yyyy-yyyy-and-why-your-year-may-be-wrong/) +小写 `yyyy` 是我们常用的格式化日期 `年` 参数,如果误写成大写 `YYYY`,会有什么问题? +大部分情况下,它们似乎没有区别,但在每年的最后一周,`YYYY` 又会给我们带来意外的结果。 +本文作者将带你了解 `YYYY` 对应的 [ISO 周日历](https://zh.wikipedia.org/wiki/ISO週日曆),从而真正理解它们的不同。 + +### 🐎 [系统学习 iOS 动画之一:视图动画](https://juejin.im/post/5c246b8a518825644e62434e) + +动画制作很有趣,可以为用户界面注入活力。如果使用得当,动画还可以向用户传达信息,并将用户注意力吸引到界面的重要部分。 + +作者学习《iOS Animations by Tutorials》系列笔记共 7 篇包括如下几部分内容:[视图动画](https://juejin.im/post/5c246b8a518825644e62434e)、[自动布局动画](http://andyron.com/2018/iOS-Animation-2-Auto-Layout)、[图层动画](http://andyron.com/2018/iOS-Animation-3-Layer-Animations)、[视图控制器的转场动画](http://andyron.com/2018/iOS-Animation-4-View-Controller-Transition-Animations)、[3D 动画](http://andyron.com/2018/iOS-Animation-6-3D-Animations)、[其它类型的动画](http://andyron.com/2018/iOS-Animation-7-other-Animations)等。 + +本文是作者系列笔记中的第一篇,文章以实例的形式由浅入深的讲解了弹簧动画、过渡动画、关键帧动画的实现过程。推荐对动画感兴趣的读者跟着教程实践一遍,相信你会有收获。 + +### 🐎 [函数式编程 - 酷炫 Applicative(应用函子)Swift 描述](https://juejin.im/post/5c1d3bae5188252a9412e71b) + +函数式编程中,三个核心概念分别是 Functor,Applicative 和 Monad。其中,讲 Functor 和 Monad 的资料都不少,但 Applicative 一直都处于一个爹不亲娘不爱的地位,属实尴尬。核心原因还是其应用范围比较有限。本文以 Swift 语言为载体,介绍了 Functor 和 Applicative 的基本知识,讲述的方法借鉴了函数式编程领域教学中比较经典的“盒模型”,没有复杂的数学概念,算是比较不错的入门教材。最后还找到了一个 Applicative 的应用场景作为例子,对函数式编程感兴趣的同学可以仔细阅读,虽然 Applicative 的应用范围比较狭窄,但对于一些细分领域的问题,的确可以构造出非常优雅的解决方案。 + + +### 🐎 [『译』Hacking Hit Tests](https://swift.gg/2018/12/27/hacking-hit-tests/) + +[35 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2335-2018.09.10.md#-hacking-hit-tests)我们曾向大家推荐了它的原文,而这周 SwiftGG 则为大家做了翻译,再次温习 iOS 系统基于 Hit Test 的触摸事件处理机制。 + +### 🐕 [How to test iOS networking code the easy way](https://www.hackingwithswift.com/articles/153/how-to-test-ios-networking-code-the-easy-way) + +测试网络层代码总是很困难,因为代码运行地飞快,并且不好重现。文中给出的方案便是 `URLProtocol`,一个用于处理特定协议数据的抽象类。你可以编写一个 `URLProtocol` 的子类来注入你需要的数据,而无需改变你原有的代码,不妨一试。 + +### 🚧 🐢 [Building an Interactive Voice App Using Custom Siri Shortcuts in iOS 12](https://medium.com/appcoda-tutorials/building-custom-siri-shortcut-intent-ui-extension-to-display-remote-data-alfian-losari-efe891a44a70) + +Siri Shortcut 是 Apple 在 iOS 12 中基于 SiriKit 框架引入的新 API。它为开发人员提供了自定义用户在应用程序中经常使用的活动创建快捷方式的方法。用户通过向 Siri 发出语音命令来调用快捷方式,可以通过记录与快捷方式关联的自定义短语来自定义实际短语。你可以实现例如: + +- 订购一些东西(例如披萨,咖啡,早餐😋) +- 信息搜索 +- 连接到任何 API +- 做我们想要的任何自定义动作 +- 执行 Siri +- 还有更多... + +本文还提供了一系列实现上述功能的参考代码,希望能给感兴趣的朋友提供帮助。 + +### 🐎 [GitHub Actions: Continuous Delivery of Swift Packages](https://shashikantjagtap.net/github-actions-continuous-delivery-of-swift-packages/) + +GitHub Actions 是 GitHub 在 GitHub Universe 2018 开发者大会上发布的新功能,它能够让开发者直接在 GitHub 上根据特定的事件自动执行预设的任务。 + +本文记录了通过构建 Swift Packages 来使用这个功能的整个流程,也总结了使用过程中发现的一些问题。虽然 GitHub Actions 还处于公测阶段,但大家对这个功能都表示很看好。因为它能让每个开源项目都有自己统一开放的自动化工作流程,它使得 GitHub 服务从代码托管延伸到整个软件开发周期,它很有可能会改变大家使用 GitHub 甚至维护开源项目的方式,所以就让我们拭目以待吧。 + +### 🐢 [深入浅出 iOS 编译](https://blog.csdn.net/Hello_Hwc/article/details/85226147) + +在日常开发中,并不会常用到编译原理相关的知识,但不代表我们不需要了解它。本文系统的讲了 iOS 编译的各个环节,连签名环节都有涉及,深入浅出,也比较容易看懂。在编译原理层面,分为前端和后端,在众多概念中比较重要的是 Parser 和 CodeGen,了解一定的编译原理相关知识,对我们做更深层次的架构、语法设计会很有帮助。 + +## 工具 + +### [SwiftRewriter - Swift code formatter using SwiftSyntax](https://github.com/inamiy/SwiftRewriter) + +基于 [SwiftSyntax](https://github.com/apple/swift-syntax) 的 Swift 代码格式化工具,要求 Swift 4.2 和 Xcode 10。可以方便灵活的定义和组合自己想要的代码格式。 + +### [Shapeshift](https://github.com/JohnSundell/Shapeshift) + +快速让一组 Swift 文件兼容 iPad 上的 Playground,甚至可以将转换后的文件放置在 iCloud Drive 中的 Swift Playground documents 文件夹内,以便立即拿起 iPad 开始编程!🚀 + +### [Woodpecker](https://itunes.apple.com/cn/app/woodpecker/id1333548463?mt=12) + +我们曾在 18 年初的 [第 5 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/48427eac5663bacdb00beddf2653ff1c32f4d5d1/Reports/%235.md#woodpecker) 推荐过 Woodpecker 这款工具,它可以在 Mac 上查看 App 信息,提高开发测试效率。但现在这款工具 Mac 商店已提供免费下载,免费版本可使用绝大多数功能。 + +目前功能: + +- 只需一步,即可查看、修改沙盒文件; +- 监控 App 网络 http(s) 请求,无需设置代理; +- 查看,修改 UserDefaults; +- 在线调试 WebView; +- 简单强大的插件支持。 + +> 由 [@张小刚哟](https://weibo.com/u/3127372955) 自荐 + +### [Code Friend](https://github.com/qvcodefriend/CodeFriend) + +使用提供的 JavaScript 接口,可以简单快捷地开发出 Xcode 插件的 Xcode 插件。 + +### [USB Keyboard](https://github.com/everettjf/USBKeyboard) + +通过 USB 连接 iPhone 到 Mac 后,可以实现在 Mac 端打字,iPhone 上输入的输入法应用。 + +### [woza](https://github.com/woza-lab/woza) + +越狱 iOS 的砸壳工具,类似 clutch、dump-decrypted,是 AloneMonkey 开发的 frida-ios-dump 的 node 版本。另外,[woza-desktop](https://github.com/woza-lab/woza-desktop) 是 woza 的桌面版本,实现了“点点鼠标就能砸壳”的目的。 + +## 代码 + +### 🌟 [Stinger](https://github.com/Assuner-Lee/Stinger) + +知名 iOS AOP 库 Aspect 的另一种实现思路。使用 libffi 及解析方法签名构建壳函数,替换原方法实现以感知方法调用和捕获参数;使用同一 cif 模板及函数指针直接执行原实现和所有切面 block;不使用消息转发指针替换原实现,hook 兼容性更好;调用方法不经过消息转发过程,执行原实现及切面代码过程中无手动构建 invocation 等,效率更高。 + +正在实现 hook 单个实例对象。 + +### 🌟 [LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation) + +现在无论是准备参加校招还是社招,怎么能不去刷刷 LeetCode 呢?但是刷题的过程是枯燥乏味的,而现在广大程序员同胞的福音来了, [LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation) 的作者立志将 LeetCode 上所有的题目都用动画的形式演示出来,相对枯燥的算法,使用动画演示将更容易理解铭记。目前已实现了部分算法,并将持续更新。 + +## 音视频 + +### [ggtalk | 创业那点事:听莲叔和羊叔回忆峥嵘岁月](https://talk.swift.gg/9) + +这一期内容,对于大多数程序员都挺有指导意义,羊叔和莲叔分享了自己曾经创业的经历,同时引出了关于程序员职业发展话题的讨论。面对可能高回报但同样高风险的创业机会,作为工程师应该如何判断,如何抉择,创业公司的股份和期权能不能拿,意味着什么,这些问题,你都能在节目中找到答案。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@XanderXu](https://github.com/XanderXu),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#51-2019.01.09.md b/Reports/2019/#51-2019.01.09.md new file mode 100644 index 000000000..1f040eeca --- /dev/null +++ b/Reports/2019/#51-2019.01.09.md @@ -0,0 +1,136 @@ +# 老司机 iOS 周报 #51 | 2019-01-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS 靠谱内推专题](https://www.yuque.com/iosalliance/article/bhutav) + +号外号外~这里有一份靠谱的 iOS 内推职位列表,希望能给大家在这个裁员寒冬带来一点暖意。 + +## 他们的 2018 年总结 + +在看完 [50](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2019/%2350-2019.01.02.md) 期 *他们的 2018 年终总结*,相信大家都有所收获。本期同样也为大家带来了一些小伙伴们自己的年终总结,希望这些总结能够帮助到大家。 + +- [2018 年终总结 - 瓜地](https://www.desgard.com/summary-2018/) +- [2018 年终总结 - 唐巧](http://blog.devtang.com/2019/01/01/2018-summary/) +- [2018 年终总结 - 犀利豆](https://xilidou.com/2019/01/01/2018/) +- [2018 年终总结 - 筑梦师Winston](https://www.jianshu.com/p/14ec3016a69c) + +## 文章 + +### 🌟 🐢 [Understanding Xcode Build System](http://www.vadimbulavin.com/xcode-build-system/) + +本文介绍了`Xcode Build System`的各个部分,帮助我们提升对于 Xcode 编译的基础知识。很多的包体积减少方案也是基于这个基础知识之上,对于 iOS 开发人员来说很有必要了解 + +1. Preprocessor(预处理):这个阶段处理一些语法糖的东西,譬如一些编译宏的展开 +2. Compiler(编译):将 Swift 工程编译成一个中间语言,一般采用两个编译器,一个是 Swift 语言编译器,一个是 OC、C++/C 编译器(为了解决混编的问题) +3. Assembler(汇编):将中间语言统一转成操作系统能理解的二进制代码 +4. Linker(链接):将一切依赖的外部库加入到二进制包中 +5. Loader(装载):变成一个可执行程序,添加程序执行的入口,以便操作系统能够直接跑起来 + +### 🌟 🐎 [OCEval - 动态执行 ObjectiveC 的热修复方案](https://juejin.im/post/5c24a8396fb9a049d5198dfc) + +苹果在18年多次对基于 runtime & JavaScriptCore 的热修复方案进行全面的打压,导致 JSPatch 以及其混淆 or 变种,变得难以过审。但是本文作者依然在热修复的探索上寻找并实现了一条新的方案 OCEval。OCEval 的本质是作者自己实现了一个 OC 语法的简单解释器,包含了基础的词法分析与语法分析,从而能够在运行期将 OC 代码生成抽象语法树 AST 然后进行执行。这样就可以将OC这种原本必须经过编译再运行的语言,扩展为 js 那样的解释执行,从而能够做到动态下发代码并且运行。同时再通过 runtime 进行 aspect 那样的 hook 操作,实现热修复线上代码。整个代码都已经开源,对编译原理有兴趣的同学值得深入好好学习一下。 + +### 🐢 [[App 探索] JSBox 中幽灵触发器的实现原理探索](https://juejin.im/post/5c2c16b66fb9a049e12a4f0e) + +JSBox 中有一项奇特的功能 - 幽灵触发器,它在 App 进程被杀死的情况下,也可以将通知固定在通知栏,即便用户点击清除,也能马上再弹出,永远不消失。本文作者通过一系列的实践研究分析了这个 “幽灵触发器” 功能的实现原理,最终以 [Demo](https://github.com/577528249/NotificationForever) 的形式给出了一个可行的实现方案,希望对感兴趣的读者提供帮助。 + +> JSBox 是由钟颖开发的一个提供 JavaScript 集成开发环境的 iOS 应用,可以通过它来构建各种有趣的效率工具,其中有很多巧妙的功能实现值得我们研究探讨。 + +### 🐢 [10w+ 字详解 Runtime](https://github.com/DeveloperErenLiu/RuntimePDF) + +如题,本系列 Runtime 文章总共九篇,总字数为 10w+。一个技术要点能写 10w+ 不容易,能把一个技术要点循环渐进、细致确当、系统全面地讲清楚,真正做到一个系列搞定,足见作者的匠心。如果不想再被 Runtime 题材的文章“碎片化”,那就从这里开始吧! + +### 🐎 [技术年货:美团技术沙龙合辑大放送——85 个演讲,70+ 小时视频](https://mp.weixin.qq.com/s/wamJkpq3HWpKsBc3okqUwg) + +虽然美团近期在面临裁员风波,但不可否认的是美团是国内对技术分享做的最好的公司之一了。本文详细整理了今年所有线上线下美团技术沙龙的演讲稿和视频,覆盖前端、后台、系统、数据、算法、测试、运维等技术领域。这份“饕餮盛宴”必然会深受追求卓越的同学的喜爱。 + +### 🐎 [How to use raw strings in Swift 5](https://www.hackingwithswift.com/articles/162/how-to-use-raw-strings-in-swift) + +当字符串应用于正则或初始化 JSON 等场景时,转义字符会给我们带来一些小烦恼。比如试试查找 `\(sth)` 的正则如何实现? +Swift 5 中,新增了 Raw String 语法(用井号包裹,`#"raw string"#`), 通读本文,可以快速了解 Swift 5 中的原始字符串该如何应用。 + +扩展阅读:[SE-0200](https://github.com/apple/swift-evolution/blob/master/proposals/0200-raw-string-escaping.md) + +### 🐢 [iOS 性能优化之计算多行 Label 高度的新方法](https://mp.weixin.qq.com/s?__biz=MzU3NTY3MTQzMg==&mid=2247484307&idx=1&sn=06d33d349ab6019b25a268f316ce7eb9&chksm=fd1ede74ca6957628d59c222767105b54fcd57b9efb085e868dae995fcd46d50e4023d4e0d7c&mpshare=1&scene=23&srcid=0103uUtd8RIuQxhWoWbXEcTh#rd) + +本文中“根据字体来计算字符串总宽度,从而得到多行 Label 高度”的想法,也比较新颖,网上也没有找到资料,但是某些读者日常开发中可能会碰到,本文比较系列的从发现问题到解决问题进行了阐述。如果这篇文章能够给读者们造成一些启发,也能够让这篇文章发挥价值。 + +### 🚧 🐎 [Swift CoreNFC as quick as possible](https://medium.com/@myrickchow32/swift-corenfc-as-quick-as-possible-79544796cd0a) + +正如标题所写的,这是一篇快速使用 CoreNFC 的教程。本文总结了使用 CoreNFC 的主要流程和一些需要注意的细节。文章内容足够用来了解 CoreNFC 了,但如果想感受或者弄清一些细节,最好还是实践一下。 + +## 设计 + +### 🐎 [[译] 色彩无障碍性产品设计指南](https://juejin.im/post/5c2c233d6fb9a049bd4266b7) + +数字产品的无障碍设计旨在为所有人提供精致的使用体验,这些人包括有视觉、语言、听觉、身体或者认知障碍的人。关于无障碍设计的讨论有很多,但你是否想过色彩的无障碍设计?这篇文章会介绍如何使用你已经知道的设计原则来进行色彩无障碍设计。 + +## 工具 + +### [少数派 2018 年终盘点以及编辑推荐](https://sspai.com/page/2018#page1) + +本统计中列举了这过去一年里,文章,APP,编辑的受欢迎的榜单。在这份年终报告中,我们可以看到一些耳熟能详的应用,也看到一些我们并没有留意到,但别人很喜欢的应用。各位童鞋不妨看一下 2019 是否有适合你新应用。 + +### [AssetImportKit](https://github.com/eugenebokhan/AssetImportKit) + +AssetImportKit 是一个用 Swift 编写的跨平台库(macOS、iOS),可以在运行时将 [Assimp](https://github.com/assimp/assimp) 支持的文件转换为 SceneKit 场景。 + +### [Mach-O Kit](https://github.com/DeVaukz/MachO-Kit) + +Mach-O Kit 是一个 Objective-C 框架,用来分析 Darwin 平台的 App 所使用的 Mach-O 二进制文件。Mach-O Kit 简单易用,并且是安全的,即使解析一个格式错误的 Mach-O 文件也不会导致程序崩溃,可以放心使用。 + +## 代码 + +### [DynamicJSON](https://github.com/saoudrizwan/DynamicJSON) + +DynamicJSON 使用了 Swift 4.2 中引入的新特性 `@dynamicMemberLookup` 来实现 JSON 数据的快速访问。相比传统方式,你不再需要使用方括号和双引号。 + +## 音视频 + +### [ggtalk | 创业那点事:普通开发者的回忆、反思和迷茫](https://talkorigin.swift.gg/10) + +这是 ggtalk 创业系列的第二期,从在创业公司工作过的普通开发者的口中了解对于很多工程师而言,在创业公司是一种怎样的感受, 主要由翻译组的梁杰、珂珂和 MM 来做分享。其中最典型的,就是个人发展和公司发展频繁的冲突和变化。公司业务经常变化,虽然能够磨炼工程师不断的接受新的挑战,但也会造成无法在某一个细分领域不断深入。工程师在类似的境遇下该如何权衡,如何选择,相信大家听完这一期节目,会有新的感受。 + +### [Typed Notifications](https://talk.objc.io/episodes/S01E27-typed-notifications-part-1) + +通过 `Notification` 时其中一个问题就是发送方跟接收方都必须通过约定去传值,Swifter Talk 这一集就探讨了如何通过类型化 `Notification `,统一使用对应类型的 `Descriptor` 去完成 payload 的编码和解码,去完成一套类型安全的通知系统。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@XanderXu](https://github.com/XanderXu),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#52-2019.01.14.md b/Reports/2019/#52-2019.01.14.md new file mode 100644 index 000000000..d8bcb6320 --- /dev/null +++ b/Reports/2019/#52-2019.01.14.md @@ -0,0 +1,230 @@ +# 老司机 iOS 周报 #52 | 2019-01-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub 宣布创建私有仓库免费且不限量](https://blog.github.com/2019-01-07-new-year-new-github/) + +微软在今年 6 月收购了 GitHub,而在半年后,它给广大开发者带来了第一个福音 - 私有仓库转为免费且不限量。但值得一提的是,私有仓库目前最多仅支持 3 个协作者,如果超过 3 个,仍然需要购买付费服务。 + +另外,在个人主页,GitHub 还在本周更新了一个小 feature - 个人主页的状态管理。我们可以在自己的主页为自己设置状态,包含一个 emoji 以及一句描述。 + +> 推荐人:[tyrad](https://github.com/tyrad) + +### [Flutter 示范应用现已开源 — 万物起源 (The History of Everything)](https://mp.weixin.qq.com/s/GwBlb4SM2BusWC_bfVL8gA) + +在本月初举办的 Flutter Live 活动上,Flutter 团队向大家展示了一款名为 The History of Everything(万物起源)的应用,向大家展示了 Flutter 的精美的界面和优秀的性能,现在这款应用的源代码已经在 GitHub 上开源。这款应用不仅突出了 Flutter 的强大,也展示了如何高保真的还原设计师设计并保持原生的应用体验。它构建了一个精美的时间轴,你可以上下滑动以及任意缩放整个时间轴,时间轴上的历史事件会随着缩放跟着消失或者出现。 + +### 他们的 2018 年总结 + +2019 已经过去了2周,相信小伙伴们对于 2018 年都有自己的总结。本期同样也为大家带来了小伙伴的年终总结,希望对大家有所帮助。往期 2018 年总结可以查阅 [50期](https://github.com/SwiftOldDriver/iOS-Weekly/blob/78d50e213079e100b24f19b05ddd4778700108bc/Reports/2019/%2350-2019.01.02.md)、[51期](https://github.com/SwiftOldDriver/iOS-Weekly/blob/78d50e213079e100b24f19b05ddd4778700108bc/Reports/2019/%2351-2019.01.09.md)。 + +- [2018 年终总结 - 补锅匠(掘金 iOS 开发者)](https://juejin.im/post/5c27119d6fb9a049df2425cf) + +## 文章 + +### 🌟 🐢 [It Looks Like You Are Trying to Use a Framework](https://www.bignerdranch.com/blog/it-looks-like-you-are-trying-to-use-a-framework/) + +Frameworks 是打包资源和拆分代码的常用方式。拆分 Frameworks 的作用不仅仅是避免构建时的重复编译,合理的使用 Frameworks,可以让代码库层次清晰,提升调试效率,确保代码结构保持最大的可重用性。 + +[第一篇文章](https://www.bignerdranch.com/blog/it-looks-like-you-are-trying-to-use-a-framework/) 包含 Frameworks 相关的基础知识: +- 静态库 +- 动态库 +- Frameworks 及其内部结构 +- 在 Xcode 中链接和嵌入 Frameworks +- 使用 Frameworks 前要考虑的因素 +- 一些方便探索 Frameworks 的命令行工具 + +[第二篇文章](https://www.bignerdranch.com/blog/it-looks-like-you%27re-still-trying-to-use-a-framework/) 则引导我们在逐步解决构建错误的过程中理解 Frameworks,还会介绍 Swift 和 Objective-C 混编时接口间是如何找到对方的。 + +### 🌟 🐕 [The Complete Guide to iOS and Swift Job Interviews](https://www.hackingwithswift.com/articles/157/the-complete-guide-to-ios-and-swift-job-interviews) + +这篇文章的作者是 [Hacking with Swift](https://www.hackingwithswift.com/store) 的创始人,文中分享了 iOS 程序员找工作的一些心得,值得注意的是,现在 iOS 招聘一般都要求熟悉 Swift 相关知识。 + +1. 日常做好一些找工作的准备,譬如写播客,参加外部的技术交流,参与 GitHub 项目等 +2. 写一份好的简历,让人知道你过去的工作经历和价值,注意,复制粘贴和假大空的文字描述一点用都没有 +3. 准备面试,一般最好刷一些面经,也要做好手写算法的准备 +4. 面试时平复好紧张的情绪,越紧张越回答不上来问题 +5. 一般公司的面试题在网上都可以看到类似的,不用过于担心 +6. 初级工程师和高级工程师的面试侧重点有些不一样,不过尽可能地展示一下你的知识深度是没错的 +7. 编码能力现在在面试时都考察得比较多,千万不要轻视这个事情 +8. 每次面试都做好总结,让自己在面试中成长 + +### 🐕 [开发者如何突破那被限制的视野](https://juejin.im/post/5c37022d51882523ea6de697) + +尽管作者的一些观点可能值得商榷,但更多的可以给我们一些指引。文末作者的高度提炼,“输出倒逼输入, 只有你真正知道自己要做什么了, 你学习的方向就会变的异常明确”,更是发人深省。 + +1. 自我接纳,这是精准学习的前提 +2. 技术储备,要认识到技术只是一个工具,而工具是可替换的 +3. 动手实践,转换视角,学以致用 + +### 🐎 [为什么我觉得 Flutter 短期内不会流行但依然选择学习它](https://limboy.me/essay/2019/01/07/is-flutter-the-future.html) + +最近 Flutter 的文章越来越多了,也有越来越多的人去尝试了 Flutter。有更多的人参与到 Flutter 生态中来,对 Google 来说,对 Flutter 团队来说都是一件乐见之事。 + +本文作者在自己尝试了 Flutter 的基础上,详细说了自己的开发体验,也说了自己对 Flutter 的观点。对于还没尝试的同学来说,本文可以提供一个初步的了解。 + +### 🐎 [Swift: memory leak gotcha with 'weak self'](https://blog.haloneuro.com/swift-memory-leak-gotcha-with-weak-self-67293d5bc060) + +这是一篇挺有意思的文章,讲述的是在 Swift 的 closure 多层嵌套中,何时建立弱引用而有可能出现的问题。 + +相信这个问题,有很多人之前曾经遇到过,或者说曾经思考过那样的情况应该怎样处理。有兴趣的同学们不妨阅读。 + +> 推荐人:[ApolloZhu](https://github.com/ApolloZhu) + +### 🐎 [The iOS Menu](https://codea.io/blog/the-ios-menu/) & [Detailing the iOS Menu](https://codea.io/blog/detailing-the-ios-menu/) + +这两篇系列文章讲述了 Codea (iPad lua 编辑器) 作者在 iOS 上设计一个 macOS 风格的下拉菜单。文章中,可以了解到作者一步步的思考过程,以及相关的技术细节想法,例如:毛玻璃效果,贝塞尔绘制圆角,选择交互动效果等等。同时,代码也[开源](https://github.com/TwoLivesLeft/Menu)了。 + +> 推荐人:[ApolloZhu](https://github.com/ApolloZhu) + +### 🐕 [State Restoration Tutorial: Getting Started](https://www.raywenderlich.com/1395-state-restoration-tutorial-getting-started) + +State Restoration(状态恢复)是在应用重新启动时恢复到上一次结束时的状态。当 APP 切到后台,很难保证应用不被用户或系统杀掉。在 iOS 6.0 中,Apple 为我们提供了 `UIStateRestoration` 来实现应用状态的保持和恢复。 + +本文作者通过实例 Pet Finder 向我们展示了应用如何实现状态恢复,主要有以下几个步骤: + +1. `AppDelegate` 中实现 `shouldSaveApplicationState` 和 `shouldRestoreApplicationState`。 +2. 设置 views 或 view controllers 恢复标识符 Restoration ID。 +3. 在需要恢复的 views 或 view controllers 中 实现 `encodeRestorableStateWithCoder`、`decodeRestorableStateWithCoder`、`applicationFinishedRestoringState` 并处理相关的恢复业务逻辑。 + +另外文中作者也给出了恢复基于代码创建的 view controllers 实现方法,状态恢复尤其适用于恢复用户草稿状态的业务场景,有兴趣的读者可以实践一番。 + +> 原文中提供的 Demo 基于 Xcode 7.3、iOS 9.3 和 Swift 2.2,在 Xcode 10 中编译 Error 99+,编辑在实践中已对 [Demo](https://github.com/GesanTung/PetFinder) 进行更新,支持 Swift 4.2。值得注意的是 `applicationFinishedRestoringState` 是在 `viewWillAppear` 之后执行,很多资料对此描述有误。 + +### 🐕 [ARKit Pods — SCNPath](https://medium.com/@maxxfrazer/arkit-pods-scnpath-d4b491803019) + +很多 ARKit 开发者的首选框架是 SceneKit,因为 SceneKit 可以访问 iOS 的原生功能。SceneKit 提供了一些默认的几何体,SCNBox、SCNSphere、SCNPyramid 和 SCNShape,但如果你想构建点不一样的东西,就要深入钻研来创建自己的几何体了。作者最新的开源框架用于根据 SCNVector3 点数组来创建路径,在这篇文章里作者用一个实际的例子介绍了如何利用开源的 SCNPath pod 来创建路径。 + +### 🐕 [Swift Import Declarations](https://nshipster.com/import/) + +本文中讲述了 `import` 在 Swift 中的使用。 + +- 如果 import 复数 module 中有重复的字符,可以使用 `ModuleA.func ModuleB.func` 来区别调用。 +- 可以指定引入某个 Module 的单一方法、变量等,如:`import func Module.funcA`(第二个为 funcA 类型)。 +- Swift 同名处理优先级:本地声明 > 引入指定声明 > 引入模块。 +- 引入模块中常量,变量的时候,最好使用 `import type Module.var` 的方式,更好让其理解作者的意图。 +- 引入子模块 `import Module.subModule`,以防止其他子模块的影响,明确使用范围。(但不会使你的程序编译更快)。 + +### 🐕 [[NSMutableAttributedString initWithData:options:documentAttributes:error] 崩溃分析](https://www.jianshu.com/p/184a57f12c6e) + +本文从汇编的角度,逐步定位了 `NSMutableAttributedString initWithData:options:documentAttributes:error` 概率崩溃的问题,其定位问题的过程、思路和方法值得借鉴。另外文中提到的 [优雅解决 iOS 8 UIScrollView delegate EXC_BAD_ACCESS](http://ziecho.com/post/ios/avoiding-uiscrollview-exc_bad_access-on-ios8) 中的方法也推荐参考。 + +### 🐕 [Why is there a "lag" in iOS gesture detection near the edges of the screen?](https://blog.kulman.sk/why-ios-gestures-lag-at-the-screen-edges/) + +作者分享了一次排查屏幕边缘手势延迟 bug 的过程,小编觉得这个 bug 非常有意思,很值得大家花一些时间去了解它,让大家对手势有更多一点了解。 + +### 🐎 [App thinning checklist](https://oldoldb.com/2019/01/09/App-thinning-checklist/) + +本文作者总结了他对 iOS 版的 Microsoft Edge 进行安装包瘦身时所用到的一些思路、方法和工具,各位可以收藏以便需要做应用瘦身时拿来参考用。文章中提到把监控包大小加入到持续集成环节中是非常值得去实践的一种做法。 + +### 🐕 [饿了么物流移动端业务可用性监控体系建设](https://juejin.im/post/5c3577e0f265da616c65ca80) + +本文介绍了饿了么物流团队在移动端业务可用性监控体系建设上的一些探索和实践,这为有在做可用性监控体系的朋友们提供了一些很好的参考方案和思路。他们把监控体系大致分为了四层,从大盘趋势到异常实时告警以及使用日志进行现场还原,同时还可以通过大数据分析业务健康程度。之后分享了一个排查网络层问题的实战经历来说明这套监控体系的价值。在文末他们提到了一些目前遇到的问题和接下来的发展方向。 + +### 🐕 [Implenting Promises in Swift](https://felginep.github.io/2019-01-06/implementing-promises-in-swift) + +目前网上很少有 Swift 实现 Promises 相关的文章,所以作者写了一篇文章分享了相关的内容,并且作者选择了测试驱动开发,不断地构建测试,然后再不断地调整代码满足测试,非常值得一看。 + +### 🐕 [How to read Apple’s developer documentation](https://www.hackingwithswift.com/articles/167/how-to-read-apples-developer-documentation) + +阅读技术文档是工程师必备的技能之一,但很有趣的是,阅读技术文档不只是国人入门编程的一道坎,其实很多以英语为母语的人也一样不擅长。Swift 技术网站 Hacking With Swift 过去一年收到最多的文章请求,就是帮助读者阅读和理解苹果的代码文档,所以就诞生了这么一篇文章。 + +作者首先帮助大家理清技术文档的内容和结构,接着以具体的例子带着大家一起“查文档”,找到对应的定义,例子和代码,最后还鼓励大家,其实苹果的文档也有很多不足的地方,大家找不到自己需要的东西的时候也不需要灰心。 + +### 🐢 [The Many Offline Options for iOS Apps](https://medium.com/device-blogs/the-many-offline-options-for-ios-apps-2922c9b3bff3) + +本文作者比较了 iOS 中的各种存储数据以达到 App 无网正常使用的方案,根据统计,如果加载速度超过 3 秒,有 40% 的用户会放弃使用。而在美国,有 15% 的 App 使用时间是处于无网状态下。因此,一个合理的离线运行方案将会为你的 App 带来更高的用户留存率。 + +- 使用数据库:Realm、Core Data、Sqlite 等 +- KV 形式存放数据:plist、NSUserDefaults、NSKeyedArchiver、leveldb 等 +- 使用云数据库方案:Realm Platform、Firebase 等 +- 考虑一下将用户离线下的操作重放 +- 通过 React 的方式来监听数据变化 + +## 工具 + +### [iOS 模拟器录屏工具](https://github.com/alexp2ad/record-ios-simulator) + +Xcode 的模拟器自带有截屏功能,但是并没有录屏功能,通常我们需要使用其他的录屏工具(QuickTime、LICEcap等),但这个工具让你可以方便地直接使用 Alfred workflow 或者 CLI 去触发模拟器录屏。 + +## 代码 + +### [CoreML-in-ARKit](https://github.com/hanleyweng/CoreML-in-ARKit) +本项目利用 CoreML 运行机器学习模型来识别出摄像头拍到的物体,并利用 ARKit 为其加上 3D 标签,实现简单的 AR 效果。项目代码简单,创意好,非常适合入门,学习如何使用机器学习模型处理图片及如何在 AR 场景中添加 3D 标签。苹果官方也推出了一个类似的官方 Demo:[Using Vision in Real Time with ARKit](https://developer.apple.com/documentation/arkit/using_vision_in_real_time_with_arkit),供大家参考学习。 + +### [iOS 混合开发库(GICXMLLayout)](https://juejin.im/post/5bfce9d56fb9a04a102ef8ba) + +很多尝试过前端开发 Vue 开发的 iOS 同学,都感慨用 Vue 开发前端 UI 界面的时候,非常的方便,非常的强大。优秀的布局能力/数据绑定 MVVM/模板式的开发。如果能在 iOS 里也能如此方便的进行UI开发,相信也会大幅度提供页面开发效率,[GICXMLLayout](https://github.com/ghwghw4/GICXMLLayout) 这个库就是这样的一个库。 + +GICXMLLayout 能干什么?有什么特点? + +- 使用 XML 来描述 UI、动画、事件绑定、数据绑定。 +- 数据绑定。 +- 支持 MVVM 模式。 +- 优秀的布局系统。 +- 模板系统。 +- 简单、优秀的自定义扩展能力。 +- 支持 JavaScript。 +- HotRload & HotUpdate。 + +相关系列文章推荐去[作者的掘金专栏](https://juejin.im/user/57d6181f816dfa00544bc3d6/posts), 作者从项目简介,到源码架构,再到新手项目,灵活扩展,还有两篇项目实战,总共有八九篇文章深入解析 GICXMLLayout,值得深入学习。 + +## 音视频 + +### 🌟 [一起来开发泊学 App 吧](https://boxueio.com/path/let-us-build-and-launch-a-forum) + +如果你正在自学使用 Swift 做 iOS 开发,并期望找到一份相关的工作,但却苦于没有项目练手和熟悉整个 App 的开发流程。或者你十分向往成为一个独立开发者,但又不知从何开始。又或者你想看看 Swift 充当服务端开发语言时会有怎么样的表现。那小编十分推荐你看看泊学上的这个系列视频,你得到的会远比一些培训班得到的多。目前已经推出以下 4 个系列,且内容仍在持续更新中: + +- [设计 iPhone 版泊学 App](https://boxueio.com/series/design-boxue-app-from-scratch):基于 Apple 官方的 iOS design guideline,我们用 Sketch 从零开始设计泊学自己的 iOS App。在这个真实的项目中,了解 Sketch 的使用经验和常用插件。 +- [Vapor Up and Running](https://boxueio.com/series/vapor-up-and-running):如果,你已经掌握了 Swift 编程语言,再用它学习服务端开发,就变成了一个性价比很高的事情。这个系列里,我们会从零开始,基于 Vapor,详细地讲述每一个服务端开发领域常用的技术场景。 +- [Vapor Fluent](https://boxueio.com/series/vapor-fluent):在这个系列里,我们会实现一个类似论坛的 App。通过这个过程,来了解 Vapor 中的 Fluent 组件。通过它,我们就可以无需了解 SQL 的细节,而是用 Swift 的方式和数据库打交道。 +- [基于 MVVM 构建泊学 App](https://boxueio.com/series/build-boxue-app-in-mvvm):在这个系列里,我们以实现 Boxue App 举例,以一个独立开发者的视角,尽可能在代码的可维护性、可测试性、可重用性以及可协作性,达成让自己满意的实践。 + +### 🌟 [Teahour.fm | #94 与 Hawstein 和左程云聊算法和数据结构](http://teahour.fm/2019/01/02/algo-with-hawstein-and-chengyun.html) + +这期的 Teahour,讲的是很多程序员很关心的算法和数据结构。特别是这一年来,国内各大公司对算法和数据结构在面试中的考察变得越来越多,重要性也越来越高。 + +对于 iOS 程序员来说,算法和数据结构则更应该重视。平时用不到的算法和数据结构,很可能在面试之时成为你的心头大患。有兴趣的同学不妨听听这期节目,算是能够做到有所了解。 + +### [ggtalk | 创业那点事:逆流而上的泊学](https://talk.swift.gg/11) + +相信绝大多数 Swift 程序员都听过泊学,泊学是一个通过视频在线学习编程的网站。这一期 ggtalk 邀请到了泊学的两个创始人来聊了聊创业,小编我听一半就完全被圈粉,秒充会员看了一波视频。从整个采访过程中可以看到泊学虽然整个过程做的很不容易,但丝毫不影响两个创始人独具匠心的打造体验超棒的视频教程。这就是典型的为了要做有意义的事情而做的创业,而不是简单想着蹭热度捞一笔。墙裂看好泊学,推荐大家从听听这期节目开始,了解泊学。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@XanderXu](https://github.com/XanderXu),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#53-2019.01.21.md b/Reports/2019/#53-2019.01.21.md new file mode 100644 index 000000000..7ebbdca9d --- /dev/null +++ b/Reports/2019/#53-2019.01.21.md @@ -0,0 +1,171 @@ +# 老司机 iOS 周报 #53 | 2019-01-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [热修复、生态、混合工程 | Flutter 2019 产品路线图正式公布](https://mp.weixin.qq.com/s/nRAF7g3Faz5SvsPJ1A98Iw) + +Flutter 的 2019 产品线路图已正式公布,热修复、生态、混合工程,可谓精确打击现有的痛处。特别是热更新,不过更多细节要等到今年的 Google I/O 大会。 + +## 文章 + +### 🌟 🐕 [Functional networking in Swift](https://www.swiftbysundell.com/posts/functional-networking-in-swift) + +一篇非常不错的、手把手教学的 Swift 函数式编程教程。通过使用 Swift 的函数式特性以及 Future 和 Promise 的思想,一步步的把一个常见的网络请求模型改造得非常优雅,并且整个改造的过程,一步步的减少类型,一步步的减少副作用,使用无状态的函数组合来实现逻辑。从这篇文章也可以看到,函数式编程最重要的是思想,而不是某个具体的库。当我们学会了思想,即便不依赖任何第三方库,我们也可以快速搭建出很 pure,很优雅的架构。 + +### 🌟 🐎 [关于 Flutter Layout 你应该知道的](https://limboy.me/tech/2019/01/11/flutter-layout.html) + +本文介绍了 Flutter 的几种布局方式以及需要注意的问题,介绍了 `Unbounded Constraints`、`Flex`、`Stack` 等。了解文中所提到的这些,基本日常使用 Flutter 关于布局方面的也就够用了。 + +### 🐎 [Xcode tips and tricks – part one](https://www.hackingwithswift.com/articles/166/xcode-tips-and-tricks-part-one) + +本文是 Xcode tips and tricks 系列的第一个合辑,包含了 10 个使用 Xcode 的小技巧。每个小技巧都配有简洁的文本和一个小视频,小视频长度都不超过 20 秒。用这种形式学习小技巧,效果非常不错,简洁直观,一目了然,希望作者一直更新下去。本篇文章不需要翻墙,但观看视频需要翻墙。 + +### 🐎 [swift-sh](https://nshipster.com/swift-sh/) + +Swift 有一个活跃的社区,现在带来了 swift-sh 以供实现脚本功能,同时提供了包管理,且在 GitHub 中开源,见 [mxcl/swift-sh](https://github.com/mxcl/swift-sh)。 + +- 通过注释 `import DeckOfPlayingCards // @NSHipster ~> 4.0.0` 引入 Github 中 NSHipster 中的 DeckOfPlayingCards 包。 +- 可以指定依赖的 remote 地址,`import Remote // https://example.com/Remote.git`。 +- `#!/usr/bin/swift sh` 脚本中声明运行方式,swift sh,系统在运行的时候,会去寻找 swift-sh 的执行。 +- swift-sh 使用内置 eject 命令简化从脚本到包的转换,`$ swift sh eject ./bridge`。 + +当前的限制: + +- 缺乏从外部模块导入单个声明。 + +### 🐢 [High Performance Numeric Programming with Swift: Explorations and Reflections](https://www.fast.ai/2019/01/10/swift-numerics/) + +利用 Swift 进行数学编程并不是一个很热门的领域,例如训练机器学习模型,但作者经过几周的研究与实验构建了几个数学库,可以达到与精心优化过的矢量化 C 语言相同的速度,同时还能够保持简洁易用。在这篇文章里,作者会为你展示如何使用 Swift 进行有效的数学编程,其中的例子主要都来自 [BaseMath](https://github.com/jph00/BaseMath) 库,这个库为 Float 和 Double 型提供了通用的数学函数。 + +### 🐎 [客户端单周发版下的多分支自动化管理与实践](https://tech.meituan.com/2019/01/10/traffic-git-branch-management.html) + +过去,大多数 App 的发版时间一般为 3 到 4 周,但如今,为了快速验证产品策略,又或者赶固定时间的运营活动,许多产品的发版节奏较过去变得更快。但快速的发版节奏带来的必然是并行开发与工程代码版本管理的一系列问题。本文介绍了美团团队是如何来解决这一问题的,并且基于文中提到的流程已经稳定进行了 10 个小版本的开发。 + +### 🐎 [【译】Language Server Protocol](https://swift.gg/2019/01/15/nshipster-language-server-protocol/) + +这篇文章是 [Language Server Protocol](https://nshipster.com/language-server-protocol/) 的译文版。Matt 大神解释了什么是 LSP,LSP 是怎么工作的,以及潜在的可能带来的好处,我们可以一起重温下。 + +相关阅读:[Swift Development with Visual Studio Code](https://nshipster.com/vscode/) + +### 🐢 [iOS 拾遗——为什么必须在主线程操作 UI](https://juejin.im/post/5c406d97e51d4552475fe178) + +我们都知道 UI 相关方法必须在主线程调用,究其原因的或许不多。 + +本文由浅入深,从多方面阐述为什么不能在主线程操作 UI。包含 `UIKit` 非线程线程安全的设计、`UIApplication` 事件响应、底层 `Core Animation Pipeline`。另外,还介绍了 `Texture` 和 `ComponentKit` 的实现来,希望能够带给大家一点思考。 + +>推荐人:[杜玮-Dywane](https://github.com/Dywane) + +### 🐢 [React Native 工程中 TSLint 静态检查工具的探索之路](https://mp.weixin.qq.com/s/H3GW43s1aOup2J2VQHpqjg) + +代码的静态检查,可以在代码的规范性、安全性、可靠性、可维护性等方面起到重要作用。 iOS 可以使用 Clang Static Analyzer 、 OCLint 等工具, Android 可以使用 CheckStyle、Lint、Findbugs、PMD 等工具,而对使用 TypeScript 的 React Native 工程,TSLint 则成为了主要代码静态检查的工具。 + +本文阐述了使用 TSLint 的原因,并对 TSLint 的使用做了详细的介绍,既可以直接使用 TSLint 的规则,也可以自定义编写 TSLint 规则。使用 TSLint 后可以有效规避一些低级错误,同时可以快速定位问题代码,将开发状态从“亡羊补牢”进化到“防患未然”。 + +### 🚧 🐎 [Generate & Host your iOS Documentation](https://medium.com/@jonathan2457/generate-host-your-ios-documentation-39e21b382ce8) + +代码注释和说明文档对于我们维护和使用类库来讲,都是很有用的。很多时候我们也都是通过导出代码注释作为文档,因为这样能减少重复编写文档带来的额外工作量,也能避免代码和文档描述不一致带来的坑。 + +本文就介绍了一款能够从 Swift 和 Objective-C 代码中提取注释来生成 HTML 格式文档的命令行工具 —— [Jazzy](https://github.com/realm/jazzy);同时也介绍了如何通过 Travis CI 来自动生成和部署文档到 GitHub Pages,保证了代码和文档的及时同步。这个思路完全可以用到公司内部的私有工作流程当中,通过工具和自动化提高工作效率。 + +### 🐎 [不同 WKWebView 之间实现浏览状态隔离](https://oldoldb.com/2019/01/12/Session-isolation/) + +很多时候面对 webView 相关的登录状态,大家都是习惯一旦在一个 webView 进行了登录,在创建新的 webView 打开新的页面应该也能做到自动登录同步,这是一个比较常见的用户场景。但本文的作者所面对的场景恰恰是登陆隔离,即一个 webView 保持了登录,其他 webView 不会自动登录,面对这个需求,大家可以看看作者在这里面的研究与探索。 + +### 🐢 [OBJECT SERIALIZATION IN IOS](https://dmtopolog.com/object-serialization-in-ios/) + +在这篇文章中,作者尝试将关于 iOS 开发中主要格式和数据序列化类型的知识系统化。还将 ObjC(NSCoding)与 Swift 4(Codable)的方法进行比较,并列出一些特定的用例,例如它们之间的互操作以及使用复杂对象图的能力。 + +- 序列化作为一个单独的过程 +- NSCoding +- NSCoder 和 NSKeyedArchiver +- JSON +- PLIST +- 其他格式 +- Codable +- 一些基准和比较 +- NSKeyedArchiver 编码可编码 +- 编码复杂的对象图 +- Codable 作为 NSCoding 的替代品(作为结论) + +## 设计 + +### [「Keep 设计开发语言」实践与思考](https://mp.weixin.qq.com/s/z880jdHhHeJhMjA6GJAaYQ) + +其实这篇文章并不是说编程的,但是依然值得程序员们读一读。为什么呢?因为: + +1. 你有多少次和 UX 发生了争执,原因是 UX 不停的改设计? +2. 你有多少次搞不清楚 UI 中元件的布局,大小,对话框的设计要怎么样,然后只能不停的去问 UX 或者 PM? +3. 你有多少次因为代码没有很好的模块化不得写别人写过的重复 UI 元件而加班? + +那就是时候在公司内部和 UX 团队一起建立起一套完整的属于你们的设计语言了。这不仅是为了你们的产品质量,更是减少重复劳动,解放程序员的最佳方案。 + +什么?你问我怎么开始搞?那还不快看看这篇来自 Keep 团队的文章参考参考?赶紧的。 + +## 工具 + +### [Bagel](https://github.com/yagiz/Bagel) + +Bagel 是一个轻量级的原生 iOS 网络调试器。它的方便之处在于不需要使用证书和设置代理。只要将 iOS 设备和 Mac 电脑连接到同一个网络,就可以在 Bagel 的 Mac 客户端查看当前在 iOS 设备上运行的 APP 的网络通信情况。 + +### [awesome-mac](https://github.com/jaywcjlove/awesome-mac) + +无论你是 macOS 小白,还是 macOS 的高阶玩家,你总能从 awesome-mac 的软件列表中找到一些你没有见到过的实用软件工具推荐。这份列表来自广大开发者的多年积累和精品推荐。它涵盖了日常生活至开发软件推荐一应俱全。 + +## 音视频 + +### [ggtalk | 狭义跳槽论:面试官,大厂新人和准备起跳的某 C](https://talk.swift.gg/12) +本期 ggtalk 聊了程序员非常喜闻乐见的话题,采访了翻译组最近刚跳槽或者准备跳槽的三位同学,聊聊为什么跳槽,跳槽的主要考虑是什么,收益和风险如何权衡。听下来感觉很有共鸣,三位同学遇到的绝大多数情况其实其他程序员也会遇到。最近有跳槽想法的同学不妨可以参考。 + +### [Swift Community Podcast #1](https://www.swiftcommunitypodcast.org/episodes/1) + +两个社区大 V [John Sundell](https://www.swiftbysundell.com),[Garric Nahapetian](https://twitter.com/garricn) 加上 Swift 创始人之一 [Chris Lattner](https://twitter.com/clattner_llvm),他们开始了一档全新的博客节目,主讲 Swift 相关的各种内容。 + +第一期主要讲了这个节目开始的缘由和各自开始钟情于 Swift 的一些小故事。第二期的话题[正在征集中](https://github.com/SwiftCommunityPodcast/podcast/issues/2),目前评论区里已经有人提出了 TensorFlow / Scripting / Concurrency 等热门话题,大家有感兴趣的话题也可以去贡献一下。 + +### [一起来开发泊学 App 吧](https://boxueio.com/path/let-us-build-and-launch-a-forum) + +如果你正在自学使用 Swift 做 iOS 开发,并期望找到一份相关的工作,但却苦于没有项目练手和熟悉整个 App 的开发流程。或者你十分向往成为一个独立开发者,但又不知从何开始。又或者你想看看 Swift 充当服务端开发语言时会有怎么样的表现。那小编十分推荐你看看泊学上的这个系列视频,你得到的会远比一些培训班得到的多。目前已经推出以下 4 个系列,且内容仍在持续更新中: + +- [设计 iPhone 版泊学 App](https://boxueio.com/series/design-boxue-app-from-scratch):基于 Apple 官方的 iOS design guideline,我们用 Sketch 从零开始设计泊学自己的 iOS App。在这个真实的项目中,了解 Sketch 的使用经验和常用插件。 +- [Vapor Up and Running](https://boxueio.com/series/vapor-up-and-running):如果,你已经掌握了 Swift 编程语言,再用它学习服务端开发,就变成了一个性价比很高的事情。这个系列里,我们会从零开始,基于 Vapor,详细地讲述每一个服务端开发领域常用的技术场景。 +- [Vapor Fluent](https://boxueio.com/series/vapor-fluent):在这个系列里,我们会实现一个类似论坛的 App。通过这个过程,来了解 Vapor 中的 Fluent 组件。通过它,我们就可以无需了解 SQL 的细节,而是用 Swift 的方式和数据库打交道。 +- [基于 MVVM 构建泊学 App](https://boxueio.com/series/build-boxue-app-in-mvvm):在这个系列里,我们以实现 Boxue App 举例,以一个独立开发者的视角,尽可能在代码的可维护性、可测试性、可重用性以及可协作性,达成让自己满意的实践。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@XanderXu](https://github.com/XanderXu),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#54-2019.01.28.md b/Reports/2019/#54-2019.01.28.md new file mode 100644 index 000000000..9e063dafc --- /dev/null +++ b/Reports/2019/#54-2019.01.28.md @@ -0,0 +1,213 @@ +# 老司机 iOS 周报 #54 | 2019-01-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +各位读者大家好!首先欢迎我们的新编辑 - 热爱分享的爱奇艺 iOS 开发 [@J_Knight_](https://github.com/knightsj) 加入周报团队~另外春节临近,本期周报也将是我们年前的最后一期,年后我们再见!祝大家春节快乐! + +## 新闻 + +### 🌟 [老司机翻车现场:一个业余程序员组织如何收到滴滴的侵权通知](https://mp.weixin.qq.com/s/9-vbYu71fPTxpGAv8EL_6w) + +2019 年 1 月 23 日,这是一个值得所有老司机编辑铭记的日子,我们收到了来自滴滴法务团队的侵权通知。虽然我们完全不是一个实体组织,也毫无商业性质可言,和滴滴更不在一个行业,Logo 的颜色也完全不同。但是滴滴认为我们从 18 年 1 月开始使用的 Logo 和他们在 18 年 3 月登记的街兔 Logo “高度相似”,可能导致 APP 应用程序员的开发人员认为是街兔商标。对于这方面纠纷,我们也是大姑娘坐轿子头一遭,真谈不上老司机。于是我们选择按照对方要求第一时间替换掉所有可疑图片。在此期间,我们收到了很多读者和朋友的建议和帮助,非常感谢大家对老司机周报的关心和支持,我们全新的 Logo 也即将完成设计,很快会与大家见面。 + +我们愿称此次严肃而又哭笑不得的事件为『123 老司机翻车门』,为了其他同在技术社区做分享的朋友避免受此类事件的影响,『[知识小集](https://github.com/awesome-tips/iOS-Tips)』特地整理了一份指南给大家 - [老司机翻车现场 续:技术之外,程序员如何自我保护](https://mp.weixin.qq.com/s/nkdNE1Nh-FZgx05LVYcVLQ)。 + +### 🌟 [Swift 5 Release Notes for Xcode 10.2 beta](https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_beta_release_notes/swift_5_release_notes_for_xcode_10_2_beta?language=objc) + +万众期待中,Swift 5.0 终于和 Xcode 10.2 Beta 以及 iOS 12.2 Beta,macOS 10.14.4 Beta 一起降临。虽然距离正式版还有大概一个月多一点的时间,但是各位 iOS Swift 开发者已经可以开始着手准备进行适配了。 + +Swift 5.0 应该能算是 Swift 从 1.0 以来的最大变革。不是因为语法变化多,而是因为从 5.0 开始,Swift 终于进入了 ABI 稳定时代,系统将自带 Swift 动态库,老版本 Swift 编译的库也将可以轻松的用到更新版本的 Swift 项目中。 + +除了上面苹果官方给出的链接,也可以参考知识小集团队的[翻译版本](https://juejin.im/post/5c4b3e91e51d452c8e6d6bcc)。 + +### [Upcoming Changes for Organization Teams](https://developer.apple.com/support/teams/) + +从 2019-02-12 开始,苹果开发者网站(developer.apple.com)和 App Store Connect 将会共用一套成员管理系统,有些角色权限将合并。这是个期待已久的改动,简化我们的维护成本。 + +## 文章 + +### 🌟 🐎 [Server-provided animations in iOS apps](https://badootech.badoo.com/server-provided-animations-in-ios-apps-b51ce63beff3) + +这篇来自 Badoo 团队的文章用一个例子介绍了如何将 Adobe After Effects(AAE)的动画导出为 iOS app 可以读取的格式(借助 Lottie 库),然后创建一种动画云存储服务,将动画存储在服务器上,然后按需传递给客户端 app。这种方法最显著的优点就是可以对动画更新流程进行解耦,也就是说如果要发布一个漂亮的新动画,设计师只要给服务器团队提供 JSON 就可以了,效率非常高!还有一个优点是不同的客户端平台(iOS、Android、Web)可以实现完全相同的功能而不需要调整现存的服务器端功能或原生动画。 + +### 🌟 🐎 [A RunLoop for your Swift script](https://alejandromp.com/blog/2019/01/19/a-runloop-for-your-swift-script) + +上一期推荐里面有一篇关于 [swift-sh](https://nshipster.com/swift-sh/) 的介绍,如若未读,可以先跳转过去一看。 +这一文章主要是给出一下 Tips,当你需要执行一个异步任务的时候会发现,脚本跑完就结束,异步任务自然也得不到调用了,这是不符合需求的。iOS App 启动后会进入 Runloop 当中不停的在休眠和执行状态循环,保证 APP 在没任务的状态也不会退出。同理,在脚本中,执行 `RunLoop.main.run()` 或者 `dispatchMain()` 会让脚本进入启动 Runloop,不会结束。当你异步任务 callback 后,调用 `exit(EXIT_SUCCESS)` 或 `exit(EXIT_FAILURE)` 退出当前 Runloop,并且结束脚本。 + +### 🌟 🐕 [2018,我们的组件化实施之路](https://juejin.im/post/5c39b9a8e51d457cb97b944a) + +本篇文章是诸葛找房 iOS 技术团队近半年组件化实施之路的经验积累与沉淀,文章主要有 2 大部分。 + +第一部分主要讲了组件化可选用的方案、组件化的分层、业务组件的拆分步骤: +1. 组件预处理 +2. 组件抽离、编译、运行 +3. 组件引入 + +第二部分分享了在实施组件化过程中遇到的一些问题: +* 主工程中业务组件的引用方式问题 +* 业务组件的开发时机问题 +* 业务组件如何测试 +* 组件后续的开发与维护和组件回滚 +* 业务组件的粒度 +* 关于业务组件中文件的命名规则 +* 关于不同项目下同一业务组件的个性化差异解决方案 +* 其他细节问题如如何处理组件之间的相互跳转、业务组件之间如何进行复用等 +* 关于业务组件的评价标准 + +组件化是一个漫长、繁琐、复杂但有意义的过程,是一项团队性的工作,不管是正在打算实施,还是已经进行过组件化实践,都可以阅读本文,相信读者朋友阅读本文都会有一定收获。 + +### 🐎 [React Native vs Kotlin Multiplatform. How the Future of Multiplatform Development Will Look Like?](https://www.netguru.com/codestories/react-native-vs-kotlin-multiplatform) + +作者对比了 React Native 和 Kotlin 在跨平台上各自的优劣,同时也谈了自己对跨平台的未来的思考,虽然不是针对 iOS 的,但是也值得阅读参考。 + +### 🐎 [Flutter vs React Native: A Developer’s Perspective](https://medium.com/flawless-app-stories/flutter-vs-react-native-a-developers-perspective-8914ca240a89) + +老生常谈的话题,作者从十个方面去比较了 Flutter 和 React Native 的优劣,可供还在选型的同学们参考。 + +### 🐕 [How to use the coordinator pattern in iOS apps](https://www.hackingwithswift.com/articles/71/how-to-use-the-coordinator-pattern-in-ios-apps) + +本文介绍了如何使用 Coordinator Pattern 这一设计模式来分离出本不属于 View Controller 的一些职责 ,避免导致 ``Massive View Controller`` 的形成。Coordinator Pattern 可以翻译为协作者模式,该设计模式并不在 ``GOF`` 的 23 个设计模式之中。 + +作者结合代码,从 Coordinator 的创建到应用,讲解了一个如何将跳转功能分离出 View Controller 的例子。读者通过阅读本文,可以了解到何为协作者模式,以及如何将该模式应用到我们自己的 APP 开发中。 + +相关阅读:[The Coordinator](http://khanlou.com/2015/01/the-coordinator/) + +### 🐎 [Xcode tips and tricks – part two](https://www.hackingwithswift.com/articles/168/xcode-tips-and-tricks-part-two) + +文接上回,Xcode tips and tricks 系列的第二个合辑来了!作者更新的速度很快,本期仍然是 10 个快捷使用 Xcode 的文本 + 小视频,你肯定能发现一些“原来还能这样操作”的点。作者也在搜集大家的建议,如果你有什么清奇的手法,也不妨[分享](https://twitter.com/twostraws)出来吧! + +### 🐕 [WKWebView 实现浏览历史恢复](https://oldoldb.com/2019/01/16/Session-restoration/) + +在使用 WKWebView 的时候,我们会发现,WKWebView 无法实现浏览历史的持久化。WKWebView 中 backForwardList 属性用来记录浏览历史,但这个属性是只读的,且在下次冷启动 App 的时候,backForwardList 是全新的,故而会有这个问题。 + +如何实现 WKWebView 浏览历史的持久化?本文作者通对 Firefox 的相关源码进行分析,借鉴了 Firefox 浏览器的实现方式。总结一下: + +1. 当 App 启动需要恢复浏览历史的时候,启动一个本地的 Web server 并且加载一个特定的本地页面 + +2. 提取之前保存的所有 url 信息,构造本地 url 越过[同源策略](https://developer.mozilla.org/en-US/docs/Web/API/History_API)限制,传递到特定本地页面中,该页面通过调用 pushState 来达到修改 backForwradList 的目的 + +3. 当本地加载这些特殊 url 的时候,之前启动的本地 server 可以将其重定向到正确的url + +### 🐢 [细说 iOS 代码签名](http://xelz.info/blog/2019/01/11/ios-code-signature/) + +iOS 签名机制其实挺复杂,我们可以跟随作者的脚步,一点点的去了解 iOS 签名机制中每一步的含义,此外作者还贴心的帮助我们将文章拆分,有助于我们分步阅读。 + +- [细说 iOS 代码签名(一):签名的作用及原理](http://xelz.info/blog/2019/01/11/ios-code-signature-1/) +- [细说 iOS 代码签名(二):开发者证书、Entitlements、Provisioning Profile](http://xelz.info/blog/2019/01/11/ios-code-signature-2/) +- [细说 iOS 代码签名(三):签名的过程及代码签名的数据结构](http://xelz.info/blog/2019/01/11/ios-code-signature-3/) +- [细说 iOS 代码签名(四):签名校验、越狱、重签名](http://xelz.info/blog/2019/01/11/ios-code-signature-4/) + +因作者篇幅比较长,讲解的比较深入,有兴趣的同学可以通篇读完收益更大。若时间有限,推荐缩略版的 [iOS App 签名的原理](http://wereadteam.github.io/2017/03/13/Signature/) 供大家参考。 + +> 推荐人:[xelzmm](https://github.com/xelzmm) + +### 🐎 [Clear and searchable logging in Swift with OSLog](https://www.lordcodes.com/posts/clear-and-searchable-logging-in-swift-with-oslog) + +苹果在 WWDC 2016 ([Unified Logging and Activity Tracing](https://developer.apple.com/videos/play/wwdc2016/721/)) 推出了新的统一日志系统(the new Unified Logging system)—— OSLog,它比以前的 print 或者 NSLog 功能要强大的多,苹果也是强力推荐使用新的统一日志系统。 + +本文主要介绍了新日志系统的三大特性: + +1. 新日志系统能够按子系统 (subsystem) 和分类 (category) 进行筛选搜索 + + ``` + let ui = OSLog(subsystem: "com.lordcodes.chat.ChatApp", category: "UI") + os_log("Contact selected", log: ui) + ``` + +2. 同时也支持指定日志级别 (Default, Info, Debug, Error, Fault) + + ``` + os_log("Contact selected", log: .ui, type: .info) + ``` + +3. 默认不收集动态字符串 (dynamic strings) 和复杂对象 (complex dynamic objects) 的打印信息,确保用户敏感信息不会持久化到日志文件,需要收集的话要在格式化输出时指定为 `public` + + ``` + os_log("Contact %{private}ld selected", 2) + os_log("HTTP response: %{public}@", responseCode) + ``` + +*注:[CocoaLumberjack](https://github.com/CocoaLumberjack/CocoaLumberjack) 封装的日志系统是支持 os_log(DDOSLogger) 的。* + +### 🐎 [以流的形式执行 Multipart 请求](https://swift.gg/2019/01/21/streaming-multipart-requests/) +Foundation 框架中的 URL 类提供了非常全面的功能,此后还在 iOS 7 中新增了 URLSession 类。尽管如此,基础库中仍然缺少 multipart 文件上传的功能。 +本文介绍了怎样发起 multipart 请求,并为解决多文件传输的性能问题,通过 AFNetworking 和 Alamofire 的方式,将硬盘中数据以流的形式读取来执行 Multipart 请求解决此问题。 + +### 🐕 [Using protocols as composable extensions](https://mecid.github.io/2019/01/17/using-protocols-as-composable-extensions/) + +面向协议是 Swift 推崇的一种编程范式,标准库里的基础类型也都是基于协议搭建起来的,利用 protocol extensions 的特性去达成复用和组合,但这些范式如何落实到业务上呢?这篇文章的作者就介绍了如何通过 protocol extension 去完成一个加载动画,并且对比了继承和协议的两种实现方式。 + +### 🐎 [使用 Flutter 一年后,这是我得到的经验](https://mp.weixin.qq.com/s/FmK0RMCNNJe68Aq7tOUROA) + +过去一年开发者们对 Flutter 的热情有多高相信已经无需多言。Google 出品、跨平台、性能高等种种标签让越来越多的人加入其中。本文总结了作者一年来开发 Flutter 的一些心得,作者在 Flutter 上丰富的开发经验所进行的总结相信对于接下来想要尝试 Flutter 的同学是很实用的,这对我们做技术选型以及更多的考虑会很有帮助。 + +## 代码 + +### 🌟 [UIKitSwiftDSL](https://github.com/mecid/UIKitSwiftDSL) + +迫于 StoryBoard 写布局带来各种协作上的问题,大型项目的布局一般都用纯代码来实现。纯代码布局最大的问题是可读性太低,有没有办法改善? +UIKitSwiftDSL 作者提供一个新思路:用区区 200 行代码实现一套布局 DSL([Domain Specific Language](https://draveness.me/dsl)),通过提供声明式的写法提升布局代码的可读性。 + +建议通读源码,实现不复杂带来的使用体验却很有趣。或许我们也可以尝试设计一些 DSL 来优化特定问题。 + +### 🌟 [flutter-go](https://github.com/alibaba/flutter-go) + +阿里出品,Flutter 组件演示 demo 和中文文档,同时包括了 iOS 与 Android,快上手试一试。 + +### [habbit](https://github.com/lzyy/habbit) + +个人 Flutter 作品,演示了一个完整的习惯跟踪 App 。从完成度上看还可以,复杂度不够,主要是演示了 RxDart 的用法。 + +### [swift-algorithm-club-cn](https://github.com/andyRon/swift-algorithm-club-cn) + +swift-algorithm-club 主要是 Swift 来实现算法和数据结构的源码和文章,对应文章都有对该算法的讲解,如果在学习或者复习算法的同学,不妨一看。 + +## 音视频 + +### [ggtalk | 广义跳槽论:简洁明了的方法论](https://talk.swift.gg/13) + +这一期的 ggtalk 延续了上一次程序员比较关心的话题:跳槽。邀请来了老牌程序员、产品经理:Easy。相信经常刷微博的同学应该都知道他,Easy 之前在微博做过程序员和产品经理,也经历过独立开发。对于程序员的职场方法论有一套独特的心得,我听完之后感触颇深。比如作为程序员,不要只关注公司是否能出得起自己希望的薪水,更重要是要关注自己所能给公司带来的价值,不要被短期的供需不平蒙蔽了双眼。还有程序员如何提升自己的影响力? 最重要是能给别人创造价值。除此之外,还有不少有趣的视角。推荐大家收听。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +- [深圳 - 格隆汇 iOS / Android / 前端](https://www.lagou.com/gongsi/j84043.html):公司方向是投研资讯,目前正在稳步扩张中,各个级别的工程师都有需求。任何推荐或者简历都可以发送到我邮箱:[chenkem@gmail.com](mailto:chenkem@gmail.com),同时也欢迎大家[私信我](https://t.me/kemchenj)了解更多信息。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@方秋枋](https://weibo.com/100mango),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@XanderXu](https://github.com/XanderXu),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#55-2019.02.18.md b/Reports/2019/#55-2019.02.18.md new file mode 100644 index 000000000..4607581a5 --- /dev/null +++ b/Reports/2019/#55-2019.02.18.md @@ -0,0 +1,156 @@ +![ios-weekly](https://user-gold-cdn.xitu.io/2019/2/18/168ff3e2707ee24f?w=1024&h=391&f=png&s=45019) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TLS 1.3 in iOS](https://mailarchive.ietf.org/arch/msg/tls/5QjzTilqjomSyzENtgfaAqQOhbA) + +在 iOS 12.2 中,iOS 系统默认开启了对 TLS 1.3 的支持,使用 Network Framework 以及 NSURLSession 的开发者都可以使用 TLS 1.3 来建立更安全的网络连接了。 + +在这方面有兴趣的童鞋不妨了解一下。 + +### [iOS 12.2. beta PWA update](https://twitter.com/mhartington/status/1089292031548145666?s=21) + +在 iOS 12.2 beta 上 PWA 的能力也得到了小部分更新,由PWA打开外部网站会通过 SFSafariViewController 打开,进入后台后 PWA 当前的状态会保持,PWA 应用可以被系统搜索到等 + +## 文章 + +### 🌟 🐢 [了解和分析 iOS Crash Report](https://juejin.im/post/5c5edb37e51d457f926d2290) + +作为客户端的开发者,与各式各样的 Crash 打交道是家常便饭。关于 App Crash 的相关讨论,社区也总是比较活跃。我们曾在 27 期和 34 期分别推荐了 [深入理解 iOS Crash Log](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2327-2018.07.16.md#-深入理解-ios-crash-log) 和 [手把手教你查看和分析 iOS 的 crash 崩溃异常](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2334-2018.09.03.md#-手把手教你查看和分析-ios-的-crash-崩溃异常) 两篇好文章。而这次则是来自苹果官方文档的译文,官方则意味着权威,以及更多的细节。内容虽然还是围绕着 “符号化 - 看懂 - 解析” 三个部分进行,但非常系统和详细。作者也对这篇译文进行多次润色修改,并在文中多处添加了自己的注解,会对我们阅读这类偏底层文章有所助益。 + +文中会涉及许多底层概念,读起来难免不如一些应用类文章顺畅,但小编还是建议大家无论如何都坚持至少过一遍,并再安排时间分块细读,会大有裨益。 + +### 🌟 🐕 [iOS 原生级别后台下载详解](https://juejin.im/post/5c4ed0b0e51d4511dc730799) + +本文记录了作者实现支持原生后台下载 Tiercel 库的整个历程,并详细的列出后台下载的所有特性和注意事项,并附上了具体实现。让读者能够更深刻的了解到后台下载。目前 [Tiercel 2](https://github.com/Danie1s/Tiercel) 已经发布,完美地支持后台下载,还加入了文件校验等功能,对后台下载有兴趣的朋友可以借此机会深入了解下。 + +### 🐕 [ABI Stability and More](https://swift.org/blog/abi-stability-and-more/) + +Swift.org 二月初发文介绍了 Swift ABI Stability 当前状态及后续计划。Swift 5 在 macOS, iOS, watchOS, and tvOS 几个平台将实现 ABI Stability,预计很快就能发布,Linux 及 Windows 平台还需评估。文章还介绍了 `Module Stability` 及 `Library Evolution` 的后续计划 。 + +ABI Stability 能带给我们什么:上述系统以后将自带 `Swift runtime and standard library`,而不需嵌入到 App 中,能大大减小 Swift App 的打包大小。 + +### 🐎 [浅谈团队管理最佳实践](https://jingwei.link/2019/02/05/team-management-methodology.html) + +作者从以下几点谈了一下团队管理的实践: + +- 每个人都需要关怀:领导者应确认团队中每个成员的职业发展规划,并适时地给予“人文上的关怀” +- 公平公正公开的价值评判标准:一个成员的价值增值包含两个层面:随着熟练度的提升所带来的价值增值和解决特殊领域问题的经验价值 +- 团队沉淀:可以通过文档和流程标准化的方式有效降低做重复性工作的成员的替备成本 +- 具象化团队这台机器的样貌:领导者定义团队的责任与目标、架构设计、合理组成、团队的演进等,方便成员参考辅助自己的实践 + +### 🐕 [制作一个 Mac APP:XcodeExtension](https://juejin.im/post/5c53f32be51d457fbe226fdd) + +Xcode 8 提供了 Xcode Source Editor Extension方式来开发 Xcode 插件。本文以 [XcodeExtension](https://github.com/equweiyu/XcodeExtension) 为例,介绍了该插件的使用方法与制作思路。 + +[XcodeExtension](https://github.com/equweiyu/XcodeExtension) 主要有以下功能: + +- ConvertFromCase 把选择的下划线内容变为驼峰 +- DeleteEmptyLines 删除选中的空行 +- SortLines 排列选中的行 +- JsonToModel 把Json数据转成Swift模型,会把下划线命名变为驼峰 + +> 在往期周报中我们也有过相关推荐如: [How to convert your Xcode plugins to Xcode extensions](https://medium.freecodecamp.org/how-to-convert-your-xcode-plugins-to-xcode-extensions-ac90f32ae0e3) 以及 [Code Friend](https://github.com/qvcodefriend/CodeFriend) 开源工具等,感兴趣的读者可以拓展阅读。 + +### 🐎 [使用 OCLint 自定义 MVVM 规则](http://yulingtianxia.com/blog/2019/01/27/MVVM-Rules-for-OCLint/) + +本文总结了通过自定义 OCLint 的扫描规则,对 MVVM 开发模式的 ViewModel 运行静态检查,并把规则集成到 Xcode 上所踩的一些坑。由于官方 OCLint 很久没有维护了,所以本文作者就基于 LLVM 7 进行了修改,对这块有需要或感兴趣的同学可以直接安装试用。 + +### 🐕 [如何看待软件开发?](https://halfrost.com/halfrost_2018/) + +当年移动互联网大潮来的时候,软件开发再次成为炙手可热的岗位,高工资吸引了很多人投身其中。当大潮退去,互联网也迎来寒冬的时候,对于已经在其中的各位,又或者未来想要当开发者的同学们,软件开发到底是什么样的,究竟需要掌握多少知识,职业规划应该如何做,会成为大家再次思考的问题。本文作者以自己多年的工作经验,总结了如何看待软件开发这一问题,值得如果尚有迷茫的同学看一看。 + +### 🐕 [Objective-C 单向数据流方案](https://wereadteam.github.io/2017/09/30/reflow/) + +在 JS 领域,得益于 JS 弱类型语言的特性,单向数据流被广泛的使用。单向数据流可以避免许多因为线程等造成的各种问题。本文介绍了 OC 下的一个单向数据流的方案 Reflow 库。Reflow 库架构设计实现了单向数据流的几个特征: + +- model 对象不可变 +- 整个 app 的数据存于 store 层 +- 更新和通知也收拢于 store 层 + +Reflow 是开源的,有兴趣的同学可以一看。 + +### 🐕 [移动开发的罗曼蒂克消亡史](https://mp.weixin.qq.com/s/2xBnlmESZjq7UTtcfzqhcA) + +本文是 InfoQ 总编辑徐川的一篇文章,介绍了移动开发领域的插件化和热更新两个方向的发展史,覆盖了 iOS 和 Android 。徐老师文章结尾的一句话很有意思,『插件化热潮注定成为技术发展的一段小插曲,也许再过几年,不会有人记得了。那段激情飞扬的岁月,终将成为 The Wasted Times。』 + +最近跟 Bang 哥吃饭,也聊起了热修复的一些事情,实际上在大厂一直都还有发展各种移动开发领域的黑科技。包括最近大热的 Flutter 技术,在 Google 的 RoadMap 上面,也明确表示了[动态更新](https://github.com/flutter/flutter/wiki/Roadmap#dynamic-updates)会是一个重点考虑的方向。总的来说,2019年,移动开发的插件化和热更新方向,应该会在基于各种虚拟机技术的基础上,继续往前发展,满足业务需求。 + +## 工具 + +### [ios-developer-tools](https://github.com/LeoMobileDeveloper/ios-developer-tools) + +本文中总结了 iOS 开发者应该了解的工具合集。其涉猎了多个方面的工具推荐,例如 DEBUG 调试、项目分析、持续集成、逆向工程等。在这份列表当中,能够找到耳熟能详的项目,也有大家平时没有涉及到的方面,不妨来看看那些你没有接触过的开发工具。 + +### [DoraemonKit](https://github.com/didi/DoraemonKit) + +滴滴开源的一款功能齐全的客户端研发助手,同时支持 iOS 和 Android 两端,类似的前辈有 FLEX、Dotzu,但仅限于 iOS 平台。 + +- 内置了很多常用的工具,包括一些辅助开发工具、测试效率工具、视觉辅助工具等 +- 接入方便,便于扩展,让你的业务测试代码在这里快速接入,统一管理,统一收口 + +## 代码 + +### [Path.swift](https://github.com/mxcl/Path.swift) + +一个文件系统路径库,专注于开发人员体验和强大的最终结果。保证了安全性和正确性的前提下提供了非常简洁的 API ,为管理文件路径而头疼的开发朋友们可以尝试使用这个开源库哦! + +### [Facebook 开源图像处理库 Spectrum,优化移动端图像生成](https://www.infoq.cn/article/uF0d_ZuzxgaI3SFJm34d?utm_source=weibo&utm_medium=infoq&utm_campaign=newinfoq&utm_content=0203) + +Facebook 开源了其图像处理库 [Spectrum](https://github.com/facebookincubator/spectrum),内核使用 C++ 编写,并提供了 Objctive-C 及 Java 的简单封装,简化移动端开发。统一的核心使得在 iOS 和 Android 上的图像输出更加统一。 + +### [效果丰富的分类切换组件:JXSegmentedView (Swift版)](https://github.com/pujiaxin33/JXSegmentedView) + +`SegmentedControl + PaggingView` 组合实现的分类切换视图是资讯、电商类应用常用的基本组件。具体实现起来,动效细节和特殊交互场景要考虑的问题并不少。 +[JXSegmentedView](https://github.com/pujiaxin33/JXSegmentedView) 胜在实现了大量主流应用分类切换组件的交互效果,如果你碰到对应需求,相信这会是个不错的参考。 + +如果你不幸还停留在 Objc,也可以看看同一作者实现的 Objc 版本 [JXCategoryView](https://github.com/pujiaxin33/JXCategoryView)(已有 2k+ stars)。 + +> 由 [暴走的鑫鑫](https://github.com/pujiaxin33) 自荐 + +## 书 + +### 🌟 [The Architecture of Open Source Applications](http://www.aosabook.org/en/index.html) + +这是一本开源的电子书,主要介绍了最近几十年来一些经典开源项目(包括 Git、LLVM、nginx、PyPy 等知名项目)的架构思想和设计哲学,文章作者都是业界大牛甚至是项目作者本人,比如 LLVM 之父 Chris Lattner。相比自己去阅读源代码百思不得其解,原作者自己分享的思考和感受就像指明灯一样,给我们打开了更大的世界,站在巨人的肩膀上才能看得更高更远。 + +> 由 [@ShannonChenCHN](https://github.com/ShannonChenCHN) 推荐。 + +## 内推 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +- [深圳 - 格隆汇 iOS / Android / 前端](https://www.lagou.com/gongsi/j84043.html):公司方向是投研资讯,目前正在稳步扩张中,各个级别的工程师都有需求。任何推荐或者简历都可以发送到我邮箱:[chenkem@gmail.com](mailto:chenkem@gmail.com),同时也欢迎大家[私信我](https://t.me/kemchenj)了解更多信息。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://user-gold-cdn.xitu.io/2019/2/18/168ff3e27364b749?w=258&h=258&f=jpeg&s=27357) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#56-2019.02.25.md b/Reports/2019/#56-2019.02.25.md new file mode 100644 index 000000000..214d0fcae --- /dev/null +++ b/Reports/2019/#56-2019.02.25.md @@ -0,0 +1,232 @@ +# 老司机 iOS 周报 #56 | 2019-02-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 话题 + +### 🌟 🐢 [关于 Swift ABI 稳定 ](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1183) + +迟到三年的 ABI 稳定终于要来了。 + +苹果发布了 *[ABI Stability and More](https://swift.org/blog/abi-stability-and-more/)* 和 *[Evolving Swift On Apple Platforms After ABI Stability](https://swift.org/blog/abi-stability-and-apple/)* 两篇文章来阐述 Swift 5 发布以后 ABI 相关的内容所带来的改变。看不懂英文的也不要怕,细心的喵神帮我们做了一个很棒的总结: *[Swift ABI 稳定对我们到底意味着什么](https://onevcat.com/2019/02/swift-abi/)*。 + +Swift ABI 可以说是 Swift 的一个里程碑事件,让跨平台的能力更上了一层,但是 Swift ABI 对于 iOS 开发者使用来说,影响不是很大,有很多开发者误把 API 稳定当成了 Swift ABI 稳定。对于开发者来说,只有 API 稳定了,才是真正意义上的不需要迁移适配了。 + +如果不知道 Swift ABI 是什么的朋友,可以看看苹果去年发布的 *[Swift ABI Stability Manifesto](https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md)*。同时 **[泊学](https://boxueio.com)** 也做了一个很棒的翻译版: *[译:Swift ABI (一)](https://boxueio.com/blackboard/1)* 和 *[译:Swift ABI (二)](https://boxueio.com/blackboard/2)*。 + +**最后,关于 Swift ABI,你有什么看法,可以在我们的 [Github Issue](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1183) 上,发表你的看法,与周报编辑一起讨论。** + +## 新闻 + +### [Swift 5.1 发布计划](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1161) + +Swift 团队近日在博客里更新了 5.1 的发布计划,这个版本的主要目标是达成 [Module Stability](https://forums.swift.org/t/plan-for-module-stability/14551),简单的说就是 Module 接口的向前兼容。 + +另外知识小集也在第一时间[进行了翻译](https://mp.weixin.qq.com/s/2FYhe4gGTCMZL82IOYK7kg),推荐阅读这一篇。 + +### [It’s time to stop using index(of:)](https://www.hackingwithswift.com/articles/177/its-time-to-stop-using-index-of) + +`SE-0204` 在 `Swift 4.2` 实现 +- 增加 `lastIndex(of:)` +- 增加 `lastIndex(where:)` +- `index(of:)` 改名 `firstIndex(of:)`,并且废弃原方法 +- `index(where:)` 改名 `firstIndex(where:)`,并且废弃原方法 + +## 文章 + +### 🌟 🐢 Swift5 新特性 @dynamicCallable 带来的动态魔法 + +一年前周报的第一期我们曾经提过:[Swift 快要可以和 Python 无缝交互了](https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20171204/042029.html),一年后的今天伴随着 Swift5 新特性 `@dynamicCallable` 的发布,『用 Swift 写 Python 变成现实』。 + +起源是 Chris Lattner 大神的两个提案:`@dynamicMemberLookup` 提供动态查找成员的能力(Swift4.2),`@dynamicCallable` 则提供动态方法调用的能力(Swift5)。很难想象,两个语法糖重新定义语言动态性,让人看到 Swift 成为胶水语言的可能。 + +下面三篇系列文章带我们感受语法糖带来的神奇魔法: + +- [#1 Unix Tools as Swift Functions](http://www.alwaysrightinstitute.com/swift-dynamic-callable/) + + 一层薄薄的封装让所有 Unix Tools 变成 Swfit 方法,提供这样的调用方式:`shell.env()`, `shell.ls("-a", "-l")`, `shell.python("--version")`; +- [#2 Swift/ObjC Bridge](http://www.alwaysrightinstitute.com/swift-objc-bridge/) + + 基于 @dynamicCallable 轻松实现一套 Swift - Objective-C 的桥接。实现思路类似 [PyObjC](https://pythonhosted.org/pyobjc/) +- [#3 Mustasheable](http://www.alwaysrightinstitute.com/mustacheable/) + + 为模板语言[Mustache](http://mustache.github.io/)的生成器提供简洁优雅的调用方式。 + +相关阅读:[细说 Swift 4.2 新特性:Dynamic Member Lookup](https://juejin.im/post/5b24c9896fb9a00e69608a71) + +### 🌟 🐎 [架构师思维](https://limboy.me/tech/2019/02/16/architect-mindset.html) + +架构师一词听起来就是个很高端的 Title,在职业生涯的多数时候,在我心里都是高山仰止般的存在。尽管不同的公司对架构师的要求也许不一样,但印象中应该都是技术特别出众的人。那除了技术出众之外,又应该具备什么样的架构师思维呢?本文作者从开发者和开发两个方向阐述了什么才是架构师思维,值得去细细揣摩,带着这个思维,也许你会有新的发现和努力的方向。 + +### 🐎 [Behind the Proposal — SE-0200 Enhancing String Literals Delimiters to Support Raw Text](https://swift.org/blog/behind-se-0200/) + +`SE-0200` 提案中增强字符串分隔符支持原始文本的能力。 + +- 支持多行,并且同时具备Swift原有的字符串功能(如插值),示例: +`""" +line1 +\(line2) +"""` + +- 为了覆盖边转义字符缘特殊情况,参考了 `Rust` 的设计,支持自定义分隔符声明原始字符串,同时支持插值。`#""#` 是将原本 `\` 转义分隔符修改为 `\#`。 + - `#"\#(val))"#`,等同于以往的`\(val)`。`#"\n"#` 输出 `\n`。 + - `###"\nline"###`,转义分隔符是 `"\####"`,输出 `\nline`。 + +### 🐢 [Swift 5 Exclusivity Enforcement](https://swift.org/blog/swift-5-exclusivity/) + +在 2017 年初,Swift 社区发了一篇长文介绍 Swift 4 将在内存安全方面做一些改进,@onevcat 翻译了此文 [所有权宣言 - Swift 官方文章 Ownership Manifesto 译文评注版](https://onevcat.com/2017/02/ownership/) 建议细读。 + +上文中提到的改变大多已在 Swift 4.x 落地,即将发布的 Swift 5 中,对「独占性访问」进行了增强:`在 Release 模式运行也默认开启。` + +Swift 4 中,只有 Debug 模式下,Runtime 会做「独占性访问」的检查(编译时 Debug 与 Release 都会检查,但编译检查可能覆盖不全),Swift 5 中, Release 模式 Runtime 也默认开启(可手动关闭)。文章仔细介绍了这个改变可能带来什么问题,以及如何应对。 + +### 🐎 [How many apps use Swift in 2019?](https://blog.andrewmadsen.com/post/182862756395/how-many-apps-use-swift-in-2019) + +文章作者对 App Store 上美区 Top 110 的 App 进行了分析,来看到底有多少 App 使用了 Swift。结果上看,目前 Top 110 的 App 使用 Swift 和未使用 Swift 基本处于对半开的状态。 + +大公司切换 Swift 和小公司切换 Swift 比起来,难度要大很多,所以对于这样的结果,也不算惊讶。希望再过一年,Swift 的比例能够有进一步的增长,毕竟 ABI 稳定了。 + +### 🐕 [Painless UI Testing in iOS: Mocking the Network](https://code.egym.de/painless-ui-testing-in-ios-part-1-mocking-the-network-ffbd6ab4809a) + +本文是 Painless UI Testing in iOS 系列的第一篇文章。该系列打算介绍三种方法来让 UI 测试变得更快更可靠。第一种在本文做了介绍,第二种是在第二篇介绍的 [Stubbing the Navigation](https://code.egym.de/painless-ui-testing-in-ios-part-2-stubbing-the-navigation-c5984e728f7e)。但是该系列的第三篇还没有发布,大家可以关注他们的技术博客 [eGym Software Development](https://code.egym.de/)。本系列的作者按设计思路附上代码的方式把他的想法分享的很详细,是非常值得学习和借鉴的,热衷 UI 测试的同学不可错过。 + +### 🚧 🐕 [Deep Diving React Native Debugging](https://medium.com/@shaheenghiassy/deep-diving-react-native-debugging-ea406ed3a691) + +在开发 React Native 应用时,我们可以通过开启 `Debug JS Remotely` 来实现在 Chrome 中调试 JS,包括断点调试、查看堆栈信息、变量状态等,有时候我们可能还会在调试时遇到红屏错误 `Runtime is not ready. Make sure your packager server is running.`,但是不知道这背后都发生了什么。我们往往对这些每天日常开发中接触的东西既熟悉又陌生,不妨跟着这篇文章读读源码并调试一下,一切都将豁然开朗。 + +> 由 [@ShannonChenCHN](https://github.com/ShannonChenCHN) 推荐。 + +### 🐕 [分析一次有意思的需求——HTML 代码注入](https://juejin.im/post/5c6f949b51882562260d37fa) + +在 iOS Hybrid APP 开发中我们经常会有这样的需求: 通过 WebView 实现 JavaScript 与 Objective-c 交互。本文作者以 WKWebView 访问了一个 HTML 页面,获取用户的所有输入信息这样的问题为例,将需求拆解为如下几部分,最终解决问题。 + +1. HTML 和原生交互 +2. HTML 获取指定元素 +3. 通过 JavaScript 动态为 HTML 元素添加事件 +4. 通过 WKWebView 向 HTML 注入 JavaScript 并调用 原生代码 + +作者通过逐步拆解需求,把抽象的问题分解成各个小问题的组合,然后逐个分析验证,最终解决相对复杂的问题。其实这正是如何分析具体的需求,并将其转换为代码的一个过程,感兴趣的读者可以跟着作者思路读一读,应该会有所启发。 + +> 由 [@chouheiwa](https://github.com/chouheiwa) 推荐。 + +### 🐢 [How I failed 39 interviews and what I’ve learned](https://medium.com/flawless-app-stories/how-i-failed-39-interviews-and-what-ive-learned-515c8e6c4b53) + +一个大学计算机系二年级在校生从 39 次面试失败经历中的总结,对于大部分软件开发工作者而言,去一些大厂工作都是一个目标。作者打小就梦想进入 Google Facebook 等这些大厂工作,而这篇文章总结了他在校期间面试大厂屡战屡败、屡败屡战的经历。 +老司机推荐给大家,希望给正在努力亦或是正在迷茫的你有所帮助。 + +### 🐕 [Demystifying UIKit Spring Animations](https://medium.com/ios-os-x-development/demystifying-uikit-spring-animations-2bb868446773) + +Spring 弹簧动画从 iOS 7 开始就成为了公开 API,但当时的 damping-duration 接口非常不自然,iOS 10 发布 `UISpringTimingParameters` 和 `UIViewPropertyAnimator` 之后有所好转,但要制作出优秀的弹簧动画仍然不是一件容易的事。这篇文章会为你介绍究竟什么是弹簧动画、背后的工作原理以及如何调试出恰到好处的动画。 + +### 🐎 [Swift 5 字符串插值之美](https://swift.gg/2019/02/21/the-beauty-of-swift-5-string-interpolation/) + +本译文介绍了 String 类型对 `ExpressibleByStringInterpolation` 协议的三种扩展实现,以精确控制字符串插值的打印方式。`ExpressibleByStringInterpolation` 协议在 Swift 3 时被废弃,如今被以一种更优雅、扩展性更强的方式重新实现。建议同时阅读一下 [SE-0228](https://github.com/apple/swift-evolution/blob/master/proposals/0228-fix-expressiblebystringinterpolation.md) 这个提案,对比了解下新旧两种实现方式,以及新的实现方式所带来的可扩展性和性能改进。也可以看下 [HTML,LocalizableString,SQLiteStatement](https://gist.github.com/brentdax/0b46ce25b7da1049e61b4669352094b6) 三种非 String 类型的扩展实现。 + +### 🐎 [唯品会 iOS 代码覆盖率的应用实践](https://mp.weixin.qq.com/s/mTXMbm0c-nCWZ8v8D1-QAA) + +在快速迭代的这个软件开发生态下,量化测试数据成为软件测试中必不可少的一步。 + +本篇中,作者将一步步剖析,iOS 代码覆盖率的应用。文中的主要步骤可以拆分成一下几个部分。 + +- 在编译过程中,利用 LLVM 可以使用 gcda/gcno 记录代码覆盖率的特性,进行中间代码插桩 +- 在程序执行过程中,将记录文件刷入内存当中,利用 HTTP 接口上传服务器 +- 将 LCOV 作为记录文件分析工具,生成可视化的报表数据 + +相较于传统的行/函数/分支覆盖率外,文中新增了行差异覆盖率。将覆盖率文件进行预处理,新增差异代码行数相关属性,达到支持差异/多版本合并。 + +> 如果对于 GCC 插桩想要有所了解可以看这个博主的一系列研究 [链接](https://so.csdn.net/so/search/s.do?q=GCC%20%E6%8F%92%E6%A1%A9&t=blog&u=livelylittlefish) + +## 工具 + +### 🐕 [Introducing the sourcekitd Stress Tester](https://swift.org/blog/sourcekitd-stress-tester/) + +Sourcekitd 是为 Xcode 和最近发布的 SourceKit-LSP 的编辑器核心功能提供数据支持的工具。如 Swift 文件的代码补全,语法高亮和重构等。为了帮助改善其健壮性,本文介绍了一个新引入的工具,即 “Sourcekitd 压力测试工具”。在过去几个月中,它帮助找到了 91 个可复现的 Sourcekitd 崩溃,断言失败和挂起。 这篇文章介绍了 Sourcekitd 的实现,如何在 Swift CI 和 PR 测试中部署,以及 Swift 开发人员如何在自己的项目中运行它,以帮助改善每个人的 Swift 编辑体验。 + +## 代码 + +### 🌟 [MicroKernel](https://github.com/mrriddler/MicroKernel) + +MicroKernel 是一个客户端微内核架构,它把业务和基础都视作插件,形成一个插件化微内核架构。对于业务,一切其他模块的业务和基础都是注入的依赖。 + +MicroKernel 遵守了整洁架构 (clean architecture)、六边形架构 (hexagonal architecture) 等架构的主旨,架构以代码变更的原因和频率形成边界和层次。 + +分为以下几个层次: + +- MicroKernel:App的驱动,提供MicroApplication管理、通信机制、依赖注入、路由等。 +- MicroKernelService:贯穿App的基础能力服务,提供基础能力的领域抽象,不包括具体的技术选型,不必拘泥于依赖注入形式。 +- MicroApplicationService:贯穿App的业务服务,从复用角度聚合,包括其整体业务方案,比如,分享、登录、支付等。 +- MicroApplicationCoordinator:解开MicroApplication之间耦合的协调器。 +- MicroApplication:独立的业务,从功能角度聚合,在架构中称作应用,其形式包括Native、H5、Hybrid、小程序等。 +- MainApplication:整个App的架构注册、配置,以及外部渠道的对接。 + +> [MicroKernelDemo](https://github.com/mrriddler/MicroKernelDemo) 是作者通过模拟一个简单的业务场景,以帮助读者熟悉 MicroKernel 背后的概念和使用的实践 demo。 + +### [Aiolos](https://github.com/IdeasOnCanvas/Aiolos) + +Aiolos 是一个受浮动面板启发的 Swift UI 框架,已在 iOS 11 中的地图应用中引入。它完全由手势驱动,并自动响应屏幕键盘,与许多其他开源面板解决方案相比,Aiolos 被设计为始终可见的子视图控制器,因此不使用 iOS 的自定义视图控制器转换 API。可通过 Carthage 集成到项目中,使用简单便捷,感兴趣的同学可以尝试一下。 + +### [EasyTransitions](https://github.com/marcosgriselli/EasyTransitions) + +EasyTransitions 是一个简单易用的转场动画库,可以帮助开发人员使用协议中定义的简单函数创建自定义交互式转换,避免使用 UIKit 中的多个转换 API 进行实现的麻烦。 + +特性 +- 自定义过渡简单设置 +- 支持模态演示,UIPresentationController 和 UINavigationController 过渡 +- 具有多个平移手势方向的 1 行中的交互式转换支持 +- 3 个自定义转换作为示例 +- iOS 和 tvOS + +EasyTransitions 库很实用,有需要感兴趣的读者可以看看,不过该库只提供了 swift 版本哦! + +## 音视频 + +### [Swift Community Podcast #3 - Result Type, Character Literals and Swift Evolution](https://www.swiftcommunitypodcast.org/episodes/3) + +Swift Community Podcast 是 Swift 开源社区举办的讨论 Swift 语言特性与应用的电台节目,基本可以认为是 Swift 的官方 Podcast,第三期的主持人是 Swift 之父:Chris Lattner, 还有两位嘉宾:提出了 Result type,同时也是 Alamofire 维护者之一的 Jon Shier,以及Kelvin Ma,目前还是一名在校学生。三个人首先讨论了 Swift 的开源历史,有哪些重要的时间节点,然后从 Swift 的错误处理的前世今生开始聊,引出了 Result type 的必要性。最后也讨论了 Character Literals 提案的一些趣事。整体氛围比较轻松,尤其是 Jon Shier 吐字非常清楚,非常适合英文不太好的同学(比如我)听。基本都能听懂。 + +### [ggtalk | 2019 准备学什么新技术?](https://talk.swift.gg/18) + +作为积极上进,互相攀比只有攀比学习的 iOS 圈,想必 iOS 程序员们最关心的话题的就是 9102 年,我们到底应该学什么。当然这个话题是因人而异的,ggtalk 这期节目邀请了 SwiftGG 翻译组的蓉老师和莲叔,和帮主一起聊了各自在 9102 年的学习计划,可以提供一定的参考给广大学习焦虑的 iOS 同学。 + +## 内推 + +- [上海-小红书-高级/资深/专家 iOS开发&架构](https://job.xiaohongshu.com):参与小红书App日常功能/架构 (APM \ Crash \ Security) 开发与维护;业务高速成长中, 团队年轻活泼, 技术氛围浓厚, 坐标上海市中心新天地地铁口。推荐或简历可直接发到 cli2@xiaohongshu.com。 + +- [北京-百度网盘 持续招 iOS 开发](https://talent.baidu.com/external/baidu/index.html#/jobDetail/2/102507):社招、应届、实习均可。项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来切磋,也欢迎计算机基础好的小白来共同学习。简历发邮箱 xuyafei01@baidu.com,暂不考虑的也欢迎微博私信 [@小非86](https://weibo.com/xuyafei86) 聊聊~ + +- [北京-蚂蚁金服 招iOS/安卓/前端开发](https://job.alibaba.com/zhaopin/position_detail.htm?trace=qrcode_share&positionCode=GP031268&from=timeline&isappinstalled=0):负责支付宝会员及帐号业务线,地点北京国贸,金台夕照地铁站出口 100 米。有兴趣的同学欢迎将简历发送到:weijing.wdf@alibaba-inc.com / weijing.wdf@antfin.com (同一个邮箱)或者微博私信 [@折腾范儿_味精](https://weibo.com/agvicking) 了解情况。 + +- 上海即刻:如果你认识聪明勤奋、胆大心细、有追求的工程师,那就来加入我们吧!任何推荐或简历可直接发给 Jason(即刻 iOS leader): jasy@okjike.com,或微博 [@JasonYuh](https://weibo.com/jasonyuh)。 + +- [杭州奇志科技招聘 iOS、前端](https://www.lagou.com/gongsi/34872.html):奇志科技自 2016 年起通过行业无人机协同工作流 Mesh 进入物联网与人工智能领域, 并成功为房地产、建筑、测绘、电力巡检等行业提供无人机解决方案。感兴趣可以微博上私信 [@没故事的卓同学](https://weibo.com/u/1926303682) 了解。 + +- [深圳头条研发中心诚招各路 iOS 好手一起做取悦自己的项目](https://job.toutiao.com/2018/spring_referral/?token=alPR8WCv8nnnc5QqtsyKjw%3D%3D&key=MTY1MDMsMTg0MTQsMjA1MjAsMTk1NjEsMTU2ODksMTc0ODk%3D):如想了解更多深圳头条的信息,可以加小T微信:tomtan,切磋技术和聊情怀都可以喔~~~~ + +- [北京字节跳动 iOS 团队持续招人中](https://job.toutiao.com/society):简历可以发送到邮箱 raozhizhen@gmail.com,或者添加我([@AidenRao](https://weibo.com/AidenRao))的微信 jingmu1994 了解更多公司及岗位信息。 + +- [北京百度教育事业部招 iOS 开发](https://www.baidu.com/s?wd=百度):百度教育事业部,地点:北京西二旗。部门下面有百度阅读,百度文库,百度爱听等 App 产品。团队技术氛围浓厚,有兴趣的同学欢迎将简历发送到我的邮箱:lizelei@baidu.com。 + +- [深圳 - 格隆汇 iOS / Android / 前端](https://www.lagou.com/gongsi/j84043.html):公司方向是投研资讯,目前正在稳步扩张中,各个级别的工程师都有需求。任何推荐或者简历都可以发送到我邮箱:[chenkem@gmail.com](mailto:chenkem@gmail.com),同时也欢迎大家[私信我](https://t.me/kemchenj)了解更多信息。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#57-2019.03.04.md b/Reports/2019/#57-2019.03.04.md new file mode 100644 index 000000000..36230de13 --- /dev/null +++ b/Reports/2019/#57-2019.03.04.md @@ -0,0 +1,163 @@ +# 老司机 iOS 周报 #57 | 2019-03-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 老司机周报 LOGO 全面更新! + +首先非常感谢 [@SketchK](https://github.com/SketchK) 为我们设计的十分贴合『老司机』一词的重金属风格 LOGO。几经波折,我们终于可以对外发布我们的全新 LOGO 了,而且版权已经注册并完成审批,希望这次不会再翻车!作为 LOGO 的设计者 [@SketchK](https://github.com/SketchK) 他对此次设计以及周报有一份自己的理解,以下是他的想法,而我们聪明的读者会怎么解读这个 LOGO/Banner 呢,欢迎留言告诉我们~ + +> @SketchK:在设计之初,问了一些身边的朋友,老司机在你心里是什么样子的?有的朋友说老司机是那种熟悉道路,开车老练的出租车司机,也有朋友说老司机应该是那种带大家搬砖致富的卡车司机,当然也有人说老司机就是那种饭桌上带大家开“车”的司机。但对于我而言,提到老司机或者老司机周报,我脑海里浮现的画面是:一个校车司机每天带着一波热爱 Swift 的人去探索当今最前沿,最有趣,最具挑战性的知识和技术。而我们这些每天阅读老司机周报的人就是这辆校车上的学生,充满了对未知领域的好奇与热情。大体是因为有了这个想法,才有了最后的这个 LOGO 设计稿。最后呢,希望老司机周报的读者能喜欢这个 LOGO,也希望大家能继续支持老司机周报这个组织,更希望 Swift 这门语言能够被更多的人所熟知和喜爱。 + +## 话题 + +### [#1 上周话题 | Swift ABI](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1183) + +> [读者 | @alexlee002](https://github.com/alexlee002): +> +> 新项目可能会优先选择 swift, 但得看对公司原有技术栈的依赖程度。ABI 稳定是一个里程碑,如果 OC 和 swift 相互调用能做到 Java 和 Kotlin 那样就更好。 + +> [周报编辑 | @tom](https://xiaozhuanlan.com/u/6682065345): +> +> 对于我们来说暂时没啥意见的,毕竟我们早就已经 all in swift 了。我们选型 Swift 还是从性能上面考虑的,相机应用对于代码速度和 crash 率有挺高的要求的。对于相机应用来说,性能提升几十毫秒也很牛逼了。这样子可以让相机帧率从 50 变成 53,用户体验棒棒哒。 + +**最后,强烈推荐 [周报编辑 |@四娘](https://kemchenj.github.io) 对 [Swift ABI 的看法](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1183#issuecomment-469083106)。** + +**如果你也有什么关于 Swift ABI 的看法,也可以在我们的 [Github Issue](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1183) 上评论,与周报编辑一起讨论。** + +### [#2 本周话题 | 协程](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1205) + +说起协程,很多人可能还比较陌生,它是一个 60 年代就已经提出概念,是一种在非抢占式多任务场景下生成可以在特定位置挂起和恢复执行入口的程序组件。 + +目前在服务端中应用比较广泛,在高并发场景下使用极其合适,可以极大降低单机的线程数,提升单机的连接和处理能力,而在移动研发中,前端的 JavaScript,安卓的 kotlin 也都已经支持了协程,唯独对于 iOS 来说,Swift 的语言级协程支持还在路上,苹果官方也没有意愿给 objective-c 添加协程能力的意愿。 + +好在,上周阿里巴巴也开源的 [coobjc](https://github.com/alibaba/coobjc) 为我们 iOS 开发者解决了这个困惑, [coobjc](https://github.com/alibaba/coobjc) 同时给 objective-C 和 swift 都提供了协程功能。 + +**所以这周想和大家一起探讨一下协程相关的问题。欢迎大家移步到 [#2 本周话题 | 协程](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1205) 和我们一起探讨。** + +## 新闻 + +### [Flutter 1.2 发布,带来全新的 Web 开发工具!](https://mp.weixin.qq.com/s/gdKSJw05RPUSkLpeVlO6hg) + +Flutter 从去年开始,势不可挡,一路突飞猛进。Flutter 团队也一直不停的拓展着 Flutter 的应用范围,努力实现着 Flutter 更多的跨平台需求。 + +在 MWC 2019 上,Flutter 1.2 正式亮相,这次的最大的亮点是提供了新的 Web 开发工具。这个开发工具也会在之后加入到 VS Code 等其他开发工具中去。 + +### [CocoaPods-1.6.0](http://blog.cocoapods.org/CocoaPods-1.6.0-beta/) + +CocoaPods 1.6.0 有以下两大更新: + +1. 编译设置的生成部分被完全重写:在一个比较大的项目中,使用重写过的该版本执行 pod install 的时间比之前的版本降低了 77%。 +2. 1.6.0 开始会为每个测试 spec 生成一个单独的测试 target,而不是像之前把多个测试 spec 合并为一个测试 target。 + +另外,1.6.0 存在一个链接失效的 bug,已在后面的 1.6.1 版本解决,详情:[CocoaPods/issues/8493](https://github.com/CocoaPods/CocoaPods/issues/8493)。 + +## 文章 + +### 🌟 🐢 [阿里开源 iOS 协程开发框架 coobjc 源码分析](https://mp.weixin.qq.com/s/Vy_fsn95dgag4KumpQPlTw) + +阿里开源了 [iOS 协程开发框架 coobjc](http://gitlab.alibaba-inc.com/Coroutine/coobjc) + +参与一些大前端开发,写了很多 js 的同学们,相信对 ES6 的新特性 async await 是非常的喜爱,能够允许你在同步的代码逻辑中,书写异步的代码。一般这种协程能力有的是语言层面直接支持,有的来自于框架。如今淘宝团队的大神们为 iOS 的 Objective-C 的语言也带来了协程框架。“当你还在写 UI Button 写界面的时候,别人已经在用汇编写 iOS 语法库了”,没错 coobjc 在 OC 的基础上通过汇编对寄存器的直接控制,来保存/中断/挂起/恢复一段逻辑的上下文,从而实现上下文的切换,再加上编译器与语法糖的扩展,实现了在 OC 中的 async await 等语法关键字的支持,更详尽的分析请看[“知识小集”的这篇源码分析](https://mp.weixin.qq.com/s/Vy_fsn95dgag4KumpQPlTw)。 + +### 🐕 [Parallel Computation using MPS](http://yulingtianxia.com/blog/2019/02/28/Parallel-Computation-using-MPS/) + +在图像处理任务上,GPU 一直以来都比 CPU 优异一个数量级。Metal 是苹果官方推出的 GPU 计算框架, 并提供了一套名为 Metal Performance Shader 的 API 接口,能够让开发者非常方便的使用 Metal 处理图像处理的任务。本文作者比较了使用 MPS 对比传统 CPU 的耗时,发现前者相比 CPU 耗时降低了 99.9%,之后介绍了 MPS 运行的基本原理并给出了一些 MPS 的编程技巧,做多媒体开发的同学不要错过。 + +### 🐕 [UIView styling with functions](https://felginep.github.io/2019-02-19/uiview-styling-with-functions) + +在实际 App 中,视图通常只有几种样式,你可能会想各种办法做成视图组件。本文介绍了一种视图样式封装的方法,利用 Swift protocol extension 等特性组织代码,使得代码逻辑清晰易懂。 + +### 🐕 [Swift 5 Type Metadata 详解](https://juejin.im/post/5c7513e7e51d451ac30154aa) + +Swift 5 发布以后,ABI 变得更加稳定了,尽管依然与早期的版本是二进制不兼容的。其中对 Metadata 也有不少改动,对于有些项目,可能使用了强依赖 Metadata 的库,这就需要我们加以修改。本文作者就通过查看源码,回顾了 Metadata 的前世今生,可能会对读者很有借鉴意义。 + +### 🐕 [Using CLion as an IDE for Server-Side Swift Apps on Linux](https://www.raywenderlich.com/9363-using-clion-as-an-ide-for-server-side-swift-apps-on-linux) + +CLion 是 JetBrains 全家桶中的一员,也是 Linux 上比较好用的 IDE 之一。本文以 Vapor 框架为例,完整介绍了在 Ubuntu 上搭建环境、调试和连接数据库,如果你也想试试 Ubuntu 上的开发体验,不妨一读。 + +### 🐕 [API Pollution in Swift Modules](https://nshipster.com/swift-api-pollution/) + +本周 NSHisper 讨论的是 Swift 导入 Module 时可能发生的 API 污染,Swift 的静态方法查找是发生在编译时的,有时候可能会因为函数的声明不当,而导致意外情况的发生,例如我们本来想调用的是 a 函数,结果却调用了 b。 + +Matt 在文章里列举了几种 API 被污染的情况,最后还从调用方和声明方两个角度去探讨如何避免类似情况发生,值得一看。 + +### 🐎 [The perfect guide to AppStore search optimization (ASO)](http://blog.rootshell.ir/2019/02/the-perfect-guide-to-appstore-search-optimization-aso/) + +本指南介绍了 App Store 产品页面每个基本信息的最佳实践,内容简明扼要,很有参考价值。相关阅读:[App Store Product Page](https://developer.apple.com/videos/play/insights/app-store-product-page/) + +### 🐎 [Flutter 与 iOS 原生 WebView 对比](https://juejin.im/post/5c778d86e51d4506304ee348) + +本文作者对比了 UIWebView、WKWebView、flutter_webview_plugin(在 iOS 中使用的是 WKWebView)的加载速度、内存占用、HTML5 兼容性。 + +### 🐕 [[译] 用这些 iOS 技巧让你的 APP 性能更佳](https://juejin.im/post/5c6a0b6ef265da2de660f83f) + +本文介绍了 APP 性能优化的五种技巧: + +1. 使用可复用的 tableViewCell +2. 使用看起来像应用首页的启动页 +3. 视图控制器的状态恢复 +4. 尽可能减少透明视图的使用 +5. 在后台线程中处理繁重的功能 + +除了一些老生常谈的优化点之外,**视图控制器的状态恢复**这个点比例新颖,作者也着重讲解了其原理和使用方法。如果你的应用中尚未用到,不妨一试,应该可以明显提升内存经常吃紧的用户(😂)的使用体验。 + +### 🐢 [Frontend Workshop from HTML/CSS/JS to TypeScript/React/Redux](https://github.com/Microsoft/frontend-bootcamp) + +微软出版的从 HTML / CSS / JS 到 TypeScript / React / Redux 的前端训练营,为期两天,第一天搭建环境、介绍 web 的基础知识:HTML,CSS 和 JavaScript,通过演示代码了解一些核心概念。第二天演示和练习结合在一起,深入更高级的主题,如 TypeScript、测试和状态管理。(TypeScript 是由微软开源的编程语言。它是 JavaScript 的一个严格超集,并添加了可选的静态类型和基于类的面向对象编程,设计目标是开发大型应用,然后转译成 JavaScript)。 + +## 工具 + +### [periphery](https://github.com/peripheryapp/periphery) + +periphery 是一个用 Swift 语言编写的,专门用于扫描 Swift 工程无用代码的工具。它的工作原理是利用了 Swift 语法树的各种回调特性,并且因为是 Swift 语言编写的关系,所以它也只能用于 Swift 工程。从本质上来说,它跟 OC 时代的各种`Clang Checker`做的事情是没有多大区别的,不过从代码的维护性上来说就比 C++ 版本的 checker 要好很多。实测下来,跑一次全规则扫描的时间确实挺长的,如果只是扫描无用的函数参数的话倒是非常的快,大概 10 来秒就出结果了。这个工具也提供了 CI 的集成方案,总体而言算是一个比较成熟的工具了,值得推荐。 + +## 代码 + +### 🌟 [chameleon](https://github.com/didi/chameleon) + +chameleon 是来自滴滴出行的一套前端跨端整体解决方案。其最大特点是目标让一套代码,同时解决微信小程序,支付宝小程序,百度小程序,快应用,CML-SDK 终端等以 MVVM 为标准的终端。 + +目前国内前端大环境下,开发者需要为同样的功能在各自为阵的小程序,快应用上多次重复实现。这样做既耗时,也耗费大量的人力,最后的效果也不一定理想,所以这样一套统一多端的方案来避免多次重复开发,也不失为一个好选择。 + +吐槽一下,chameleon 这个名字已经被很多库用了,算是个非常常见的项目名字,如果能有个更独特一点的名字,可能会更好一点。 + +### [freeCodeCamp](https://github.com/freeCodeCamp/freeCodeCamp) + +开源代码库和课程大纲,和数百万人一起免费学习编程。freeCodeCamp 由一个小型非盈利组织运营,目标是帮助数百万繁忙的成年人向科技行业转型,这个社区已经帮助超过 10000 人找到他们的第一份程序员工作。其中全栈 web 开发课程是完全免费的,可以按照自己的节奏来学习,有上千个互动性的编程挑战来帮助你学习。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +**如果你最近正在找工作,不放看看下面这篇文章:** + +### 🐕 [iOS 开发者如何在互联网寒冬中杀出重围(付费内容)](https://xiaozhuanlan.com/topic/7609328541) + +金三银四,又到跳槽时间点。该文章主要是整理了作者近段时间面试的一个心得体会,主要是讲述了面试前准备,简历书写,大厂面试经验,以及面试心态处理等几个方面。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://weibo.com/damonone),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj),[@AidenRao](https://weibo.com/AidenRao) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#58-2019.03.11.md b/Reports/2019/#58-2019.03.11.md new file mode 100644 index 000000000..bd01a5d54 --- /dev/null +++ b/Reports/2019/#58-2019.03.11.md @@ -0,0 +1,142 @@ +# 老司机 iOS 周报 #58 | 2019-03-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +### 🌟 [移动开发唱衰,iOS 开发者如何涅槃重生?](https://mp.weixin.qq.com/s/urSrDFbK35VYC8pihVlREg) + +**戴铭,绝对是 iOS 届的资深老司机,GMTC 全球大前端技术大会的专题出品人及讲师之一**,前滴滴出行技术专家,在组件化方案落地、工程动态化、大前端建设、应用开发阶段效率的提升、上线后各种难点问题的解决等方面的经验非常丰富。极客时间的品牌我一向比较认可,专栏品质很有保障,《iOS 开发高手课》也是戴铭老师对移动开发这么些年沉淀下来的技术,详细而系统的输出。我看了目录,主要分为基础、应用开发、原理、前端与原生共舞的 4 个模块,你将获得: + +1、资深 iOS 开发专家为你构建完整知识脉络 +2、领略专家级大型开发项目,增强面试竞争力 +3、深入 iOS 核心技术与原理,从源头上掌控新技术 +4、精美手绘图解知识点帮助你轻松学习 + +**周报编辑均已购买,来不及了快上车!!原价 ¥99,上新优惠 ¥68,赶快扫码直接订阅。通过以下链接购买的读者微信添加 AwayZ_T 或 Damonwong2,我们会返现 10元小红包,并邀请你进入我们老司机周报的读者群,一起学习戴铭老师的 iOS 进阶教程~** + +[点我试读或购买「iOS 开发高手课」,快上车~](http://gk.link/a/102wQ) + +另外,我们在微博上发起了一个福利活动,赠送老司机定制 Logo T 恤衫和「iOS 开发高手课」,[欢迎大家点我参与~](https://m.weibo.cn/6062089411/4348770474532991),中奖的我们也会邀请进读者群~ + +## 新闻 + +### 🌟 [刚刚,阿里宣布开源 Flutter 应用框架 Fish Redux!](https://mp.weixin.qq.com/s/8wVnL7OBzB8cbwo1vK6SRQ) + +闲鱼团队是国内最早开始大规模使用 Flutter 的大公司团队,也是国内现在 Flutter 风潮的引领者。 + +在上周,闲鱼团队刚刚开源了名为 Fish Redux 的基于 Redux 数据管理的组装式 Flutter 应用框架,旨在解决大型复杂应用中的页面状态管理以及 UI 组件的复用等难点。 + +对于想要实践 Flutter 于大型应用的团队及开发者们来说,值得学习参考。 + +## 文章 + +### 🌟 🐕 [庖丁解牛!深入剖析 React Native 下一代架构重构](https://mp.weixin.qq.com/s/dXZTqXOSi3fiOesDJ7gsFQ) + +去年六月,[Facebook 宣布要重构 React Native](https://facebook.github.io/react-native/blog/2018/06/14/state-of-react-native-2018)。时至今日,开发团队取得的一些进展已经非常值得我们期待和持续关注了。本文通过分析源码仔细介绍了 RN 的重构设计思路和后续业务开发适配注意点,解释了新技术方案在解决性能问题上的优势,同时描述了官方对以后组件开发维护的一些规划,对保持社区的活跃性、提升框架集成使用体验和加快组件迭代速度等都有很大的帮助。 + +### 🐕 [没有 AST, IDE 中的错误提示、自动补全、重构、语法检查......都玩不转了](https://mp.weixin.qq.com/s/UYzwVRPFas6hwe2U7R0eIg) + +当下的软件开发,实际上并不需要我们了解许多编译原理相关的知识。但编译原理作为一门计算机经久不衰的基础课程,自然有它存在的价值。其中的 parser 部分就值得好好看一看,这会在我们遇到相关的需求时候,如排版布局,想自己搞一套 DSL 等都会很有帮助。本文讲了 AST (抽象语法树)是如何工作的,虽然是以 JavaScript 的代码举例,但原理其实是通用的。 + +### 🐕 [How to integrate image recognition in iOS apps](https://medium.com/capgemini-norway/how-to-integrate-image-recognition-in-ios-apps-6d660f37f75) + +本文介绍了如何在 iOS 应用程序中集成图像识别,文章作者介绍如何使用 Microsoft Custom Vision 构建 CoreML 模型,以便能够识别照片中的对象以及如何在 iOS 应用程序中使用它。您需要对 iOS 开发和 Swift 有基本的了解才能阅读这篇文章。 + +### 🐕 [The Xcode Build System](https://pewpewthespells.com//blog/xcode_build_system.html) + +作者从 Xcode 的编译系统组件( 插件,平台组件,工具链 ),工程文件( pbxproj 文件,文件引用 ) +编译环境( 编译设定,Target,xccofig 文件 ),编译输出( 输出路径,输出文件 )等内容比较全面地介绍了 Xcode 的编译系统。读者阅读后可以对 Xcode 的编译系统有更加全面的认识。 + +### 🐕 [Swift Code Formatters](https://nshipster.com/swift-format/) + +最近几天,Swift 社区一直在讨论 [Tony Allevato](https://github.com/allevato) 和 [Dave Abrahams](https://github.com/dabrahams) 关于 [Swift 编码风格指南和格式化工具](https://forums.swift.org/t/pitch-an-official-style-guide-and-formatter-for-swift/21025) 的提案。 + +[Mattt](https://nshipster.com/authors/mattt/) 专门在 [NSHipster](https://nshipster.com) 撰文对社区现有代码格式化工具进行比较,包含 [SwiftFormat](https://github.com/nicklockwood/SwiftFormat)、[SwiftLint](https://github.com/realm/SwiftLint)、[Prettier with Swift Plugin](https://github.com/prettier/prettier) 及 [swift-format (proposed)](https://github.com/google/swift/tree/format),分别从格式化结果及效率两个角度进行对比。 + +### 🐢 [从源码解析 Swift 弱引用](https://zhuanlan.zhihu.com/p/58179258) + +弱引用的深层实现机制在 Objective-C 中,就让很多同学觉得云里雾里,那在 Swift 中又如何呢?和 Objective-C 中的实现又有何异同呢?作者通过研读源码,给我们深入剖析了 Swift 弱引用机制的实现方式,并比较了和 Objective-C 中的异同,非常值得我们借鉴学习。相关阅读:[Friday Q&A 2017-09-22: Swift 4 Weak References ](https://www.mikeash.com/pyblog/friday-qa-2017-09-22-swift-4-weak-references.html) + +### 🐢 [一步一步教你实现 iOS 音频频谱动画](https://juejin.im/post/5c1bbec66fb9a049cb18b64c) + +当我们在听音乐的时候,总能看到音频频谱随着优美的音乐而跳动,那么有没想过这样的动画如何实现? + +本文主要介绍了脉冲编码调制(PCM)基本音频处理概念;AVAudioEngine 音频播放和 AVAudioPCMBuffer 频谱数据的获取、计算、处理、音频动画绘制;频谱动画优化:锯齿消除、闪动优化等。 + +作者通过一步步探索最终实现完美的音频频谱动画,感兴趣的同学[点击这里](https://github.com/potato04/AudioSpectrum)阅读源码,相信一定会有所收获。 + +### 🐕 [已开源|码上用它开始 Flutter 混合开发——FlutterBoost](https://mp.weixin.qq.com/s/v-wwruadJntX1n-YuMPC7g) + +咸鱼团队在国内 Flutter 的探索上一直以来都是走在业界前列。近期,咸鱼技术团队开源了 Flutter 的混合开发框架 FlutterBoost。我们知道,在现有的工程中直接换成 Flutter 开发具有很高的成本以及风险,毕竟对于一些稍大些的工程,有些代码的业务逻辑已经很复杂了。所以,咸鱼团队基于对现状的考虑,采用 Native -> Flutter 渐进式的迁移方式,并将框架开源,对于想要在旧有工程上采用 Flutter 的同学可以看一下。 + +### 🚧 🐎 [How to build a simple tracker blocker for iOS](https://medium.com/@nderkach/how-to-build-a-simple-tracker-blocker-for-ios-cc6c52a2d2d1) + +跨网站追踪是一种广告商用于搜集用户信息的方式,Apple 作为一家注重用户隐私的公司,在 iOS 里内置了 Content Blocker 等功能帮助我们不被追踪。 + +这篇文章就教我们如何使用 Content Blocker 和第三方黑名单来搭建一个反追踪的插件,并且还提供了相关的网站以便我们进行测试。 + +### 🐕 [Task-based concurrency in Swift](https://www.swiftbysundell.com/posts/task-based-concurrency-in-swift) + +对一组有相互依赖的并行任务,OperationQueue,ReSwift,Future & Promise 都是常用的备选方案,但这些方案相对较重("heavy-handed"),作者基于 DispatchGroup 封装了一套轻量、简洁的 "Task-based" 的解决方案,推荐阅读。 + +## 工具 + +### [Localization in Swift like a Pro](https://gist.github.com/Dschee/700d28a34ad6d6a3c66885f592d99afd?utm_campaign=Indie+iOS+Focus+Weekly&utm_medium=rss&utm_source=Indie_iOS_Focus_Weekly_209) + +你是否仍在用几年前的方式进行本地化?你知道有更好的方法吗?本地化一直令人痛苦,但阅读这篇文章后,你会发现它并不是那么糟糕。本地化的同步更新 Xcode 并不支持,但你可以使用 [BartyCrouch](https://github.com/Flinesoft/BartyCrouch) 和 [SwiftGen](https://github.com/SwiftGen/SwiftGen) 这些工具来解救你。 + +### [XCSnippets](https://github.com/dtaylor1701/XCSnippets) + +合理的使用代码片段可以有效提高你的 Coding 效率。XCSnippets 工具可以让你使用命令行方便的将 .codesnippet 从 Git 仓库安装到 Xcode。你还可以使用作者开源的代码片段仓库 [XCUISnippets](https://github.com/dtaylor1701/XCUISnippets) 或编写并开源自己的代码片段。 + +## 代码 + +### 🌟 [MVVM-TemplateProject](https://github.com/popei69/TemplateProject) + +用 Swift 实现 MVVM 的 Demo 项目,可以同时配合作者关于 MVVM 的 3 篇文章学习,适合新手入门。 + +1. [How to implement MVVM pattern in Swift from scratch](https://benoitpasquier.com/ios-swift-mvvm-pattern/) +2. [Unit Testing your MVVM architecture in Swift](https://benoitpasquier.com/unit-test-swift-mvvm-pattern/) +3. [How to integrate RxSwift in your MVVM architecture](https://benoitpasquier.com/integrate-rxswift-in-mvvm/) + +### [Nantes](https://github.com/instacart/Nantes) + +著名的 UILabel 替代库 [TTTAttributedLabel](https://github.com/TTTAttributedLabel/TTTAttributedLabel) 的 Swift 复刻版,支持 UILabel 的及 TTTAttributedLabel 所增添的新特性,支持 iOS 8.0+。 + +## 音视频 + +### [ggtalk | 如何(连续两次)获得 WWDC Scholarship](https://talk.swift.gg/20) + +新的一期 ggtalk 邀请到了 [@ApolloZhu](https://github.com/ApolloZhu) 来聊聊 WWDC Scholarship,WWDC Scholarship 是苹果的一个类似奖学金的奖项,申请的学生靠提交一个极具创意的 playground 的作品来参与评选,如果获奖则可以获得免费参加 WWDC 的机会,当然餐食和酒店也是包含了的。Apollo 目前还是高中生,但已经连续获得两次 WWDC Scholarship,这次分享里他谈了申请的一些技巧以及整个过程中有趣的体验。对 WWDC 感兴趣的童鞋不容错过。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://github.com/Damonvvong),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#59-2019.03.18.md b/Reports/2019/#59-2019.03.18.md new file mode 100644 index 000000000..c2b522146 --- /dev/null +++ b/Reports/2019/#59-2019.03.18.md @@ -0,0 +1,177 @@ +# 老司机 iOS 周报 #59 | 2019-03-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**热烈欢迎周报团队的第 30 个编辑 - [@极速男孩](https://github.com/ztlyyznf001)!** + +## 新手推荐 + +在年前我们做了一次问卷调查,我们很重视这次问卷结果,专门组织了一次集体语音会议对问卷中反馈的问题和建议进行了讨论。其中很多读者希望我们能够推荐一些对新手更加友好的内容,在接下来的时间里,我们会尝试收录一些对新手入门更友好的文章,[**也欢迎广大读者自荐这部分内容**](https://github.com/SwiftOldDriver/iOS-Weekly/issues),由于是新手向的,我们对此类文章的深度要求并不高,能通俗易懂地介绍分析某个知识点,利于新手吸收,我们都会考虑收录。 + +### 🌟 [Help! My app freezes but no error appears](https://fluffy.es/help-my-app-freezes/) + +这是一篇非常有趣的关于 “入门 iOS 并发编程” 的文章。作者从一个新手容易碰到的 “界面卡死不响应了” 的问题入手,层层分析了这个问题产生的本质是 - UI 线程即主线程被耗时任务阻塞导致。如果你是一位以 iOS 为入门的新人开发者,这篇文章将能帮助你第一次认识到 iOS 中为主线程减负的重要性,也会为你打开 iOS 并发编程的大门。 + +> 编辑寄语:可能这篇文章对新手最不友好的一点是它是一篇纯英文的,但作为一名开发者,我觉得一定不能排斥英文。作为 iOS 开发者最好的入门教程是苹果的开发文档和所有 API 文档,都是纯英文的。当然,如果你觉得需要从新手继续进阶,戴铭老师「iOS 开发高手课」将会十分适合你,[点我试读或购买,然后添加微信 AwayZ_T 返还小红包并邀请进入周报读者群和大家一起学习,老司机喊你快上车~](http://gk.link/a/102wQ)。 + +## 新闻 + +### 🌟 [WWDC 2019](https://developer.apple.com/wwdc19/) + +一年一度的苹果生态开发者盛会又要来了。 + +WWDC 今年会继续在圣何塞会议中心进行,时间是 6 月 3 日到 6 月 7 日。 + +今年的主题是 `Write code. Blow minds.`。按照目前流出的信息,今年软件更新的重头戏会在 iOS 13 上,iOS 会有一次非常大的 UI 更新。另外硬件方面,今年也很可能会在 WWDC 上发布模块化的 Mac Pro。 + +一如既往,WWDC 的门票价格是 1599 美元,票价并没有包括食宿,机票等的费用。如果你有兴趣参加,或者是公司有这个福利的话,需要在 3 月 20 日前去官网注册,苹果会在 3 月 21 日公布抽签结果。 + +预祝各位参与抽签的读者朋友们好运。 + +## 文章 + +### 🌟 🐕 [Why using isEmpty is faster than checking count == 0](https://www.hackingwithswift.com/articles/181/why-using-isempty-is-faster-than-checking-count-0) + +`Swift String` 中为什么使用 `isEmpty` 会比判断 `count == 0` 快?该文作者从 `count` 的工作原理中进行分析和对比。 +- `Swift` 字符串是复杂的字符集合,单个字符可能是由多个字符进行组合形成,例如 `🇬+🇧=🇬🇧`,但是 `"🇬🇧".count == 1`。每次检查一个字符所需要的最长时间为 `O(n^2)`,因此如果计算的 `String` 很长,则 `count` 会需要较长的计算时间。 +- `isEmpty` 的计算则是检查 `String` 起始索引等于结束索引则为空,时间为 `O(1)`。 + +同时作者提醒,在 `arrays, sets, dictionaries` 没有这种情况。但是建议使用 `isEmpty` 去判空,语义更为清晰,并且有利于 `String` 习惯用上 `isEmpty` 而不是`count`。`SwiftLint` 和 `SwiftFormat` 都有检查该情况。 + +### 🌟 🐕 [Websites using Swift and AWS Lambda — Part 1](https://www.jasonzurita.com/websites-using-swift-and-aws-lambda/) + +本文介绍了如何用 Swift 轻松、愉快地编写并部署一个轻量网站。 + +1. 使用 Swift + HTML + CSS 编写网站可以充分利用 Swift 的语言优势,例如代码更安全、更容易理解,写起来也更有意思。 +2. 使用 Lambda、Layers、API Gateway 以及 Certificate Manager(可选)在 AWS 上免费部署(每个月 100 万次免费请求)。 +3. 易于部署和更新,只需要更新 AWS Lambda 函数即可! +4. 网站是动态生成的,也就是说可以在查询数据库、调用另一个 Lambda 函数并请求 API 之后将网站组合起来。 +5. 不需要管理传统的、有时会非常麻烦的 JavaScript 依赖。 +6. [示例网站](https://swift-aws-lambda-website.jasonzurita.com/)是第一个使用 Swift + AWS Lambda 的网站。 + +### 🚧 🐕 [Swift Localhost: Making XCUITest Great Again](https://medium.com/quick-code/swift-localhost-making-xcuitest-great-again-115d93954cf1) + +关于 UI 自动化测试,特别是对网络请求处理的文章以前有过不少推荐,比如 [第 41 期](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%2341) 的 [iOS UI Automation Tests at Babylon](http://ilya.puchka.me/ios-ui-automation-tests-at-babylon/),[第 56 期](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%2356) 的 [Painless UI Testing in iOS: Mocking the Network](https://code.egym.de/painless-ui-testing-in-ios-part-1-mocking-the-network-ffbd6ab4809a) 等。 + +本篇文章对改善 UI 自动化测试的思路是通过搭建本地服务(localhost),再将网络请求重定向到本地的方式来做的。同时这篇文章也是作者在 [iOSConfSG 2019](https://2019.iosconf.sg) 上分享的内容,总结了使用 4 个简单步骤就能在工程里搭建基于本地服务的 XCUITest: + +1. 通过 CocoaPods 集成 [SwiftLocalhost](https://github.com/depoon/SwiftLocalhost)(作者自己维护的),编写代码配置本地服务 +2. 把代码里的网络请求重定向到本地服务上 +3. 在 Info.plist 里设置 ATS 配置,允许访问本地网络 +4. 最后就是编写测试代码,模拟请求响应的数据 + +这里有亮点的地方是集成 SwiftLocalhost 后就不需要太操心服务端相关的事情,用例写完直接 `command+u` 就可以开始测试了,可以避免像环境配置、网络异常等问题,让开发者更专注于模拟测试数据,保证测试流程在可控范围内。 + +### 🐢 [如何自建 Crash 平台](https://www.xuyanlan.com/2019/01/14/iOS-crash-report/#more) + +本文介绍了如何对非符号化的崩溃进行符号化,并介绍一些工具和脚本对崩溃报告进行符号化的操作。并实现了自己的 macho 解析工具和 crash 分析平台: + +1. 通过 dSYM 文件对崩溃信息进行分析,从而得到他的具体的堆栈地址和偏移地址。 +2. 分别通过 ATOS , lldb , Dwarfdump 对崩溃报告进行符号化。 +3. 分别用 dwarfdump 和自己实现的 atosl 脚本,对崩溃进行做符号化。并尝试去搭建一个自己的 crash 分析平台。 + +### 🐕 [Linking Objective-C Code](https://pewpewthespells.com//blog/objc_linker_flags.html) + +本文首先简单介绍了链接器,库,二进制文件,符号,选择器和编译器的相关知识作为铺垫,然后介绍了 Objective-C 程序的链接过程,并且解释了 ``-all_load``,``-Objc`` 以及 ``-force_load`` 三种常用链接标志在链接过程中所起到的的作用。 + +### 🐕 [一个在 Objective-C 和 Swift 中实现剖面导向编程的故事](https://juejin.im/post/5c86be73f265da2dd94ce3b3) + +苹果官方并不支持 AOP?非也。看作者带你走过一段从分析 KVO 原理到设计通用的 AOP 框架的历程。 +全文重在设计过程,用植物嫁接打比方,金句不断,细读颇具趣味。 + +> 注:剖面导向编程 == 面向切面编程 == AOP(Aspect Oriented Programming) + +### 🐎 [PSPDFKit and Swift](https://pspdfkit.com/blog/2019/swift-and-pspdfkit/) + +PSPDFKit for iOS 是用 C、C++、Objective-C(++) 开发的大型项目。在这篇文章里,PSPDFKit 官方亲自讲述作为 SDK 开发商对于 Swift 的看法,大家都在拥抱 Swift,为何 PSPDFKit ofr iOS 还是坚持使用 Objective-C?在即将正式发布的 Xcode 10.2 中,Swift 5 将包含稳定的 ABI,PSPDFKit for iOS 是否会迁移到 Swift?作者详细分析了 Swift only 的优点和缺点,并得出结论:我们很热爱 Swift,在很多项目里采用了 Swift 语言,并且不断为 Swift 编译器贡献新功能,但 Swift 并不适合我们的 SDK,在可见的将来里,我们会继续坚持使用 Objective-C。 + +### 🐕 [Why we stopped using fastlane - Life in the slow lane](https://silverhammermba.github.io/blog/2019/03/12/slowlane) + +> 相信现在很多团队都在用 Fastlane,推荐本文是期望大家听到更多的声音。 + +本文作者在 2018 年写了一篇 Fastlane 的使用文章,现在,他来回顾一些 Fastlane 不好的地方: +- 没有解决 Xcode 本身的问题 +- Fastlane 本身很庞大,有太多的依赖项 +- Fastlane 自身有许多 Bug +- 太多人在用以至于 issue 太多,核心问题得不到解决 + +### 🐎 [HTTPS 温故知新(一)— 开篇](https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTPS-begin.md) + +本文是 halfrost (霜神)[HTTPS 系列](https://github.com/halfrost/Halfrost-Field/tree/master/contents/Protocol) 学习笔记的第一篇,主要介绍了以下几方面: + +1. 为什么需要 HTTPS + - HTTP 数据没有加密 + - HTTP 无法验证通信对方的身份 + - HTTP 无法防止数据被篡改 +2. HTTPS 带来的好处 + - 使用 HTTP/2 获得更高的性能 + - 提高 SEO 排名 + - 更好的推荐数据 + - 更高的安全性 + - 提高网站的信任和信誉 + - HTLM5 新特性 + iOS ATS 要求 +3. HTTPS 安全的本质 + - HTTPS 采用混合的加密机制,使用公开密钥加密用于传输对称密钥,之后使用对称密钥加密进行通信 + - HTTPS 通过使用 证书 来对通信方进行认证 + - TLS / SSL 提供报文摘要功能来验证完整性 +4. HTTPS 中的 TLS / SSL 协议 + - TLS 记录层协议 + - TLS 密码切换协议 + - TLS 警告协议 + - TLS 握手协议 + - TLS 应用数据协议 + +计算机网络基础是开发者需掌握的知识,但往往会被忽略,了解这些计算机基础知识为我们构建完整的计算机知识体系颇有益处。 + +### 🐢 [开发小知识](https://www.jianshu.com/p/5a4ba3c165b9) + +如作者言,最近一段时间面试中发现很多开发者都只停留在知道、听说过的层面,却很少能回答的好是什么、为什么。作者一口气整理了 78 个 iOS 以及计算基础相关知识点,简短明了直指关键(不错的面试指南😂),如果看完觉得 so easy,恭喜你已经脱离了知道会用的初级阶段了😇。 + +### 🐢 [最详细版本|UI2Code 智能生成 Flutter 代码——版面分析篇](https://mp.weixin.qq.com/s/AkTgvv0EoydRmspEyfZNGg) + +AI 写代码,相信很多同学听到这个命题都会很感兴趣。UI2CODE 项目是闲鱼技术团队研发的一款通过机器视觉理解+AI人工智能将UI视觉图片转化为端侧代码的工具。本文全面分析了这个项目中 UI 前景提取和背景分析是如何做的。通过图像处理与深度学习相结合,在识别准确度,定位精度上都有了明显的提升。有兴趣的同学可以研究一下。 + +## 代码 + +### [Flare-Swift](https://github.com/2d-inc/Flare-Swift) + +[Flare](https://www.2dimensions.com/about-flare) 是一款强大的设计和动画工具,可以让 app 和游戏的设计师、开发者轻松添加高品质动画。Flare 的主要功能是让设计师可以实时、直接操作最终产品中的 assets,从而实现快速迭代、避免重写代码。Flare-Swift 则是 Flare 的 Swift 运行时,可以通过 Export to Engine 来导出 Flare 文件。 + +## 音视频 + +### 🌟 [ggtalk | 聊聊跨平台:后起之秀 Flutter](https://talk.swift.gg/21) +Flutter 现在的热度自然不用多说,国内各个公司都开始了在业务肿的尝试,包括美团。本周的 ggtalk 邀请到了美团御姐(宇杰)一起深入聊了美团在 Flutter 中的相关实践,也聊了很多 Flutter 的过去、现在和将来。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://github.com/Damonvvong),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj),[@极速男孩](https://github.com/ztlyyznf001) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#60-2019.03.25.md b/Reports/2019/#60-2019.03.25.md new file mode 100644 index 000000000..13236eac3 --- /dev/null +++ b/Reports/2019/#60-2019.03.25.md @@ -0,0 +1,132 @@ +# 老司机 iOS 周报 #60 | 2019-03-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [3 月 27 日起上传 App Store 最低需须使用 iOS 12.1 SDK 编译](https://developer.apple.com/news/?id=03202019a) + +Apple 发布公告:请注意,自2019年3月27日起,iPhone 或 iPad 的所有新 App 和 App 更新(包括通用 App)都需要使用 iOS 12.1 SDK 构建并支持 iPhone XS Max 或 12.9 英寸 iPad Pro(第 3 代)。还需要提供这些设备的屏幕截图。Apple Watch 的所有新 App 和 App 更新都需要使用 watchOS 5.1 SDK 构建,并支持 Apple Watch Series 4。 + +## 新手推荐 + +### 🐎 [Flutter 您需要知道的知识点](https://mp.weixin.qq.com/s/4tdqptBIf4VHrjWmHeUKjA) + +最近整理周报的时候发现关于 Flutter 的文章一下子多了起来,看来最近研究 Flutter 的人应该有不少,不过我觉得对于大部分读者来说,目前对于 Flutter 还是处于一个萌新的状态,所以为了能看懂一些先行者到底在讲什么,这周给大家推荐两篇比较基础的文章: + +- [Flutter 您需要知道的知识点 | FAQ・第一期](https://mp.weixin.qq.com/s/4tdqptBIf4VHrjWmHeUKjA) + +这篇文章主要讲了 Flutter 是什么,能做什么,什么样的人适合使用 Flutter 以及 Flutter 需要怎么样入门以及如何使用。 + +- [Flutter 您需要知道的知识点 | FAQ・第二期](https://mp.weixin.qq.com/s/0JdDapzGIPByttq-key3Cg) + +在看完上面一篇文章的基本介绍之后,就要了解一下 Flutter 里面的内容了,这篇文章大概介绍了关于 Flutter 的 SDK 主要功能,支持的编辑器,开发的灵感来源以及是否包含测试框架等一系列问题。 + +### 🐎 [UIApplicationDelegate 中方法的调用顺序](https://recoursive.com/2019/03/14/guide_uiapplicationdelegate_method_invocation_order/) + +本文介绍了在 UIApplicationDelegate 中的各个方法在各个不同状态下启动和打开是所调用顺序。 + +## 文章 + +### 🐕 [即将开源 | 让 Flutter 真正支持 View 级别的混合开发](https://mp.weixin.qq.com/s/-vyU1JQzdGLUmLGHRImIvg) + +本文介绍了今日头条主客户端上接入 Flutter 进行混合开发的经验,主要是解决如下问题 +1. FlutterView 在一些小场景碎片化的问题。譬如短期内无法完成页面级别的 Flutter 化,Native View 和多个 Flutter View 必须混合存在的情况。类似的还有 Feed 流中的 Flutter Cell,列表页中的某些 ItemView 是 FlutterView。 +2. 内存管理问题:回收不活跃页面占用的内存 +3. 共享线程:收敛全局线程为公共的4个线程 +4. SurfaceView 改 TextureView :主要是解决手势动画的问题 + +总结来说,字节跳动客户端基础技术 Team 目前对于 Flutter 已经有了一定的研究,并且能够支持到 View 级别开发,目前文中提到的方案正在进行公司内部开源审查程序,通过后会在字节跳动官方 Github 上开源。 + +### 🐢 [如何构建具有多种 Cell 类型的表视图](https://github.com/xitu/gold-miner/blob/master/TODO1/ios-how-to-build-a-table-view-with-multiple-cell-types.md) + +iOS 开发中,可以说几乎所有的项目都离不开 UITableView 的使用,甚至它的各种变形扩展都无处不在。UITableView 运用广泛的主要原因在于其 Cell 的多变性,在 Cell 数量和顺序恒定或展示内容相似的时候,这是比较常规的用法。但是当数量顺序甚至展示内容不尽相同的时候,这是比较有趣又极具挑战的。本文作者则指出传统写法在这种复杂情境中的弊端,并使用 MVVM 模式去构建这种动态试图: + +1. 模仿服务器响应,创建简单 JSON 数据,将 JSON 映射到 Model +2. 基于 Model 创建 ViewModel,它将负责向 UITableView 提供数据,ViewModel 具有一个 Item 数组,它对应着 UITableView 包含的 Section 数组 +3. 每种Cell 对应 ViewModel 中的 Item 属性,可修改或者删除数据而不需要做任何代码修改 + +这种模式最大的好处,就是在复杂业务情境下将业务和页面区分出来,免去各种分支判断及数据修改造成的大量代码修改,并且 ViewModel 也易被重用。 + +### 🐕 [UTF-8 String](https://swift.org/blog/utf8-string/) + +文章内介绍了,`Swift 5` 将字符串的编码格式从 `UTF-16` 改成 `UTF-8`,以此提高性能。`Unicode-rich text` 和 `ASCII` 在 5 之前,用 `UTF-16` 存储,在这之后都用单个的 `UTF-8` 存储。 + +选用 `UTF-8` 的原因: +- 在 `ASCII` 中 `UTF-8` 比 `UTF16` 占用少50%。 +- 高兼容性(对操作系统,开发工具,C / Objective-C 桥接)。 +- 减少代码大小和编译时间成本。 +- 无需修改现有代码。 + +更加详细的说明,请打开链接。 + +### 🐕 [Mastering the VIPER architecture](https://theswiftdev.com/2019/03/19/mastering-the-viper-architecture/) + +作者介绍了面向协议编程在 VIPER 架构上的实践,并结合代码示例讲解了 Module, Presenter 和 Entity 协议的定义和使用方法。 + +推荐阅读: +- [VIPER best practices for iOS developers](https://theswiftdev.com/2019/03/11/viper-best-practices-for-ios-developers/) +- [The ultimate VIPER architecture tutorial](https://theswiftdev.com/2018/03/12/the-ultimate-viper-architecture-tutorial/) + +### 🐕 [Swift AVFoundation framework — Text-To-Speech tool](https://blog.usejournal.com/swift-avfoundation-framework-text-to-speech-tool-f3e3bfc7ecf7) + +本文介绍了 AVFoundation 文字转语音的相关接口,并详细介绍了 `AVSpeechSynthesizer`, `AVSpeechUtterance`, `AVSpeechSynthesizerDelegate` 在实际应用中的流程与注意事项。 + +### 🐎 [Better tests for delegates](http://www.mokacoding.com/blog/better-tests-for-delegates/) + +文中介绍了两种测试 `delegate` 调用的两种决策:面向实现、面向行为。在面向实现过程中,我们更多的关注状态变化,需要更多的测试 `delegate` 响应方法的实现。而在面向行为的决策中,我们不需要关注其参数细节,只需要关注其实现的内容。 + +## 工具 + +### [CocoaPods 历险 - 总览](https://www.desgard.com/cocoapods-1/) + +是否应该使用 CocoaPods 在几年前还是一个争论不休的问题,然而现在,但凡稍具规模的项目,就没有不使用 CocoaPods 的。作为一个三方库版本管理的工具, CocoaPods 对于组件的拆分粒度是非常细微的,我们所调用的 pod 命令都是执行本地对应目录下的脚本,那这些脚本文件到底执行了什么呢?本文主要分析了 pod install 命令执行的详细过程,当我们知道大致过程后,就可以对其做一些修改和控制,以达到我们的预期。 + + +## 代码 + +### [Snail: An observables framework for Swift](https://github.com/UrbanCompass/Snail) + +一个轻量级的 observables 库,不用 KVO & RxSwift 也可以轻松观察变量的变化 & 响应事件了。 + +### [swift-log](https://github.com/apple/swift-log) + +官方的日志接口包(Logging API package),使用方(比如 Swift 服务端、跨平台的应用或库)可以根据自己的需求配置 log 输出的具体实现。 + +## 音视频 + +### [ggtalk | 区块链到底能干嘛?](https://talk.swift.gg/22) +区块链近年来一个是技术圈的热点,风头甚至盖过了 AI,不少技术圈的名人也纷纷投身了区块链相关的创业中。本期 ggtalk 邀请到了微博上链圈名人赏味不足,来一起聊聊区块链的一些入门知识,强烈推荐感兴趣但一直没入门的同学收听。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://github.com/Damonvvong),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj),[@极速男孩](https://github.com/ztlyyznf001) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#61-2019.04.01.md b/Reports/2019/#61-2019.04.01.md new file mode 100644 index 000000000..d2ceac551 --- /dev/null +++ b/Reports/2019/#61-2019.04.01.md @@ -0,0 +1,176 @@ +# 老司机 iOS 周报 #61 | 2019-04-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Swift 5 正式发布](https://mp.weixin.qq.com/s/-fLVdoTz3lT5Kxnea0-Avg) + +Swift5 正式更新,官方提供了更新笔记说明,我们周报编辑团队的 [@Tom](https://xiaozhuanlan.com/u/6682065345) 组织 [@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang) 和 [@极速男孩](https://github.com/ztlyyznf001) 为大家做了第一手的翻译工作,方便大家了解这次对于 Swift 发展史很重要的迭代。 + +### 🌟 [支付宝移动开发平台 mPaaS 正式向个人开发者开放](https://fw.alipay.com/alipaymarket/ability/AM010000000000002935/detail.htm) + +mPaaS 是支付宝移动开发所依赖的平台服务,它承载了支付宝这种超级 App 的日常迭代。过去半年左右的时间,mPaaS 持续向社区输出自己的一套软件开发和管理方案。之前 mPaaS 服务只对企业级用户开放,而这周支付宝宣布这套开发平台也正式向个人开发者开放。个人觉得,就算不使用这个平台服务,通过浏览其功能的相关文档和接口规范,也能获得不错的收获。 + +### [Shortcuts 2.2 Brings New Apple Notes Actions, Travel Time Enhancements](https://www.macstories.net/ios/shortcuts-2-2-brings-new-apple-notes-actions-travel-time-enhancements/) + +在苹果将 Workflow 纳入自家门下之后,越来越多的 私有 API 开放给了捷径应用。就在本周,捷径发布了其 2.2 版本。原先需要打开 Notes APP,再进行捷径操作。如今已变成了后台 API 访问的形式。除此之外,还增强旅行时间功能,其基于 Apple Maps,有更多的变量可以让你去选择,例如时长、距离、最佳路线等。 + +## 新手推荐 + +### 🌟 [代码自解释不是不写注释的理由](https://www.infoq.cn/article/eQlxAX013D9h5b-B356Q) + +代码注释通常有两种形式:要么没有和要么毫无用处 。作者认为`自解释的代码是不存在的` ,应该让注释成为代码的一部分。如果你对代码注释有任何疑问,推荐阅读此文。 + +### [Swift 4.2 improves Hashable with a new Hasher struct](https://www.hackingwithswift.com/articles/115/swift-4-2-improves-hashable-with-a-new-hasher-struct) + +Swift 4.2 优化设计了 Hashable 协议,引入了新的 default implementation `func hash(into: inout Hasher) `,并以 Hash-flooding 攻击为知识背景详细介绍了为什么 Apple 官网文档不建议继续使用 `var hashValue` 的原因。 + +> @[sunsetwan](https://github.com/SunsetWan) 推荐 + +### [Swift, more elegant code: Typealias](https://medium.com/@ahmadfayyas/swift-quick-elegant-code-typealias-8e6d59f07f32) + +本文作者使用两个例子,一正一反,运用对比论证的手法,生动形象地说明了 Typealias 的恰当用法。 +别名的使用,在于将很长的声明类型缩短,增加可读性。常用于在 Swift closure (类比 Objective-C block `typedef` 场景)。 + +``` +typealias Success = (_ data: Data, _ message: String, _ status: Int, _ isEnabled: Bool) -> () +``` + +> @[sunsetwan](https://github.com/SunsetWan) 推荐 + + +## 文章 + +### 🌟 🐢 [Flutter 实现原理及在马蜂窝的跨平台开发实践](https://mp.weixin.qq.com/s/WBnj_6sOonjR9XUnB-wZPA) + +马蜂窝团队根据他们对 Flutter 在马蜂窝商家端的一个小尝试,总结了他们对 Flutter 一些看法。文章主要分为三个部分: + +- 第一部分,主要说了马蜂窝为什么想尝试 Flutter 技术,并总结了 Flutter 基本架构和实现原理 +- 第二部分,主要讲了 Flutter 在马蜂窝商家端 App 中的应用实践,如何在两端集成、如何交互以及部分性能对比。 +- 第三部分,主要总结了如何管理「页面混合栈」以及对 Flutter 应用总结。 + +如果还没有开始尝试 Flutter 朋友,这会是一篇很不错的参考文章哦。 + +### 🌟 🐕 [VIPER best practices for iOS developers](https://theswiftdev.com/2019/03/11/viper-best-practices-for-ios-developers/) + +本文是作者在过去一年对 VIPER 架构最佳实践系列分享的第二篇。主要包括以下内容: + +1. 使用 VIPERA 代码生成工具自动生成 VIPER 各个模块 +2. 以 App 首页业务为例结合 Promises 分别实现 View、Interactor、Presenter、Entities、Router 、Services +3. VIPER 模块间通信 + +结合 Promises 基于 VIPER 架构可以使代码结构更加清晰,更容易做单元测试,更易复用,[点击这里](https://github.com/theswiftdev/viper-best-practices/)阅读源码。 + +对 VIPER 架构感兴趣的读者可以扩展阅读作者这个系列教程[第一篇:](https://theswiftdev.com/2018/03/12/the-ultimate-viper-architecture-tutorial/)各种架构及 VIPER 基本概念,[第三篇:](https://theswiftdev.com/2019/03/19/mastering-the-viper-architecture/)面向协议编程在 VIPER 架构上的实践。 + +### 🌟 🐕 [iOS 开发中的 Web 应用概述](https://dequan1331.github.io/web-in-ios.html) + +移动开发领域近年来已经逐渐告别了野蛮生长的时期,进入了相对成熟的时代。而一直以来 Native 和 Web 的争论从未停止,通过开发者孜孜不倦的努力,Web 的效率和 Native 的体验也一直在寻求着平衡。本文聚焦 iOS 开发和 Web 开发的交叉点,希望能通过简要的介绍,帮助开发者一窥 Hybrid 和大前端的构想。 + +### 🐎 [CodeHub#1 回顾 | 敏捷开发与动态更新在支付宝 App 内的实践](https://mp.weixin.qq.com/s/eXzojM0lCaaCW4JxBaU6BQ) + +本文解释了支付宝 App 的一些架构实现细节,支付宝的架构设计需要满足的目标有 + +- 多应用的生态:不限于形式,原生模块、离线包、小程序。 +- 开放:底层同一个架构,业务很方便的迁移。 +- 动态化:业务可以随时在线更新,无需发版,随时响应线上活动,比如双十一、双十二,春节扫福等活动 +- 高可用、高性能、高灵敏度:完善的监控运维体系、发现问题后多层次的修复技术、客户端良好的性能启动体验,强大的网络性能,防刷抗流量等。 + +从整体上来说,一个超级 App 的发展过程,对于前后端的架构设计都会提出不同的演化目标。目前支付宝也开源了面向移动开发的一站式解决方案 mPass,能有效地减少研发成本,提升开发效率,可以多关注一下。 + +### 🐕 [What’s new in Swift 5.1](https://www.hackingwithswift.com/articles/182/whats-new-in-swift-5-1) + +令 Swift 程序员们热泪盈眶,翘首以盼的 Swift5.0 已经发布了,带来了 ABI 稳定等一系列激动人心的特性。按照 Swift 一贯的节奏,当一个版本发布时,人们往往就已经开始关注下一个版本,比如这篇文章为我们简单的介绍了一下 Swift5.1 中目前已经基本确定的新特性,比如 Self 的新用法,optional 枚举的匹配以及数组的 difference 直接计算等,个人觉得最好玩的应该是最后一个点。基于这个特性应该可以做很多有趣的文本应用。感兴趣的同学可以仔细看看文章。 + +### 🐎 [Deep dive into Pattern matching with ~= operator](https://mecid.github.io/2019/03/20/pattern-matching-operator/) + +Swift 中的 `switch-case` 语句非常强大,灵活配合 `turple`, `case let`, `where` 能写出可读性很高的代码。 + +但是,你知道 `switch-case` 语句模式匹配的具体过程吗?是否支持自定义类型?标准类型的模式匹配如何扩展?你可能想不到,简单的重写 `~=` 运算符就能实现这些强大的功能。本文带你快速了解这一模式匹配过程。 + +### 🐢 [XcodeKit and Xcode Source Editor Extensions](https://nshipster.com/xcode-source-extensions/) + +Xcode 8 提供了 Xcode Source Editor Extension方式来开发 Xcode 插件。本文详细介绍了插件的制作过程如 Menu Items 设置、XcodeKit Inputs and Outputs 处理、以及一些开发调试中的一些 Tips 等。在往期周报中已有不少相关内容的推荐,对 Xcode Extensions 感兴趣的读者不妨一看。 + +> 推荐阅读: +> 1. [How to convert your Xcode plugins to Xcode extensions](https://medium.freecodecamp.org/how-to-convert-your-xcode-plugins-to-xcode-extensions-ac90f32ae0e3) +> 2. [制作一个 Mac APP:XcodeExtension](https://juejin.im/post/5c53f32be51d457fbe226fdd) +> 2. [Code Friend](https://github.com/qvcodefriend/CodeFriend) + +### 🐢 [How to implement service oriented architecture using swift](https://itnext.io/service-oriented-architecture-in-swift-362dc454fc09) + +基于服务的架构是一种组件模型,它将应用拆分成多个功能单元(服务)暴露给上层进行调用,并通过这些服务之间定义良好的接口和契约联系起来。 + +这篇文章讲的就是这种架构在 iOS 里的使用,作者讲述了他对于服务的定义,接口的构建,架构具体的分层,依赖注入的实现,并且基于这一套理论实现了一个用户信息管理功能。 + +## 工具 + +### 🌟 [通过异步生成 dSYM 实现极速打包](https://github.com/bestswifter/blog/blob/master/articles/async-dsym.md) + +对大型应用来说,进行编译打包通常比较耗时。通过对编译时间的分析可以发现,大约有两分钟的时间用于生成 dSYM 文件,也就是 Release 模式下的符号表。为了不阻塞编译构建,dSYM 可以通过异步的方式去生成。具体的做法为: + +1. 将一次编译构建拆分为两次 +2. 第一次编译不生成 dSYM 文件 +3. 第二次编译再生成 dSYM 文件,由于使用了相同的代码和缓存,因此速度非常快 + +当前这个工具仅用于修改 UUID,不区分是否是 dSYM 文件,且仅支持 armv7 和 arm64 架构。 + +### 🌟 [LLDB 知多少](https://juejin.im/post/5c8ca84ce51d456f43189dbd) + +LLDB 是我们 iOS 开发最为熟悉的调试工具了,本文就从 LLDB 基本概念和它的命令结构展开,总结了几个常用的调试命令,同时也介绍了两款功能强大的 LLDB 插件,让我们重新认识了 LLDB。正如作者所希望的,在大家了解了 LLDB 之后,还是要通过不断的练习来掌握更多的调试技巧,进一步提高开发效率。 + +### [DevSwitch](https://github.com/aaronpearce/DevSwitch) + +一款可以快速切换应用商店的地区,来查看你的应用的评论和功能的工具。 + +## 代码 + +### [flutter_flipperkit](https://github.com/blankapp/flutter_flipperkit/blob/master/README.zh_CN.md) + +随着 Flutter 的热度不断增加,社区相关的工具库也在不断增加。如果之前有开发过 RN 的同学可能知道 blankapp 这个团队,他们为 RN 开发了很多易用的组件之前。目前,他们团队也开始为 Flutter 开发一些工具,flipperkit 这个工具主要用来在开发过程中方便的进行 debug,支持网络信息、UserDefaults 信息的查看等等,而且集成安装很方便,推荐大家尝试。 + +## 音视频 + +### [ggtalk | 如何出版一本书](https://talk.swift.gg/23) + +本期 ggtalk 邀请的嘉宾是曾经在人民邮电出版社担任过文字编辑和线上运营工作的刘女士以及《Xcode 江湖录》的作者星星。围绕“如何出版一本书”这一主题,本期讨论的内容(按照时间顺序)大致分成三个部分: + +1. 介绍图书出版的流程以及回答稿酬计算方式等关于出版图书的一些相关问题 +2. 星星和梁杰的出书和翻译经历 +3. 关于国内的出版现状,电子书和“碎片化阅读”的讨论 + +本期的讨论对想自己出书或是翻译国外图书的朋友有比较大的帮助。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 本期编辑 + +[@四娘](https://kemchenj.github.io),[@享耳先森](https://github.com/iblacksun),[@Damonwong](https://github.com/Damonvvong),[@折腾范儿_味精](http://weibo.com/agvicking),[@张嘉夫](https://weibo.com/2949394297),[@Parsifal](https://weibo.com/parsifalchang),[@aaaron7](https://weibo.com/aaaron7),[@kyo](https://github.com/KyoLi),[@tom510230](https://xiaozhuanlan.com/u/6682065345),[@anotheren](https://anotheren.com),[@水水](https://www.xuyanlan.com),[@looping](https://github.com/looping),[@老老老老老老老驴](https://weibo.com/u/6090610445),[@小非86](https://weibo.com/xuyafei86),[@邦ben](http://weibo.com/linwenbang),[@红纸](https://github.com/nianran),[@含笑饮砒霜](http://chinafish.news),[@JimQ](https://github.com/waz0820),[@老峰](https://github.com/GesanTung),[@zvving](https://github.com/zvving),[@J_Knight_](https://github.com/knightsj),[@极速男孩](https://github.com/ztlyyznf001) + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#62-2019.04.08.md b/Reports/2019/#62-2019.04.08.md new file mode 100644 index 000000000..f4fffbc55 --- /dev/null +++ b/Reports/2019/#62-2019.04.08.md @@ -0,0 +1,178 @@ +# 老司机 iOS 周报 #62 | 2019-04-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +欢迎我们的新编辑 [@CrazyCoderShi](https://github.com/CrazyCoderShi) 加入周报团队,[@CrazyCoderShi](https://github.com/CrazyCoderShi) 在跨端方案尤其是 Flutter 方向均有较深的研究,希望接下来能为大家带来更优质的相关内容~ + +## 新闻 + +### [Can we do something for 996 programmers in China?](https://zhuanlan.zhihu.com/p/61638339) + +[996.ICU](https://996.icu/#/zh_CN) 在近来在国内互联网圈子里引发了不小的轰动,GitHub 上的仓库已经累计了 18w+ 的 star。而 Python 之父 Guido van Rossum 也同样关注着这个事件,早先就在推特上发声,而现在又在社区发起了一个讨论,希望能征集到一些切实可行的措施来改善这一现象。 + +## 新手推荐 + +### 🌟 [flutter_go](https://github.com/alibaba/flutter-go?utm_source=gold_browser_extension) / [flutter_ui](https://github.com/efoxTeam/flutter-ui) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自打发布以来一直是热门话题,对于新手入门来说,一个完整且规范的项目是不可多得的学习资料,[flutter_go](https://github.com/alibaba/flutter-go?utm_source=gold_browser_extension) 出自阿里拍卖前端团队,[flutter_ui](https://github.com/efoxTeam/flutter-ui) 出自 YY 团队,两者均提供了丰富的组件示例,代码规范完全遵循 [Effective-Dart](https://www.dartlang.org/guides/language/effective-dart/style) 规范,新手入门 flutter 必备,通过这两个项目您将学习到以下知识点: + +- flutter 基础组件的使用方法 +- flutter 动画应用( [flutter_ui](https://github.com/efoxTeam/flutter-ui) ) +- 基于 [scoped_model](https://github.com/brianegan/scoped_model) 的 flutter 状态管理 ( [flutter_ui](https://github.com/efoxTeam/flutter-ui) ) +- 如何组织一个多 tab 应用 + +### 🐕 [简单易懂 KVC 基础篇](https://juejin.im/post/5c948d6a6fb9a070eb267a08) + +[@JimQ](https://github.com/waz0820):一篇循序渐进地介绍 KVC 这门技术的文章。 + +- 首先,分普通和特殊用法两部分讲述了与 KVC 相关的一系列 API 接口,并给出了这些 API 的思维导图; +- 原理解析与实践,指出 KVC 协议中最关键的部分就是访问者搜索模式,并介绍了其中一种模式即可变数组的搜索模式; +- 最后,讨论了 KVC 与 KVO 的实现机制之间是否有相关性,认为 KVC 是 KVO 实现的基础。 + +## 文章 + +### 🌟 🐢 [小程序渲染架构设计](https://mp.weixin.qq.com/s/D_7yvtEdwq8NM_tcb1YjMw) + +[@折腾范儿_味精](http://weibo.com/agvicking):BATT,微信,支付宝,头条,百度,都纷纷推出了自己的小程序,小程序这个概念已经广泛的渗透到了各大公司各大平台。 + +- 小程序的架构有什么好处?为什么各大公司都倾向于用这样的小程序式的架构? +- 小程序的架构是什么样子?这一套架构实现上与 H5/RN/Flutter 他们之间有什么差异? + +带着这些问题,来深入这篇文章,让我们从,用户的角度/平台的角度/架构与代码实现的角度,深入剖析一下“小程序” + +### 🌟 🐕 [燃烧我的卡路里——Flutter 瘦内存、瘦包之图片渲染组件](https://mp.weixin.qq.com/s/QwNMm0P2z7RGJ_xzhto1RQ) + +[@tom510230](https://xiaozhuanlan.com/u/6682065345):本文介绍了闲鱼在做 Flutter 工程中具体遇到的性能优化场景,并且提高了解决思路 + +1. 内存问题 --- 连续 push flutter 界面内存累积 + +2. 安装包问题 --- 过渡时期两份重复资源文件 + +3. 寻址缓存问题 --- 原有的寻址缓存策略无法复用 + +4. 图片复用问题 --- Native 和 Flutter 重复下载相同图片 + +总体而言,Flutter 要想获得跟 native 差不多的性能,在不依赖原生 hybrid 组件的前提下,要对 Flutter Engine 做深度的定制,本文聚焦在了 OpenGL 渲染方面的性能改进。 + +### 🐢 [运行时 Hook 所有 Block 方法调用的技术实现](https://juejin.im/post/5ca0ca6e51882567e32fc44b) + +[@含笑饮砒霜](http://chinafish.news):项目中为了监控拦截或统计一些行为时,可能会用到 Hook 机制。可以使用 Method Swizzling 技术去 Hook 一个 OC 方法,可以通过修改导入函数地址表中的信息来 Hook 一个 C 函数,那如何 Hook 一个 Block 对象的函数调用呢?这需要解决如下问题: + +1. 如何在运行时将所有的 Block 的 invoke 函数替换为一个统一的 Hook 函数 + +2. 这个统一的 Hook 函数如何调用原始 Block 的 invoke 函数 + +3. 如何构建这个统一的 Hook 函数 + +Block 对象也是一种 OC对象,通过探究,最终要执行替换的是 retain 方法, 至于为何以及如何替换 retain 方法,有兴趣的同学可以参考学习一下。 + + +### 🐎 [跨平台技术演进](https://juejin.im/post/5ca1671651882567d41ebf6d) + +[@aaaron7](https://weibo.com/aaaron7):随着 Flutter 越来越流行,标志着无线端跨平台技术进入了第三个阶段,从最开始的 H5 + Native 的 hybrid 应用,到基于 DSL + 原生组件的 RN/Weex, 再到 DSL + 跨平台渲染组件的 Flutter。这些年跨平台技术的快速迭代,也促进了无线端技术栈和前端技术栈进行了各种各样的融合与尝试,也演化出类似 PWA,小程序这样独特应用场景的创新技术。本文作者总结了这一系列的技术,并针对性的分析了优缺点,算是不错的科普文章。深度一般,适合对相关技术不太了解的技术同学学习。 + +### 🐎 [Swift Tip: Collection Protocols](https://www.objc.io/blog/2019/03/26/collection-protocols/) + +[@享耳先森](https://github.com/iblacksun):在 Swift 中,有许多 `Collection` 相关的协议,每个都有自己的作用,了解这些协议各自的作用,在写算法时将非常有帮助。本文摘录自 [`Advanced Swift`](https://www.objc.io/books/advanced-swift/) 这本书,作者们正在更新 Swift 5 相关内容,如果你之前买过电子版的话,将能免费更新。 + +### 🐢 [A Glimpse into Generic Meta-Programming in Swift](https://wezzard.com/post/2019/03/a-glimpse-into-generic-meta-programming-in-swift-d2cd) + +[@老峰](https://github.com/GesanTung):VFL(Visual Format Language),是苹果公司为了简化 Autolayout 的编码而推出的抽象语言,其表达式通常是字符串,编译器无法在编译期验证表达式是否有误。基于这样的背景,本文作者以构建一个在编译期确保安全的 VFL 助手库为例,介绍了Swift 中的泛型元编程,点击这里查看本文 [源码](https://github.com/WeZZard/CTVFL),这里有这篇文章的 [翻译](https://juejin.im/post/5ca09c696fb9a05e5f3cfe1f) 可供参考阅读。 + +### 🐢 [Introduction to Swift Keypaths](https://appventure.me/guides/keypaths/complete_book.html) + +[@极速男孩](https://github.com/ztlyyznf001) :在 Swift 中可以方便的通过 Keypath 对一个类进行类型安全的赋值和取值操作。本文首先介绍了 Swift 中的 Keypath 的基本用法和概念,然后给出一些实际的例子,并就如何在日常工作中使用 Keypath 给出一些建议和提示。 + +> 由 [yuhanle](https://github.com/yuhanle) 推荐 + +### 🐢 [The Pragmatic Guide to Scalable Swift Architecture for 2019](https://blog.usejournal.com/the-pragmatic-guide-to-scalable-swift-architecture-in-2019-dbe662f7f516) + +[@四娘](https://kemchenj.github.io):这算是一篇架构散文,作者在文章里通过一问一答的形式去阐述自己对于架构的理解: + +1. 高薪程序员是如何在团队里逐步推进架构改造的? +2. 如何解决异步代码逻辑分散的问题的? +3. 如何在依赖注入时保障安全性和可复用性? +4. 如何通过状态和事件的解耦让 ViewController 的代码质量变得更高? +5. 如何解耦 ViewController 里的跳转逻辑? + +## 设计 + +### 🐕 [Everything you need to know about Loading Animations](https://medium.com/flawless-app-stories/everything-you-need-to-know-about-loading-animations-10db7f9b61e) + +[@张嘉夫](https://weibo.com/2949394297):这篇文章对加载动画进行了深入的介绍,包括加载动画的发展历史、入门指南、何时应该简洁何时又应该充满细节、实用的工具和资源等等,可以帮助你创造更加优秀的用户体验。 + +## 工具 + +### [cocoapods-binary](https://github.com/leavez/cocoapods-binary) + +[@小非86](https://weibo.com/xuyafei86):在 CocoaPods 中,即使没有对项目中的 Pod 进行任何修改,Xcode 也仍然会重新编译 Pod。这在大型项目中是一件十分痛苦的事情。因此,Carthage 甚至将二进制管理作为其核心功能。但其实 CocoaPods 在官方指南的“插件”章节介绍一款可以支持二进制管理的 CocoaPods 插件 [CocoaPods Binary](https://guides.cocoapods.org/plugins/pre-compiling-dependencies.html)。 + +CocoaPods Binary 通过在 Pod 安装期间预编译你的 Pod,然后将二进制产物(例如:Framework 文件)添加到生成的 Pods 项目中,使 Xcode 没有重新编译代码的机会,以此实现二进制管理。 + +### [CIFilter.io (Core Image Filter Reference)](https://noahgilmore.com/blog/cifilterio/) + +[@anotheren](https://anotheren.com):`CIFilter` 是 `Core Image` 的一个重要组成部分,但是 Apple 提供的 [文档](https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIPerspectiveTransformWithExtent) 已经提示不再更新,缺少新加入系统的 `CIFilter` 的使用说明。CIFilter.io 提供了完整的列表搜索,以及其相关用法。甚至它还提供了一个 App 来展示各个 `CIFilter` 的实际使用效果,你可以在 [这里](https://github.com/noahsark769/cifilter.io) 找到相关源码。 + +## 代码 + +### 🌟 [Matrix for iOS/macOS](https://github.com/tencent/matrix/tree/master/matrix/matrix-iOS) + +[@J_Knight_](https://github.com/knightsj):Matrix for iOS/macOS 是一款微信团队研发并日常使用的性能探针工具,目前集成在 iOS 和 macOS 微信的 APM(Application Performance Manage)平台中使用。 +Matrix for iOS/macOS 当前监控范围包括:崩溃、卡顿和爆内存,目前包含两款插件: + +1. WCCrashBlockMonitorPlugin:捕获卡顿堆栈插件,基于 KSCrash 框架开发,具有如下特点: + - 通过检查 Runloop 运行状态判断应用是否卡顿,同时支持 iOS/macOS 平台; + - 具备耗时堆栈提取能力,可获取最近时间最耗时的主线程堆栈。 +2. WCMemoryStatPlugin:内存监控插件,能够全面捕获应用出现爆内存时的堆栈以及内存分配的情况,具有如下特点: + - 在应用运行期间获取对象存活以及相应的堆栈信息,在检测到应用爆内存时进行上报; + - 使用平衡二叉树存储存活对象,使用 Hash Table 存储堆栈。 + + +推荐阅读: +- [Matrix for iOS/macOS 正式开源了](https://mp.weixin.qq.com/s/ub4HF0PCGWoEveCvoGOG6A) +- [Matrix-iOS 卡顿监控](https://mp.weixin.qq.com/s/gPZnR7sF_22KSsqepohgNg) + +### 🌟 [objc_msgSend_hook](https://github.com/czqasngit/objc_msgSend_hook) + +[@红纸](https://github.com/nianran):作者利用 [fishhook](https://github.com/facebook/fishhook) 原理巧妙的实现了对于 arm64 架构下 objc_msgSend 函数精简版的 Hook,代码量很少,可以有效工作且每一行代码都有注释(贴心~)。 + +> 由 [@首先很有趣](https://weibo.com/everettjf?is_hot=1) 推荐 + +### [RoughSwift](https://github.com/onmyway133/RoughSwift) + +[@在等简历の邦Ben](http://weibo.com/linwenbang):Swift 写的一个卡通手绘风格图形库,提供了所有基本类型(线,矩形,圆,圆弧等等),包括 SVG path。如果有同学想做点萌萌有趣的 APP 不妨考虑使用一下。 + +### [LVThemeKit](https://github.com/lvpengwei/LVThemeKit/blob/master/README.md) + +[@JimQ](https://github.com/waz0820):作者开发中用到多个区域切换多套皮肤的功能,之前版本中新增功能或主题时要新增许多冗余代码,针对此借助 OC 的泛型和 KVC 进行了一次重构,代码是重构后的实现。 + +> 由 [吕鹏伟](https://github.com/lvpengwei) 自荐 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#63-2019.04.15.md b/Reports/2019/#63-2019.04.15.md new file mode 100644 index 000000000..f33f36d54 --- /dev/null +++ b/Reports/2019/#63-2019.04.15.md @@ -0,0 +1,166 @@ +# 老司机 iOS 周报 #63 | 2019-04-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [T 沙龙 - 互联网寒冬来袭,移动开发者如何破局](https://www.bagevent.com/event/2546122) + +2019 年上海第一次 T 沙龙将于 4 月 20 日下午 1 点 30 分在上海虹口区天水路 172 号金融街海伦中心 B 座准时举办,此次活动邀请到了来自饿了么、iTutorGroup、极光、以及看雪论坛的业界资深从业者为大家分享他们在移动端技术深度和广度上的实践和思考。希望这次活动能对互联网寒冬下迷茫的移动开发者有一些启发,并成功破局!猛戳上方链接免费报名。 + +### [SwiftNIO 2.0 released](https://forums.swift.org/t/swiftnio-2/22136) + +[@四娘](https://kemchenj.github.io/):伴随着 Swift 5 的发布,SwiftNIO 也正式发布了 2.0 版本,这个版本主要有两个大更新: + +1. 内置了 BoringSSL 作为 Vendor,不再依赖系统的 OpenSSL +2. 使用纯 Swift 实现了 HTTP2 协议,不再依赖于 nghttp2 + +### [Smoke Framework 1.0 released](https://forums.swift.org/t/smoke-framework-1/22710) + +[@享耳先森](https://github.com/iblacksun):Amazon 之前开源的 Swift Web Framework 发布 1.0 了,围绕着 AWS 的服务做了很多深度集成。1.0 使用 Swift 4.2, SwiftNIO 1.x 开发,即将发布 Swift 5 及 SwiftNIO 2 的版本,包含 `SmokeHTTP`,`SmokeAWS`, `SmokeDynamoDB`, `SmokeAWSCredentials` 几个子模块。 + +## 新手推荐 + +### 🌟 🐕 [纯 Swift 项目 - Xib | Storyboard 多人协作技巧](https://juejin.im/post/5c468f676fb9a049ed313183) + +[@looping](https://github.com/looping):本文就针对大家在使用 Storyboard 后出现的一些问题或质疑,提出了自己的看法,并列举了相关实践和建议,从而说明 Storyboard 和 Xib 虽然存在一些缺点,但也是值得学习研究的: + +- 通过定制规范,合理的任务分工,以及有节制的使用工具来避免多人协作的坑 —— 对 Storyboard 的滥用(作者在文章中也给出了他们团队使用 Storyboard 的规范); +- 通过良好的模块设计,熟练使用 Storyboard 分离代码的几个方案来避免由于 Storyboard 造成 ViewController 代码臃肿的问题; +- 需要修改类名或者变量名,应该善用 Xcode 的重构功能,来避免由于手动修改代码出现遗漏,导致应用崩溃等现象排查定位困难的问题; +- 经过测试,Storyboard 和 Xib 的执行效率并没有想象中的那么低,在重复创建实例时效率反而会比纯代码要高; +- 使用 Storyboard 和 Xib 进行布局,缺少约束或者约束冲突就会直接提示错误,适配不同设备也可以直接在 Interface Builder 上切换测试,效率和准确性比手写适配代码要高很多。 + +## 文章 + +### 🌟 [iOS app 秒开 H5 优化总结](https://juejin.im/post/5c9c664ff265da611624764d) + +[@折腾范儿_味精](http://weibo.com/agvicking):为了让 app 里面的 H5 页面实现秒开的效果,很多项目都采用了加载本地 H5 离线包的方式。如何实现这样的秒开就得分别从两个方面着手实现。 + +- 离线包的分发与下载 +- WebView 的本地加载 + +需要补充一点的是,本文在 WebView 本地加载上都是以拦截的思路进行本地加载,UIWebView 自然可以顺畅使用 NSURLProtocol 但是在 WKWebView 里就面临很大的阻碍,而作者给出的代替方案还是 WKURLSchemeHandler 拦截,但面临的代价也是本来前端无感的拦截方案现在被迫前端也得受影响,打包的时候对资源协议头进行适配,这一点和很多公司的离线包方案略有差异。 + +在 WKWebView 里,即便是使用 WKURLSchemeHandler,资源拦截的方式也面临着与安卓差异化严重,对前端侵入性严重等问题,很多公司的离线包方案选择了另外的一条路,App 起本地服务器 run 前端离线包页面,做到让 WebView 无感知当前是一个“离线”页面,这样做能够最大程度的让前端对于离线包“无感”,也能忽略掉拦截 API 的平台差异导致的框架实现差异。 + +关于起本地服务器的这套方案,可以参考 [基于 LocalWebServer 实现 WKWebView 离线资源加载](https://www.jianshu.com/p/a69e77bf680c) 一文。它介绍了基于 Local Web Server 的方案来实现离线本地 H5 页面秒开。对这个方案有兴趣的朋友可以详细地看一下本篇文章给大家介绍的几套 Local Web Server 的开源方案并且文章还配有 Demo 代码可以参考。本文还向大家详细介绍了一下证书签名等部署本地服务会面临的问题。 + +### 🌟 🐢 [Building a dynamic modular iOS architecture](https://medium.com/fluxom/building-a-dynamic-modular-ios-architecture-1b87dc31278b) + +[@莲叔](https://weibo.com/aaaron7/):在以往讲述 iOS 架构/设计模式的文章中,往往 focus 在某个功能模块如何设计,如:MVC,MVP,VIPER,MVVM 等,讲述整个工程的设计模式和组织方法的讨论并不多见。本文从整个工程的架构着手,提出了一种工程的分层的架构方式,并且通过针对不同的层选择动、静态库来承载,实现了易于拓展、可组合、低耦合的工程架构,同时能兼顾编译时间和启动时间。针对各种不同粒度的需求变更,feature 级或者流程级都能够很好地兼容,文章还给出了对初学者很友好的 example app 来描述其思想,避免了读者在工程配置上可能花费的探索时间(毕竟要配置一堆动静态库的依赖关系还是有点蛋疼的)。值得阅读。 + +### 🌟 🐢 [百度 App 网络深度优化系列(一):DNS 优化](https://www.infoq.cn/article/3QZ0o9Nmv*O0LoEPVRkN) + +[@kyo](https://github.com/KyoLi):在移动互联网时代,对于各家公司而言,什么东西最重要呢?我想大多数的答案应该是流量。本文当然不是讨论如何获取更多的流量等问题,毕竟那更多是产品运营的事情,而为流量做保驾护航的,就是网络。所以,如何优化网络,也是各厂纷纷探索的方向。对于流量越大的 App 而言,网络优化所带来的收益也越大。本文由百度 App 研发团队所写的[百度 App 网络深度优化系列]的第一篇,DNS 的优化,从百度这个亿级日活的 App 自身的实践中总结出来的,非常值得好好看下。 + +### 🌟 🐎 [Pure protocol factory for Interface Builder-based views](https://blog.hal.codes/ib-constructible) + +[@looping](https://github.com/looping):多人协作引起的代码合并冲突是我们使用 Storyboard 进行开发时常会遇到的比较头疼的问题了。避免这类协作问题的常用解决方案就是制定规范,规定一个界面用一个 Storyboard,并由单人维护。这样虽然解决了协作问题,但假如在写实例化代码时不进行优化,还是会存在一些不太友好的冗余代码,甚至硬编码。例如,`let controller = UIStoryboard(name: "MyViewController", bundle: Bundle(for: MyViewController.self)).instantiateInitialViewController() as? MyViewController`。 + +本文作者就分享了一种优化思路,他通过设计一个 UIViewController 的协议(protocol)IBConstructible —— 带有 nibName 和 bundle 这两个属性,利用 Swift 允许通过扩展(Extension)为协议提供默认实现的特性,使得最终实例化代码变得非常简洁,`let controller = MyViewController.fromNib`。 + +如果有在使用 Storyboard 进行开发的团队,但还没有对相关代码进行优化的话,可以参考本文提供的方案来处理,让代码变得更加简洁。如果已经优化过的,不妨也分享下自己的思路。同时本文的优化技巧也是可以用在很多代码重构的场景上的。 + +### 🐎 [RunLoop 实战:实时卡顿监控](https://juejin.im/post/5cacb2baf265da03904bf93b) + +[@kyo](https://github.com/KyoLi):虽然移动设备的性能越来越好,但为了追求更好的体验,卡顿依然是我们日常开发中不可忽视的问题。目前,各个公司都会采用各种三方库或者自己写的库来监控卡顿,但无论什么库,监控卡顿必然绕不开 Runloop。本文作者简单介绍了监控卡顿的原理,然后利用 Runloop 的特性制作了一个可以监控卡顿的 Demo。 + +### 🐎 [Indeterminate Types chuwith Codable in Swift](https://medium.com/makingtuenti/indeterminate-types-with-codable-in-swift-5a1af0aa9f3d) + +[@极速男孩](https://github.com/ztlyyznf001) : Codable 是在 Swift 4 以后引入的一种序列化和反序列化的协议。本文主要介绍了两种对于在 Codable 协议中,处理不确定类型的两种方式: + +1. 通过枚举去关联想要存储的不同类型的属性值。 +2. 使用 `Any` 关键字去存储想要的类型。 + +本文在这里主要推荐使用 `Any` 关键字, `Any` 和用枚举的方法相比在保持类似的开发体验的同时,可以灵活的去修改。 + +> 由 [yuhanle](https://github.com/yuhanle) 推荐 + +### 🐎 [一篇文章读懂 HTTPS 及其背后的加密原理](https://mp.weixin.qq.com/s/3gI8avaaaEaBJjOKitN7Fw) + +[@J_Knight_](https://github.com/knightsj):作者以使用 HTTPS 的缘由为切入点,从对称加密和非对称加密的对比,数字证书,数字签名,以及 HTTPS 通信的建立流程这几个方面介绍了 HTTPS。 + +### 🐕 [Stubbing in pair with Swift compiler: a spy registration](https://medium.com/flawless-app-stories/stubbing-in-pair-with-swift-compiler-a-spy-registration-bbfdc1cf87a1) + +[@zvving](https://twitter.com/zvving):45 期我们曾介绍过 [Unit tests 中轻量级 stubbing 实现](https://medium.com/@londeix/stubbing-in-pair-with-swift-compiler-c951770a295b),其中测试用例执行前注册 stub body 的过程略显繁琐。 +如今作者更近一步,设计一套名为 **arguments spy** 的可插拔机制,尝试解决 Unit Tests 中动态修改 stub body 实现的困扰。对函数式编程感兴趣的同学不要错过。 + +## 工具 + +### [optionals](https://www.optionals.org) + +[@张嘉夫](https://weibo.com/2949394297):一个展示 Swift 可选型(optional)各种用法的网站。 + +### [onesignal](https://onesignal.com/) + +[@邦Ben](http://weibo.com/linwenbang):国外的一个集合型的服务(移动推送,Web 推送,内购,邮件),老套路,基础服务免费,高级服务氪金。因此,如果有海外业务的同学和开发个人 APP 的同学不妨看看。 + +## 代码 + +### [Solutions to LeetCode by Swift]() + +[@zvving](https://twitter.com/zvving):算法已经成为各大公司面试必考项目。刷 LeetCode,无论是准备面试还是锻炼自己的算法和编程能力都很有帮助。网上 Swift 解法实现不多,这个版本相对完善,在代码规范、分类、时间(空间)复杂度梳理等方面可圈可点,值得参考。 + +LeetCode 已入驻国内,中文名[『力扣』](https://leetcode-cn.com),可以一试。 + +相关阅读: + +- [LeetCodeAnimation](https://github.com/MisterBooo/LeetCodeAnimation) + +### [Codextended](https://github.com/JohnSundell/Codextended) + +[@张嘉夫](https://weibo.com/2949394297):让 Swift 的 `Codable` API 更容易使用的一套 extensions,赋予其类型推断(type inference) 能力。Codextended 既不是 wrapper 也不是全新的框架,而是用一种极其轻量的方式来增强 `Codable`。`Codable` 很强大也很方便,但如果你需要一定程度的自定义的话(例如转换部分 decoded data,或为某些键提供默认值),`Codable` 的标准 API 就会变得*相当*啰嗦。它没有充分利用 Swift 强大的类型推断能力,导致产生了很多不必要的重复代码。Codextended 就旨在解决这个问题。 + +### [Brooklyn](https://github.com/pedrommcarrasco/Brooklyn) + +[@享耳先森](https://github.com/iblacksun):受苹果 2018.10.30 发布会启发,设计并开源的一个屏保程序,非常漂亮,可在终端执行 `brew cask install brooklyn` 安装。 + +### [SecureDefaults](https://github.com/vpeschenkov/SecureDefaults) + +[@小非86](https://weibo.com/xuyafei86):SecureDefaults 是对 UserDefaults 的轻量封装,使用 Swift 编写,并额外支持 AES-256 加密(密钥 256 位)。如果你想改善 App 持久化数据的安全性,又执意要使用 UserDefaults 的接口,SecureDefaults 提供了 Keychain 之外的另一种灵活选择 。 + +## 书 + +### 🌟 🐎 [Swift 5.0 中文版官方文档](https://swiftgg.gitbook.io/swift/swift-jiao-cheng) + +[@老峰](https://github.com/GesanTung):上个月 [Swift 5.0](https://mp.weixin.qq.com/s/-fLVdoTz3lT5Kxnea0-Avg) 正式发布了,这是 Swift 发展史一次重要的迭代。SwiftGG 翻译组最近也更新了 [Swift 5.0 中文版官方文档](https://swiftgg.gitbook.io/swift/swift-jiao-cheng),内容覆盖了 Swift 的基础语法结构以及各种高级特性,感兴趣的读者快来学习吧。 + +## 音视频 + +### 🌟 [ggtalk | 三组织揭秘:知识小集 x iOS 周报 x SwiftGG](https://talk.swift.gg/25) + +[@Parsifal](https://weibo.com/parsifalchang):知识小集 x iOS 周报 x SwiftGG 已经成为 iOS 圈子内为大家所熟知的三大社区组织。这一期 GGTalk 邀请到了我们三大组织的创始人 - 小集 [南峰子](https://weibo.com/touristdiary),SwiftGG 的 [梁杰](https://weibo.com/numbbbbb),以及我们周报团队的一代目 [卓同学](https://weibo.com/u/1926303682),一起谈谈我们这三大组织的故事。 + +周报团队从 18 年 1 月份第 1 期到现在第 63 期,已经一年多了,期间除了春节等特殊节假日,没有断过更新。但周报其实在这一年多的时间里,也有遇到过不少小问题。我从去年 10 月份左右从老卓手上接过周报的运营工作,至今正好是半年。基于老卓打下的基础,还有周报 30 位编辑的一起努力,我们依旧在每期稳定地输出高质量内容,并尝试了掘金沸点、话题讨论和GitHub Release 等全新的方式,公众号在 [@Damonwong](https://weibo.com/damonone)、[@邦Ben](http://weibo.com/linwenbang) 和 [@红纸](https://github.com/nianran) 地运营下,也逐渐走上正轨。至此我也能说上一句不负所托。 + +虽然正如梁杰所说的 “组织总有尽头”,但我还是希望周报在未来的日子里还会有三代目、四代目……感谢我们三大组织的所有参与者,以及我们所有的读者和听众。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#64-2019.04.22.md b/Reports/2019/#64-2019.04.22.md new file mode 100644 index 000000000..ea36af4ce --- /dev/null +++ b/Reports/2019/#64-2019.04.22.md @@ -0,0 +1,174 @@ +# 老司机 iOS 周报 #64 | 2019-04-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Designing Swift APIs](https://www.swiftbysundell.com/posts/designing-swift-apis) +[@zvving](https://twitter.com/zvving):如何写出可读性更高的代码?本文提供一些示例:参数标签可以帮助我们定义清晰易读的 API,嵌套类型能提供辅助的上下文关系,强类型为代码增添必要的仪式感,可扩展的 API 设计能同时满足便捷调用和丰富定制。 + +作者认为:『人人都是 API 设计师,当我们在设计非私有属性或方法时,我们都在设计 API』,你认为呢? + +## 文章 + +### 🌟 🐕 [Humble Asset Catalog](http://lingyuncxb.com/2019/04/14/HumbleAssetCatalog/) & [Assets Catalogs 与 I/O 优化](https://juejin.im/post/5cb74d786fb9a068773948fc) + +[@looping](https://github.com/looping):这两篇文章分别从各自的角度解释了在使用 Asset Catalogs 后,读取图片资源的速度变快的原因。 + +通过仔细阅读这两篇文章,我们能够更清晰地了解到: +- Asset Catalogs 和 car (Compiled Asset Catalogs) 文件的相关内容以及它们的作用 +- CoreUI 框架对图片资源加载过程的一些逻辑细节 + +从而明白使用 Asset Catalogs 后,在加载资源上速度更快的原因: +- Asset Catalogs 会对图片进行分类压缩存储,减少在目标机型上的资源文件大小,提高读取速度 +- 通过内存映射 (mmap),减少 I/O 操作,加速读取 car 文件内容 +- car 文件实际上是一种特殊的 BOM 文件,能够在加载图片时直接获取 rendition、renditionKey 以及 attribute 这些信息,不同于从文件夹 (bundle) 中读取,需要执行耗时的 `-[CUIMutableStrucetedThemeStore canGetRenditionWithKey:]` 操作来读取 rendition 和 renditionKey + +除了文章带给我们的结论,以及我们今后可以做的事情 (将常规资源文件都迁移到 xcassets 中) 之外,两位作者对问题的探寻和思考的方式也是非常值得学习借鉴的。 + +### 🌟 🐢 [Let’s write Swift code to intercept SSL Pinning HTTPS Requests](https://medium.com/@kennethpoon/lets-write-swift-code-to-intercept-ssl-pinning-https-requests-12446303cc9d) + +[@含笑饮砒霜](http://chinafish.news):现在几乎绝大部分的 iOS App 都使用了 HTTPS 请求,这极大提升了我们使用的安全性,但也不意味着这就是绝对安全的。 + +如果想检查 iOS 应用中的 HTTPS 请求,最常用的方法就是中间人(MITM)攻击,这种技术需要使用某台主机作为代理服务器,为客户端提供服务。为了保证攻击成功,客户端需要将代理服务器的证书安装到设备的全局信任存储区中。这样处理后,客户端就会将证书添加到白名单中,允许与代理服务器之间的 HTTPS 通信。 + +如果想保护应用免受 MITM 攻击影响,可以使用 SSL 校验证书绑定,此时受信任服务器的证书副本会打包到 iOS 应用中,还有一些附加代码可以确保应用只与使用特定证书的服务器通信。当 SSL 证书绑定处于激活状态时,应用不会将任何请求发送到不受信任的服务器上。 + +即便如此,也依然可以绕过 SSL 证书绑定。也就是在具体请求通过受保护的 HTTPS 通道发送之前,尝试拦截这个请求,这需要将代码植入到应用中,这里会用到代码注入的相关知识。 + +如果想更细致的了解如何拦截 HTTPS 请求,本文不可错过,绝对深度好文。 + +### 🌟 🐢 [干货 | 近万字长文详述携程大规模应用RN的工程化实践](https://mp.weixin.qq.com/s?__biz=MjM5MDI3MjA5MQ==&mid=2697268025&idx=1&sn=2d197c4cf7a338246abe0d3111e16002) + +[@Damonwong](https://github.com/Damonvvong): 如果谈起 React Native 在国内的业务落地,我可能第一个会想起的就是携程和赵辛贵老师。在上次听完赵兴贵老师分享的专题《携程无线持续交付平台工程实践》之后,意犹未尽,一直想更加深入了解一下携程在 RN 方面的技术探索。今天终于等到了携程的 RN 建设及他们设计的 CRN 的分享。这篇文章主要讲了下面几个事情: + +1. RN 在携程中的使用情况 +2. 携程基于 RN 优化的 CRN 框架的设计及使用 +3. CRN 做了哪些性能优化及实际效果比较 +4. 如何发布及运维 + +比较可惜的是没有看到这套系统相比较于原生开发,对业务增长,开发效率有哪些优化,所以比较期待后续能有这方面的分享。 + +最后,在文中提到将要开源的 CRN,也已经开源了,感兴趣的同学移步 [携程开源RN开发框架CRN](https://mp.weixin.qq.com/s/r6mB5Zq3jIf-K2YQi_AS8Q) 查看。 + +### 🐎 [JSON as configuration files: please don’t ](https://arp242.net/weblog/json_as_configuration_files-_please_dont) + +[@olddonkey](https://github.com/olddonkey):这是一篇 2016 年的老文章,但是其中的观点直到今天依然具有参考价值。 + +很多公司,很多团队使用 JSON 文件作为 App 的配置文件,不论是从远程下发,还是本地加载。 + +但是,在实际的项目中,用 JSON 来作为配置文件解决方案并不是个完美的方案,它存在的很多问题,这些问题会在实际中逐渐暴露。 + +文章作者围绕这他心中的几个缺点展开论述: + +1. 注释容易缺失。 +2. 可读性差。 +3. 过分严格的格式。 +4. 缺乏可编程性。 + +本文虽本意是针对 Web 开发提出观点,但是对 Mobile 开发也一样适用。 + +### 🐎 [Swift 5 Frozen enums](https://useyourloaf.com/blog/swift-5-frozen-enums) + +[@没故事的卓同学](https://weibo.com/1926303682/profile):在 Swift 5.0 中编译器针对使用 C style 枚举增加了一类提醒(即使 `switch` 已经覆盖了所有的 `case` 依然会有这样的警告): + +> Switch covers known cases, but 'XXXXX' may have additional unknown values,Handle unknown values using "@unknown default" + +提醒用户虽然现在你已经覆盖了所有的 `case`,但是未来这个枚举值有可能会增加新的值,我建议你还是处理一下这样的情况。 + +不过有的枚举值作者可以保证未来不会新增值,针对这个场景苹果增加了 `NS_CLOSED_ENUM`。如果枚举用 `NS_CLOSED_ENUM` 声明而不是 `NS_ENUM`,Swift 使用这个枚举编译器就不会产生建议使用 `@unknown default` 的警告。 + +### 🐎 [Asynchronous completion handlers with Result type](https://mecid.github.io/2019/04/17/asynchronous-completion-handlers-with-result-type/) + +[@邦Ben](https://github.com/linwenbang):Swift 5 中的标准库中加入了 Result Enum (success / failure),该文作者通过一个 URLSession 的请求例子,演示了使用 Result Enum 改造过程。使用 Enum 会让你的程序看上去更为简洁以及意思明确,详细请看文章内容。 + +### 🐕 [Improve your iOS team’s productivity by building features as frameworks](https://medium.com/flawless-app-stories/improve-your-ios-teams-productivity-by-building-features-as-frameworks-9d2a64cbcab5) + +[@老峰](https://github.com/GesanTung):如果你使用 Swift 开发过大一点的项目,那么你可能会有这样的感受,明明只是修改了一行代码,但却把整个 App 重新编译了一次,花费了很多时间。 + +本文作者针对这一痛点提出一种优化方案,通过把功能独立的业务代码改为 Framework 动态库,这样就不会每次重新编译整个 Project,从而减少编译时间,文中结合[示例](https://github.com/akfreas/SimpleCounter)代码给出了详细的优化过程。 + +尽管作者这一方案可以缩短编译时间,但如果 Framework 粒度太小,太多动态库反而会引起其他问题如增加 APP 启动时间、App 安装包变大;粒度太大,每次修改代码又会涉及多个 Framework ,编译时间优化又不会很明显,感兴趣的读者可以借鉴这一思路,做些有益的尝试。 + +### 🐕 [How to deploy a Swift backend on Amazon AWS](https://medium.com/@gianpispi/how-to-deploy-a-swift-backend-on-amazon-aws-ea9213518c43) + +[@小非86](https://weibo.com/xuyafei86):目前 Swift 的后端框架主要有 Perfect、Vapor、Kitura 和 Zewo 等。[往期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2329-2018.07.30.md) 推荐过使用 [Perfect](http://blog.yuusann.com/posts/article/18014) 开发后端的经验。本期推荐大家这篇使用 Kitura 开发后端的另一种尝试。 + +### 🐕 [Disjoint-set union in C++ and Swift](https://medium.com/flawless-app-stories/disjoint-set-union-data-structure-in-c-and-swift-a52703b01fcb) + +本文使用 C++ 与 Swift 实现了简单的并查集。大家可以借此对比同一个数据架构在不同语言的实现。 + +## 工具 + +### [Accio](https://github.com/JamitLabs/Accio) + +Accio 是一个基于 SwiftPM 和 Carthage 的包管理工具,其有以下特点: + +- 依赖预编译,也就是二进制化。 +- 自动集成到项目文件里,不像 Carthage 那样需要手动集成,这也解决了 Carthage 项目中最麻烦的部分。 +- 基于 SwiftPM 的依赖管理系统,只要第三方库使用 Package.swift 声明即可,不需要去跟 xcodeproj 和 Cartfile 打交道。 +- 基于 SwiftPM 的缓存管理,可以减少不必要的重复的下载和编译。 + +## 代码 + +### [Markdown Playgrounds for Swift](https://github.com/objcio/markdown-playgrounds) + +[@莲叔](https://weibo.com/aaaron7/):Markdown Playgrounds for Swift 是 objc.io 基于 Swift5 开发的一款 markdown 编辑器,最大的特性就是在你 markdown 中的 Swift 代码可以被执行。对比传统 markdown 编辑器,核心就是实现了 Swift 语法的高亮以及将 Swift 代码提取出来后用 Swift REPL 程序去执行并拿到返回的结果(Swift REPL 程序就是终端中的 Swift 命令)。整个工具是开源的,并且 objc.io 有一整套配套的教学视频(第一章是免费的)一步步的教你如何写一个类似的工具出来,从工具的属性可以看出从中可以学到各种高级的字符串处理(如符号高亮、代码提取等),算是非常不错的 Swift 学习材料。 + +## 音视频 + +### 🌟 [深入了解 Flutter 的高性能图形渲染](https://mp.weixin.qq.com/s/RNhdYtoQ8RQcjIXJReGZWA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):本视频为 Google Flutter 团队的软件工程师 Yuqian Li 在 2018 谷歌开发者大会做的演讲,内容包含 Flutter 介绍,Flutter 的工作原理(对比原生开发和其他跨平台框架),[Skia](https://skia.org/index_zh) 介绍,分析常见的性能瓶颈等,通过解决 Flutter 样例 App - Flutter Gallery 的性能问题([Issue #13736](https://github.com/flutter/flutter/issues/13736)),与大家分享如何通过 Flutter 工具定位、调试和解决性能问题。 + +视频主要讨论点: + +- Flutter 为何能够拥有媲美原生的高性能图形渲染 +- 如何通过 Skia 调试来分析 Flitter 应用 +- 关于 saveLayer 和 clipPath 的注意点 +- 使用 flutter screenshot 截取 skp 来单步调试绘图指令 + +### [ggtalk | 向架构进发](https://talk.swift.gg/26) + +[@J_Knight_](https://github.com/knightsj):本期 ggtalk 邀请的嘉宾是 Casa Taloyum,他所写的 iOS 架构系列文章在社区非常受欢迎。本期主要围绕“架构”这一主题,主要讨论了以下几点: + +- 做架构到底是在做什么 +- 架构师和工程价值观 +- 架构师和高级工程师的区别在哪里 +- 如何定义真正的问题 +- 如何看待新技术和旧技术 + +除此之外,Casa 还分享了对跨平台技术以及区块链的一些看法。 + +推荐阅读: + +- [《iOS 应用架构谈》](https://casatwy.com/iosying-yong-jia-gou-tan-kai-pian.html) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#65-2019.04.29.md b/Reports/2019/#65-2019.04.29.md new file mode 100644 index 000000000..cdc602b6c --- /dev/null +++ b/Reports/2019/#65-2019.04.29.md @@ -0,0 +1,149 @@ +# 老司机 iOS 周报 #65 | 2019-04-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [『基于多重替换方式的 iOS 代码混淆方案』- 勘误](https://www.v2ex.com/t/557888#reply88) + +在 65 期,我们收录了『基于多重替换方式的 iOS 代码混淆方案』一文,后经读者反馈,我们发现这篇文章的内容存在严重的抄袭迹象。文中涉及到的混淆方案抄袭自 [@kaich](https://github.com/kaich) 的 [codeobscure](https://github.com/kaich/codeobscure)。目前该文章的在知乎和掘金上已经被删除,周报也在第一时间删掉了有争议的推荐内容。对此次事件,我们对 [@kaich](https://github.com/kaich) 和广大读者表示抱歉,同时也感谢各位读者的监督和反馈。 + +另外,在收到反馈之后,我们小挖了一下那篇抄袭文的作者,发现此人是惯犯,洗稿专业户。他的 GitHub([RobinChao](https://github.com/RobinChao))和博客([Technical.io](https://robinchao.github.io/)),真的是仿品聚集地。 + + +### [WWDC 2019 for developers: Siri, Marzipan and AR improvements, more](https://9to5mac.com/2019/04/22/wwdc-developers-siri-marzipan/) + +距离今年的 WWDC 已经只有将近一个月的时间了,众所周知,WWDC 向来能带给行业和开发者带来全新的围绕用户体验新技术,本篇文章给我们介绍了本次 WWDC 会发布的新的 API 以及特性,主要有: + +1. 新的 Siri intents +2. Marzipan 的优化(Marzipan 就是让 macOS App 也能用上 UIKit 的技术) +3. Swift-only 的 AR 框架 +4. 震动引擎,NFC 在以前的基础上提供了更多的功能 +5. CoreML 支持动态训练以及音频的分析 + + +## 新手推荐 + +### [How to make Auto Layout more convenient in iOS](https://medium.com/flawless-app-stories/how-to-make-auto-layout-more-convenient-in-ios-df3b42fed37f) + +[@邦Ben](https://weibo.com/linwenbang):该文从 Frame 布局,到 Autoresizing 讲到了 AutoLayout,并且介绍了如何简单的进行封装 AutoLayout,以提高易用性。毕竟众所周知,原生的 AutoLayout 异常难用,在 OC 下,Masonry 的出现简直是拯救了世界。在 Swift 下,各种布局系统百花齐放。同时眼光不妨放到 React Native 和 Flutter 上,声明式布局非常值得学习。 + +## 文章 + +### 🐕 [RxSwift & MVVM - How to use RxTests to test your ViewModel](https://benoitpasquier.com/how-to-use-rxtests-to-test-mvvm/) + +[@Damonwong](https://github.com/Damonvvong):之前我问过好多人这样一个问题,你觉得 Rx 框架到底解决了一个什么样的问题?虽然答案都不太一样,但是引入 Rx 框架,便于封装 ViewModel,然后编写单元测试提高应用稳定性是大部分人比较认可的一点。 + +所以推荐大家阅读一下作者写了三篇关于 RxSwift & MVVM 的文章: + +- 第一篇是 [How to integrate RxSwift in your MVVM architecture](https://benoitpasquier.com/integrate-rxswift-in-mvvm/):主要介绍了如何使用 RxSwift 编写 MVVM 结构的代码 +- 第二篇是 [RxSwift & MVVM - An alternative structure for your ViewModel](https://benoitpasquier.com/rxswift-mvvm-alternative-structure-for-viewmodel/):主要描述了一个 ViewModel 最基本的结构要怎么设计,我个人特别喜欢他在文中描述的 Intput 和 Output 的设计。这个设计也是为做单元测试做了一个很好的铺垫。 +- 最后一是 [RxSwift & MVVM - How to use RxTests to test your ViewModel](https://benoitpasquier.com/how-to-use-rxtests-to-test-mvvm/):讲的是如何利用前面的 VM 设计 结合 RxTest 编写单元测试。 + +### 🐎 [Conditional Compilation Part 1](https://davedelong.com/blog/2018/07/25/conditional-compilation-in-swift-part-1/) [Part 2](https://davedelong.com/blog/2018/07/25/conditional-compilation-in-swift-part-2/) [Part 3](https://davedelong.com/blog/2019/04/09/conditional-compilation-part-3/) + +[@四娘](kemchenj.github.io):之前我们在 [29 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2329-2018.07.30.md#-conditional-compilation-in-swift-part-1)里介绍过这篇文章的第一篇: + +> 本文讲述了 Swift 中方的条件编译。当然首先是传统的方法 arch(),作者对各个参数都做了详细的介绍。不过随着 Swift 4.1 的到来,你更应该了解一下方便好用的 targetEnvironment()(SE-0190)。其次是使用配置文件(.xcconfig),这个方式其实被 CocoaPods 大量使用。作者也用示例做出了详细的介绍,同学们不妨也在自己的工程中试一试。 + +后面陆续写了 Part 2 和 Part 3,主要是介绍了跨平台代码库编译选项的一些控制方式,对这方面有疑虑的同学可以看一看 + +### 🐕 [Flutter 实时视频渲染](https://zhuanlan.zhihu.com/p/62821195) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 如火如荼的火了一段时间了,但鲜少有关于音视频方面的文章,本文是声网 Agora 的高级架构师张乾泽在 RTC Dev Meetup 上的分享,主要介绍 Agora 在 Flutter 实时音视频开发方面的实践经验,整个分享分三部分: + +- 基于 Texture Widget 实现思路分析 +- 基于 PlatformView 实现思路分析 +- 两种方案的性能对比 + +### 🐎 [对职业发展的一些想法](https://limboy.me/essay/2019/04/15/career.html) + +职业发展是每一个职场同学都会去思考的很重要的问题,我们也常常说有时候选择比努力更重要,除了个别的运气成分外,我们能过左右的就是如何去做选择。本文是 limboy 对职业发展的一些看法,从**稀缺度**和**剩余市场空间**这样两个角度去谈,结合生动的坐标图,让人一看就很明了。 + +### 🐕 [How to run a single test in Xcode](http://www.mokacoding.com/blog/running-one-test-in-xcode/) + +[@老峰](https://github.com/GesanTung):本文作者归纳总结了在 Xcode 中运行单元测试的一些小 tips: + +- 通过 gutter (左边列) +- 通过 shortcut (快捷键 ^ ⌥ ⌘ U) +- 通过 scheme +- 通过 terminal +- 通过开源测试库如:[Quick](https://github.com/Quick/Quick) + +### 🐕 [iOS 中的 Promise](https://juejin.im/post/5cb6d1215188253fdd641c15) + +[@四娘](kemchenj.github.io):当你需要连续地执行多个异步过程时,总会无可避免的出现地狱回调,Promise 是一个不错的解决方案,这篇文章前半部分主要讲了 Promise 具体的实现,后面介绍了一些实用的 API,感兴趣的朋友可以看一下。 + +### 🐎 [Preventing Infinite Loops in Swift Property Observers](https://theswiftness.com/preventing-infinite-loops-in-swift-property-observers/) + +[@张嘉夫](https://github.com/josephchang10):Swift 的[属性观察器](https://docs.swift.org/swift-book/LanguageGuide/Properties.html#ID262) (即 `willSet` 和 `didSet` hook 函数)非常实用,可以用于验证、通知和调用 log 方法等等,适用于结构体、类和枚举。但在使用强大的属性观察器时,要避免搬起石头砸了自己的脚,这篇文章会为你介绍如何避免在 Swift 属性观察器中创建无限循环。 + +### 🐎 [如何画出一张合格的技术架构图?](https://mp.weixin.qq.com/s/1hPZacqJuUeElyHiMxa9rw) + +画架构图是架构师的第一门课,本文介绍了架构图的各种画法和具体案例,希望让大家在架构图方面的理念和经验得到提升 + +架构图分类 +1. 场景视图:一般就是我们理解的用例图 +2. 逻辑视图:一般是组件图和类图 +3. 物理视图:一般是部署图 +4. 处理流程视图:一般是时序图和流程图 +5. 开发视图:一般是包图 + +好的架构图:好的架构图是不需要解释的,它应该是自描述的,并且要具备一致性和足够的准确性,能够与代码相呼应 + +最后推荐 [C4官网](https://c4model.com/),有各种画图的模板可以参考 + +## 工具 + +### [MTHawkeye](https://github.com/meitu/MTHawkeye) + +[@looping](https://github.com/looping):MTHawkeye 是美图 iOS 团队开源的调试和性能优化辅助工具集,旨在帮助 iOS 开发者提升开发效率、优化性能体验。目前已经包含对内存、CPU、电量、网络等的使用监控。由于该工具模块采用了可扩展的插件式设计,所以我们也可以根据自己的需求定制合适的开发调试插件。详细介绍可以参考这篇文章 [MTHawkeye:美图开源的iOS调试辅助、性能优化工具集](https://mp.weixin.qq.com/s/J0tgozOFpm7bBrH8RxOp5Q)。 + +## 代码 + +### [Swiftshield](https://github.com/rockbruno/swiftshield) + +[@oldonkey](https://github.com/olddonkey):这是一套代码混淆工具,作用是加密工程的函数和类名,来免疫一些逆向工程。加密的原理很简单,就是把所有函数和类名都替换成一段新的字符串。此工具可以加密,也可以解密,以方便对 Log 进行 Debug。 + +## 开源库 + +### [IkigaJSON](https://github.com/Ikiga/IkigaJSON) + +IkigaJSON 是一个非常快的 JSON 解析器,它的解析速度大概是是 Foundation 中对应组件的 4 倍。它也提供了 SwiftNIO 的支持(同时也依赖 SwiftNIO),你可以直接从 `ByteBuffer` 对象初始化需要的 JSON 。 + +## 音视频 + +### [ggtalk | 聊聊我们的编程启蒙经历](https://talk.swift.gg/27) + +[@J_Knight_](https://github.com/knightsj):本期 ggtalk 邀请的嘉宾是李亮老师和莲叔。围绕本期的主题,二位嘉宾和主持人梁杰都分享了各自的编程启蒙经历。 + +此外,还分享了对“中年危机”的看法以及关于小孩应该如何入门编程的讨论。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#66-2019.05.06.md b/Reports/2019/#66-2019.05.06.md new file mode 100644 index 000000000..4eba562cd --- /dev/null +++ b/Reports/2019/#66-2019.05.06.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #66 | 2019-05-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### [Flutter 豆瓣客户端](https://github.com/kaina404/FlutterDouBan) + +[@邦Ben](https://weibo.com/linwenbang):该开源库,对豆瓣客户端有一定的还原度,不过未实现部分也挺多,毕竟仅仅只是学习用途,暂时里面并没有用到更为复杂的 Rx 或者 Redux ,因此十分适合新手先上路。在学习 Flutter 的同学可以一看。 + +PS:项目需要还原一下 Podfile 为初始状态方可运行( BUG ) + +## 文章 + +### 🌟 🐕 [移动开发这十年](https://mp.weixin.qq.com/s/vcbHMtaJEkZhSgiRBST1YA) +[@莲叔](https://weibo.com/aaaron7/): 移动开发从诞生之日起,到现在已经过了十年时间,这篇文章是 InfoQ 邀请美团的藏成威老师回顾了移动开发技术的十年演变。笔者作为移动开发年限算比较久的老兵,有幸经历了其中大部分的浪潮。其中绝大多数技术升级都是围绕跨平台、动态性,归根到底技术体系的升级是围绕业务形态来决定的。文章比较全面的剖析了从 H5 hybrid,到 RN/Weex, 到 Flutter/小程序等不同阶段的跨平台技术。文章本身没有太多技术点,但非常适合拿来作为思考技术和业务是如何相互影响的素材,在阅读文章的时候要多问 Why,相信会有不少的收获。 + +### 🌟 🐕 🚧 [Reducing FOOMs in the Facebook iOS app](https://code.fb.com/ios/reducing-fooms-in-the-facebook-ios-app/) + +[@zvving](https://twitter.com/zvving):Facebook 2015 年的一篇经典文章,提出优化 OOM 问题的一些思路: + +- 通过列举所有 App 被终止的已知路径区分是 FOOM 还是 BOOM +- 分析内存使用状况,从 UIWebView 迁移至 WKWebView,降低内存占用 +- 避免内存重复申请与释放,减少多达 30% OOM Crashes +- 完善基础设施:跟踪 App 中每个类的实例计数和内存占用 + +相关阅读:[iOS微信内存监控](https://mp.weixin.qq.com/s/r0Q7um7P1p2gIb0aHldyNw) + +### 🌟 🐕 [iOS App 安全加固方案调研](https://mp.weixin.qq.com/s?__biz=MzI2NzI4MTEwNA==&mid=2247485642&idx=1&sn=dce8e7581d94c8d8d2b79366f6223161&chksm=ea807f75ddf7f663daf6776b0f5a98aeea2e735e08c3a5268fd00f45b5a893d0e8dbac03b0f8&mpshare=1&scene=23&srcid=%23rd) + +[@红纸](https://github.com/nianran):iOS 系统向来以安全著称,但是在越狱面前,我们的 App 接近于裸奔的状态。在本文中,作者整理了如下内容: + +1. 现有市面上已有的加固方案,以图片的方式,展示了各家公司的核心功能点。 +2. 对现有的加固方案,进行了一次规整,总体方案梳理 + 1. 数据保护:细分中有网络数据、IPA 资源数据、沙盒数据、Keychain 数据 + 2. 混淆保护:细分中有符号混淆、字符串混淆、指令混淆 + 3. 反调试保护:细分方案有 ptrace 和 sysctl 两种防护策略,(有兴趣可以参考 [关于反调试&反反调试那些事](http://bbs.iosre.com/t/topic/8179)) + 4. 异常检测:动态监控 App 的异常信息,例如被注入、篡改代码、重签名等攻击行为 + +世界上没有绝对的安全可言,想要了解更多关于安全方面的知识,推荐沙老师的书《iOS应用逆向工程》,以及 [念茜的安全攻防系列](https://blog.csdn.net/yiyaaixuexi)。 + +### 🌟 🐕 🚧 [为什么需要 Reactive Programming?](https://medium.com/@jasonyuh/%E5%85%B3%E4%BA%8Ereactive-programming-24a2cf28fffa) + +[@Jason](https://github.com/yxztj):相信有不少同学都或多或少尝试过 ReactiveCocoa 或者 RxSwift,享受到了链式调用的快乐,但是对于 Reactive 思想的本质,可能不一定每个人都有深入的思考过。本文抛开 Rx 库本身,也没有再重复介绍如何使用 Rx,而是从一些日常开发过程中的问题出发,探讨 Reactive 思想的由来,它所解决的关于数据流、事件传播和观察者模式的一系列问题,以及作者在几年的使用中所领悟的一些更深层次的思考。 + +### 🐕 [Architecturing an app with functional reactive programming](https://www.welcometothejungle.co/fr/articles/functional-reactive-programming-architecture) + +[@anotheren](https://github.com/anotheren):本文从常见的“回调地狱出发”,讲述了为什么应该使用响应式框架来进行编程。并以 ReactiveX 框架为例,同步展示了在 Swift/Kotlin 中这类框架的思想和应用,推荐阅读。 + +### 🚧 🐕 [Optional, throws, Result, and async/await](https://nshipster.com/optional-throws-result-async-await/) + +[@xiaofei86](https://weibo.com/xuyafei86):在 Swift 5 之前,我们通过 optional 和 throws 来处理错误。在 Swift 5 中,虽然没有我们期盼的 async/await 特性,但在标准库中增加了 Result 类型。本文对这些 Swift 错误处理的方式进行对比,让你更好的了解 Swift 错误处理的进化过程。 + +## 工具 + +### [Xcode10 New Build System And CocoaPods](http://yuqiangcoder.com/2018/11/13/Xcode10-new-build-system-and-CocoaPods.html) + +[@享耳先森](https://github.com/iblacksun):Xcode 10 发布之后,你可能发现修改了 CocoaPods 依赖库的源码之后立即编译并不生效,必须 clean 整个项目重新编译,这其实是 Xcode 10 默认采用 `New Build System` 导致的,本文介绍了两种解决方案。 + +### [Marzipanify](https://github.com/steventroughtonsmith/marzipanify) + +[@老峰](https://github.com/GesanTung):在 WWDC 2018 苹果分享了名为 Sneak Peak 的工具可以将 iOS APP 移植到 Mac 中,并宣布 2019 对第三方开发者开放,Marzipanify 是 [Steven Troughton-Smith](https://www.highcaffeinecontent.com/blog/20190301-Bringing-iOS-Apps-to-macOS-Using-Marzipanify) 自己开发的一个小工具让开发者提前体验 iOS APP to Mac APP,感兴趣的读者快来尝试吧。 + +## 代码 + +### [手把手教你在 Flutter 项目优雅的使用 ORM 数据库](https://juejin.im/post/5c45c72d6fb9a049d81c2b4c) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 现在开发上最大的槽点可能就是数据库使用了,Flutter 现在只提供了 sqllite 插件,手写 sql 代码,建表、建索引、transation、db 线程控制等等繁琐的事情必然接踵而至,这种数据库使用方式是最低效的了,又倒退回去裸写 sql,这对大部分团队都是重大的成本。 + +本文将详细介绍一种在 Flutter 项目中优雅的使用 ORM 数据库的方法,文中使用的 ORM 框架是包含在一个 Flutter 插件 [flutter_luakit_plugin](https://pub.dartlang.org/packages/flutter_luakit_plugin) (如何使用可参考[介绍文章](https://juejin.im/post/5c34597651882523d3200c98))中的其中一个功能,本文只详细介绍这套 ORM 框架的使用和实现原理。并且给出了一个详细的 [demo](https://github.com/williamwen1986/flutter_luakit_demo) 。 + +## 开源库 + +### [NSFWDetector](https://github.com/lovoo/NSFWDetector?utm_source=mybridge&utm_medium=blog&utm_campaign=read_more) + +[@张嘉夫](https://github.com/josephchang10):CoreML NSFW(色情)内容检测器。NSFWDetector 是一个小型(17 kB)CoreML 模型,由 CreateML 训练,用于检测图片中的裸体。 + +### [InAppViewDebugger](https://github.com/indragiek/InAppViewDebugger) + +[@红纸](https://github.com/nianran):UIView Debugger,类似于 Reveal 和 Xcode 中集成的组件,其比较方便的是能够在 APP 内就可以直观的去查看,但目前它只是处于 1.0 版本,功能仅限于查看视图层级,期待其能拥有更加完善的功能。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#67-2019.05.13.md b/Reports/2019/#67-2019.05.13.md new file mode 100644 index 000000000..077881252 --- /dev/null +++ b/Reports/2019/#67-2019.05.13.md @@ -0,0 +1,154 @@ +# 老司机 iOS 周报 #67 | 2019-05-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 +### [19 年老司机周报定制 T 恤上架啦](https://item.taobao.com/item.htm?id=592379266013) + +只订做一批,错过不再有。![只要钱到位](https://user-gold-cdn.xitu.io/2019/5/9/16a9a4d3e9dca8ff?w=1000&h=668&f=jpeg&s=88292) + +### 🚧 [Google I/O for Flutter](https://developers.googleblog.com/2019/05/Flutter-io19.html) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):伴随着 Google I/O 大会召开,Flutter 这几天又刷屏一波,一个好消息和一个坏消息: + +- [好消息 | 全平台支持](https://developers.googleblog.com/2019/05/Flutter-io19.html): Flutter 1.5 稳定版发布,并为我们带来了 Flutter for web - Hummingbird 以及可供嵌入式设备使用的 Flutter for Embedded。自此,也正如官方宣称的 Flutter 已经支持全平台。 +- [坏消息 | 暂时无热更新](https://github.com/flutter/flutter/issues/14330): Flutter 官方开发团队宣布暂时不会开发热更新(Code Push)功能,原因如下: + - Code Push 在 Android 和 iOS 平台上各有不同的限制 + - 出于安全方面的考虑,可能会被滥用 + +### 🐕 [MongoDB 宣布收购 Realm]() + +[@xiaofei86](https://weibo.com/xuyafei86):MangoDB 宣布3900万美元的价格收购 Realm ,通过收购弥补了 MongoDB Mobile 在移动端的不足。 Realm 作为一款成熟的移动端数据库框架有着数十万的用户,并且在github上有着1w + 的star。 + +## 文章 + +### 🐕 [泛型语法改进第一弹 —— Opaque Result Types](https://kemchenj.github.io/2019-05-05/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.1 将包含针对范型的一个重要改进 —— `Opaque Result Types`:简单来讲,用 `some` 修饰的方法返回值或属性,其具体类型在编译时就能确定,并且是由被调用方去决定。 + +### 🐕 [What should I learn if I want to contribute to the Swift compiler?](https://forums.swift.org/t/what-should-i-learn-if-i-want-to-contribute-to-the-swift-compiler/18144) + +[@莲叔](https://weibo.com/aaaron7/):Compiler 相关的工作一直处于鄙视链的顶端,这篇帖子的楼主在 2018 年 11 月的时候给自己定了一个看起来有点梦幻的目标:2019 年末能够参与到 Swift compiler 的开源工作中去(即便是楼主自己也认为很梦幻)。但有爱的 Swift 社区告诉楼主这并不梦幻,可以实现。首先 codafi 提出事实上在 Swift 编译器源码中的 C++ 并不是 Raw C++,而更多是 LLVM C++(LLVM C++并不是一门语言,而是 LLVM 工程规定的一系列 API和规范),是复杂,但没有那么复杂, 所以从 LLVM 代码规范是最佳的入门材料,不用被 C++ 吓到。然后 Aljandro 甚至给出了编译器各个环节如 Lexer、Parser、Sema 到 SIL,LLVM IR 分别对应在哪些编译器的源文件中实现,简直不要太良心。除此之外,还分享了自己很多在 compiler 相关的大型项目中如何挖到合适的点切入的经验。 + +整个帖子有不少优质的回复,都是既具备专业性,又照顾了对 compiler 技术陌生的新人,不容错过。 + +### 🐕 [大侦探福老师——幽灵Crash谜踪案](https://mp.weixin.qq.com/s/lmqeS6f3DSNsOJGywGsSsg) + +[@邦Ben](https://weibo.com/linwenbang):该文闲鱼技术小编描述了出现 BUG 到分析 BUG,到如何最终艰难地找到 BUG 的过程,非常值得一看。最后也得出了结论:Flutter 在用户启动辅助功能(如阅读屏幕)的情况下会出现 Crash(新版本已经 fix,同学们都升级一下。)例外这里面还提及到两个有意思的点,线上 Zombie 野指针监控和 UI 自动化重现。另外有一个很重要的点:保持和用户的良好沟通,最后直接上门现场 DEBUG,没准还可以帮妹子顺手修修电脑 >_<。 + +参考链接: +- [Let's Build NSZombie](https://www.mikeash.com/pyblog/friday-qa-2014-11-07-lets-build-nszombie.html) +- [The Inner Life of Zombies](https://www.mikeash.com/pyblog/friday-qa-2011-05-20-the-inner-life-of-zombies.html) + +### 🐕 [LLVM 编译器中的内置 (built-in) 函数](https://juejin.im/post/5cce3955e51d453b440236ce) + +[@looping](https://github.com/looping):以 `__builtin_` 开头的函数声明或者调用其实是一些编译器内置的函数或者编译优化处理的开关,其作用类似于宏,只不过这些内置函数并不是真实的源代码,而是一段指令块,起到编译时的内联功能。本文就介绍了八个特殊的内置函数及其用法,熟练使用这些内置函数可以提升我们程序的运行性能,也可以扩展一些编程的模式技巧。 + +### 🐕 [What's new in RxSwift 5](https://medium.com/@freak4pc/whats-new-in-rxswift-5-f7a5c8ee48e7) + +[@olddonkey](https://github.com/olddonkey):RxSwift 5 终于和大家见面了。RxSwift 5 带来了一些不算小的变化,比如有拆分 Relay 出 RxCocoa,成为独立框架,转用 DispatchTimeInterval 以对更小时间间隔的更好支持,舍弃 Variable,新增 do(afterNext:) 以及允许绑定多个观察者等变化。对于现有的 RxSwift 开发者来说,不算是根本上的变化,但是需要在一些使用习惯和语法上进行相对应的改变。 + +如果对英文版不是很有信心的话,也可以看看小集团队发布的[中文翻译版](https://mp.weixin.qq.com/s/ag7z-w3J52sTxhjzibvnww)。 + +### 🐢 [深入iOS系统底层之映像文件操作 API 介绍](https://juejin.im/post/5c6a976ae51d451eb711a90f) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):所谓的映像可以理解为将一个程序文件的内容加载到进程虚拟内存中的内容,也就是说进程的映像就是程序磁盘文件在内存中的一个副本。程序文件和映像之间的关系就如程序和进程之间的关系是一样的。那关于进程映像操作的 API 有哪些呢: + +- 获取当前进程中加载的映像的数量 +- 获取某个映像的 Mach-O 头部信息结构体指针 +- 获取进程中某个映像的名称 +- 获取某个库链接时和运行时的版本号 +- 注册当前线程结束时的回调函数 +- ... + +相关操作的 API 有很多,在 `` 都有声明。通过相关 API 的使用,可以检测程序中某个类的某个方法是否被非法 HOOK 了。可执行程序中定义的类的实例方法的实现地址总是在可执行程序映像的地址区间范围内,即使是这个方法被可执行程序中的其他方法 HOOK 了,这个 HOOK 的方法地址仍然是在可执行程序的映像地址区间范围内,我们仍然认为这是一个合法的 HOOK 。如果这个实例方法被恶意攻击者通过动态库注入并以方法交换的形式来 HOOK 原有方法的实现时,因为HOOK 的方法地址是在恶意注入的动态库映像的地址区间范围内,所以我们就可以通过检测这个类的实例方法的实现地址是否在可执行程序的映像的地址区间范围内来判断这个方法是否被恶意 HOOK 了。 + +### 🐕 [百度App iOS工程化实践: EasyBox破冰之旅](https://mp.weixin.qq.com/s/Oa52PvsHw8wS-OvYb3ArZg) + +[@xiaofei86](https://weibo.com/xuyafei86):EasyBox 是手百开发的一套包管理工具集。致力于为超级 App 量身打造一套现代、高效、优雅的研发工具链。EasyBox 主体由工程组装器(Installer)、多仓库管理工具(MGit)、二进制管理工具(LFS)三部分构成,分别负责工作区的构建(组件依赖分析、工程的生成与组合)、源码仓库的管理以及二进制的管理。本文对 EasyBox 的设计进行了讲解,从中可以学到一些软件架构的思想和工程管理的经验。但并没有开放源代码。 + +### 🐢 [Sharing code between iOS and Android using J2ObjC](https://medium.com/ubique-innovation/sharing-code-between-ios-and-android-using-j2objc-ecd6c4c247) + +[@tom](https://xiaozhuanlan.com/u/6682065345):这是关于跨平台开发的系列文章,之前作者还有讨论[采用 C++ 来进行 iOS 和 Android 的跨平台开发](https://medium.com/ubique-innovation/sharing-code-between-ios-and-android-using-c-d5f6e361aa98?sk=308b1a500b536b94437282955ac56d2b)。关于跨平台的好处就不多说了,这篇文章主要介绍了使用 [J2ObjC](https://developers.google.com/j2objc/) 来进行跨平台开发。J2ObjC 是一个代码转换器,能够直接将 Java 代码翻译成 Objective-C 代码,从而达到跨平台开发的目的。注意的是,正如大部分的跨平台开发框架一样,一般跨平台代码只适合工作在 Model 层,在 UI 层的代码几乎无法做到一份代码共享多个平台(自带虚拟机或者语言翻译机的除外,如 RN、Flutter 等)。最后总结一下 J2ObjC 的优缺点 + +优点 +1. 代码共享 +2. 可以只用 Java 进行开发(Java 开发人员容易招,iOS 同学嘛) +3. 可以在 iOS 工程中调试 Java 代码 + +缺点 +1. 代码翻译总是会出错的 +2. 如果需要 Swift 混编的话是个灾难 +3. 翻译出来代码不是最优形式,会增加包体积大小 +4. 翻译的范围有限制,仅限用可支持的 JRE 类 +5. 如果依赖了一些第三方库,而又与 J2ObjC 不兼容的话也是一个大问题 + +### 🐢 [100-Days-Of-iOS-DataStructure-Algorithm](https://github.com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm) + +[@kyo](https://github.com/KyoLi):算法应该是面试中大多数公司都会考察的点,虽然在日常的业务开发中可能并不常使用,但如果做一些深入的比较复杂的项目,算法就是必不可少了。可以说,如果在技术上想更深入的了解,算法和数据结构就是必须要熟悉的。在众多相关的文章中,以 C++,JAVA 等语言进行讲解的很多,很少以 OC 来讲的文章,而这个系列文章就采用 OC 为主语言,这对其他语言不太了解的同学来讲是个福音。 + +### 🐕 [搞事情之 Vapor 初探](https://juejin.im/post/5ccc7d3fe51d453afc760317) + +[@老峰](https://github.com/GesanTung):从 Swift 开源并支持 Linux 运行之后,Swift Server Side 趋热,先后出现了 Perfect、Vapor、Kitura 和 Zewo 几个框架,其中 Vapor 目前在 Github star 数最多。 + +本文是作者对 Vapor 的探索实践,分享了在 Vapor 中 MySQL 的基础使用;在 Vapor 中的用户鉴权;以及自己实践中的心得体会。 + +相关阅读: +[Swift HTTP Server 开发体验](http://posts.enumsblog.com/posts/18014) +[Docker ❤️ Swift & Vapor](https://theswiftdev.com/2018/11/15/docker-loves-swift-and-vapor/) + +## 工具 + +### [SwiftKit](https://github.com/SvenTiigi/SwiftKit) + +[@张嘉夫](https://github.com/josephchang10):用命令行快速生成跨平台 Swift Framework,支持 iOS、tvOS、watchOS 和 macOS,兼容 CocoaPods、Carthage 和 Swift Package Manage,整合了 Fastlane 以便测试和发布,采用 Jazzy 来生成文档。此外还包括 README.md 模板、格式工具 SwiftLint、持续集成服务配置模板(Travis、GitLab)以及自动判断库名在 CocoaPods 上是否已被占用等等。 + +### [Messier - 简单易用的Objective-C方法跟踪工具](https://everettjf.github.io/2019/05/06/messier/#%E7%AC%AC%E4%B8%80%E6%AD%A5%E5%AE%89%E8%A3%85macos%E5%AE%A2%E6%88%B7%E7%AB%AF) + +[@红纸](https://github.com/nianran):Messier 可以用来跟踪 iOS 应用的 Objective-C 方法调用。在越狱设备上可以跟踪任意应用,在非越狱设备上也可用于跟踪调试中的应用或使用 Monkey Dev 植入框架的项目,仅支持 arm64 的真机。据文中作者介绍,其原理基于 Hook objc_msgSend 来实现函数记录,存储本地,使用自研工具导出文件后,使用 [catapult](https://github.com/catapult-project/catapult) 进行展示。另外调试过程中或多或少影响到了调试性能,适合查问题的时候进行植入。 + +## 代码 + +### [MaLiang - iOS 涂鸦库](https://github.com/Harley-xk/MaLiang) + +[@anotheren](https://anotheren.com/):MaLiang 是 iOS 平台基于 Metal 的涂鸦绘图框架,完全使用 Swift 实现。 + +目前支持的功能: +* 笔迹通过贝塞尔曲线进行平滑处理 +* 支持添加自定义贴图 +* 纹理和贴图支持旋转 +* 内置一个荧光笔特效的实现 +* 可以根据压力自动调整笔迹,支持 3D Touch +* 支持撤销和重做 +* 支持滚动和缩放画布 +* 导出绘制内容为图片 +* 将绘制内容保存为矢量文档和从文档恢复数据 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#68-2019.05.20.md b/Reports/2019/#68-2019.05.20.md new file mode 100644 index 000000000..77c0bbb72 --- /dev/null +++ b/Reports/2019/#68-2019.05.20.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #68 | 2019-05-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [SE-0260 Library Evolution for Stable ABIs](https://github.com/apple/swift-evolution/blob/master/proposals/0260-library-evolution.md) + +[四娘](kemchenj.github.io):目前 ABI 稳定的工作正在逐步收尾,Swift 5.0 达成的是标准库的 ABI 稳定。但这种 Module ABI 稳定的机制还没有提供给外部用户使用。 + +当前标准库是通过一些私有的注解和编译选项来使用这一套机制的,所以这次提案讨论的内容就是如何将它作为一个功能提供给我们使用,里面涉及的主要是一些语法和编译选项的设计。 + +需要跟 SDK 打交道的同学可以点击查看更具体的内容。 + +### [(SE-0253)Callable values of user-defined nominal types](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md) + +Swift Evolution 最近通过的新的提案,([SE-0253](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md))为 Swift 带来了静态调用的 `Callable`。作为对比你可以看看在 Swift5.0 中就引入的([SE-0216](https://github.com/apple/swift-evolution/blob/master/proposals/0216-dynamic-callable.md))`@dynamicCallable`。或者,你也可以对比一下 Python 中的 `__call__`。 + +## 新手推荐 + +### 🌟 [FlutterDartTips](https://ibhavikmakwana.github.io/FlutterDartTips/) + +[@olddonkey](https://github.com/olddonkey):对于很多刚接触 Flutter 的同学来说,有一些 Dart 和 Flutter 编写中的一些小技巧可能并没有特别的熟悉。这些小知识点很多时候能让开发的时候,减少掉很多不必要的负担。 + +有一位来自印度的同学,就建了这样的一个项目,专门分享这些 Dart 和 Flutter 的小知识点。即便你已经对此很熟悉了,也不妨可以看看是不是有什么遗漏的点。 + +## 文章 + +### 🌟 🐎 [CocoaPods 1.7 新特性](https://kangzubin.com/cocoapods-1.7/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 CocoaPods 1.7.0 的几个新特性: + +1. 支持多个 Swift 版本:可以在 podspec 配置文件中通过 swift_versions 字段指定其支持的 Swift 版本。也可以可通过 supports_swift_versions 字段为 Podfile 文件中集成的每个 target 指定所需的 Swift 版本。 +2. 引入 App Specs:引入了 app apecs,允许 pod 库作者在其 podspec 中描述一个应用程序。 +3. 生成多个 Xcodeproj:可以将每个 pod 库集成为其自己单独的 Xcode project,并嵌套在顶级 Pods.xcodeproj 下,这样显著提高大型 CocoaPods 项目的性能。 +4. 增量安装:支持了仅重新生成自上次 install 以来发生更改的 pod 库,而不是像之前那样重新生成整个 workspace。 +5. 新增 scheme 字段:可以为 specs,test specs 以及 app specs 自定义 scheme 的生成。 +6. 支持 .xcfilelist:script phases 支持使用 .xcfilelist 来指定脚本的输入和输出路径。 +7. 为 Master Specs Repo 提供 CDN 支持:启动了对 CDN 的支持,以避免在本地机器或 CI 系统上克隆 master specs repo,让使用 CocoaPods 更加方便。 +8. 为 Windows 系统提供支持:添加了对 Windows 系统的支持。 + +### 🌟 🐎 [Image Resizing Techniques](https://nshipster.com/image-resizing/) + +[@邦Ben](https://weibo.com/linwenbang):Mattt 大佬说:大量的调整图片的代码都宣称自己是最正确的。因此,Mattt 给出 5 种不同的技巧以供选择。什么情况我们需要缩小调整图片尺寸?当图片尺寸远大于需求的时候,缩小可以节省内存提高性能。 + +- Drawing to a UIGraphicsImageRenderer (UIKit) +- Drawing to a Core Graphics Context (Core Graphics) +- Creating a Thumbnail with Image I/O (Image I/O) +- Lanczos Resampling with Core Image (Core Image) +- Image Scaling with vImage (vImage) + +最后通过性能对比,前三种方法性能较好。如非必要,不使用后两种。 +各个方法的示例代码,请阅读原文。 + +### 🚧 🐎 [A Deep Dive Into Hero Widgets in Flutter](https://medium.com/flutter-community/a-deep-dive-into-hero-widgets-in-flutter-d34f441eb026) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):对于 Hero 动画想必做移动开发的同学都不陌生,通常在 Native 开发情况下想要实现这个动画并不容易,但是在 Flutter 中内部就实现了这一交互效果,只需简单的使用 Hero 这个 Widget 即可,本文详细的讲解了 Hero 的基本使用和定制化开发。 + +### 🐢 [基于协程的编程方式在移动端研发的思考及最佳实践](https://mp.weixin.qq.com/s/DXj0-6YOwRcwQfsqB6CTTw) + +从超级 App 的性能和代码痛点从发,道出 iOS 异步编程现状存在的缺陷,想必读者也感同身受。 + +- 多线程访问引发野指针问题 +- 多线程访问引发容器类崩溃问题 +- 多线程访问引发过渡释放问题 + +从而引出协程,基于协程的全新的异步编程方式,是我们解决现有异步编程问题的有效的方式。想要了解协程的最佳实践,读者们可以仔细阅读本文。 + +### 🐢 [Xcode Build Configuration Files](https://nshipster.com/xcconfig/) + +在 Xcode 中可以设置我们项目相关各种工程设定,但是把所有的编译配置都在 Xcode 中设置有时候并不是一个明智的选择,光 Build Settings 选项里面就有上百项的设置选项,这并不利于我们维护。但好在苹果给了我们另外一种方式,使用 xcconfig 文件。它是用来保存配置键值对的纯文本文件,这使得我们可以分离代码和配置,如果你也有为工程配置烦恼过,不妨尝试试用一下 xcconfig 文件。 + +推荐阅读: +- [CocoaPods 1.7.0 Beta!](http://blog.cocoapods.org/CocoaPods-1.7.0-beta/) + + +### 🐎 [在闲鱼,我们如何用 Dart 做高效后端开发?](https://mp.weixin.qq.com/s/jAD3hacFMVcOv9GnAfCFOw) +[@xiaofei86](https://weibo.com/xuyafei86):Dart 是一门简洁、容易上手、对异步支持良好的编程语言,在 Flutter 的开发中大放异彩。本文简单讲解了闲鱼使用 Dart 进行后端开发的实践经验。在闲鱼团队的努力下,Dart 用于后端开发的支持逐渐完善,前台和后端开发人员已经能够快速高效地使用 Dart 开发胶水层接口。未来闲鱼团队会着力于进一步改善 Dart 开发体验、与 Java 项目的兼容性、提升 Dart 远程服务的性能,挖掘 Dart 在后端开发中更大的潜力。 + +### 🐢 [What to Expect From Marzipan](https://blog.iconfactory.com/2019/05/what-to-expect-from-marzipan/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B403) + +> Marzipan 是 Apple 内部项目代号,Apple 在 WWDC 2018 发布了一项计划:将 UIKit App 迁移到 macOS 上。 + +[@享耳先森](https://github.com/iblacksun):WWDC 2019 不久就要开始,预计 Marzipan 计划将有新的进展,但作者认为平台迁移没有想象中那么美好,不是光适配代码发布就完事了,作者从开发、设计及市场三个方面分析迁移可能会面对的难题。 + +## 工具 + +### [Run Swift in browsers](https://swiftwasm.org/) + +[@AidenRao](https://weibo.com/AidenRao):将 Swift 代码编译为 [WebAssembly](http://webassembly.org.cn/) ,使它能在浏览器上直接运行。目前还是第一个版本,Swift 的很多功能还需要支持,感兴趣的同学可以加入 [swiftwasm](https://github.com/swiftwasm)。 + +## 代码 + +### 🌟 [Mango](https://github.com/YPLiang19/Mango) + +[@looping](https://github.com/looping):MangoFix 是一个 iOS 热修复 SDK,不同与 JSPatch,它内置了一个语法和 Objective-C 非常类似的 DSL 和对应的解析器。它的设计目标是为了解决 iOS 热修复问题,所以在使用的便捷程度和性能方面都有很大优势。对 iOS 热修复或者制作 DSL 感兴趣的同学可以参考作者写的 [《MangoFix:iOS 热修复另辟蹊径》](https://www.jianshu.com/p/7ae91a2daead) 和 [《iOS 热修复 MangoFix 原理分析》](https://www.jianshu.com/p/a6511c687eda) 这两篇文章深入了解下。 + +### [ui-fabric-ios](https://github.com/OfficeDev/ui-fabric-ios?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B403#colors-and-typography) + +`ui-fabric-ios` 是微软开源的一个界面框架,可为 iOS 平台提供 Office UI 体验。它包含有关颜色和排版的信息,以及平台控件的自定义,所有这些都来自 Office 和 Office 365 产品中使用的官方 Fluent 设计语言。感兴趣的同学可以下载下来深入研究。 + +### [mathAI](https://github.com/Roujack/mathAI) +[@莲叔](http://weibo.com/aaaron7):拍照做题在生活大爆炸中第一次出现后,就引起了不少关注,这个极具未来感的应用场景随着计算机视觉技术的发展已经逐渐走近现实,该作者基于 py 实现了一套拍照做题的系统,并在仓库中附带了一份 ppt 来介绍自己的防范,大概就是首先通过 opencv 进行字符预处理,然后用 cnn 来识别手写的字符已经数学符号,并根据空间信息来重建出手写公式的信息结构,最后一步通过编译原理中的表达式处理等方法来求解式子。作者部分开源了代码,但应该也能从中学到主要的流程,有兴趣的同学可以学习。 + +## 音视频 + +### [ggtalk | 聊聊跨平台:Weex 尚能饭否?](https://talk.swift.gg/30) +[@莲叔](http://weibo.com/aaaron7):如标题所说,这一期的 ggtalk 讨论了 Weex 这个颇具争议的框架。节目中除了聊 Weex 本身的一些问题之外,还聊到了一些对 Weex 比较常见的误解。虽然 Weex 和 RN 经常被拿来做比较,但其实本身的定位却有区别,本质上是 for 不同目的的业务场景,比如 RN 比较完整的包装了系统的接口,目标是尽可能闭环在 RN 的环境中完成整个 app 的开发,而 weex 恰恰相反,其相对简洁的框架主要是服务于动态 UI 的实现,绝大多数逻辑部分还是依赖于 Native 实现,但也就因为这个特性,Weex 有非常简洁的和 native 进行 bridge 的框架方法。这类问题在节目中得到了充分的讨论,当然也包括其中的一些坑,有兴趣的同学可以看看。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#69-2019.05.27.md b/Reports/2019/#69-2019.05.27.md new file mode 100644 index 000000000..9df4fd111 --- /dev/null +++ b/Reports/2019/#69-2019.05.27.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #69 | 2019-05-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [WWDC19 Schedule](https://developer.apple.com/wwdc19/schedule/#!/) + +[@红纸](https://github.com/nianran):WWDC 2019 已临近,特此献上日程表以供各位进行提前查阅。 +(另外推荐一款 macOS 下的观看应用 [WWDC](https://github.com/insidegui/WWDC)。) + +## 新手推荐 + +### 🌟 🐕 [给 iOS 开发者的 Flutter 指南](https://mp.weixin.qq.com/s?__biz=MzUyMjg5NTI3NQ==&mid=2247483737&idx=1&sn=dd55f91bce2fd947a9951488ce39558b&chksm=f9c5ab9dceb2228bc0136d2e7b8155e84e87d6123d0e919e35ed013388c02752adbe67c48679&scene=21#wechat_redirect) + +[@邦Ben](https://weibo.com/linwenbang/):作为一名 iOS 原生开发,如何更好的进入 Flutter?该文通过类比 iOS 开发中的概念来解释 Flutter 相关的内容,都是一些相当常见的基础内容,非常适合入门。Flutter 的热加载其实提供很好的入门试错体验,毕竟,你只需要保存一下就知道你写错了还是写对了,因此,入门的学习成本降低了不少。个人感觉,入门曲线要低于 ReactNative。 + +该文分为上下两篇: + +- [给 iOS 开发者的 Flutter 指南(上)](https://mp.weixin.qq.com/s?__biz=MzUyMjg5NTI3NQ==&mid=2247483737&idx=1&sn=dd55f91bce2fd947a9951488ce39558b&chksm=f9c5ab9dceb2228bc0136d2e7b8155e84e87d6123d0e919e35ed013388c02752adbe67c48679&scene=21#wechat_redirect) +- [给 iOS 开发者的 Flutter 指南(下)](https://mp.weixin.qq.com/s/59w9e3pdnT5-GqF98J0gYQ) + +### 🐕 [UIButton: Padding Between Image and Text](https://noahgilmore.com/blog/uibutton-padding/) + +[@极速男孩007](https://github.com/ztlyyznf001):本文介绍了如何通过修改 UIButton 的 contentEdgeInsets 和 titleEdgeInsets 还有 imageEdgeInsets的值,来改变 UIButton 中图片和文字的位置。 + +## 文章 + +### 🐕 [Improving your Swift code using value objects](https://www.hackingwithswift.com/articles/188/improving-your-swift-code-using-value-objects) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):值对象是自定义类型,它们是代表我们应用程序一部分的小型精确类型。与值类型一样,值对象应该是不可变的,值对象通过利用值类型的不变性以及添加自我验证的能力来帮助我们编写更易于理解,更容易测试,更安全的代码 。我希望您可以试一试。 + +### 🐎 [@autoreleasepool uses in 2019 Swift](https://swiftrocks.com/autoreleasepool-in-2019-swift.html) + +[@xiaofei86](https://weibo.com/xuyafei86):本文先是简单的介绍了 autoreleasepool 在 Objective-C 中的使用场景——在循环体中大量创建 autorelease 对象。而 ARC 对 Swift 的优化在过去几年中进步了很多,根据作者的测试,似乎 ARC for Swift 从不调用 autorelease,而是用多次调用 release 来替代。所以对于纯粹的 Swift 对象我们可能不再需要 autoreleasepool。但在 Swift 开发中 autoreleasepool 仍然有用,因为在 UIKit 和 Foundation 中仍然存在调用 autorelease 的遗留 Objective-C 类。以上便基本是本文的所有内容,如果你对 autorelease 的问题还不是很了解,可以去继续阅读原文。 + +### 🐢 [Building a NFC Scanner App with CoreNFC in Swift](https://medium.com/appcoda-tutorials/building-nfc-product-scanner-ios-app-with-corenfc-alfian-losari-5da0365bcde5) + +[@享耳先森](https://github.com/iblacksun):在 2014 年 Apple 发布 Apple Pay,iPhone 6 是第一批支持 NFC 功能的设备。iOS 11 终于发布了 CoreNFC 框架,第三方 App 可以在前台读取 NFC tags(iPhone 7 及以后的机型才能读取 NDEF),iOS 12 增强了 CoreNFC 的能力,允许在后台读取 tags 并通过 Universal Link 技术唤起 App。iOS 13 马上就要发布了,相信开发者们十分期待 Apple 开放 NFC 写入功能。 + +文章详尽的描述了如何从零开发一个读取 NFC tags 的应用,甚至十分贴心的介绍了如何制作 tags 供测试使用,建议对 NFC 有兴趣的开发者们读一读。 + +### 🐎 [Using Codable to make enums with associated values even more powerful](https://blog.natanrolnik.me/codable-enums-associated-values) + +[@zvving](https://github.com/zvving):带有关联值的枚举被用在 Optional、Resutl 等场景、为编码带来更丰富且严谨的语义。作者通过一处网络数据解析的案例,展现定义枚举相比类或结构体的优势。也详细介绍了在此基础上如何实现 Codable 协议,支持持久化。 + +### 🐎 [Empty Strings in Swift](https://useyourloaf.com/blog/empty-strings-in-swift/) + +[@JimQ](https://github.com/waz0820) 一个 string 是否 empty 可能有三种不同的含义:1. 长度为零;2. 只包含空白符;3. 可选值为空。针对这三种含义,文章分别给出了最优 & 最 Swift 化的判断方法。 + +### 🐕 [OOM 与内存](http://sindrilin.com/2019/05/23/oom_and_memory.html) + +[@looping](https://github.com/looping):本文作者从一起可疑的崩溃现象,即从崩溃日志上看,设备还有很多可用内存,但是排查发现,却是内存分配失败后对无效地址的访问错误;再结合内存分配方式,发现每种类型的内存分配地址都是有上限的,也就是说即便在设备依然有可用内存的情况下,如果某个类型的内存地址被分配完毕,同样会引发 OOM 问题。 + +本文不管是对问题排查过程的描述,还是对 malloc_zone 的分析介绍,都是一份很好的学习资料,感兴趣的同学可以深入学习下。 + +## 工具 + +### 🌟 [i18ns.com](https://i18ns.com/zh/index.html) + +[@张嘉夫](https://github.com/josephchang10):i18ns.com 是一个免费的多语言翻译搜索网站,致力于让软件国际化变得简单便捷。作者从长期的软件开发过程中发现,超过50%的软件文案都是可复用的,而在同类别软件中可复用的内容甚至超过80%以上,于是创建了这个网站。期望能帮助广大小微开发者能更廉价更便捷地完成软件国际化翻译。 + +### [Fledge](https://github.com/mmcc007/fledge) + +[@老峰](https://github.com/GesanTung):Fledge 是一个构建 Flutter 项目的 CI/CD(持续集成/持续部署)工作流工具,包括自动构建、测试、签名和发布 Apple Store 和 Google Store,支持 Travis、Jenkins、GitLab 等,感兴趣的同学还以点[这里](https://medium.com/@nocnoc/cicd-for-flutter-fdc07fe52abd)。 + +## 代码 + +### [Flutter4GitLab](https://github.com/stefanJi/Flutter4GitLab) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):[Flutter4GitLab](https://github.com/stefanJi/Flutter4GitLab) 是[纪阳](https://github.com/stefanJi)同学用 Flutter 实现的一个 GitLab 客户端,只实现了一部分功能。对于正在学习 Flutter 的同学是一个不错的一手参考资料, 项目中的一些插件的使用很是值得学习, 比如: + +- xml 解析 +- html 标签展示 +- 通过 stetho 连接 Chrome 的 Network Inspector + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#70-2019.06.03.md b/Reports/2019/#70-2019.06.03.md new file mode 100644 index 000000000..09bee1e8c --- /dev/null +++ b/Reports/2019/#70-2019.06.03.md @@ -0,0 +1,112 @@ +# 老司机 iOS 周报 #70 | 2019-06-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [『SwiftOldDriver 精选』调价至 1 元](https://xiaozhuanlan.com/olddriver-selection) + +『SwiftOldDriver 精选』是周报编辑去年做的一个付费专栏,内容是编辑们自己的原创或译文,总共 20 余篇。现在正式以一元价格开放,保留一元售价而不完全免费只是为了减少无脑订阅导致的一系列麻烦事儿~望谅解。 + +### [iPhone 蜂窝网络下载限制提升到 200M](https://9to5mac.com/2019/05/31/apple-iphone-cellular-limit-increased/) + +[@JimQ](https://github.com/waz0820):iPhone 蜂窝网络下载限制从 150M 提升到了 200M,上次调整还是在 2017 年 9 月 从 100M 提升到 150M。值得一提的是,并非应用主页上显示超过 200M 就不能使用蜂窝网络下载了,只要经 App Store 压缩瘦身之后的应用大小不超过 200M 这个阈值都是可以下载的。 + +## 文章 + +### 🌟 🐎 [开启 Cocoapods 新选项,加快项目索引速度](https://kemchenj.github.io/2019-05-31/) + +[@红纸](https://github.com/nianran):来自编辑部[@四娘](kemchenj.github.io)关于 Cocoapods 1.7.0 的踩坑作品。其主要内容如下: + +1. 生成多个 Xcodeproj,在 Podfile 文件中可以加入 **generate_multiple_pod_projects** 选项,开启时,生成多个 Project 嵌套在 Pods 这个顶级 Project中,未开启的状态为一个 Project 对应多 Target。据[@四娘](kemchenj.github.io)考察这种方式所有的 Item 都会按照类别存放到各自的 section 里,最终在项目的结构树里会以引用的形式呈现,从而加快了索引速度。 +2. 在 Podfile 中 install! 函数只能调用一次,其函数是一个配置函数,仅保留最后一次的配置结果 +3. Swift 版本控制和生成多个 Xcodeproj 会有冲突,因为生成多个后,项目结构会发生改变 post_install 函数中 installer.pod_target 就没办法获取所有 pods 引入的 Target +4. 在使用 Pod 时,我们可以去利用 **pry** 去调试 Pod 程序,简单易懂(如果想更好的去调试的话,建议直接调用 **Pod::Command.run(%w(#{你要调试的命令,eg install}))**,可以一步步去断点调试到每一个函数的执行。) + +### 🌟 🐢 [Preparing a code base for WWDC](https://wwdcbysundell.com/2019/preparing-a-code-base/) + +WWDC 马上就要到了,显然我们目前还并不知道会苹果具体会发布什么,但根据以往的经验,肯定会带来一些新的技术点,以及废弃一些老的 API 等等。所以我们依然可以提前为即将到来的 WWDC 做一些准备,如: + +- 去除一些老的 Warnings,它们可能存在很久了。 +- 让我们的工程结构更加的解耦,以避免像之前苹果废弃 UIWebView 时候替换 WKWebView 所带来的巨大的工作量。 +- 适当做一些单元测试和 UI 测试,这样能让我们更加从容面对新的 API 或者代码更改。 +- 大的项目基本都会或多或少有一些三方库在里面,所以在 WWDC 之前,可以做一些依赖项检查,了解它们内部工作的原理,这样在新版本升级时候遇到问题我们可以更好的去处理。 +- 使用一些最新的 API ,相信很多同学已经听说过今年可能会推出 Dark 模式,所以使用官方最新的 API 是减少以后适配成本的最好方式。 + +### 🐢 [腾讯新闻前端团队:Flutter Web 初体验](https://mp.weixin.qq.com/s/AlTtvrsRWRLxAbJbs-Y8XA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):flutter_web 发布有一段时间了,业内对其褒贬不一,但不管如何 Google 在持续的推动,在 flutter 1.5.4 以后的版本已经做到 Write once,Run everywhere , 同一份 flutter 代码可以在不做任何修改和适配的情况下同时运行在 iOS,Android,Web,Desktop。所以不管从哪个角度看,flutter_web 都是一门值得探索的技术。 + +[本文](https://mp.weixin.qq.com/s/AlTtvrsRWRLxAbJbs-Y8XA)由腾讯新闻前端团队推出,可以说是手摸手教你从零开始使用 flutter 来开发 web 前端应用。 + +### 🐎 [Ordered Collection Diffing](https://thoughtbot.com/blog/ordered-collection-diffing) + +[@anotheren](https://github.com/anotheren):SE-0240 为 `Collection` 带来了新的一个新的方法 `difference(from:)`。就如同方法名本身,这个方法能够高效地处理集合之间的差异。本文以 `UITableView` 的数据更新为例,简明展示了这个新 API 的使用方法。目前这个提案的状态已经更新为 `Implemented (Swift 5.1)`,相信本周的新 Xcode 就能使用了,不要忘了试一试。 + +### 🐕 🚧 [Migrating to Codable from a third party parsing library](https://medium.com/@elenipapanikolo/migrating-to-codable-from-a-third-party-parsing-library-fd85298ef5a2) + +[极速男孩007](https://github.com/ztlyyznf001):在 Swift4 中,苹果引入了 Codable 协议。本文以 [Argo](https://github.com/thoughtbot/Argo) 为例子,介绍了如何从第三方 JSON 解析库迁移到 Codable 协议中。本文主要通过实现 init(from decoder: Decoder) 和 decode(_ json: JSON) 这两个协议,并且让 JSON 对象遵循这个协议,使得对象即可以通过 Argo 也可以通过 Codable 去解析。 + +### 🐎 [Understanding Compilers – featuring Swift! ](https://www.prolificinteractive.com/2019/05/18/understanding-compilers-featuring-swift/) + +[@莲叔](https://weibo.com/aaaron7):本文以 Swift 为例,科普了编译器和解释器的区别以及编译器的主要组成部分,文中比较有价值的观点就是对于 Swift 这样一门比较新、语法也相对复杂的语音,对编译过程有所了解的确是可以对日常开发也有帮助。建议如果不了解相关知识的同学们可以看看,不过近些年编译器相关的文章并不少,横向比较下来看本文并没什么新东西,大佬可以略过。 + +### 🐕 [Refactoring iOS app with Coordinator Pattern for Navigation](https://medium.com/swift2go/refactoring-ios-app-with-coordinator-pattern-for-navigation-alfian-losari-50081bfa7a4a) + +[@老驴](https://github.com/olddonkey):这篇文章的作者从一个实际项目出发,介绍了如何使用 Coordinator Pattern 来对项目中的 View Controller 进行解耦,有兴趣的话也可以自己动手试一试。 + +前两年的有一段时间,这类库和这类设计思路盛行过一段时间,后来都逐渐没有了声音。倒不是这类库不好,而是在实际应用过程中,设计中的过度解耦会给项目编写带来不必要的麻烦,所以在应用过程中应该结合自己项目的情况进行考虑。解耦但不要过度解耦,才是应用的正确之道。 + +### 🐕 [技术清谈【008期】【代号:超人】](https://github.com/ChenYilong/iOSInterviewQuestions/issues/124) + +[@小T](https://github.com/tom510230):这是著名 iOS 程序员 [ChenYilong](https://github.com/ChenYilong) 整理的技术清谈话题,稍微看了一下 issue 列表,基本都属于要对底层实现或者 Swift 源码实现比较了解的话题。如果功利来说,属于面试不会问,工作中也很难遇到的场景,当然如果你是 sunny 组内的同学或者专业做 iOS 底层技术研究的同学除外。总体而言,issue 里面的问题都值得推敲一下,对于提升 iOS 技术都有很大的帮助。很多时候,解决方案不一定就是目标,可能在寻找解决方案的路上就已经学到了很多。 + +### 🐢 [深入了解 Swift 中的初始化(Initialization)](https://juejin.im/post/5ceb82056fb9a07efe2d9aab) + +[@四娘](kemchenj.github.io):类型安全是 Swift 的一大特点,其中一个表现就是初始化的确定性,只要一个实例完成了初始化过程,它的属性就必然初始化完成,不会处在不确定的状态。 + +这篇文章的作者总结了自己对于初始化过程的了解,加上一些更加接地气的例子和练习,如果有同学对于这一部分知识还比较模糊的话,推荐一看。 + +## 工具 + +### [Stride - 跨平台的 Swift IDE](https://github.com/pmacro/Stride) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Stride 是 Swift 开发的跨平台 IDE, 它是自托管的,您可以编辑、构建和运行。目前仅支持 macOS 和 Linux,但在目前的替代品有限的状态下,它是有用且可用的。尽管目前依然处于早期阶段,还有很多调试尚未实现,但如果您很感兴趣,可以在[Twitter](https://twitter.com/saniceadonut)上关注作者,以获得 Stride 的进度更新,或者您也可以参与其中,贡献自己的一份力量。 + +### [launchaco](https://www.launchaco.com) + +[@张嘉夫](https://github.com/josephchang10):为创业项目快速生成产品宣传网站,包括快速构建自适应网站、利用 AI 设计图标、域名查询及注册的在线工具。 + +## 代码 + +### 🐎 [XCTAssertAutolayout](https://github.com/tarunon/XCTAssertAutolayout) + +[@jimq](https://github.com/waz0820):通过封装 XCTAssertAutolayout 断言为 autolayout 提供测试用例,仅支持 Swift。 +原理是 hook UIViewAlertForUnsatisfiableConstraints 获取有歧义的约束,以此作为断言失败的依据。有 UI 测试需求的朋友推荐试用。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#71-2019.06.17.md b/Reports/2019/#71-2019.06.17.md new file mode 100644 index 000000000..d099b6296 --- /dev/null +++ b/Reports/2019/#71-2019.06.17.md @@ -0,0 +1,177 @@ +# 老司机 iOS 周报 #71 | 2019-06-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐎 [iOS 13 Preview](https://www.apple.com/ios/ios-13-preview/) + +[极速男孩007](https://github.com/ztlyyznf001):在 WWDC 2019 上苹果发布了全新的 iOS 13 版本: + +主要带来了一下功能: + + - 大家期盼已久的黑暗模式。提升了夜晚的视觉效果。 + - 人像拍照更多的功能,并且可以通过日期去筛选照片。 + - 全新的苹果登录功能,使你的信息更加安全。 + - 全新的 map 带来更多的地图细节,和 360° 的全景街景。 + - siri 声音变得更加自然,并且能通过 homepod 识别各个家庭成员的声音。 + - App 启动速度会比以前快两倍,并且会有更小的包的大小。 + - ARKit 3 支持人的动作识别,并且支持人和虚拟景象的结合。 + +### 🚧 [Why Did Apple Reject My App? Ex-Head of App Store Review Explains](https://www.bloomberg.com/news/articles/2019-05-28/why-did-apple-reject-my-app-ex-head-of-app-store-review-explains) + +[@anotherene](https://github.com/anotheren):App Store 审核团队的前负责人讨论了为什么应用程序被拒绝,Apple 和 开发人员之间的竞争以及 WWDC 的规划。 + +## 新手推荐 + +### 🌟 🚧 [SWIFTUI BY EXAMPLE](https://www.hackingwithswift.com/quick-start/swiftui) + +[@邦Ben](https://weibo.com/linwenbang):WWDC 最受瞩目的莫过于的 SwiftUI 了,虽然这可能三年后才有机会普及。 + +作者 [Paul Hudson](https://twitter.com/twostraws) 非常速度的给出来大量的学习例子(涵盖了日常需要用到的内容,例如:文本图片,列表容器,弹窗,动画,视图形变,状态等等),并且还有录制了学习视频,可谓是干货满满。 + +其他参考: + +- [Learn SwiftUI with free tutorials](https://www.hackingwithswift.com/articles/196/learn-swiftui-with-free-tutorials) + +## 文章 + +### 🌟 🐎 [Thoughts on SwiftUI](https://mackuba.eu/2019/06/14/thoughts-on-swiftui/) + +[@zvving](https://github.com/zvving):作者 [Kuba](https://mackuba.eu/about) 是一名资深的 macOS&iOS 开发,整理了对 SwiftUI 的一些思考: + +上手所面临的困难: + + - 你可能需要把自己当成 macOS&iOS 开发新手,哪怕忽略开发范式的变化,熟悉新的 framework 也需要时间 + - 有很多细节问题需要进一步探索:如面对复杂布局不知道如何开始;属性的 $ 如何使用?修饰符的排列顺序有什么影响?等等 + - 工具现状:仍处于测试版状态,文档不完善,错误消息很神秘,自动提示在一半的时间里无效 + +看好未来的可能性: + + - 对 SwiftUI 提升 UI 开发效率充满信心,相信能节省开发时间,避免出错 + - 很好的是苹果没有简单地把 11 岁的 UIKit 抹平差异,迁移到所有平台。而是重新设计一个 UI 框架,承认并强调每个平台的独立性,把有共性的好的体验统一定义,不通用的部分为每个平台提供自定义的可能。就像他们所提倡的那样:『并不是:Write once, run anywhere,而是 Learn once, apply anywhere』 + - 期望保持 macOS Apps 优秀体验的同时,SwiftUI 为其带来更多的可能性 + +### 🌟 🐎 [Will Combine kill RxSwift?](https://medium.com/flawless-app-stories/will-combine-kill-rxswift-64780a150d89) + +[@Damonwong](https://github.com/Damonvvong): 今年的 WWDC 不但出了 SwiftUI 这个重量级框架,还出了一个官方的 ReactiveX 库 Combine,作者也将 Combine 和目前社区较为流行的 RxSwift 做了以下对比: + +- Combine 支持 Backpressure 特性,而 RxSwift 不支持 +- Combine 和 RxSwift 在错误处理上有所不同,相比较而言 Combine 需要更明确的错误类型 +- Combine 不需要使用 DisposeBag 来管理内存问题 +- Combine 和 RxSwift 在 API 上还是有所差异的 +- Combine 在性能上有一点「碾压」的趋势 +- ... + +综合比较起来 Combine 虽然还处于 beta 及 iOS 13+ 的阶段,但是各方面似乎都要比 RxSwift 都要稍微好一点。 + +最后谈一下我自己对 ReactiveX 的看法。在 Combine 这库出来之前,我对 RxSwift 的定义为「毒瘤」。什么意思呢?就是一旦一个项目中一个库引入了 RxSwift 你会发现渐渐的所有的库都会依赖它,以至于想去也去不掉。再加上不同水平的人对 ReactiveX 理解不同,行业中也没有一个很好的规范来约束,以至于项目中的 RxSwift 代码质量参差不齐,难以维护。所以虽然我们项目中引入了 RxSwift 但是我还是会有所克制的去使用 RxSwift。但是 Combine 的出现,彻底打消了我这些顾虑,Combine 的出现是苹果开发团队对 ReactiveX 的肯定,而且 SwiftUI 也依赖于 Combine,所以我觉得对 ReactiveX 充分理解,不再是一个考察开发者能力的可选项,而是一个必须要掌握的技能。如果你还没有开始了解 ReactiveX 那么 RxSwift 是一个不错的选择。 + +以至于 RxSwift 会不会被 Combine 替代?谁也不知道。把答案交给明天。 + +### 🌟 🐕 [WWDC 2019](https://nshipster.com/wwdc-2019/) + +这是著名的 AFN 作者 Matt 大神写的博客,主要是针对```WWDC 2019 keynote```中的内容进行了一些解读和展望,如果你对于```WWDC 2019 keynote```已经比较了解了,那么看这篇文章可以帮助你更好地知道苹果新技术的一些思想,如果你不太了解,建议先到[苹果官网](https://developer.apple.com/videos/play/wwdc2019/101/)了解一番,然后再阅读这篇文章。 +这次 wwdc2019 对于开发者来说,最重要的莫过于推出了```SwiftUI```框架,重新定义了 UI 层的工作流程,因此 Matt 大神也着重提到了这点。具体来说就是苹果终于对于声明式编程方式提供了合理的支持途径,是可喜可贺的一步。 +另外一个重大的变化就是 iPad 应用移植到 Mac 平台将会变得更加方便了,苹果称呼这个项目叫```Project Catalyst```,具体的内容,在 WWDC 的 session 上面都有提及,譬如 [Session235](https://developer.apple.com/videos/play/wwdc2019/235/) 和 [Session205](https://developer.apple.com/videos/play/wwdc2019/205/)。 +作者在文章的最后再次强调了,今年 iOS 开发者要关注的重点,无疑就是 SwiftUI 和 Swift5 ,如果现在还没有对这两个方向给予足够的重视,那在技术上就很容易被拉开差距了。 + +### 🌟 🐕 [First impressions of SwiftUI](https://www.cocoawithlove.com/blog/swiftui.html) + +[@olddonkey](https://github.com/olddonkey):本文以一个类 SwiftUI 开源库的作者的角度出发,来介绍了一下自己对 SwiftUI 的第一印象。 + +作者在几个月前写了一个叫 CwlViews 的开源库,也是使用了声明式的设计思路,目标以简单的声明来快速构建 UI 组件。但是作者的设计思路与苹果的设计思路却并不完全相同。例如 SwiftUI 采用的是双向绑定,而作者采用的是单向绑定。再比如 SwiftUI 采用了 Value Type,而 CwlView 则因为 Binder 的原因,不得不选择引用类型。 + +以上这些比较最后让作者不得不做出一个“艰难”的决定:长远来看,作者将会放弃自己的开源库。但是在最低版本支持是 iOS 13 或 macOS 10.15 之前,SwiftUI 也会遇到很多的问题。而这些问题,都需要时间来完善。 + +### 🐎 [一招教你解决 FlutterPlatformViews 内存泄露问题](https://mp.weixin.qq.com/s/2CRirw1hxjJDD6e2d8xodQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):PlatformView 是 flutter 总一个非常酷炫的功能,使用 PlatformView 你可以贴一个 native 的控件到 flutter 的 render tree 中,这给了开发者无限的想想空间,但同时也带来一些坑点,比如内存问题,本文通过对 OpenGL 层面的探索发现并解决这一问题。 + +### 🐎 [How To Adopt Dark Mode In Your iOS App](https://www.fivestars.blog/code/ios-dark-mode-how-to.html) + +[@J_Knight_](https://github.com/knightsj):本文作者从使用条件,颜色,图片,代码层面上的 UIVisualEffectViews,NSAttributedString,以及调试方法几个方面讲解了如何使 APP 采用 Dark Mode。 + +### 🐢 [Property wrappers to remove boilerplate code in Swift](https://www.avanderlee.com/swift/property-wrappers/) + +[@享耳先森](https://github.com/iblacksun):`Property wrappers` 是在 WWDC 2019 随 Xcode 11 和 Swift 5.1 一起发布的,提案可以参考 [SE-0258](https://github.com/DougGregor/swift-evolution/blob/property-wrappers/proposals/0258-property-wrappers.md) 。 + +本文举例使用 `Property wrappers` 实现一个 `@UserDefault` wrapper,用来解决 UserDefault 读取与存储包含大量模板代码的问题,另外,Swift UI 也利用了 `Property wrappers` 实现 View 与 Model 的动态绑定。 + +### 🐕 [Swift Combine 入门导读](https://icodesign.me/posts/swift-combine/) + +[@老峰](https://github.com/GesanTung):Combine 是 WWDC19 Apple 官方推出的基于 Swift 的响应式编程框架。 + +本文浅显易懂的介绍了 Combine 中 Publisher 、Subscriber 、Subject 、Cancellable 等基本概念,作为作者 Combine 系列的第一篇很适合响应式入门级的读者阅读。 + +### 🐕 [新晋网红 SwiftUI —— 淘宝带你初体验](https://mp.weixin.qq.com/s/x_jFcKeXSbtdK0CnfayFsw) + +在刚刚过去的 WWDC 2019,苹果为我们带来了很多惊喜,其中最引人注目的内容莫过于 SwiftUI 了。从学习 iOS 开发开始, UIKit 就一直伴随着我们。UIKit 是基于命令式的,而近年来,声名式和函数式方式来进行界面开发已经越来越普及,例如最近很红的 Flutter 。我想很多开发者都在期待苹果官方能够出一套类似的技术方案,这不,它就到来了。淘宝团队也在第一时间体验了 SwiftUI 并带了这篇文章,对于还没有去了解 SwiftUI 的同学,推荐看一看。不过,SwiftUI 虽然很棒,但是 Only iOS13 哦。 + +相关阅读: + +[WWDC 2019 - Session 722:Introducing Combine](https://developer.apple.com/videos/play/wwdc2019/722/) + +### 🐎 [Solving-ambiguous-constraints-without-rerunning-your-app](https://mar.codes/2019-05-28/Solving-ambiguous-constraints-without-rerunning-your-app) + +[@jinmq](https://github.com/waz0820): 本文介绍了使用 View Debugger + LLDB 的方式去定位并消除有歧义的 Auto Layout 约束,而不必每次尝试都重跑你的应用。 + +### 🐎 [WWDC 2019 Session Notes](https://github.com/Blackjacx/WWDC) + +每年的 WWDC ,issue 都多达上百个,作者整理了几十个比较热门的 issue 内容,写成大纲供没什么耐心看完视频的开发同学进行快速预览。大部分的内容都还不错,美中不足的是没有附带图片,可能有一些知识点是不太好理解的,更推荐由各位 iOS 网红整理的 [WWDC精读文章](https://xiaozhuanlan.com/wwdc19) ,另外,[ASCIIwwdc](https://asciiwwdc.com/) 也是很不错的索引网站喔。 + +## 代码 + +### 🌟 [RxCombine](https://github.com/freak4pc/RxCombine) + +[@四娘](https://kemchenj.github.io):RxSwift 社区推出的一个用于与 Combine 进行交互的框架,提供了 Observable 与 Publisher 相互转化的功能,目前还是属于概念验证阶段。 + +### 🌟 [RxSwift to Combine Cheatsheet](https://github.com/freak4pc/rxswift-to-combine-cheatsheet) + +[@Damonwong](https://github.com/Damonvvong): 这是一个 RxSwift 和 Combine 库 API 的对照表,如果你对 RxSwift 的 API 已经很熟练了,那么这个仓库的对照表可以让你很快上手 Combine。 + +### [Swift-Docker Slim Images](https://github.com/apple/swift-docker/pull/140) + +[@张嘉夫](https://github.com/josephchang10):Swift Docker 镜像的精简版本,适用于 Ubuntu 16.04 和 18.04,去掉了编译器只保留 runtime,镜像从 1.3GB 减小到了 200MB 左右,以便部署。 + +### [SwiftUI Hooks](https://github.com/unixzii/SwiftUI-Hooks) + +[@looping](https://github.com/looping):这个项目是受到了 [React Hooks](https://reactjs.org/docs/hooks-intro.html) 的启发,想证明下在 SwiftUI 上也能用 Hooks。目前作者已经实现了 useState、useEffect 和 useReducer 这几个 Hook,同时还写了一个 [Todo List](https://github.com/unixzii/SwiftUI-Hooks/blob/master/SwiftUI-Hooks/ContentView.swift#L59) 作为演示。对 React Hooks 技术和理念感兴趣的同学可以持续关注。 + +### [MovieSwiftUI](https://github.com/Dimillian/MovieSwiftUI) + +[@邦Ben](https://weibo.com/linwenbang):这是一个基于 SwiftUI 并且使用 Flux 架构完成的电影类 App,示例功能都比较完整。 + +参考链接: + +- [Flux APPLICATION ARCHITECTURE FOR BUILDING USER INTERFACES](https://facebook.github.io/flux/) +- [Flux 架构入门教程](http://www.ruanyifeng.com/blog/2016/01/flux.html) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#72-2019.06.24.md b/Reports/2019/#72-2019.06.24.md new file mode 100644 index 000000000..3caf3c154 --- /dev/null +++ b/Reports/2019/#72-2019.06.24.md @@ -0,0 +1,121 @@ +# 老司机 iOS 周报 #72 | 2019-06-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +### 🌟 [免费领取小专栏 -- WWDC2019 内参](https://xiaozhuanlan.com/wwdc19/present/380ad33db882a12ae9c0b2402d386ef10ecafa51) + +WWDC2019 专栏由「iOS 周报」、「SwiftGG 翻译组」和「知识小集」共同发起,我们招集了30多位优秀的同学,共同把 WWDC2019 上优质的内容进行解读。目前已解读了包含必看 14 篇,SwiftUI 5 篇文章以及推荐 17 篇文章,以下是部分目录,欢迎大家订阅学习~ + +#### 必看 + +* [What's new in Xcode 11](https://xiaozhuanlan.com/topic/3719648250) +* [Swift 5 & 5.1 为我们带来了什么](https://xiaozhuanlan.com/topic/1390785624) +* [Sign In with Apple - 使用苹果账号登录你的应用](https://xiaozhuanlan.com/topic/8675913204) +* [机器学习移动端的峥嵘初现: Core ML 3.0](https://xiaozhuanlan.com/topic/7650813942) +* [基于 Metal 的现代渲染技术](https://xiaozhuanlan.com/topic/6927418053) +* [Data Source 新特性:基于 Diffable 实现局部刷新](https://xiaozhuanlan.com/topic/9158203647) +* [iPad 上的多窗口](https://xiaozhuanlan.com/topic/0342159876) +* [用 SiriKit 播放你的 App 内容: SiriKit Media Intents](https://xiaozhuanlan.com/topic/0135497268) +* [What's new in CoreLocation:新增定位临时授权](https://xiaozhuanlan.com/topic/4209567831) +* [全新后台任务框架及最佳实践](https://xiaozhuanlan.com/topic/1806594273) +* [低延迟的 HLS](https://xiaozhuanlan.com/topic/1480297563) +* [内购新特性以及使用 server-to-server 通知](https://xiaozhuanlan.com/topic/0673452981) +* [理解 Vision 框架中的图片技术](https://xiaozhuanlan.com/topic/5821039746) +* [创建独立的Watch应用](https://xiaozhuanlan.com/topic/9460127538) + +#### SwiftUI +* [SwiftUI 概览:十分钟构建简单应用](https://xiaozhuanlan.com/topic/9604582713) +* [SwiftUI 多设备兼容](https://xiaozhuanlan.com/topic/1074925368) +* [SwiftUI 自定义视图](https://xiaozhuanlan.com/topic/9586134027) +* [SwiftUI 数据流](https://xiaozhuanlan.com/topic/0528764139) +* [Apple 官方异步编程框架:Swift Combine 简介](https://xiaozhuanlan.com/topic/9683417052) + +#### 推荐 +* [更现代的 Swift API 设计](https://xiaozhuanlan.com/topic/5203689741) +* [Debugging in Xcode 11](https://xiaozhuanlan.com/topic/1896573024) +* [开始使用 Instrument](https://xiaozhuanlan.com/topic/3869705241) +* [机器学习新工具:Create ML App](https://xiaozhuanlan.com/topic/1960485732) +* [今年的相机有什么新玩法](https://xiaozhuanlan.com/topic/1583627049) +* [快速掌握 Xcode 预览](https://xiaozhuanlan.com/topic/6850724193) +* [CryptoKit 框架与 App 安全防护策略](https://xiaozhuanlan.com/topic/6701982534) +* [Universal Links 新特性](https://xiaozhuanlan.com/topic/3019548672) +* [What’s New in Clang and LLVM](https://xiaozhuanlan.com/topic/5869372401) +* [LLDB: Beyond po](https://xiaozhuanlan.com/topic/5438071296) +* [利用好模拟器](https://xiaozhuanlan.com/topic/0698472351) +* [摄像新玩法:使用多个摄像头同时拍摄](https://xiaozhuanlan.com/topic/6809542731) +* [What's New in App Store Connect](https://xiaozhuanlan.com/topic/8526907431) +* [应用测试与分发渠道简析](https://xiaozhuanlan.com/topic/2076153984) + +可直接点击标题链接,或者复制 https://xiaozhuanlan.com/wwdc19/present/380ad33db882a12ae9c0b2402d386ef10ecafa51 至浏览器打开领取。 + +## 新闻 + +### [CocoaPods 1.7.2 - Master Repo CDN is Finalized!](http://blog.cocoapods.org/CocoaPods-1.7.2/) + +[@享耳先森](https://github.com/iblacksun):`CocoaPods` 近期发布了 1.7.2 版,支持 CDN,意味着我们不需要将整个 `Podspecs` 仓库 clone 并保存在本地,节省几 G 的硬盘空间。最新的版本中,需要在 `Podfile` 里将修改 `source 'https://cdn.cocoapods.org/'`,CDN 将会在未来版本变为默认设置。 + +## 文章 + +### 🌟 🐕 [Flutter 最新进展与未来展望](https://mp.weixin.qq.com/s/dC2C1jpDrQSsip6wjiejBw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自打发布以来一直都是跨平台方向的关注焦点, 本文的作者是 Google Flutter 团队的高级研究员董韬, 文章从多个方面分析了 Flutter 的现状, 以及对其未来的展望, 小编读完本文都觉得未来可期呢😄: + +- Flutter 及其在中国的发展状况 +- 多平台愿景: Flutter for Web +- 生态建设: 与社区共建的状态管理解决方案 +- 开发体验: "UI as Code" +- Flutter/Dart 近期展望 + +### 🌟 🐕 [SwiftUI or Flutter ?](https://juejin.im/post/5d05b45bf265da1bcc193ff4) + +[@邦Ben](https://weibo.com/linwenbang):本文作者通过一些同功能代码例子对比了 SwiftUI 和 Flutter 的代码复杂度,以此说明 Apple 在 SwiftUI 上更为简洁。在 SwiftUI 跨平台方面也进行了介绍,不同系统下的不同表现,这些都视为 Apple 方面对多设备进行了许多的特性处理。 + +在小编看来,SwiftUI 算是自家多设备兼容,而不算真正的跨平台,和 Flutter 抹平平台间差异的画布做法来说,还是有很大差别,或许暂不应该相比较,两者目标暂不一致。让我们继续期待 SwiftUI 的进展,希望 Apple 爸爸进度能持续加快! + +### 🐕 [iOS Code Review - Health check of your Swift code](https://benoitpasquier.com/code-review-health-check-of-swift-code/) + +[@莲叔](https://weibo.com/aaaron7):我们接手一个工程的时候,往往总是习惯性吐槽上一个做这个项目的人做得很垃圾,工程各种有问题。但抛去个人的代码风格不管的话,理性的来看,我们如何衡量一个项目到底是好还是不好呢?这篇博客提出了一个 Swift 工程健康度的概念,并给出了常规的 工程健康度的衡量方法。分别从目录和 git 主页的层面,到 codebase 层面,进一步看代码语言的构成,iOS 的版本,数据库的实现,UI 的方案以及设计模式的使用,最后到是否具备可测试性和 CI/CD 的相关能力,虽然具体每个点都不新鲜,但胜在覆盖全面。有相关需求的同学可以看一下。 + +### 🐎 [【译】如何正确选型,React Native 还是 Native?](https://mp.weixin.qq.com/s/J-6EKH4fOroPS8RMsC9CJg) +[@looping](https://github.com/looping):本文总结了 Native 跟 React Native 开发的优缺点,同时为开发移动应用的技术选型提出了自己的看法。如果觉得列的东西太多,不太好分析,文章结尾给出了非常简单的方法 —— “预算充裕,而且也不想在 App 的用户界面和功能上妥协”,即有钱且任性的话,就选择开发原生应用。当然,实际技术选型还得重点关注团队技术能力以及项目需求排期这些因素才能做好。不过从技术的利弊角度看,这篇文章罗列的内容是值得参考的。 + +## 代码 + +### [SwiftyGPIO](https://github.com/uraimo/SwiftyGPIO) + +[@四娘](https://kemchenj.github.io):一个适用于Linux / ARM 硬件项目的Swift库,支持 GPIOs / SPI / I2C / PWM / UART / 1Wire 等主流协议,有丰富周边教学和衍生项目。 + +## 音视频 + +### 🚧 [SwiftUI Gestures, Blend Modes and 3D Transform](https://m.youtube.com/watch?v=js1qFgJS67Q) + +[@张嘉夫](https://github.com/josephchang10):DesignCode 的视频教程,展示如何用 SwiftUI 制作交互动画,包括手势、Blend Mode 和 3D Transform 等。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#73-2019.07.01.md b/Reports/2019/#73-2019.07.01.md new file mode 100644 index 000000000..403bc454a --- /dev/null +++ b/Reports/2019/#73-2019.07.01.md @@ -0,0 +1,167 @@ +# 老司机 iOS 周报 #73 | 2019-07-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +### 🌟 [免费领取小专栏 -- WWDC2019 内参](https://xiaozhuanlan.com/wwdc19/present/380ad33db882a12ae9c0b2402d386ef10ecafa51) + +WWDC2019 内参现已更新到 42 篇,以下是上周更新的文章,欢迎大家订阅学习~ + +#### 必看 + +* [如何在 iOS 13 上适配深色模式?](https://xiaozhuanlan.com/topic/1064789253) +* [网络的发展](https://xiaozhuanlan.com/topic/3267194058) +* [在 Xcode 中使用 Swift Package](https://xiaozhuanlan.com/topic/9635421780) +* [优化 App 启动](https://xiaozhuanlan.com/topic/4690823715) + +#### SwiftUI + +* [Swift Combine 应用](https://xiaozhuanlan.com/topic/9683417052) + +#### 推荐 + +* [Foundation 框架的新亮点](https://xiaozhuanlan.com/topic/5894162073) +* [Modernizing Your UI for iOS13](https://xiaozhuanlan.com/topic/5671830492) +* [UICollectionView 全新布局框架:UICollectionViewCompositionalLayout](https://xiaozhuanlan.com/topic/0735916284) + +可直接点击标题链接,或者复制 https://xiaozhuanlan.com/wwdc19/present/380ad33db882a12ae9c0b2402d386ef10ecafa51 至浏览器打开领取。 + +### [Design+Code 的 SwiftUI 教程限时优惠](https://h5.youzan.com/v2/goods/3eua57deaxury?dc_ps=2286991227876280320.200001&redirect_count=1) + +![](https://images.xiaozhuanlan.com/photo/2019/d585de14b83c09b02dfc77251164fe52.png) + +**扫码购买在五折基础上输入 iOSWeekly 优惠码再优惠 20 元,限时购买!!!** + +## 新闻 + +### [2019 年 Swift 和 Objective-C 开发者调查报告(JetBrains版)](https://mp.weixin.qq.com/s/0YBb9RKtvhJKLi5E9-8Cng) + +[@xiaofei86](https://weibo.com/xuyafei86):最近知名 IDE 厂商 JetBrains 发布了 2019 年开发者调查报告。本文汇总了与 +Swift 和 Objective-C 相关的 11 项调查数据和结果。数据显示,仅使用 Swift 的开发者占比已经过半,仅使用 Objective-C 的开发占比已经仅剩 15%。 + +## 文章 + +### 🐕 [0.3s 完成渲染!UC 信息流正文“闪开”优化实践](https://www.infoq.cn/article/9UKos4Xh_6wL4Fh1FOGL) + +[@aaaron7](https://weibo.com/aaaron7):目前,App 通过集成 webview 的方式来将一部分信息展示的任务交给 h5 来实现已经成为行业相对通用与标准的做法。但这样的场景不可避免的会遇到打开速度的问题,相比直接 push 一个 native 的 view,打开一个基于 webview 的页面往往会重很多,比如 webview/jsengine 的初始化,h5 文件的解析与渲染,js 的执行,ajax 的数据拉取,冗长的流程造成的结果就是打开 webview 的页面往往很慢,而且用户会看到白屏。 + +本篇文章的作者从整个链路的分析出发,提出了一整套优化的技术,比如离线宝、native 渲染、数据预请求等等,并且从截图上看实现了直出的效果。有相关类似优化场景需求的同学可以好好研究下。 + +### 🐎 [揭秘苹果应用审核内幕](https://mp.weixin.qq.com/s/BCMyEWvMzuGcGhbkZao7uA) + +[@老峰](https://github.com/GesanTung):苹果应用审核过程一直以来是个黑盒,我们经常会遇到让人抓狂却无可奈何的被拒邮件,那么审核到底是怎样的过程呢? + +本文根据最近发表在 CNBC 的[一篇文章](https://www.cnbc.com/2019/06/21/how-apples-app-review-process-for-the-app-store-works.html)揭秘了 Apple 应用审核执行审核委员会组成结构及工作内容、应用审核过程、应用拒审处理细节等等,对审核过程好奇的读者可以看一下。 + +参考链接: +- [Inside Apple’s team that greenlights iPhone apps for the App Store](https://www.cnbc.com/2019/06/21/how-apples-app-review-process-for-the-app-store-works.html) + + +### 🐎 [App Store 审核极限操作(2019.6 最新)](https://xiaozhuanlan.com/topic/3571480296?from=timeline) + +[@极速男孩007](https://github.com/ztlyyznf001):本篇文章主要介绍了苹果审核中遇到的一些问题,然后提供了一些针对性的解决方案。并且推荐了一些关于审核的文章做参考。 + +参考链接: +- [Inside Apple’s team that greenlights iPhone apps for the App Store](https://www.cnbc.com/2019/06/21/how-apples-app-review-process-for-the-app-store-works.html) + +### 🐕 [系列文章深度解读|SwiftUI 背后那些事儿 ](https://mp.weixin.qq.com/s/ciiauLB__o-cXXfKn7lL1Q) + +[@zvving](https://github.com/zvving):继上篇[新晋网红SwiftUI——淘宝带你初体验](https://mp.weixin.qq.com/s/x_jFcKeXSbtdK0CnfayFsw)后,淘宝技术团队又带来 SwiftUI 更详细的介绍。 + +本文汇总阐述了 WWDC19 中大量关于 SwiftUI 的内容:从 DSL 所需要的新语法,到 API 设计指南,从 DataFlow 到布局算法,从混合布局到多设备适配…… + +文章涉及技术细节点到为止,而又对 SwiftUI 知识轮廓面面俱到。如果你还没接触过 SwiftUI,想花二十分钟对其知识图谱有个整体认知,这篇文章会是最好的入门指南。 + + +### 🐕 [GMTC2019 演讲实录|闲鱼基于 Flutter 的架构演进与创新](https://mp.weixin.qq.com/s/-IN1D99TqpjKZRQTAbaOrQ) + +[@Parsifal](https://weibo.com/parsifalchang):GMTC2019 已于上周圆满结束。闲鱼作为国内率先大规模尝试 Flutter 的团队,也在这次 GMTC 上做了关于闲鱼是如何使用 Flutter 做混合式开发以及业务落地上的分享。Flutter 作为一个跨端解决方案,与原生混编的问题是其必然会遇到而且接受考验的。本次演讲,闲鱼团队围绕着以下两个问题,分享了闲鱼团队是如何演进和创新 Flutter 架构的。 + +- 如果在一个已经存在的 App 中加入 Flutter,如何让 Native 与 Flutter 进行无缝的衔接,同时保证相互开发之间的隔离性 +- 如果在 Flutter 的容器中,使用已有的 Native UI 组件,在 Flutter 与 Native 渲染机制不同的情况下,怎么保证两者的无缝衔接以及高性能。 + +### 🐎 [监控所有的 OC 方法耗时](https://juejin.im/post/5d146490f265da1bc37f2065?utm_source=gold_browser_extension) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):App 卡顿,绝大部分都是因为主线程卡顿造成,所以可以通过监控主线程运行的 OC 方法来优化代码质量和性能问题。 + +[@Damonwong](https://github.com/Damonvvong): 作者在学习完[《戴铭的iOS开发高手课》](https://time.geekbang.org/column/intro/161?code=0eTznNzpAbVisw%2FesJ9iM32u2ctcY8OqwgMuqSlv5OE%3D&utm_term=SPoster) 之后,了解到了如何 hook objc_msgSend 写了一个如何监控所有 OC 方法耗时的小工具。并详细说明了代码实现的原理,是一个值得学习的文章。 + +然而,hook objc_msgSend 涉及到汇编的知识,如果对汇编不太熟悉的朋友,可以看一下作者的另外一篇文章 [arm64程序调用规则](https://wukaikai.tech/2019/05/19/arm64%E7%A8%8B%E5%BA%8F%E8%B0%83%E7%94%A8%E8%A7%84%E5%88%99/#%E5%87%BD%E6%95%B0%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C) + +### 🐎 [BlockHook with Private Data](http://yulingtianxia.com/blog/2019/06/19/BlockHook-with-Private-Data/) + +[@Parsifal](https://weibo.com/parsifalchang):Block 作为 Objective-C 上的闭包实现,为我们编写回调代码带来了极大的便利。享受这样的便利之余,我们也会有场景想 Hook 某些 Block 来做一下特定的业务,但事实上 Block 的 hook 并不像 Method Swizzling 那么简单。而杨萧玉的 [BlockHook](https://github.com/yulingtianxia/BlockHook) 就解决了这样的问题。 + +本文从介绍 BlockHook 是如何解决带有“私货”而不能被正常 Hook 的 Block 的问题出发,揭秘了这些特殊 Block 是如何被实现的。由于此类文章资源很少,对于我们想深入了解 Block 同学十分值得细读。文章很短,但干货很足。 + +### 🐎 [[译]我第一次体验Kotlin Native](https://juejin.im/post/5d1716556fb9a07ef5624af8?utm_source=gold_browser_extension) + +[@邦Ben](https://weibo.com/linwenbang):Kotlin 1.3 的发布,带来了跨平台的能力(仿佛不会跨平台的都不是好语言),Kotlin 可以生成多个平台的代码(iOS,MacOS,Android,Windows,Linux,WebAssembly),本文中经过编译器处理后会生成对应平台的代码,部分平台能力还需要手动进行桥接(跨平台迈不过的坎)。初看,Kotlin 跨平台能力还未完备,还需一段发力期,还是让我们拭目以待吧。 + +### 🐕 [How I negotiated a $300,000 job offer in Silicon Valley](https://blog.usejournal.com/how-i-negotiated-a-software-engineer-offer-in-silicon-valley-f11590f5c656) + +[@老驴](https://www.weibo.com/6090610445/):这篇文章其实对国内的程序员参考价值不大。文章讲的是一个美国程序员在跳槽过程中如何利用自己有的多个不错 offer 来进行相互竞价的过程。因为国内的面试情况和北美的不太一样,所以也不能拿来套用,仅供参考吧。 + +顺便,如果你对北美软件工程师面试相关信息感兴趣的话,也可以看看之前我写的一篇[文章](https://xiaozhuanlan.com/topic/4263189057)。 + +### 🐢 [WWDC session videos recap](https://github.com/Blackjacx/WWDC) + +[@红纸](https://github.com/nianran):今年 WWDC 有超过 100+ 的视频总量,我们很难跟进每个视频的内容,但是本文作者为我们罗列了一个视频摘要清单。我们可以通过摘要,快速把握住此 Session 的重要内容。当然我们也可以通过摘要来辨别视频内容的价值,是否值得我们继续细化深入细节。 + +### 🐕 [Dart | 什么是Mixin](https://juejin.im/post/5bb204d3e51d450e4f38e2f6) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Dart 是一门取众长的编程语言,语法简介明了,Mixin 更是其相当亮眼的设计,很多人把他理解为 Java 之于 interface ,Swift 之于 extension,小编觉得这么理解都可以,但是 Mixin 更强大,[本文](https://juejin.im/post/5bb204d3e51d450e4f38e2f6)详细的带你了解 Dart 的 Mixin 究竟为何物。 + +## 代码 + +### [About-SwiftUI](https://github.com/Juanpe/About-SwiftUI) +[@水水]:自从苹果公司宣布了 SwiftUI 的主题演讲之后,大量的文档、示例、视频和教程就出现了。此存储库的目标是收集所有这些信息,让你方便的查找有关 SwiftUI 的信息。 + +## 设计 + +### [选一个好的背景让你的设计更出彩!](https://mp.weixin.qq.com/s/5Q3Xb_IG3O2Lus05aY7zSQ) + +[@邦Ben](https://weibo.com/linwenbang):如果你有兴趣或者正在做独立 App 的话,你一定会绕不开设计,因为不是所有人都那么幸运有一个专属的设计师搭档,该文章介绍了一些可以获取到好背景的一些资源网站,有兴趣的可以看下~ + + +## 内推 + +### 字节跳动 2020 届提前批内推 + +**字节跳动**面向 2020 届毕业生的【秋招提前批】限时开启,**iOS/Android 客户端、前端,后端、测试开发等**岗位均开放名额,直走**内推通道**,提前拿 offer。 + +- 简历发送至:[zengming.0@bytedance.com](mailto:zengming.0@bytedance.com) (推荐标题:校招提前批-岗位-姓名-城市),如:校招提前批-iOS客户端-王富贵-北京 +- **不影响**后续秋招再次投递,欢迎转发~ +- 有效时间截止 2019.07.17 + +PS:王富贵表示:这是个很好的机会哟,走过路过不要错过 (~o ̄3 ̄)~ + +### 常规内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#74-2019.07.08.md b/Reports/2019/#74-2019.07.08.md new file mode 100644 index 000000000..26529d747 --- /dev/null +++ b/Reports/2019/#74-2019.07.08.md @@ -0,0 +1,207 @@ +# 老司机 iOS 周报 #74 | 2019-07-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS 三大组织联名T恤,限时销售](https://m.tb.cn/h.e62VJCJ?sm=6bb793) + +![](https://gd1.alicdn.com/imgextra/i2/38447709/O1CN01YCZQhR26oloQ4ciT0_!!38447709.png_400x400.jpg) + +### [Design+Code 的 SwiftUI 教程限时优惠](https://h5.youzan.com/v2/goods/3eua57deaxury?dc_ps=2286991227876280320.200001&redirect_count=1) + +![](https://images.xiaozhuanlan.com/photo/2019/d585de14b83c09b02dfc77251164fe52.png) + +**扫码购买在五折基础上输入 iOSWeekly 优惠码再优惠 20 元,限时购买!!!** + +## 新手推荐 + +### [Decode Row & Column](https://medium.com/@greg.perry/decode-row-column-8b88ad2d758c) + +[@邦Ben](https://weibo.com):如果你进行 Flutter 开发,那一定会接触到 Row 和 Column 这两个 Widget,这篇文章就非常详细的举例介绍了两个组件的里面的各个参数的使用。主要涉及的是 mainAxisAlignment,crossAxisAlignment 和 mainAxisSize。其中 mainAixsSize 为控制是不铺满剩余空间。 + +## 文章 + +### 🌟 🐕 [Revisit iOS Autorelease 之不经意间可能被影响的优化](https://satanwoo.github.io/2019/07/02/RevisitAutorelease/) + +[@AidenRao](https://weibo.com/AidenRao):非常硬核的一篇文章,编译器会判断方法的名是否以 alloc / new / copy / mutableCopy 开头,如果不是,则自动将返回的对象注册到 Autorelease Pool 中。且编译器会对 objc_autoreleaseReturnValue 和 objc_retainAutoreleasedReturnValue 进行基于 TLS(Thread Local Storage) 的判断优化,本质上并不会执行 autorelease。 + +但这个优化逻辑很有可能被我们不知情下编写的代码所改变,产生奇怪的问题。作者构建了一个 demo,从汇编入手,逐步分析,一段不起眼的代码是如何使 autorelease 优化失效,导致 MemoryGraph 中存在大量被 @autoreleasepool content 持有的数据,产生内存不释放问题(并非是内存泄漏,Leaks 是查不出来的)。 + +### 🌟 🐕 [全网最全 Flutter 与 React Native 深入对比分析](https://juejin.im/entry/5d0bad4c5188257152111ed8) + +[@tom510230](https://xiaozhuanlan.com/u/6682065345):本文作者从 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面,对当前的 React Native 和 Flutter 进行全面的分析对比。实际上本篇文章有一些地方没有考虑到,这里补充一下相关的细节 + +1. 开发人员上手成本:毫无质疑,基于 JS 语法的 React Native 方案,开发者体验更好 +2. 与 Native 的混编能力:这方面两个框架是五十步笑百步,都不能做到100%完美。从头条、闲鱼、携程、腾讯等大厂的经验来看,只要有人力做基础设施,这都不是事 +3. 真·跨平台:去年 Airbnb 的文章让大家认识到,React Native 其实是个『假』跨平台方案,JS 部分需要各种判断容器的代码不说,很多时候还要纠结要不要使用原生插件(光看UI层)。Flutter 这方面相对来说,代码复用率会高很多。 +4. 小程序方向:基于 React Native 的小程序方案已经有了,并且不少大厂都已经开发上线,基于 Flutte r的小程序方案大家还在讨论中,暂时未确定 Flutter 在小程序框架上面会比 React Native 优秀多少 + +### 🐕 [360 移动端性能监控实践 QDAS-APM](https://mp.weixin.qq.com/s/Vq0TDiLbexxBlqlf_lilnQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):App 的性能问题可能会严重影响用户体验,这些性能问题包括:崩溃、网络请求错误或超时、UI 响应速度慢、主线程卡顿、CPU 和内存使用高、耗电量大等等。通过对日常问题的归纳总结和学习业内相对完善的性能监控平台的实现原理,360 研发团队研发了一套移动端线上性能监控方案——QDAS-APM。文章按照功能详细介绍了实现细节和原理,目前已经实现了以下功能监控: + +- 页面渲染时长 +- 主线程卡顿 +- 网络错误 +- FPS +- 大文件存储 +- CPU +- 内存使用 +- Crash +- 启动时长 + +参考文献 +- [iOS性能监控方案](http://www.cocoachina.com/articles/19680) + +### 🐕 [iOS 开发:『Blocks』详尽总结 (二)底层原理](https://juejin.im/post/5d14630ff265da1b725c1433) + +[@老峰](https://github.com/GesanTung):本文是作者 Blocks 系列文章的第二篇,比较详细的的介绍了 Blocks 相关的以下内容: + +- Blocks 的实质 +- Block 截获局部变量和特殊区域变量 +- Block 的存储区域 +- Block 的循环引用 + +近些年 iOS 社区介绍 Blocks 底层原理的文章并不少,不了解相关知识的同学们可以看看。 +推荐阅读 +- 书籍:『Objective-C 高级编程 iOS 与OS X 多线程和内存管理』 + +### 🐕 [Using Sky Segmentation to create stunning background animations in iOS](https://medium.com/flawless-app-stories/using-sky-segmentation-to-create-stunning-background-animations-in-ios-4b4b2548061) + +[@kyo](https://github.com/KyoLi):如果有玩过摄影的同学可能会有过因为沉闷或者灰蒙蒙天空导致拍出来的照片不够理想,如果要拯救这张照片,换一下天空也是一种方式。于是,你可能点开 PhotoShop ,使用快速选择工具选中天空然后进行替换。之所以可以在 PS 中快速选择天空,是因为天空的颜色是均匀相似的,但有时候可能也需要多调整几下。想象一下,如果通过一款工具自动识别天空并进行替换,会不会是一件很有趣的事情?而这一款工具如今提供给了我们 iOS 开发者,它就是 Fritz 。它通过机器学习实现了天空分割这样一个计算机视觉任务,让我们开发者可以通过它去实现一些有趣的 idea 。笔者就很想用它来做一个小工具 app 以拯救笔者众多因天色不好而又懒得去一张张用 PS 替换的废片,有兴趣或者有更好想法的同学不妨用它来试试。[Fritz 项目地址](https://github.com/fritzlabs/fritz-ios-tutorials/tree/master/FritzSkyReplacementDemo) + + +### 🐕 [Rendering SwiftUI views to HTML](https://worthdoingbadly.com/swiftui-html/) + +[@J_Knight_](https://github.com/knightsj):本文作者开发了一个从 SwiftUI 到 HTML 的工具,目前该工具并没有支持所有的 SwiftUI 元素,作者只是将 SwiftUI tutorial 的 demo 的第一页渲染到了 HTML。 + +作者分享了在开发这个工具的过程中遇到的问题和解决办法以及一些收获,还同时在渲染方式上对比了 React 和 Flutter, 在语言层面上对比了 C++ 和 Java,而且对 Go 也做了一定的对比和分析。 + +推荐阅读: + +- [SwiftRocks’s article on SwiftUI’s tricks](https://swiftrocks.com/inside-swiftui-compiler-magic.html) +- [kateinoigakukun’s article on how SwiftUI uses ABI stability for its magic](https://kateinoigakukun.hatenablog.com/entry/2019/06/09/081831) + +### 🐕 [Uber 使用 QUIC 协议优化 App 网络性能](https://eng.uber.com/employing-quic-protocol/) + +[@四娘](https://kemchenj.github.io):Uber 由于使用场景的特殊性,所以对于网络延迟有比较严格的要求,延迟过久的情况经常被定位到系统的 TCP 实现上,所以他们最后决定改为使用 QUIC 协议。 +QUIC 作为新一代 HTTP3 的底层协议,它在连接建立,拥堵控制等方面都比 TCP 更加先进,在这篇文章里他们详细介绍了两种方案的区别,QUIC 接入的过程以及接入后的网络延迟数据。 + +### 🐕 [Mocking a remote API in iOS](https://medium.com/swlh/mocking-a-remote-api-in-ios-4376b0cab962) + +[@xiaofei86](https://weibo.com/xuyafei86):本文作者使用简单的代码演示如何通过面向协议的方式 Mock 网络层数据,并说明 Mock 数据的重要性和好处(模拟网络延迟、网络错误,跳过登录等)。我们在实现自己的网络层时可以借鉴。 + +### 🌟 🐕 [知乎 iOS 客户端工程化工具 Venom](https://www.jianshu.com/p/b65d7bb7fa32) + +[@红纸](https://github.com/nianran):Venom 取名于《毒液》,是知乎客户端组解决组件化集成协作于一体的组件化管理体系,完整的 Venom 包含三个部分: + +1. Venom macOS App:可视化管理组件的集成 GUI 工具 +2. Venom 内核:基于 Cocoapods 的 DSL 扩展,在包装之上还有指定的扩展元素,最终还是会转化为 pod 相关的配置进行操作 +3. Venom Server:远端 Server 管理配置等 + +其主要解决了以下几个组件化核心问题: + +1. 工程构建:锁定了依赖 Gem 工具集版本和 Cocoapods 版本,保证里项目构建环境的统一,开发人员无需莞城工程配置问题 +2. 二进制构建:Venom 可以看做为 pod 的超集,提供了,源码于静态库切换管理的相关功能,切换方案参考[知乎 iOS 基于 CocoaPods 实现的二进制化方案​](https://links.jianshu.com/go?to=https%3A%2F%2Fzhuanlan.zhihu.com%2Fp%2F44280283)。 +3. 组件管理:定制化的本地组件开发(类比于 Cocoapods 中的 :path 情况下开发),其他仓库可以指定任意 tag/commit/branch(类比于 Cocoapods 中的 :git 情况下开发) +4. 调试工具:据文中描述,Venom 可以做到源码与静态库“共存”。这样的全局搜索就会包含全部源码不会含有遗漏的地方,另外打包使用 GCC 的 **fdebug-prefix-map=oldPath=newPath** 参数改写 Debug 模式下的源代码路径,达到静态库到源码的快速切换,达到编译调试源码的效果 +5. 其他:此外还提供了一些其他的项目定制化功能,类似于“蜂鸟”的图片扫描工具,项目证书管理等 + +> 扩展阅读:[滴滴的 OneTool](https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247488098&idx=1&sn=9cdf45a7b5ccf94eb6279856ec0dd4c5&chksm=f951a721ce262e3737f8aa99663c3b34f86420f11fb70ce6208eb96bcf6e10c6fbd00e4fb234&scene=27#wechat_redirect) 与 [京东的 iBiu](https://www.infoq.cn/article/jd-ios-component-management/) + +### [做有温度又有生命的产品,专访色采团队](https://mp.weixin.qq.com/s/GvECV6nKYpfNJJ86EJ3dIg) + +[JimQ](https://github.com/waz0820) 这是「Price Tag」对色采 APP 主创的一篇专访,谈了产品的整体概况、发展历程、产品初衷、产品特色、曾遇到的挑战、团队成员的协作方式,尤其 APP 属于三位全职工作者的业务爱好产出,谈到他们对「独立开发者」的理解,对独立开发感兴趣的小伙伴推荐阅读。 + +## 工具 + +### [Flutter Studio, Version 2](https://medium.com/@pmutisya/flutter-studio-version-2-41cce10fcf3d) + +[@张嘉夫](https://github.com/josephchang10):Flutter Studio web 应用的更新目标是更灵活、更完整、响应速度更快并且具有更高的精度。app 现在可以更好地适应不同尺寸的屏幕,在各类设备的各种方向上都精确显示,让你更一致、更专注地工作。此外 Flutter Studio 2 现在还可以生成完整的、可运行的代码和构建文件,并且具有更完整的 widget 集,甚至有一些从未在 flutter.io 的 widget 目录里出现过。 + +## 代码 + +### 🌟 [SwiftWebUI](https://github.com/swiftwebui/SwiftWebUI) + +[@Damonwong](https://github.com/Damonvvong):目前 SwiftUI 无疑已经成为 iOS 开发者必须要关注的技术了。但是 Apple Only 的跨平台理念还是让不少人有一些许失望。 + +但是,上周一个曾在 Apple 工作的开发者 [Helge Heß](https://github.com/helje5) 就打破了 Apple Only 的跨平台格局,在 SwiftUI 的基础之上,开发了一个 SwiftWebUI 框架,可以使用 Swift 直接写 Web 页面。 + +虽然,目前还处于 Demo 阶段,但是我觉得这是一个特别值得期待的技术。关于如何使用,这里有一篇介绍,感兴趣的可以阅读以下。[The missing ☑️: SwiftWebUI](http://www.alwaysrightinstitute.com/swiftwebui/?from=singlemessage&isappinstalled=0) + +### [ValidatedPropertyKit](https://github.com/SvenTiigi/ValidatedPropertyKit) + +[@JimQ](https://github.com/waz0820):我们日常开发中,经常需要对定义的属性值加上约束条件,于是就需要重写这个属性的 `set`/`get` 方法,并加上各种约束逻辑。约束逻辑可能很简单(eg. 如果一个 string 属性 `isEmpty`(即长度为 0)则自动转换为 nil),但又很通用,或者对我们的业务来说很常用。这样的逻辑多了,我们的属性定义就变得冗长且重复。主说要有封装,于是就有了 `ValidatedPropertyKit`。它主要包含以下特性: + +- 基于 @propertyWrapper 语法糖,让验证属性变得轻松而简洁。 +- 内置了很多通用的验证,方便开箱即用。支持检测当前的值是否符合指定的验证,如果不符合可以回退到最后一次符合验证时的值,且支持给属性指定 keyPath 加验证。 +- 支持使用逻辑运算符(即与或非)来组合验证。 +- 可以根据自己的需求灵活地定制和配置,方便针对自己业务的常用逻辑进行统一封装。 + +相信受此启发,会有更多基于 @propertyWrapper 的库出现(比如与 diff 的结合),让我们的属性实现变得更加优雅、美好。 + +### [Burritos](https://github.com/guillermomuntaner/Burritos) + +[@Parsifal](https://weibo.com/parsifalchang):`@propertyWrapper` 作为 SwiftUI 广泛使用的特性(`@State`, `@Binding`, `@ObjectBinding`, `@EnvironmentObject`, 和 `@Environment` 等),已经在 WWDC19 中被大家所熟知。Burritos 则是利用这个特性,扩展了更多的 Property Wrapper 便于使用,如常见的 `@DynamicUIColor`、`@UserDefault` 和 `@DefaultValue` 等都能有效地减少我们的编码量。 + +> 扩展阅读: +> [Property Wrappers Proposal](https://github.com/DougGregor/swift-evolution/blob/property-wrappers/proposals/0258-property-wrappers.md) +> [SwiftUI 和 Swift 5.1 新特性(2) 属性代理Property Delegates](https://juejin.im/post/5cfcf51151882518e845c17c) +> + +### [TGIF-iMatrix/MXFlutter: 基于JS的高性能Flutter动态化框架](https://github.com/TGIF-iMatrix/MXFlutter) + +[@tom510230](https://xiaozhuanlan.com/u/6682065345):来自于手机 QQ 团队的开源代码,主要是解决 Flutter 开发中的痛点:不能动态化。原理大致就是:在上层用自己喜欢的开发语言进行 UI 控件的声明(通常也是脚本语言),然后丢给 Flutter 的渲染引擎进行渲染,从而达到了动态化开发的目的。 + +整体架构如下: +![整体架构](https://user-gold-cdn.xitu.io/2019/7/8/16bd01522f396359?w=876&h=460&f=png&s=282427) + +> 扩展阅读: +> [基于JS的高性能Flutter动态化框架MXFlutter](https://user-gold-cdn.xitu.io/2019/6/25/16b8cec2d34ded87) + +## 书 + +### [Using Combine](https://heckj.github.io/swiftui-notes/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): WWDC19 上大放异彩的 SwiftUI 相信大家都不陌生了,刚开始那几天,你几乎可以从各类开发者社区新闻中看到关于它的文章和评论之类,但是在其背后还有一个重要的彩蛋被忽视了,那就是 Combine 。Combine 是随着 SwiftUI 一起发布的一款函数响应式编程框架,如果你之前有接触过 RxSwift/ReactiveCocoa ,你就能明白 Combine 是个什么东东,他们有相似点,但 Combine 也有自己的独到之处,关键是由官方发布。[Using Combine](https://heckj.github.io/swiftui-notes/) 这本书可谓是手摸手教你使用 Combine, 更棒的是,书中很多例子是从 [swiftui-notes](https://github.com/heckj/swiftui-notes) 直接摘过来的,搭配食用效果更佳哟😄,本书开源的哟... + +## 内推 + +### 字节跳动 2020 届提前批内推 + +**字节跳动**面向 2020 届毕业生的【秋招提前批】限时开启,**iOS/Android 客户端、前端,后端、测试开发等**岗位均开放名额,直走**内推通道**,提前拿 offer。 + +- 简历发送至:[zengming.0@bytedance.com](mailto:zengming.0@bytedance.com) (推荐标题:校招提前批-岗位-姓名-城市),如:校招提前批-iOS客户端-王富贵-北京 +- **不影响**后续秋招再次投递,欢迎转发~ +- 有效时间截止 2019.07.17 + +PS:王富贵表示:这是个很好的机会哟,走过路过不要错过 (~o ̄3 ̄)~ + +### 常规内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + diff --git a/Reports/2019/#75-2019.07.15.md b/Reports/2019/#75-2019.07.15.md new file mode 100644 index 000000000..d8d01d918 --- /dev/null +++ b/Reports/2019/#75-2019.07.15.md @@ -0,0 +1,127 @@ +# 老司机 iOS 周报 #75 | 2019-07-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐎 [为什么Flutter是跨平台开发的终极之选](https://mp.weixin.qq.com/s/R0sk9CGPbBksSnWV9xtGSg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):跨平台开发是当下最受欢迎、应用最广泛的框架之一。能实现跨平台开发的框架也五花八门,让人眼花缭乱。但目前最耀眼的非 Flutter 莫属。本文对 Flutter 进行了多个方面的分析,来阐述为何 Flutter 是目前跨平台开发的终极之选。 + +- 什么是 Flutter +- Flutter 特性 +- Flutter 构建工具 +- 使用了 Flutter 的热门 app + + +### 🌟 🐎 [基于小程序技术栈的微信客户端跨平台实践](https://mp.weixin.qq.com/s/V-H3pF9ytfXRhZG0PGIKsw) + +[@莲叔](https://weibo.com/aaaron7):跨平台是今年热点,本文简单讲述了微信使用小程序技术栈的跨平台框架演进之路,并且先后通过 lvcpp 以及 flutter 改造渲染底层来提升整体表现的性能。今年使用 flutter 渲染层+自定义上层 DSL 的尝试越来越多,不得不说是比较创新的一个思路,毕竟渲染层跨平台才是真正意义的跨平台。 + +### 🐕 [Web 和移动端需要掌握的布局方式 - Flexbox](https://mp.weixin.qq.com/s/WVqnmIbIkxsvBMhHydwHAg) + +[@享耳先森](https://github.com/iblacksun):布局一直是用户端开发的重点,`Flexbox` 布局解决了原来 CSS 盒子模型的一些不便之处。 `Flexbox` 已不止用于 CSS:如 Android 的 `FlexboxLayout`、ReactNative 所使用的 `yoga`,都支持 `Flexbox`。本文浅显的介绍了 `Flexbox` 的基本用法,建议阅读。 + +### 🌟 🐕 [关于iOS离屏渲染的深入研究](https://zhuanlan.zhihu.com/p/72653360) + +[@老峰](https://github.com/GesanTung):在平时的 iOS 面试中,我们经常会考察有关离屏渲染(Offscreen rendering)的知识点。一般来说,绝大多数人都能答出“圆角、mask、阴影会触发离屏渲染”,但是也仅止于此。 + +本文来自即刻技术团队,从 iOS 渲染架构开始深入的介绍了离屏渲染定义、常见离屏渲染场景、离屏渲染的性能影响,以及即刻团队对如何正确使用离屏渲染的思考、渲染性能的优化实践心得。 + +推荐阅读: +- [Mastering Offscreen Render](https://github.com/seedante/iOS-Note/wiki/Mastering-Offscreen-Render) +- [Getting Pixels onto the Screen](https://www.objc.io/issues/3-views/moving-pixels-onto-the-screen/) +- [Andy Matuschak关于离屏渲染的解释](https://lobste.rs/s/ckm4uw/performance_minded_take_on_ios_design#c_itdkfh) + +### 🐕 [Swift vs Flutter - A side by side comparison for iOS development [Infographic]](https://blog.codemagic.io/flutter-vs-swift/) + +[@张嘉夫](https://github.com/josephchang10):在这篇文章里,作者逐一对比了 Flutter 和原生 iOS App(Swift)之间的差异。为了比较,作者构建了两个完全相同的 app,帮助你选择更符合你的需求的平台。具体来说,作者比较了两个平台的创建流程、构建时间、重新加载、Profiling、辅助功能、持续集成、App 尺寸等方面。如果觉得文章太长,也可以直接看文末的对比图。 + +### 🌟 🐕 [iOS 自动化测试标签生成工具接入指南](http://yulingtianxia.com/blog/2018/08/13/TBUIAutoTest-Usage/) +[@水水](https://www.xuyanlan.com/):[TBUIAutoTest](https://github.com/yulingtianxia/TBUIAutoTest) 可以帮开发人员生成UI 控件的标签,便于自动化测试。只需一行代码或一个配置,几乎所有的 iOS Native UI 都会在运行时生成一个页面内唯一且不变的标签。不仅节省了开发人员手动为每个 UI 控件加标签的时间,也节省了测试人员与开发人员的沟通成本。目前已经有几十款 App 接入,其中包含 QQ、今日头条、兴趣部落、NOW直播等,有兴趣的读者可以尝试接入或学习实现哦~ + +### 🐢 [给 React Native 开发者的 Flutter 指南](https://mp.weixin.qq.com/s/MyFjQJqojviYJuQKf5MsGA) + +[@looping](https://github.com/looping):本长文分为上下两篇,从基本语法到布局动画,通过跟 React Native 作对比来帮助更多 RN 开发者快速入门 Flutter 开发。同时本文所列的一些基本概念和问题可以满足平时开发的大部分需求,可作日常开发参考,建议收藏。 + +### 🐕 [Swift Property Wrappers](https://nshipster.com/propertywrapper/) + +[@Damonwong](https://github.com/Damonvvong):要说 Swift 5.1 最期待的特性,那就非 **Swift Property Wrappers** 莫属了,把原先兼容 Objective-C 的 **@** 终于解放出来了,赋予了更多能力。NSHipster 的这篇文章就很好的解释了 **Swift Property Wrappers** 是什么以及可以怎么用。大概列举了一下几个用处: + +- 约束变量值 +- 修正输入的值。比如过滤输入值中的空格。 +- 修正比较逻辑。比如忽略字符大小写进行比较。 +- 记录值的变化 + +当然还有一些限制,比如无法参与错误处理、不能被别名、多个 **Property Wrappers** 难以组合、第一类型不能直接依赖 **Property Wrappers**、文档写起来很难、使 Swift 更加的复杂等等。 + +### 🐕 [UIStackView](https://nshipster.com/uistackview/) + +[@zvving](https://github.com/zvving):早在 iOS9 苹果就引入 UIStackView 来支持类似 Flexbox 的容器布局概念,最新发布的 SwfitUI 中也有对应 HStack、VStack、ZStack 的定义。如果你还没使用过这一简单而又灵活的布局方式,强烈推荐 NShipster 刚发布的这篇入门文章。 + + +## 工具 + +### [UIKit equivalent in SwiftUI](https://goshdarnswiftui.com/) + +[@Parsifal](https://weibo.com/parsifalchang):SwiftUI 吸引了众多开发者尝试,这个网站整理了关于新手入门 SwiftUI 需要了解的一系列东西。包含: + +- SwiftUI 的高频 FAQ +- UIKit 与 SwiftUI 的组件对照表 +- SwiftUI 视图和控件简单介绍和使用 +- SwiftUI 复杂布局介绍和使用 +- 如何在 SwiftUI 中集成 UIKit 组件 +- 如何在 UIKit 中集成 SwiftUI 组件 +- 优质学习资源链接 + +如果你刚接触 SwiftUI,这个网站可以帮你更快速地掌握基于 SwiftUI 的 App 开发,也可以作为平常开发中的速查表使用。 + +> 由喜欢瞎倒腾的 [Liaoworking](https://github.com/Liaoworking) 推荐 + +### [Visual-Regular-Expression](https://github.com/White-White/Visual-Regular-Expression) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):`Visual-Regular-Expression` 是使用 Swift 实现的正则解析引擎,将解析结果转换成 NFA,并动态展示每一步的匹配过程。它可以帮助你更好的理解正则和 NFA 的运行原理。 + +### [CocoaPods 历险 - Resolver 仲裁入口解析](https://mp.weixin.qq.com/s/o-v41MlTAX2Oeg_BeSLKEw) + +[@xiaofei86](https://weibo.com/xuyafei86):在系列文章 [CocoaPods 历险 - 总览](https://www.desgard.com/cocoapods-1) 中我们得知了 CocoaPods 组件的构成和职责,以及 pod install 命令执行后 prepare、resolve_dependencies、download_dependencies、validate_targets、generate_pods_project 过程的总览。其中,resolve_dependencies 过程中包含了 Resolver 的入口过程以及 Molinillo 仲裁算法,本篇文章则以 入口过程的解析为主题展开。后续会具体深入到 Molinillo 图算法中去认识仲裁流程。 + +## 代码 + +### [Swift-30-Projects/Project 04 - TodoTDD](https://github.com/soapyigu/Swift-30-Projects/tree/master/Project%2004%20-%20TodoTDD) + +[@Parsifal](https://weibo.com/parsifalchang):iOS 专家[故胤道长](https://weibo.com/soapyigu) 在读完 [Test-Driven iOS Development with Swift 4](https://www.amazon.com/Test-Driven-iOS-Development-Swift-maintainable/dp/1788475704) 一书后尝试写了个 ToDoList 的 Demo App 来应用这门技术。这个简单的例子包含了如何写单元测试、UI 测试、网络层测试和数据层测试等等。整个 App 的测试覆盖率达到了 91.9%。 + +> [Swift-30-Projects](https://github.com/soapyigu/Swift-30-Projects) 是[故胤道长](https://weibo.com/soapyigu) 在维护的一个基于 Swift 的开源仓库,内容包含如何使用 Swift 开发常规 iOS App、各类开源框架、设计模式以及 TDD 等。如果你正在入门学习 Swift,这个仓库可以帮你更快了解到 Swift 老手们是如何使用 Swift 开发 App 的。 + +> 关于 TDD 的入门,可以参考周报 [26 期](https://github.com/SwiftOldDriver/iOS-Weekly/blob/59bfdf3859a67d5667319000e4ee70f8f9cd6f76/Reports/%2326-2018.07.09.md)推荐过的 [Test Driven Development Tutorial for iOS: Getting Started](https://www.raywenderlich.com/185640/test-driven-development-tutorial)。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#76-2019.07.22.md b/Reports/2019/#76-2019.07.22.md new file mode 100644 index 000000000..718621757 --- /dev/null +++ b/Reports/2019/#76-2019.07.22.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #76 | 2019-07-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐢 [Facebook 发布全新 JS 引擎!专注提高 React Native 应用的性能](https://mp.weixin.qq.com/s/0KxLQjI0jWxSt7sLqkS6Hw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):React Native 作为老牌的跨端开发解决方案,在跨端开发技术栈中的地位一直稳如泰山,最近 Facebook 发布了全新的 JavaScript 引擎 - Hermes,其专注于提高 React Native 应用的性能,之前一直诟病 React Native 性能问题的同学们可以试试了,小编友情提示:本次发布的 React Native 0.60 版本还有其他惊喜。 + +## 文章 + +### 🌟 🐢 [SwiftUI:苹果的一次天才尝试](https://mp.weixin.qq.com/s/xcPBHcpPhgwoR2U7WpWoPA) + +[@Parsifal](https://weibo.com/parsifalchang):作者使用 SwiftUI 构建网易严选的 iPad 版本后,回过头来假设自己是 SwiftUI 设计者,来循序渐进分析 SwiftUI 是如何博众家之长以现在的样子亮相 WWDC19。SwiftUI 有两个最突出的特点:基于 Swift 的 DSL 以及基于数据流驱动的编程范式,文中则也是从这两个点出发,分析了现阶段流行的各类语言采取的方案,且猜测了苹果是如何从这些方案中找到最适合 SwiftUI 的解决思路。SwiftUI 得益于 Swift 对其的全力支持,使得更容易设计出对开发者十分友好的开发体验。 + +最后,作者还在对 SwiftUI 的评价中提出了一个比较有意思的观点 - “Combine 所提倡的响应式编程不适合处理 UI、交互逻辑”。响应式编程是使用异步数据流进行编程,它把从用户触发交互到逻辑处理再到交互反馈用户,当做信号源触发的逻辑链路上的数据变化进行处理,而 Combine 正是苹果借鉴了目前社区内的多种实现方案完成的为 SwiftUI 配套定制的数据管理方式。那么苹果最终所选择的这种编程范式,是否真的适合 SwiftUI 呢?又或者说如果不用 Combine 我们有没有其他更合适的选择?作者抛出了一个很值得大家继续讨论的观点。 + +> 关于响应式编程,周报编辑 [JasonYu](https://weibo.com/jasonyuh) 曾写过 - [为什么需要 Reactive Programming?](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2019/%2366-2019.05.06.md) 一文,也很值得大家品味。 + +### 🐕 [[译] 使用 Swift 5 构建 iOS 移动端群聊 App](https://juejin.im/post/5d2c6e846fb9a07ebb0564ae) + +[@老峰](https://github.com/GesanTung):本文介绍了以 PubNub SDK 基于类 MQTT 的消息订阅发布即时通信协议构建匿名聊天应用的实现过程,采用 Swift 5 简易实现了消息实时发送接收,存储历史消息功能,感兴趣的读者可以点这里[查看源码](https://github.com/SambaDialloB/PubNubChat)。 + +> [🚧 PubNub](https://www.pubnub.com/docs/swift/pubnub-swift-sdk):为移动终端和网络应用开发提供实时信息通讯服务,现已有 70 多个 SDK,可以支持各种 App 和服务集成进自己的网络,提供每个月一百万条免费的消息。 + +### 🐕 [Building a Trello-like iOS App with Drag & Drop API](https://www.appcoda.com/drag-and-drop-api/) + +[@张嘉夫](https://github.com/josephchang10):AppCoda 的教程,教你如何用 Drag & Drop API 来构建一个类似 Trello 的 iOS App。如果我们想让用户能够在屏幕上来回移动数据,那拖拽就是最自然的交互方式,Trello、Jira 等 app 大量采用了拖拽的交互方式。在 iOS 11 SDK 发布之前,iOS app 的拖拽功能实现非常复杂,也很难让体验足够流畅。但从 iOS 11 开始,Apple 终于在 Cocoa Touch SDK 中提供了方便使用的 Drag & Drop API。 + + +### 🌟 🐎 [KVO在不同的二进制中多个符号并存的Crash问题 | SatanWoo](https://satanwoo.github.io/2017/09/11/KVO-CRASH/?nsukey=CGyordgRh0EV35bjBYi99dHiMuqF1xt%2BtRsP%2FuGBF7IlcF2xAPOWpoImKYOT%2FxRuycrPVoVq%2FAxxvVxVwandzgpmXxbcdacSBLOG2moVviVdV3iK1Wr6sfqIHRWSsJZHtiX5uyyn8g5bNuRNQVJ2ow7eT%2FLYHcfZOXOdcX8m0R5lQwwNwX7PanbfrnV1dPAmU2CwRfiaiYpGGCZYQCxmxg%3D%3D) + +[@莲叔](https://weibo.com/aaaron7):熟悉 iOS 动态库的同学都知道,由于iOS 的机制设计,在主文件和动态库中是允许存在同名类的,但这个机制也有潜在的坑,既和 KVO 的机制存在冲突,导致 crash。本文作者详细分析了这个坑的来龙去脉,并附带介绍了很多 iOS 的 runtime 相关知识,信息量很大,推荐阅读。 + +### 🐢 [Swift5.0 的 Runtime 机制浅析](https://juejin.im/post/5d29fb63e51d4510aa01159d) + +[@AidenRao](https://weibo.com/AidenRao):Objective-C 的 Runtime 机制大家了解的比较多,而 Swift 底层原理研究文章比较少。作者通过与 OC 的对比,以及将程序运行时的汇编代码,翻译成 C 语言伪代码,向你解析 Swift 中内部对象是如何创建的,方法以及函数调用又是如何实现,成员变量的访问以及对象内存如何布局。 + +### 🐎 [Better Storyboards with Xcode 11](https://useyourloaf.com/blog/better-storyboards-with-xcode-11/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了苹果在 Xcode 11 中,关于 Storyboard 的两个改进。第一个改进是 Segue Action。在 Storyboard 跳转之前,我们可以使用 Segue Action 来手动初始化目标控制器。第二个改进是 instantiateViewController 方法。在 iOS 13 以后,我们可以使用这个方法提供的构造 block 来实现我们的自定义控制器的构造函数。 + +### 🐎 [如何写出让同事无法维护的代码?](https://mp.weixin.qq.com/s/dHu36KMryF3HFPcMUXLnqA) + +[@tom510230](https://xiaozhuanlan.com/u/6682065345):本文举出了大量的例子,来阐述糟糕的代码长得什么样,有以下六个部分 + +1. 程序命名:糟糕的命名带来糟糕的阅读心情 +2. 伪装欺诈:表面和行为不一致会让代码维护性下降很多 +3. 文档和注释:文档和注释跟代码一样需要维护 +4. 程序设计:多看看最佳实践会让代码写起来更优雅 +5. 测试:测试先行对于代码质量有很大的帮助 +6. 其他 + +总体而言,如果以上的例子全部都避免了,那代码的可读性就非常强了,读者不妨看看自己的代码,有哪些地方命中了文中的 bad case ,并做出相应的修改。 + +## 工具 + +### [2019年最优秀的JIRA项目管理工具替代方案](https://mp.weixin.qq.com/s/zYfBXRfjI4eLNK6BX6vY-Q) + +[@anotheren](https://github.com/anotheren):项目管理是大家到一定阶段后所必须面对的。本文列举了 12 种可以替代 JIRA 的项目管理工具。如果你还没有用过任何一种,是时候尝试一下了。 + +### [SwiftUI-Cheat-Sheet](https://github.com/SimpleBoilerplates/SwiftUI-Cheat-Sheet) + +[@水水](https://www.xuyanlan.com/):一个 SwiftUI 相关的一些 API 使用示例,当你使用 SwiftUI 时,可以快速获取到相关代码用于参考。 + +### [XCAssetsKit](https://github.com/natmark/XCAssetsKit) + +[@JimQ](https://github.com/waz0820):.xcassets 解析器,Swift 实现。.xcassets 的功能越来越强大,系统也提供了很多工厂方法去使用其中的资源,比如 `UIImage(named:)`。但新增的 API 无法用于旧版系统,比如 `UIColor(named:)`,iOS 11 以下就无法使用。这个时候 XCAssetsKit 就派上用场了,它可以精准读取 .xcassets 中的资源,用于各种自定义需求。目前已支持几种常用的资源解析,仍在不断完善。 + +## 代码 + +### [NSAttributedStringBuilder](https://github.com/ethanhuang13/NSAttributedStringBuilder) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是使用 SwiftUI 样式语法实现的 NSAttributedString 功能,和传统上使用 NSAttributedString 不同,现在使用 NSAttributedStringBuilder,可以使用类似 SwiftUI 的语法来声明 NSAttributedString。除了更清晰的 NSAttributedString 语法之外,由于 NSAttributedStringBuilder 使用了函数构造器,它还允许 API 在 UIViewRepresentable 中构建组件。 + +### [Runtime](https://github.com/wickwirew/Runtime) + +[@四娘](https://kemchenj.github.io):一个基于 Metadata 的 Swift 运行时库,可以很方便地查看类型信息,并且动态地调用属性 getter 和 setter: + +```swift +let info = try typeInfo(of: User.self) +let property = try info.property(named: "username") +let username = try property.get(from: user) +try property.set(value: "newUsername", on: &user) +``` + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#77-2019.07.29.md b/Reports/2019/#77-2019.07.29.md new file mode 100644 index 000000000..de8f58855 --- /dev/null +++ b/Reports/2019/#77-2019.07.29.md @@ -0,0 +1,157 @@ +# 老司机 iOS 周报 #77 | 2019-07-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🌟 [Flutter-Notebook](https://github.com/OpenFlutter/Flutter-Notebook/blob/master/README.md) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter-Notebook 由 OpenFlutter 小组产出,包含了很多常规移动端开发的组件/效果实现, 在目录的最后还附上了一本 [Flutter in Action](https://github.com/flutterchina/flutter-in-action), 着实为一份 Flutter 入门学习不可多得的资料: + +- 官方控件效果实现 + - 视图 + - 功能 + - 动画 +- 优秀三方库 +- 状态管理 +- 其他 + +## 文章 + +### 🐕 [What’s New in Natural Language APIs in iOS 13](https://www.appcoda.com/natural-language-apis-ios-13/) + +[@AidenRao](https://weibo.com/AidenRao):去年,Apple 推出了 [NaturalLanguage](https://www.appcoda.com/natural-language-processing-swift/) 框架,用于分析自然语言文本并推导其特定于语言的元数据。你可以将此框架与 Create ML 配合使用来训练和部署自定义 NLP 模型。 + +iOS 13 上此框架更新了新功能 +- 内置情感分析,对文本进行 -1.0 到 1.0 的打分,确定一组文本是积极还是负面。 +- 单词标记,单词应用标记系统,可用于模糊搜索,相似物品推荐系统。 +- 自定义单词嵌入,用于自定义单词标记模型,控制推荐算法。 +- 文本目录,用于将同类型词汇按组标记,建立简单的单词标记模型。 + +### 🐕 [Generalizing Swift code](https://www.swiftbysundell.com/posts/generalizing-swift-code) + +[@张嘉夫](https://github.com/josephchang10):判断某一块代码是否需要重构往往是件很棘手的事。虽然采用可复用的函数或类型可以大大减少代码冗余,但过于抽象的代码会导致难以阅读和维护。在这篇文章里,作者通过几个关键因素来帮助我们最大程度地重用代码,同时又能够避免让代码过于复杂或难以理解,从而取得良好的平衡。 + +### 🚧 🐕 [Flutter: the good, the bad and the ugly](https://medium.com/asos-techblog/flutter-vs-react-native-for-ios-android-app-development-c41b4e038db9) + +[@looping](https://github.com/looping):作者在用 Flutter 开发了一款应用后,总结了 Flutter 的一些特性和自己使用后的心得体会,整体感觉是 —— “Not bad” —— 还不错。本文虽然是大半年前写的,但还是可以当作技术选型的避坑指南来参考。 +Flutter 的好处就不用多说了,列下作者比较在意的几个点: + +- Flutter 社区还比较小众,贡献者不算多,最佳实践偏少,组件不够丰富,出错调试也比较费神(社区是在逐步扩大的,但选型时还得看团队能力和工作饱和度,能不能自己消化一些问题)。 +- UI 层自己绘制,样式跟系统有脱离,在系统控件设计发生改变的时候,还得依赖社区升级相关组件(国内大部分应用界面的控件都是定制化的,即使原生开发也会面临这样的问题,不过 Flutter 会暴露的更加明显)。 +- 跟原生混编以及平台差异化设计(某功能只在某端有,或者界面表现不一样等)会使整体结构变得复杂,在投入使用时就要考虑好后期的维护性(这个是跨平台框架的通病,要避免在过于复杂的业务场景上使用)。 + +### 🐎 [域名背后那些事](https://leancloudblog.com/Domain-Name-Story-confirm/) + +[@莲叔](https://weibo.com/aaaron7):很多没有建站经验的童鞋对于域名唯一的了解就是它作为 IP 别名的作用,其实域名背后的学问有很多。正确的了解域名解析的知识可以让我们在设计底层网络模块的时候更有信心,并实现更优雅的网络层解决方案,比如近期在移动端非常流行的 HTTPDNS 技术,就是从域名解析的原理出发,巧妙的解决了劫持问题。leancloud 这篇文章较为体系的介绍了域名的组成结构以及 DNS 服务器进行域名解析的基本流程,还扫盲了常见的域名记录类型以及作用,非常适合不熟悉域名的童鞋们阅读。 + +### 🐕 [CAEmitter​Layer](https://nshipster.com/caemitterlayer/) + +[@J_Knight_](https://github.com/knightsj):本文作者 Mattt 介绍了 CAEmitterLayer 的使用方法,并结合代码展示了如何使用 CAEmitterLayer 和 CAEmitterCell 来实现一个从上方自然落下的纸屑效果。在文章末尾,作者还给出了实现同一效果的7种不同的方案: + + - SpriteKit Particle System + - SceneKit Particle System + - UIKit Dynamics + - HEVC Video with Alpha Channel + - Animated PNGs + - WebGL + +对粒子发射器效果有兴趣的读者可以看一下这篇文章。 + +### 🌟 🚧 🐕 [Reducing Memory Footprint and OOM Terminations in iOS](https://medium.com/flawless-app-stories/techniques-to-reduce-memory-footprint-and-oom-terminations-in-ios-a0f6bef38217) + +[@红纸](https://github.com/nianran):当应用程序消耗太多内存,就会被系统杀掉。占用过多的内存空间会增大被查杀的概率。在本文中,作者介绍了多种图片处理技巧,让我们更好的减少内存的占用,总结如下: + +1. 更换色彩空间 sRGB(8位) 代替 DisplayP3(16位)。 +2. 利用 UIGraphicsRenderer 同时绘制同一矩阵内图像(🌰:聊天头像),使用 UIGraphicsRenderer 也可以复合图像,其只需要占用一帧大小即可。 +3. UIGraphicsRenderer 会自动识别使用 DisplayP3,而 UIGraphicsBeginImageContextWithOptions 最多使用 sRGB。 +4. 在瀑布流这种滚动展示图片列表中,可以使用计时器统计活动中的图片,为活动中的图片加载剩余的部分。 +5. 使用更小的图片,很多图片服务商可以对图片进行预处理下发(参考:[七牛云图片预处理](https://developer.qiniu.com/dora/manual/1270/the-advanced-treatment-of-images-imagemogr2)) +6. 更好的管理缓存,在进入后台的时候都可以进行清理(例如,URL 缓存、已存入磁盘的图片内存缓存)。 +7. 在出现内存警告,对于不可见的页面,可以进行清除操作。 +8. 检查代码的内存泄露。 +9. 不用清除基于 NSDictionary 的缓存,应使用 NSCache([原因](https://developer.apple.com/videos/play/wwdc2018/416/))。 + +### 🌟 🐎 [Managing background tasks with the new Task Scheduler in iOS 13](https://medium.com/snowdog-labs/managing-background-tasks-with-new-task-scheduler-in-ios-13-aaabdac0d95b) + +[@zvving](https://github.com/zvving):iOS 13 中苹果引入 `BackgroundTasks framework`,力求在提供流畅用户体验与延长电池使用时间之间找到平衡。本文可以快速了解后台任务的新变化: + +- `Background fetch mode`:规则与之前一样是 30s 执行时间,介绍如何使用新框架的 BGAppRefreshTask 实现 +- `Background processing mode`:新增的后台模式,可以持续几分钟高 CPU 占用运行(指定充电期间运行,可以避免因 CPU 占用过高被『杀死』) +- 如何调试后台任务 + +如果你希望了解更多,移步[全新后台任务框架及最佳实践](https://xiaozhuanlan.com/topic/1806594273)有更详细的介绍。 + +### 🐕 [Unused images and resources clean up in Xcode](https://www.avanderlee.com/optimization/unused-images-clean-up/) + +[@老峰](https://github.com/GesanTung):本文作者总结分享了以下三个清理项目无用资源文件,清理 Xcode 无用缓存文件的开源工具: + +- [FengNiao](https://github.com/onevcat/FengNiao/blob/master/README.md):作者是 @王巍(onevcat) , 是一款简单的命令行工具可删除项目无用的资源文件。 +- [LSUnusedResources](https://github.com/tinymind/LSUnusedResources):作者是 @tinymind,是一款图形界面的 Mac 应用也是用来删除项目无用的资源文件。 +- [DevCleaner](https://github.com/vashpan/xcode-dev-cleaner):作者 @vashpan ,是一款图形界面的 Mac 应用,可清理 Device Support、Archives、Derived Data下无用的缓存文件,磁盘紧张的同学可以试试。 + +> Tips:[FengNiao](https://github.com/onevcat/FengNiao/blob/master/README.md) 和 [LSUnusedResources](https://github.com/onevcat/FengNiao/blob/master/README.md) 实现原理相似,都是遍历资源目录下后缀 ["imageset", "jpg", "png"...] 的文件,然后在源文件 ["m", "swift", "xib", "storyboard"...] 中字符串匹配,无匹配则是无用的资源文件。 + +### 🐕 [Generate & Host your iOS Documentation](https://medium.com/@jonathan2457/generate-host-your-ios-documentation-39e21b382ce8) + +[@kyo](https://github.com/KyoLi):对于我们平时写的一些项目工程代码,常常需要写一些文档,否则不要说交接给别人,就是过几个月,如果没有文档,可能我们自己都不一定能完全理解。但是,随着工程的迭代,文档也常常需要更新,这需要我们花费很多时间在里面。而今天推荐的这款工具,可以帮我们自动的生成 iOS 文档,在文章中作者也简单示范了下,还是很容易上手的,推荐经常需要写文档的同学试一试。 + +### 🐕 [Formatter - NSHisper](https://nshipster.com/formatter/) + +[@四娘](kemchenj.github.io):将数据转化为人类可读的文本格式是一个重要且复杂的任务,需要根据用户的国家,语言,时区和货币等因素进行格式化,仅仅使用对象的 `description` 是远远不够的,实际工作中我会用到一个存在于 Foundation 核心部分的类型 —— `Formatter`。 + +本周 NSHisper 为我们介绍的就是 `Formatter` 这个重要的工具,文章里为我们列举介绍了 Apple 平台上 `DateFormatter` / `NumberFormatter` 等等各种不同的 `Formatter` 以及它们对应的用途,对于这些格式化工具不熟悉的同学都可以看一下。 + +## 工具 + +### 🌟 [免费又好用的 iOS UI 调试软件,Lookin 正式发布](https://mp.weixin.qq.com/s/FlGfb02ZOv9YLwCfEwIsjA) + +[@Parsifal](https://weibo.com/parsifalchang):Lookin 是微信读书团队出品的一款免费的 UI 调试工具,功能像 Xcode 自带的 UI Inspector 或者简版的 Reveal。除支持查看 UI 层级和视图信息外,还提供了方法监听功能,算比较实用的一个特性。目前虽然不能与强大的 Reveal 比较,但作为一款免费的功能软件,还是也比较推荐有相关需求的同学使用。 + + +## 代码 + +### [DiffableDataSources](https://ra1028.github.io/DiffableDataSources/) + +[@享耳先森](https://github.com/iblacksun):Apple 在 WWDC 2019 新增了 `UITableView/UICollectionViewDiffableDataSource`,不过新 API 仅限 iOS 13,如需支持之前系统的话就用不了了,`DiffableDataSources ` 基于 [DifferenceKit](https://github.com/ra1028/DifferenceKit) 实现,提供了与官方近似的 API。 + +### [M80TableViewComponent](https://github.com/xiangwangfeng/M80TableViewComponent) + +[@anotheren](https://github.com/anotheren):来自网易的 `UITableView` 的组件化解决方案, + +- 不用再和 IndexPath 及数组越界打交道 +- 权责分离,和冗长的 UITableView Adapter 说再见 +- UITableViewCell 自动重用 +- 数据驱动的构建方式 +- 安全的模型视图映射关系 +- 单向绑定 +- 灵活组装 +- 自动高度缓存和简单的高度预计算支持 +- 支持 ListDiff + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#78-2019.08.05.md b/Reports/2019/#78-2019.08.05.md new file mode 100644 index 000000000..2b626ee99 --- /dev/null +++ b/Reports/2019/#78-2019.08.05.md @@ -0,0 +1,144 @@ +# 老司机 iOS 周报 #78 | 2019.08.05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🌟 🐕 [swift-best-practices](https://github.com/Lickability/swift-best-practices) + +随着 Swift 的稳定,越来越多的项目开始尝试 Swift 这门「新」的语言,当然会有一部分新手不太清楚如何正确的在项目中使用 Swift。[swift-best-practices](https://github.com/Lickability/swift-best-practices) 就告诉了你答案。内容包括但不局限于这几点:基础 MVVM 结构、通用控制器类型、文档的编写等。 + +### 🐕 [iOS 开发舆图](https://ming1016.github.io/2019/07/29/ios-map/) + +[@老峰](https://github.com/GesanTung):本文是来自戴铭的 iOS 开发全景图以及一些相关资料整理,成体系地罗列了 iOS 开发的知识点与技能栈,方便我们在日常开发中查漏补缺,主要包括以下内容: + +- iOS 基础:列表、布局、图标、图形、多媒体、AppServices、动画 +- iOS 系统:XNU、dyld、Mach-O +- 编程语言 +- 开发工具 +- 计算机基础 +- 通用知识 +- 视野 + +## 文章 + +### 🌟 🐕 [Deriving Reactive from Imperative: An Introduction to Duals](https://jasdev.me/duals) + +[@莲叔](https://weibo.com/aaaron7):Swift 的函数式编程从 Swift 语言发布之初、宣布支持 First Class Function 开始,就一直备受关注,开源社区陆续贡献了 RAC4,RxSwift 等基于 Swift 函数式特性实现的、方便用户更轻松的在日常的业务开发中应用函数式特性的开发框架。最近 Apple 官方推出了 Combine 框架,给社区增加了更多的信心。 + +虽然如此,但很多同学对函数式编程仍然觉得云里雾里,本篇文章开辟了一个新的视角,对比了命令式编程与函数式编程的其中一个分支:响应式编程, 并从函数式编程的角度,论证了一定程度上,响应式编程和命令式编程是对偶关系。作者首先从范畴轮的角度解释了什么叫对偶,并基于命令式编程中的 IteratorProtol 以及 Sequence,来对比响应式编程中的 Subscriber 和 Publisher,并用之前对于对偶的定义来论证了他们存在的对偶关系。 + +整篇文章视角新颖,能够带给人很多思考,读起来不算轻松,建议花时间消化消化。 + +### 🐕 [分析一个 App 需要的技术手段](https://mp.weixin.qq.com/s/ZmDd3tOkHwSqCCsG7kfokQ) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):有时候看见喜欢的 App 可能会想要对它的实现一探究竟,本文作者以微信为例,站在逆向的角度,列举了分析一个 App 所需要的技术手段,包括: + +- 砸壳 - ipa 获取 +- 手机越狱 +- CaptainHook Hook 代码 +- Logos 语法 +- 查找可执行文件技巧 +- class-dump 使用 +- Cycript 调试程序 +- MachOView +- 在 Cycript 和 LLDB 中使用私有的方法调试 +- 使用 NSInvocation 调用方法 +- 查看 App 中的字符串 +- UIDebug 工具 + +使用上述技术手段,可以获取到 App 的相关信息,包括: + +- 头文件 +- 第三方库 +- UI 查看 +- 继承层级 +- 数据库设计 +- 沙盒目录 +- Pod 集成 +- 查看网络请求数据 +- 查看动态库 + +推荐阅读 +- [WeChatRedEnvelop 抢红包](https://github.com/buginux/WeChatRedEnvelop) +- [深入iOS系统底层之汇编语言](https://www.jianshu.com/p/365ed6c385e5) + +### 🐢 [iOS Memory 内存详解](https://juejin.im/post/5d3ee77ef265da039f1290b2#heading-2) + +[@J_Knight_](https://github.com/knightsj):本文以 iOS 内存作为主题,以一般的操作系统的内存机制、iOS 系统内存、iOS APP 内存管理等三个层面进行了介绍。在文章后面还提供了一些内存分析的方法以及参考资料。想比较全面了解 iOS 内存相关知识的读者可以看一下这篇文章。 + +### 🐢 [Rule-based logic in Swift](https://www.swiftbysundell.com/posts/rule-based-logic-in-swift) + +[@享耳先森](https://github.com/iblacksun):对于系统设计而言,只考虑技术架构的话其实相对简单(比如使用 MVVM 还是其他架构模式),虽然架构模式非常重要,但我们还是可以通过对一些次要代码或结构进行改进来提升代码质量,所谓见微知著。本文通过 URL 匹配这一点入手,介绍如何将原来难以维护的代码抽象出一些规则来进行重构。 + +### 🐎 [Swift 5 之后 "Method Swizzling"?](https://mp.weixin.qq.com/s/8z7A_-d0ZvvAJ3155DogvA) + +[@四娘](kemchenj.github.io):Swift 5.1 里新增了一个私有功能叫做 Dynamic Method Replacement,可以简单地理解为一个类型安全的 Method Swizzle。 + +瓜神在这篇文章里给我们介绍了这个功能的使用方法以及内部的实现,并且通过阅读源码解决了连环 Hook 失效的问题。 + +## 工具 + +### 🚧 [iOS Continuous Integration with GitLab CI, Fastlane & OTA Installation](https://medium.com/flawless-app-stories/ios-continuous-integration-with-gitlab-ci-fastlane-and-ota-installation-from-gitlab-pages-f312e07ab06e) + +[@水水](https://www.xuyanlan.com/): 本文介绍了基于 GitLab 的持续集成、Fastlane、无线下载安装。在本文中,我们将讨论的点有: + +- 为什么选择 Gitlab? +- Gitlab CI 和 Runner +- Gitlab Runner 安装 +- Fastlane 简介 +- CocoaPods,Bundler 和 Ruby gems 权限 +- 配置 Fastlane +- 为我们的 TestProject 配置Gitlab CI +- 来自 Gitlab 的无线 IPA 安装 + +值得一提的是,[Gitlab.com](https://about.gitlab.com/) 为我们提供了免费的 CI。希望本文介绍的工具对正在做持续集成的团队或个人有所助益。 + +### [Swift 5 for Android is here](https://www.scade.io/download/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web) + +一份代码,多端运行一直是我们移动端非常关注的点,业界也有很多不同的方案,如 Flutter、Qt、React Native、Weex 等等,而这些大多是采用 C++ 或者 JS 作为开发语言。Swfit 作为苹果力推的开发语言,社区成员从一开始就希望它可以移植到更多的平台,像之前 Github 上就有用 Swfit 来开发 web 的 demo。如今,SCADE 为我们带来了 Swift for Android,它使用 iOS 和 Android 各自的 Native 控件,保持了平台 UI 的差异性,然后通过统一的 Swfit API 进行调用。同时,它的图形引擎支持很多动画效果,并且在屏幕适配上也很简单,这可以让我们开发更加复杂的应用。 + +## 代码 + +### [SwiftUIX: An extension to the standard SwiftUI library.](https://github.com/SwiftUIX/SwiftUIX) + +[@张嘉夫](https://github.com/josephchang10):SwiftUI 标准库的扩展,力求完善尚未成熟的 SwiftUI,提供了大量组件、扩展和工具。 + +### [apple_bleee](https://github.com/hexway/apple_bleee) + +[@anotheren](https://github.com/anotheren):这是一份通过蓝牙/Wi-Fi获取 iPhone 用户信息代码示例,攻击者可以在特定条件下,获取到受害者的部分设备信息甚至手机号码。严格的来说这不是一种系统漏洞,这是 Apple 生态的一部分,这种东西一方面能够使人享受整个 Apple 生态圈的便利,但是另一方面也会造成少数窃取个人隐私的可能。具体也可以看看少数派的[这篇文章](https://sspai.com/post/55920)。 + +## 音视频 + +### 🌟 [用 Flutter 开发 iOS 应用](https://www.bilibili.com/video/av61563879/?redirectFrom=h5) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Google 官方为了能让 iOS 开发出身的同学用上 Flutter 真的是操碎了心,用尽了办法。这次 Google 官方在 B 站发布了一个视频,内容是讲解如何用 Flutter 开发 iOS 应用,由官方的两名工程师讲解,不仅仅讲解技术,更带有不少平台设计美学讲解。喜欢视频学习的同学不要错过,弹幕和评论也很精彩哟😄 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#79-2019.08.12.md b/Reports/2019/#79-2019.08.12.md new file mode 100644 index 000000000..58c99b78a --- /dev/null +++ b/Reports/2019/#79-2019.08.12.md @@ -0,0 +1,180 @@ +# 老司机 iOS 周报 #79 | 2019-08-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [抖音研发实践:基于二进制文件重排的解决方案 App 启动速度提升超 15%](https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):App 的启动速度通常是 App 给用户的第一印象,重要性不言而喻。除了传统的通过修改业务代码的方式,抖音 iOS 客户端团队,开拓性的发现通过修改代码在二进制文件的布局可以提高启动性能。 + +本文从原理出发,介绍了抖音 iOS 客户端团队是如何通过静态扫描和运行时 trace 找到启动时调用的函数,然后修改编译参数完成二进制文件的重新排布。相信在未来,二进制文件重排也会有更多应用场景。 + +> 最近 Facebook 也在一个技术大会上分享了类似的内容,强烈推荐: [视频](https://www.facebook.com/atscaleevents/videos/664302790740440/) + +### 🌟 🐎 [swift-corelibs-foundation Release Notes for Swift 5.x](https://github.com/apple/swift-corelibs-foundation/blob/master/Docs/ReleaseNotes_Swift5.md) + +[@享耳先森](https://github.com/iblacksun),[@老驴](https://github.com/olddonkey): + +Swift 开源版的 Foundation 在 Swift 5.x 有了不小的改动: + +1. 依赖: + + Swift 开源版的 Foundation 初版实现大量地使用了开源库,这次在新版本中整理了一下开源库的依赖,并且把之前的 Foundation 拆分成了三个库: + + * Foundation + * FoundationXML:考虑到大部分人不会使用 XML 相关的功能,所以通过 FoundationXML 将 libxml2 的依赖从 Foundation 里拆了出来。 + * FoundationNetwork:将 URLSession 相关的网络请求 API 拆了出来。 + + FoundationNetwork 的情况比较复杂一点,之前论坛里的草案 Pitch: Move URLSession to new FoundationNetworking module 比较详尽地介绍这一次的改动。 + + Foundation 网络库使用的 [libcurl](https://forums.swift.org/t/pitch-move-urlsession-to-new-foundationnetworking-module/14002) 带来了太多子依赖,一部分甚至和 SwiftNIO 的依赖产生了冲突,并且开发组希望使用 SwiftNIO 作为 URLSession 的底层实现,这一次改动之后依赖链就变成了 FoundationNetwork -> SwiftNIO -> Foundation。 + +2. Objective-C Runtime 仿真: + + Foundation 为 Swift for Linux 提供了模拟仿真部分 Objective-C 方法。现在,Swift 5.1 中也可以用这样的方法了: + + ``` swift + let someClass = NSClassFromString("NSTask") + assert(someClass == Process.self) + let someName = NSStringFromClass(someClass) + assert(someName == "NSTask") + ``` + +3. NSCoder 的改进: + + 这个版本的 Swift Foundation 中改进了 `NSCoder` 的具体实现,让它能更接近 Darwin 中对应的部分。 + +4. NSSortDescriptor 的改动: + + 现在,在 Swift Foundation 中包含了 `NSSortDescriptor` 的实现,同时它与 Objective-C 中对应部分兼容。因为有部分的 API 改动,所以推荐有用到 `NSSortDescriptor` 的开发者看一下对应的文档。 + +5. 其他改动: + Scanner API 改进,现在不再需要做 Casting 了,更加符合 Swift 的语法习惯。FileHandle API 改进,主要是针对 NSError 变化上的变动,能够抛出 Error 而非直接 Crash 了。 + +### 🐢 [7000 个未解决 issue,Flutter 看起来很好,用起来挺疼](https://mp.weixin.qq.com/s/EAgzYQX5-4pu7HWaGwK7Ag) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自发布以后,国内外都掀起了 Flutter 的学习热潮,其中褒贬不一,本文作者分享了一些自己在学习过程中的一些心得和体会(吐槽😂),好了先开始吐槽: + +- 安装过程很漫长 +- 一团糟的 Material Design +- 其他烦心事 (这里面包括了一些组建的 Bug) + +目前 Flutter 在 GitHub 上有超过 7000 个 issues 未解决,这个数字真的很吓人。小编本人之前也用 Flutter 开发过 App ,我也趁着这波吐槽一下😂,因为问题远不止 Bernardo Ferrari 说的那些: + +- 跟现有项目混和开发体验极差 +- PlatformView 的表现相当差强人意,特别是在 iOS 上 +- 生态发展欠缺的还是比较多的 + +略微做个总结,整体来看问题真的很多,但是 Flutter 自发布 1.0.0 以来还不到一年,发展速度已经是很快了,有不足之处,但也有不少惊艳之光,不然国内的大厂也不会纷纷都在布局 Flutter 技术的落地,其中走在最前面的咸鱼,想必大家都是知道的。所以,小编觉得,不管从哪个角度来看,都是一个值得尝试和学习的技术栈,毕竟技多不压身不是? + +> 补充下原文链接:[Flutter looks good, but is painful. Here are my frustrations with it.](https://medium.com/@bernaferrari/from-android-dev-flutter-looks-good-but-is-painful-here-are-my-frustrations-with-it-81b4bbe739f8)。 + +### 🐎 [SwiftPreview](https://forums.swift.org/t/pitch-standard-library-preview-package/27202) + +核心开发组发了一份草案,内容是新增一个开源库 SwiftPreview ,用来预发布一些 non-breaking 的 API 改动。 + +以往所有提案都必须赶上半年一趟车的 release 才能发布出来,但这对于相当一部分提案都是非必要的,如果发布后需要调整或者修改那就又是半年,例如 [SE-199 Bool 引入 Toggle 方法](https://github.com/apple/swift-evolution/blob/master/proposals/0199-bool-toggle.md),在审核通过之后六个月才在 Swift 5 发布了出来。 + +所以这一次提案是想要加快 Swift 的 API 迭代速度,对于一些不需要编译器支持,非破坏性的功能都会考虑提前在 SwiftPreview 里发布以供大家提前使用,尽早提供反馈。 + +### 🐎 [SE-0261 Identifiable Protocol](https://github.com/apple/swift-evolution/blob/master/proposals/0261-identifiable.md) + +[@Damonwong](https://github.com/Damonvvong):在 SwiftUI 中引入了 Diff 的概念。意思就是在一个列表刷新的时候,会根据一个唯一标识符来判断是否需要重新渲染,如果通过 Diff 算法算得某个唯一标识符并没有变化,那么这块区域就不会重新渲染。而在这个事情中最重要的就是「唯一标识符」这个东西了,在 SwiftUI 中通过 Identifiable 来约束类型满足唯一标识符这个概念。当然,唯一标识符不仅仅可以使用在 Diff 算法中,还可以用在很多其他的地方,比如通讯录联系人的唯一标识符。因此在[Swift 社区讨论](https://forums.swift.org/t/move-swiftuis-identifiable-protocol-and-related-types-into-the-standard-library/25713)之后,决定把 Identifiable 这个协议加入到标准库中,并在 Swift 5.1 发布。 + +### 🐎 [CocoaPods 1.8 Beta is Here!](http://blog.cocoapods.org/CocoaPods-1.8.0-beta/) + +[@红纸](https://github.com/nianran):Cocoapods 1.8.0 Beta 版来了!本次更新为我们带来了如下内容: + +1. Master Specs Repo 默认改为 CDN,有效的加快初始设置和依赖分析速度 +2. info_plist Podspec DSL:在使用 use_frameworks! 的动态框架中,pod 现在可以自动生成 Info.plist 文件,并且你可以在 podspec 中使用键值对来修改 plist 文件中内容 +3. project_name Podfile DSL:在 1.7 版本,pod 可以生成多 Project 的 Pod 功能,在 1.8 中对其进行了扩展,自定义多个 pod 可合并成一个 Project +4. UI Test Bundle Support:支持 UI 测试项目的生成,你可以在 podspec 中选择 :unit/:ui 来配置,其测试的工程可以通过 app_host_name 来进行设置 + +## 工具 + +### 🌟 [Auto Layout: WTF to FTW](https://www.rightpoint.com/rplabs/2019/06/wtf-auto-layout-for-ios-in-swift/) + +[@looping](https://github.com/looping):[WTF Auto Layout?](https://www.wtfautolayout.com/) 是一个可以用来辅助调试 Auto Layout 问题的网站,它能够对我们调试应用时出现的约束歧义信息进行解析并可视化显示。但是我们都知道在调试的时候出现 Auto Layout 约束歧义是不影响应用正常运行的,这样当打印的日志偏多的时候,就很难及时发现这类提示。即使发现了,还要手动复制提示文本到网站的输入框里,比较麻烦。所以本文就介绍了通过在 Xcode 里设置 Symbolic Breakpoint,当调试应用时有触发 `UIViewAlertForUnsatisfiableConstraints` 就执行自定义的 Python 脚本,自动获取和解析断点调试的入参信息并打开 [WTF Auto Layout?](https://www.wtfautolayout.com/) 这个网站。想时刻监控 Auto Layout 问题的同学可以尝试体验下这个工具流程,当然也可以优化下并不是每次都打开网站,而是先记录到文本,再找个时间进行集中分析处理。同时文章也涉及了一些调试技巧,可以学习下。 + +### [Swift API-Digester](https://github.com/apple/swift-nio/commit/07e7e01c76be20640ddc3770d7b16e87eedf20de) + +[@享耳先森](https://github.com/iblacksun):Swift 5.1 里新增了一个 `api-digester` 功能,用来打印和比较编译产物的 API,Swift-NIO 在此基础上搭建了一个 API Diff 功能,可以预见未来开源框架都会使用这个功能来生成 API Diff,帮助检验 Pull Request 对于 API 的影响,ChangeLog 的生成等等。 + +用类似这样的命令:`swift api-digester -diagnose-sdk --input-paths "dir1" -input-paths "dir2"` 就能比较两个编译产物的 API 区别,生成类似下面的结果: + +> Removed Decls +> Constructor WebSocketFrameDecoder.init(maxFrameSize:automaticErrorHandling:) has been removed +> EnumElement WebSocketOpcode.unknownControl has been removed +> EnumElement WebSocketOpcode.unknownNonControl has been removed + +> Renamed Decls +> Func WebSocketFrameDecoder.decode(ctx:buffer:) has been renamed to Func WebSocketFrameDecoder.decode(context:buffer:) +> Func WebSocketFrameDecoder.decodeLast(ctx:buffer:) has been renamed to Func WebSocketFrameDecoder.decodeLast(context:buffer:seenEOF:) +> Func WebSocketFrameEncoder.write(ctx:data:promise:) has been renamed to Func WebSocketFrameEncoder.write(context:data:promise:) +> Func WebSocketProtocolErrorHandler.errorCaught(ctx:error:) has been renamed to Func WebSocketProtocolErrorHandler.errorCaught(context:error:) + +> Type Changes +> Constructor UInt8.init(webSocketOpcode:) has return type change from UInt8? to UInt8 + +### [Matrix-iOS 耗电监控](https://mp.weixin.qq.com/s/HS4DJDpCS6uppQ9WmVR_Tg) + +[JimQ](https://github.com/waz0820):Matrix 是一款微信团队研发并日常使用的性能探针工具,4 月份开源,当时的监控范围包括崩溃、卡顿和爆内存,现在新增了耗电监控功能。 +实现原理是,在应用启动后开启一个检测子线程,检测线程不断去识别出当前应用哪个线程的 CPU 占用过高(通过 `thread_basic_info` 获得),将耗 CPU 多的线程的堆栈(使用 `backtrace()` 函数获取)收集起来。当应用 CPU 占用达到阈值时,耗电监控将收集到的堆栈组合(接合成调用树,并标记每个函数被收集的次数)形成耗电堆栈(函数次数越大,所占用 CPU 越多)。 + +## 代码 + +### 🌟 [Swift-MemoryLayout](https://github.com/TannerJin/Swift-MemoryLayout) + +[@四娘](https://kemchenj.github.io):作者在学习 Swift 内存布局的过程中,写了一个简单的 Demo 演示如何使用指针去读取 Array / Dictionary 内部的变量,进一步验证各种类型的内存布局。 + +这个项目很好地演示了 Swift 里的指针操作,非常值得一看!!! + +### 🐕 [CombineCocoa](https://github.com/freak4pc/CombineCocoa) + +[@老峰](https://github.com/GesanTung):CombineCocoa 是基于 [Combine](https://developer.apple.com/videos/play/wwdc2019/722/) 对 UIKit Controls 的封装,类似 RXcocoa 实现了许多组件的绑定功能,可以直接把值和控件互相绑定,避免通知、监听、delegate 等,极大的简化了 UI 相关逻辑处理,示例如下: + +- textField.textPublisher +- segmented.selectedSegmentIndexPublisher +- slider.valuePublisher +- button.tapPublisher +- swtch.isOnPublisher +- datePicker.datePublisher +- ... + +### [CombineRxSwiftPerformance](https://github.com/quickbirdstudios/CombineRxSwiftPerformance) + +[@邦Ben](https://weibo.com/linwenbang):这个 Repo 对比了 Combine 和 RxSwift 目前常用方法的性能表现,作为选型资料可以看下。 + +最后结论,Combine 速度更快,平均性能比 RxSwift 高出41%。 + +![测试结论](https://user-gold-cdn.xitu.io/2019/8/12/16c83b285f096ee2?w=3469&h=1570&f=png&s=308546) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#80-2019.08.19.md b/Reports/2019/#80-2019.08.19.md new file mode 100644 index 000000000..4cdd9477c --- /dev/null +++ b/Reports/2019/#80-2019.08.19.md @@ -0,0 +1,190 @@ +# 老司机 iOS 周报 #80 | 2019-08-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [深入理解 iOS 事件机制](https://juejin.im/post/5d396ef7518825453b605afa#heading-24) + +[@老峰](https://github.com/GesanTung):文章通过实例详细介绍 iOS 事件机制,主要包括以下内容: + +- 事件的生命周期:系统响应阶段、APP 响应阶段 +- 探测链与响应链:Hit-Testing、Responder Chain +- 手势识别器与原生触摸事件:UIGestureRecognizer Methods、UIEvent 与 UIGestureEnvironment、UIGestureRecognizer Properties + +## 文章 + +### 🌟 🐕 [Combine vs. RxSwift: Should you switch to Combine?](https://quickbirdstudios.com/blog/combine-vs-rxswift/) + +[@莲叔](https://weibo.com/aaaron7):Apple 官宣了 Combine,让 Reactive 社区感觉异常振奋,各种分析文章层出不穷。Combine 的推出势必会加速响应式编程的流行,会的程序员越多那我们在工作中实际使用的机会也就越多。但另一方面,很多同学心中也会有这样一个问题,Combine 会取代 RxSwift 的吗?我该学哪个? + +这篇文章解释了这个疑问,文章首先简单介绍了 Combine,并且命名规范,错误类型和异常处理、性能、兼容性、UI 兼容性等多个方面较全面的比较了两个框架,两者有非常多相似的地方,但 RxSwift 毕竟已经发展了几年,细节更完善。而且最要命的就是 Combine 并不支持对老的 iOS。简单的说,你现在应该开始学 Combine,不过如果要选型生产环境的话,还是优先考虑 RxSwift. + +### 🌟 🐎 [由「抖音二进制文件重排」想到的](https://mp.weixin.qq.com/s/_IZOXjwaeSmRJ2tcpdd8kg) + +[@zvving](https://github.com/zvving): +上周热文 [抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%](https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q) 发布后,作者有感而发,写出此文: + +- [支付宝 Android 团队之前做过的二进制重排实践](https://mp.weixin.qq.com/s/79tAFx6zi3JRG-ewoapIVQ) +- 介绍苹果官方 Profile-Guided Optimization 相关二进制文件重排方案 +- 简评抖音落地方案,中肯指出只适用于 oc 代码的局限性 +- 提到 Android 官方也有对应 PGO 的介绍 + +好的文章常能引发好的讨论。建议感兴趣的同学可以根据文章的指引,尝试落地 PGO 方案,为社区带来更好的优化启动实践。 + +### 🌟 🐎 [RxSwift 兼容 Combine 的讨论](https://github.com/ReactiveX/RxSwift/issues/1999) + +[@没故事的卓同学](https://weibo.com/u/1926303682):SwiftUI 框架设计的时候 data flow 就是以 Combine 作为实践方案。因此如果用 SwiftUI 不用 Combine 你得到的是一个没有灵魂的 SwiftUI。但是当前 Combine 离工业水准还有不少距离,可行的方案可能是外围的数据还是用 RxSwift 处理,要使用的时候把 Observal 桥接成 Publisher。 +RxSwift 社区也意识到如果 apple 生态里最后只有一个响应式框架,必然是亲儿子 Combine。当前 Combine 的先天劣势是从 iOS 13 开始,RxSwift 则是从 8.0 开始兼容。RxSwift 社区也会顺应潮流,在未来某个成熟时刻 RxSwift 内部实现会改成使用 Combine。如果这一步做的好,未来从 RxSwift 转到 Combine 会比较顺滑。 + + +### 🐎 [谁是 App 版本帝](https://mp.weixin.qq.com/s/0qObc38K6idYXyTJRr6Bpw?scene=25#wechat_redirect) + +[@红纸](https://github.com/nianran):每个应用的发版周期都是不同的,本文提供了获取任意 APP **发版间隔/紧急发布次数**的解决方案。并提供了排序脚本,美化爬虫数据,结论更加直观。从数据结论上看,过去 6 个月很多热门 APP 都是保持在 7/8 天的发版周期。 + +### 🐎 [The (not so) hidden cost of sharing code between iOS and Android](https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/) + +[@老驴](https://github.com/olddonkey):这是一篇前两天在微博上引起热议的文章。文章是 DropBox 的工程团队写的,主要讲述了在他们的实际开发过程中,他们所遇到的跨平台方案中的问题及他们的考量。文章不长,但是其中有几个点还是挺有意思的。 + +文章中提到了一个之前鲜有提到的问题:开发团队的接受程度。这里指的是自己的团队对跨平台开发有没有兴趣,能不能让大家能做自己愿意做的事情。简单来说,就是以人为本的思想。这一点在国内的互联网环境下应该相对来说是比较少见到的,而国外的互联网企业对这方面有一定的重视。所以在技术选型上,国外公司考虑的东西可能会更多一点。 + +周报之前也有类似的文章,可以通过[这里](https://github.com/SwiftOldDriver/iOS-Weekly/blob/68c47cc64f6334cdba2828b0fba9204a1f231485/Reports/2019/%2367-2019.05.13.md#-sharing-code-between-ios-and-android-using-j2objc)进行查阅。 + +### 🐕 🚧 [Create, Push, and Present Any View Controller in 1 LOC using Metaprogramming](https://medium.com/@ivangoremykin/create-push-and-present-any-view-controller-in-1-loc-using-metaprogramming-33f673284d92) + +[@xiaofei86](https://weibo.com/xuyafei86):使用 Storyboard 设计界面非常方便,但当我们想要使用代码实例化 Controller 并做跳转,甚至实现动态跳转,就会变得十分麻烦。我们需要编写大量的样板代码来实例化 Controller 并设置参数。本文提出了使用元编程的理念解决此问题的思路。通过 [Sourcery](https://github.com/krzysztofzablocki/Sourcery) 自动生成创建代码,通过 Extension 简化调用并隔离命名空间,最终将创建过程简化为 1 行。 + +### 🐕 [ iOS LLDB 中基于内存单指令 patch 实现反反调试](http://iosre.com/t/ios-lldb-patch/15332) + +[@J_Knight_](https://github.com/knightsj):本文作者介绍了一种基于内存单指令 patch 的方式进行反反调试的方案,方案的大致流程如下: + +1. 使用 mmap 新建一块内存,把这块内存叫做 new +2. 使用 vm_copy 把想要篡改的处于 __text 段内的内存(把这块内存叫 target )拷贝到 new 里 +3. 向 new 里写入想执行的代码 +4. 调用 mprotect 把 new 改为 rx 。因为 mmap 出来的内存的 max_protection 是 rwx ,所以这里 mprotect 改权限没问题 +5. 调用 mach_vm_remap 把 new 的内容反映回 target 里 + +在文章结尾,作者举了实际例子来验证了这个反反调试的方法。 + +### 🐎 [技术人如何通过了解业务,获取晋升机会?](https://mp.weixin.qq.com/s/o4CfgIcPibG_QxrsZ4x7sA) + +[@水水](https://www.xuyanlan.com):本文作者伐薪是阿里巴巴高级技术专家,14年初入阿里时,没有过多地思考业务痛点和了解业务策略。后来,经历过晋升,当晋升评委,主动学习业务,最后,完成了从技术专家向综合性 TL 转变。作者总结了不少经验,分享给你们,希望能给读者带来少许启发。 + +- 业务先赢是技术第一要务 +- 如何理解业务 +- 在业务理解上的收获 + +### 🐕 [Phantom types in Swift](https://www.swiftbysundell.com/posts/phantom-types-in-swift) + +[@四娘](https://kemchenj.github.io):这周 Swift by Sundell 为我们介绍的是一种叫做 Phantom Types 的技巧,在 Swift 里处理一些有限集合的时候,我们通常会将它声明为 enum,但经常会有一些特殊情况需要照顾: + +```swift +func openEditor(for document: Document) { + switch document.format { + case .text: openTextEditor(for: document) + case .html: openHTMLEditor(for: document) + case .pdf: assertionFailure("Cannot edit PDF documents") + } +} +``` + +这样的代码无法通过类型系统去限制错误的调用,作者尝试从 Swift 的标准库里寻找解决方案,发现标准库里 `Unicode` 将 `UTF8` 等格式作为一个类型声明出来,而不是直接使用 enum case,使用这种思路我们就可以把代码改造成这样: + +```swift +enum DocumentFormat { + enum Text {} + enum HTML {} + enum PDF {} +} + +func openTextEditor(for document: Document) { ... } +func openHTMLEditor(for document: Document) { ... } +``` + +### 🐕 [美团 iOS 工程 zsource 命令背后的那些事儿](https://mp.weixin.qq.com/s/3qcv1NW4-ce87cvAS4Jsxg) + +目前,许多团队都会使用 CocoaPods 进行三方库的管理,而对于一些进行了组件化的团队,也会使用 CocoaPods 进行私有组件库的管理工作。在组件化过程中,往往为了提高工程的构建速度,会对组件进行二进制化。这也带来一个问题,就是调试的时候,不能提供清晰的调试信息。基于这个问题,美团团队为 CocoaPods 开发了一个插件 zsource,可以在调试过程中迅速调出源码进行调试,很好地解决了这一痛点。文章介绍了 zsource 命令的开发始末,而整个开发过程总结为几个阶段: + +- 原理猜想 +- 查阅资料 +- 简单粗暴的尝试 +- 柳暗花明 +- 工程化 + +美团的这次开发经验也说明,有时候,为了解决一些问题,我们也可以不拘泥于常规的开发方式,可以大胆的进行猜想并逐步去验证结论,通过类似逆向的方式,得到想要的答案。 + +## 工具 + +### 🌟 [Catching Unsatisfiable Auto Layout Constraints in UITests on CircleCI](https://instabug.com/blog/catch-unsatisfiable-auto-layout-constraints-uitest-circleci/) + +[@looping](https://github.com/looping):[Instabug](https://instabug.com) 是应用内问题反馈和 BUG 搜集服务提供商,他们为了不想让使用他们产品的开发者在调试的时候看到来自该工具的 Auto Layout 约束冲突,所以想尽早发现并解决这类问题。 + +捕获 Auto Layout 约束冲突常规思路是通过添加 `UIViewAlertForUnsatisfiableConstraints` 的调试断点,这个在我们往期的 [#79 - Auto Layout: WTF to FTW](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2019/%2379-2019.08.12.md#-auto-layout-wtf-to-ftw) 和 [#70 - XCTAssertAutolayout](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2019/%2370-2019.06.03.md#-xctassertautolayout) 中都有相关介绍。 + +而本文提供了另外一个使用场景,就是在持续集成跑 UI 自动化测试时也添加相关检测,大致思路如下: + +- 开启 LLDB,在终端输入 `lldb`,最终会使用 `lldb --source lldb.cmd` +- 附加 LLDB 进程到要调试的应用,`process attach --name "InstabugDemo" --waitfor` +- 设置断点,`b UIViewAlertForUnsatisfiableConstraints` +- 添加调试命令,文本采用的方案是使用 Python 把错误信息以文件的形式写到桌面,待测试出错后查看,`breakpoint command add -s python` +- 继续运行,`continue` + +由于持续集成要保证流程的自动化,所以得循环执行上面的逻辑,这样就还需要下面两个步骤: + +- 杀掉调试进程,`process kill` +- 重新执行流程,`command source lldb.cmd` + +具体细节可以阅读原文深入了解,但在进行实践的时候,由于集成环境各异,要根据实际场景进行探索调整。 + +## 代码 + +### [YBTaskScheduler](https://github.com/indulgeIn/YBTaskScheduler) + +iOS 任务调度器,为 CPU 和内存减负。源码结构简洁,模式清晰,值得一读。 + +- 特性: + - 将任务用容器管理起来延迟执行,实现任务执行频率控制、任务总量控制。 + - 利用 C++ 栈、队列、优先队列实现三种调度策略,性能优越。 +- 应用场景: + - 主线程任务量过大导致掉帧(利用组件为任务调度降频)。 + - 短时间内执行的任务量过大,而某些任务失去了执行的意义(利用组件的任务淘汰策略)。 + - 需要将任务按自定义的优先级调度(利用组件的优先队列策略)。 + +> 本工具由 [波儿菜](https://github.com/indulgeIn) 自荐。 + +## 音视频 + +### [Performance @Scale 2019 recap](https://engineering.fb.com/developer-tools/performance-scale-2019-recap/) + +[@张嘉夫](https://github.com/josephchang10):在今年的 Scale 活动中,来自 Facebook、Google、NVIDIA 和其他公司的演讲者分享如何用创新的方式来设计大规模系统。开发能够部署到数百万或数十亿人的应用和服务会带来独特的、复杂的性能挑战,优化基础架构、扩展 Web 服务以及开发快速移动应用都能够保证大规模系统的性能。 + +### 🐢 [Flutter 的性能测试和理论](https://mp.weixin.qq.com/s/mwaTZVdeceIT01DlGXWUsg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):本视频为 Google Flutter 团队的软件工程师 Xiao Yu 在 2018 谷歌开发者大会做的演讲,演讲题目是《Flutter 的性能测试和理论》, 这个视频里将会通过近半个小时的视频和演示带大家了解 Flutter 应用渲染时的时间消耗,了解这些之后会更好的帮助开发者们发现应用的性能问题,同时介绍了性能测试工具的使用和问题排查方法,非常值得收藏和分享 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#81-2019.08.26.md b/Reports/2019/#81-2019.08.26.md new file mode 100644 index 000000000..512859ca7 --- /dev/null +++ b/Reports/2019/#81-2019.08.26.md @@ -0,0 +1,153 @@ +# 老司机 iOS 周报 #81 | 2019-08-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🌟 🐎 [Modular Architecture in iOS](https://medium.com/flawless-app-stories/a-modular-architecture-in-swift-aafd9026aa99) + +[@老峰](https://github.com/GesanTung):在大型项目中,经常会有这样的场景:我们明明只修改了一部分代码,却把整个工程编译了一次。在这篇文章里作者通过使用 Cocoapods 实现模块化,将每部分模块编译为 Framework 动态库,宿主 App 依赖这些模块,从而实现模块化,文章给出了具体的操作过程,以及[示例](https://github.com/leandromperez/multiprojects)感兴趣的读者可以看看。 + +### 🐎 [UIDocument From Scratch](https://www.raywenderlich.com/1809473-uidocument-from-scratch?utm_campaign=rw-weekly-issue-231&utm_medium=email&utm_source=rw-weekly&__s=mppzsrcqwzmhtwhkt6vh) + +[@极速男孩](https://github.com/ztlyyznf001):UIDocument 是苹果提供给我们方便的管理文档的类。在这篇文章中,会从头开始叫你如何使用 UIDocument 去创建,取回,修改,更新 iOS 的文件系统。 + +## 新闻 + +### 🌟 [知识小集官网上线啦!](https://mp.weixin.qq.com/s/kOwf_xJOXHi2EIdj72N7eg) + +知识小集官网正式上线。官网中的内容都来自于「知识小集公众号」。小集团队把公众号的内容分为「18个专题」,比如性能优化、模块设计、Web 与 NA 交互专题,几乎每个专题都有 10 多篇文章,甚至更多。还有部分文章未加入到官网中,后续会逐渐加入进来。这样的设计目的是为了能够更方便地学习相关专题的知识。赶紧收藏起来吧~ + +### 🐎 [App Store Today editorial stories are now available on the web in full](https://9to5mac.com/2019/08/15/app-store-today-web-browser/) + +[@张嘉夫](https://github.com/josephchang10):App Store 的编辑介绍文章之前可以通过链接进行分享,但 web 版本仅仅是一个标题以及一个“跳转至 App Store”的链接。8月9日到8月11日之间,Apple 更新了其 App Store 预览页面,用户现在可以通过桌面浏览器查看完整的编辑介绍文章,包括完整的图片、app 列表和段落,拥有和 App Store 完全一致的体验。 + +## 文章 + +### 🌟 🐎 [加载速度提升 15%,携程对 RN 新一代 JS 引擎 Hermes 的调研](https://mp.weixin.qq.com/s/BOeuLoZjCdi61P_MhaJT0g) + +[@looping](https://github.com/looping):Hermes 是 Facebook 在 Chain React 2019 大会上发布的新一代 JavaScript 执行引擎,用于提高 React Native 应用的性能。本文是携程在 CRN 项目中集成 Hermes 的深度调研总结,内容包括: + +- 对 Hermes 的介绍,包括它的优化思路和集成使用 +- 和 JavaScriptCore 以及 V8 的性能对比 +- 引擎的动态性分析 +- 集成使用过程中发现的一些问题和后续计划 + +由于 iOS 审核限制,目前该引擎仅用于 Android 平台。虽然携程调研完发现由于缓存问题还不能在线上版本直接引入 Hermes,但也表明 Hermes 通过预编译字节码的方式提升 JS 执行速度给了他们新的思路,比较期待他们之后在性能优化上会有新的实践成果输出。 + +### 🌟 🐕 [基于 Mach-O 符号重排减少缺页中断次数来提升 iOS App 启动速度的可行性分析](https://juejin.im/post/5d5a05255188251f4705fb8b) + +[@Jimq](https://github.com/waz0820):本文对 [「抖音研发实践:基于二进制文件重排的解决方案 APP 启动速度提升超 15%」](https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q) 提出的技术方案的可行性和价值进行分析和验证。 + +- **iOS 调页策略验证**:通过构造一些分散在不同页的符号并调用他们,然后分析缺页中断报告,最终验证了内核在处理缺页中断时并没有预载入相邻的页,程序的运行过程是由缺页中断驱动的。 + +- **重排方案验证**:创建一个 Order File,按顺序写入符号,验证了链接器会按照 Order File 中预设的顺序来排列符号。 + +- **分析启动链路上的符号**:这一块作者提出了三条思路:静态分析、堆栈采样和 Hook,但并没有做具体的验证。 + +### 🌟 🐕 [MTFlexbox 自动化埋点探索](https://mp.weixin.qq.com/s/aJcboLm5MYiGW-QC8AHHyQ) + +[@红纸](https://github.com/nianran):MTFlexbox 是美团基于 Flexbox 的规范实现的跨平台动态化解决方案,通过下发三端统一的 XML 布局文件达到动态化的目的。文中分析了三种业内自动化埋点的解决方案并提出了自己的解决方案: + +1. [美团外卖前端无痕埋点实践](https://tech.meituan.com/2017/03/02/mt-mobile-analytics-practice.html):其利用 AOP 的方式来达到业务与埋点的解耦,但是没法做到数据的自动上报。 +2. [Mixpanel](https://mixpanel.com/):成熟的可视化方案埋点方案,其通过截屏上报的元素和元素路径方式,达到圈选元素的功能,但是依旧无法支持数据上报,对于动态化布局也是支持有限。 +3. [HubbleData](https://www.jianshu.com/p/f0c4e280357c):其也是通过对于元素路径的把控进行埋点上报,对于动态化布局支持有限,业务数据获取不够。 +4. MTFlexbox 的自动化解决方案:上传布局文件 -> APP 装机渲染页面同步服务端界面元素和页面数据 -> 前端 Web 渲染截图元素 -> 数据 RD 圈选元素埋点 -> 服务器生成带有埋点信息的布局文件。其基于自身有良好的 XML 布局文件的解决方式,为埋点添加唯一标识,插入到页面元素中,来达到元素定位的效果。 + +### 🐕 [Future-Proof Your Data Persistence](https://cutecoder.org/programming/future-proof-data-persistence/) + +[@老驴](https://github.com/olddonkey):如果同学们在自己或是公司的大型项目中实现过数据库,一定会知道数据访问对象( DAO )是什么。简单来说,它就是一个用于对隔离与限制外部对数据源的直接修改的中间层,用来提升数据库的安全性和稳定性。对于 iOS 开发来说,DAO 也是必不可少的。虽然在很多情况下,你所用到的数据库都已经写好了 DAO 这一层,但是如果能够在项目中进一步封装,或者是在了解原理的情况下,针对自己的需求进行改进,也能极大的帮助项目。如果你对 DAO 还不是很熟悉的话,建议了解一下。 + +### 🐕 [lldb 入坑指北(2)-​ 15行代码搞定二进制与源码映射](https://mp.weixin.qq.com/s/Bc8AJe7qRi2ED-otK0qPRA) + +[@莲叔](https://weibo.com/aaaron7):源码二进制化以及围绕二进制化之后的调试效率是 iOS 工程化难得的热点。之前美团的 zsource 方案较好的解决了调试效率的问题。本文作者基于 LLDB 的源码映射能力,以更简洁、易用的形式实现了该功能,整个过程由 Xcode 自动完成,不需要输入命令,同时作者也 share 了 python 的实现代码,有兴趣的同学可以仔细研究。 + +### 🐕 [The power of subscripts in Swift](https://www.swiftbysundell.com/posts/the-power-of-subscripts-in-swift) + +[@四娘](https://kemchenj.github.io):本周 SwiftBySundell 为我们带来的是 subscript 功能: + +- subscript 和 method 的区别和各自的场景 +- 如何自定义 subscript +- subscript 的重载 +- subscript 的 getter 和 setter 写法以及泛型的使用 +- Swift 5.1 中引入的 static subscript + +对于 subscript 功能还不熟悉的同学可以考虑通过这篇文章补充相关知识。 + +### 🐕 [iOS 的 Code Signing 体系](https://juejin.im/post/5d3feaf7e51d4561e224a2a7) +[@水水](https://www.xuyanlan.com):iOS 中的 Code Signing 体系非常复杂,对新手非常不友好,虽然目前网上已经存在大量文章对此进行比较透彻的分析,最核心的部分已经讲解得非常清楚,但作者始终还是对 Code Signing 体系中很多相关的地方有着疑惑,于是决定认真地探究一番。本文会引用一些比较好的文章中的内容和图片,加上一些作者个人的理解进行分析,是比较全面和友好的一篇关于 Code Signing 的文章,想了解 Code Signing 的同学可以详细阅读哦。 + +### 🐕 [通过 Signal handling(信号处理)获取任意线程调用栈](https://juejin.im/post/5d5ab438f265da03af19d35b) + +对于一些系统监控类的需求,如 crash 、性能指标收集、上报之类的工具库,常常会需要得到线程调用栈信息,本文提供了一种通过 Signal handling 来获取任意线程调用栈的方式,该方式解决了使用 StackPointer 在 Swift 下无法打印结果的问题。 + +## 工具 + +### [Why you should stop using Git rebase](https://medium.com/@fredrikmorken/why-you-should-stop-using-git-rebase-5552bee4fed1) + +[@享耳先森](https://github.com/iblacksun): 文章作者认为现今大家使用 `git rebase` 的过程中过于追求 commit history 的线性,而忽略了 `git rebase` 相较于 `merge` 带来的隐患: 在一个长的 commit 链中使用 rebase 解决冲突是非常困难、易出错的。作者也给出了两种解决方案,详情请阅读原文。 + +### [KakaJSON](https://github.com/kakaopensource/KakaJSON) + +[@AidenRao](https://weibo.com/AidenRao):Swift 内置了一套 Codable 机制,可以用于 JSON 转 Model。对于一些简单的模型结构,还是挺好用,但一旦牵扯到复杂的模型结构、一些个性化的需求(比如 KeyMapping、类型不匹配时的转换处理、自定义解析规则等),Codable 就不太能友善地完成任务了。 + +为了解决上述问题,作者编写了一套纯 Swift 实现的 JSON 与 Model 互相转换的框架:KakaJSON。KakaJSON 通过了大量的单元测试用例,应对各种常用的数据场景,对外提供了一些友善易用、扩展性强、可高度个性化定制需求的接口,内置了 Metedata 缓存等机制,加快转换速度。 + +### [HackMan](https://github.com/Cosmo/HackMan) + +[@AidenRao](https://weibo.com/AidenRao):HackMan 是一个直接通过命令行生成样板代码的简单工具,几行命令,就可以帮你 run 起来一个简单的 APP。 + +## 代码 + +### 🐎 [CombineDataSources](https://github.com/combineopensource/CombineDataSources) + +[@zvving](https://github.com/zvving):基于 Combine 实现 Table&Collection view data sources,提供简明的声明式数据绑定方法,写法类似: + +```swift +var data = PassthroughSubject<[Person], Never>() + +data.subscribe(subscriber: tableView.rowsSubscriber(cellIdentifier: "Cell", cellType: PersonCell.self, cellConfig: { cell, indexPath, model in + cell.nameLabel.text = model.name +})) +``` + +设计思路和 [RxDataSources](https://github.com/RxSwiftCommunity/RxDataSources) 基本一致,目前处于早期阶段,对 Combine 感兴趣不妨一读。 + +### [JXTheme](https://github.com/pujiaxin33/JXTheme) + +[@anotheren](https://github.com/anotheren):iOS 13 中 Apple 终于也将深色模式带到了手机端。但是如果要在更早的系统中使用深色模式/更换主题应该如何处理呢?JXTheme 带来了相关扩展,支持 iOS 9+,接口与 iOS 13 提供的相似,你可以在需要时方便快速切换。 + +> 本工具库由 [暴走的鑫鑫](https://github.com/pujiaxin33) 自荐,他热爱分享,喜欢钻研,目前已经在 Github 创建了 20 多个库,累计获得 5k star。 + +### [玩儿 Android flutter 版](https://github.com/CCY0122/WanAndroid_Flutter) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):玩儿 Android 这个应用有一系列的教程 app , 不例外也有 Flutter 版本的, 是一个完整的应用, 并且该应用中使用了不少官方推荐的开发模式, BloC 、Provider 等. 值得 Flutter 新手同学好好学习. + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#82-2019.09.02.md b/Reports/2019/#82-2019.09.02.md new file mode 100644 index 000000000..fcb99871b --- /dev/null +++ b/Reports/2019/#82-2019.09.02.md @@ -0,0 +1,139 @@ +# 老司机 iOS 周报 #82 | 2019-09-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [苹果秋季发布会将在北京时间 9 月 11 日凌晨 1 点举办](https://mp.weixin.qq.com/s/EWItcscmIAhRsAoBRD70Qg) + +一年一度的苹果秋季发布会的时间终于落定了,将于 9 月 11 日凌晨 1 点开始。你可以到 Apple 官网,也可以上腾讯视频、爱奇艺、优酷、哔哩哔哩等多个平台观看,不用到现场,通通都是前排的待遇。 + +杭州的朋友,还可以联系 Price Tag 的作者 [@61](https://weibo.com/liuyi0922) 同学,参与现在线下观影活动。边喝咖啡,边观看直播。[报名链接](http://t.cn/Ai8dWX2j)。 + +## 文章 + +### 🌟 🐢 [重磅!滴滴跨端框架 Chameleon 1.0 正式发布](https://mp.weixin.qq.com/s/kl9JwiS5_IHIZUAW-hPJBQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Chameleon (简写 CML ) 是滴滴开发团队历时三年打磨的一套跨端解决方案, 最近终于发布了 1.0 版本。CML 是一款真正专注于让一套代码运行多端的跨端框架,拥有业内先进的工程化设计,丰富的基础库,独创多态协议,提供标准的 MVVM 架构开发模式统一各类终端, 其能力堪称最强: + +- 支持所有小程序、H5和客户端, 快应用的支持已经完成开发, 正在测试中 +- 一套代码运行多端,并且高度一致 +- 性能的极致体验, CML 团队在性能优化上多了许多工作, 包括包大小、各端加载速度、执行效率等等 +- 生态化建设, 从组件库到调试工具都有官方标准产出, 并持续迭代 +- 全方位能力加持, CML 拥有先进的工程化理念,整体开发、打包构建等流程非常高效 +- 为降低原有项目迁移 CML 框架的成本,CML1.0 提供了以下两种优雅简洁的渐进式接入方案 + - CML1.0 能够将 CML 组件导出成各端组件,让你更自由地使用 CML + - CML 已发布一款 webpack plugin:easy-chameleon,可直接在原有项目中集成 CML + +CML 团队未来的规划中还有对 Native 跨端的支持, 比如 Flutter 和 React Native, 强的可怕。 + + +### 🌟 🐕 [基于 Mach-O 文件的静态链接的分析](https://juejin.im/post/5d527867f265da03ed1946d2) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):这是系列文章中的其中一篇。静态库链接是指自己的模块与静态库里的某个模块(用到的某个目标文件,或多个目标文件)链接成可执行文件。Mach-O 目标文件是源代码编译得到的文件,文件里有机器指令、数据,还有链接时候需要的一些信息,比如符号表、调试信息、字符串等,然后按照不同的信息,放在不同的“段”(segment)中。这篇文章解析了链接过程中空间与地址的分配,以及符号解析与重定位。其实动态链接比静态链接复杂的多,感兴趣的同学可以阅读该系列中的其他文章。 + +推荐阅读 +- [MachO 文件结构分析](https://juejin.im/post/5d5275b251882505417927b5) +- [MachO 文件动态链接](https://juejin.im/post/5d5bbc426fb9a06ad3472cee) + +### 🐕 [Code Review 最佳实践](https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666544605&idx=1&sn=56fe6b058f31d888e9df6509f97d06ca) + +[@享耳先森](https://github.com/iblacksun): 作者认为 Code Review 是软件开发中的最佳实践之一:首先可以更好在团队内做到知识共享,其次可以有效提高整体代码质量,及时发现代码中可能存在的问题。作者还重点说明了 Code Review 应该怎么做,如果你团队中还没有实行 Code Review 或对 Code Review 有什么疑问,建议仔细读这篇文章。 + +### 🌟 🐎 [Xcode Hacks to Make Your Life Easier](https://medium.com/better-programming/xcode-hacks-cf32434cbc2) + +[@老峰](https://github.com/GesanTung):掌握一些常用的 Xcode 快捷键,可以帮我们高效的 Coding,本文作者就为我们总结了如下 Xcode 使用技巧: + +- 快捷的通过 database model 创建 model:⌥ + Hold left mouse、⌘ and arrows、⌥ and arrows +- 快捷创建构造函数:^ + Enter +- 快捷 Debugging:e 表达式、 breakpoint enable、breakpoint disable、continue +- 快捷浏览源代码、文件:⇧ + ⌘ + O、⌥ + ⌘ + [、⌥ + ⌘ + ] + +文章中附有视频讲述这些快捷操作技巧,感兴趣的读者自行阅读实践吧。 + +### 🐎 [The power of Environment in SwiftUI](https://mecid.github.io/2019/08/21/the-power-of-environment-in-swiftui/) + +[@小非86](https://weibo.com/xuyafei86/):Environment 是 SwiftUI 中独有的特性,本文从比较基础的角度,从对 Environment 的概念和使用技巧,到 Environment 的继承和依赖注入,都通过简单示例进行了讲解。且文章篇幅较短,比较适合快速阅读。 + +### 🚧 🐢 [A Swift YogaKit Guide to Flexbox](https://medium.com/swlh/a-swift-yogakit-guide-to-flexbox-fec74e1bffaf) + +[@小非86](https://weibo.com/xuyafei86/):Yoga 是 Facebook 开源的一个编写视图的跨平台代码,YogaKit 用于 iOS 开发,它基于 Flexbox,让布局变得更简单。本文为使用 Swift YogaKit 进行 Flexbox 布局一份详细指南,文章通过大量的代码和效果图形象的向我们展示 YogaKit 的使用,指导我们如何使用 Flexbox 创建出色的布局。推荐给有需要的读者阅读。 + +### 🐕 [避免 iOS 组件依赖冲突的小技巧](https://juejin.im/post/5d6723d5e51d453b386a6351) + +[@J_Knight_](https://github.com/knightsj):本文作者介绍了一种避免 iOS 组件依赖冲突(当两个组件依赖了同一个组件的不同版本,并且依赖的版本没有交集的情况)的方法。大体方案是通过修改 subspec,实现默认中介者以及利用条件编译的方式,是一个相对比较优雅的解决方案,有兴趣的读者可以点击原文学习具体方案。 + +### 🐕 [YYText 源码剖析:CoreText 与异步绘制](https://www.jianshu.com/p/b9ac1b5d8f01) + +[@红纸](https://github.com/nianran):本文是一篇 [YYText](https://github.com/ibireme/YYText) 的源码分析文章,作者从 CoreText 布局原理出发,剖析了 [YYText](https://github.com/ibireme/YYText) 中核心计算、自定义富文本属性、工具类封装原因等。有需要了解图文混排的同学可以参阅~ + +此外,作者对于 [YYKit](https://github.com/ibireme/YYKit) 中的其他源码仓库也进行了详细的源码分析。详情可以参考作者的[博客](https://www.jianshu.com/u/a89bf7b8bdd8)。 + +> 推荐人:[波儿菜](https://www.jianshu.com/u/a89bf7b8bdd8) + +### 🐎 [独立开发者账号被封与解封回顾](https://github.com/cyanzhong/apple-terminated-my-dev-account/blob/master/LOOK_BACK_CN.md) + +[@anotheren](https://github.com/anotheren):独立应用 Pin 与 JSBox 的作者钟颖近期经历了开发者账号被封与解封的风波,本文是他自己对本次事件的完整回顾。虽然是误封,但是处理过程还是很值得学习,建议各位独立开发者都看一看。 + +### 🐕 [BlockHook with Invocation(2)](http://yulingtianxia.com/blog/2019/08/11/BlockHook-with-Invocation-2/) + +[BlockHook](https://github.com/yulingtianxia/BlockHook) 这个库相信不少同学都听说过,它解决了在同步调用场景下对 Objective-C Block 的 AOP 问题。这篇文章是该库的作者对 BlockHook 拦截器的接口设计与实现,是对 BlockHook 相关的第二篇文章,没看过第一篇的可以先看一下第一篇 [BlockHook with Invocation(1)](http://yulingtianxia.com/blog/2019/07/27/BlockHook-with-Invocation/)。 + +## 代码 + +### 🌟 🐕 [CombineX](https://github.com/luoxiu/CombineX) + +[@zvving](https://github.com/zvving): +[RxCombine](https://github.com/freak4pc/RxCombine) 尝试让 Observable 与 Publisher 能相互转化,用桥接的方式兼容 RxSwift 与 Combine。 + +[CombineX](https://github.com/luoxiu/CombineX) 的目标则是提供完全对等 Combine 的开源实现: + +- 完整兼容 Combine API,目前已粗略实现所有功能 +- 支持 iOS 10+, macOS 10.12+, 以及 Linux +- 提供 [CombineX.Foundation](https://github.com/luoxiu/CombineX.Foundation), [CombineX.Cocoa](https://github.com/luoxiu/CombineX.Cocoa) 扩展 +- [CombineX.Compatible](https://github.com/CombineXCommunity/CombineX.Compatible):提供底层在 CombineX 与 Combine 之前自由切换的能力 + +项目仍在早期阶段,感兴趣不妨参考[文档](https://github.com/luoxiu/CombineX/blob/master/README.zh_cn.md#%E8%B4%A1%E7%8C%AE)中的指引为项目添砖加瓦。 + +### 🌟 🐕 [Flutter 通用基础库 flutter_luakit_plugin](https://juejin.im/post/5c34597651882523d3200c98) + +[@邦Ben](https://weibo.com/linwenbang):众所周知,flutter 跨平台,但是使用体验还不是很好,为什么?因为生态还比较弱,没有成熟可用的三方组件,最明显的就是数据库。目前因为不支持反射机制的原因,也没有好用的 ORM 库,妥妥裸写 SQL,或者桥接转换使用原生数据库,就两个字,痛苦。针对这种基础库不完备的情况,智宁大佬(Luakit 作者)灵机一动,flutter 在配合已稳定的 LuaKit 基础库可以迅速实现一整套完备的解决方案从而诞生了 flutter_luakit_plugin,提高了跨平台的效率,并且可以利用 Luakit 的脚本化来实现热更逻辑层(这意味着你需要重度使用 Luakit 进行维护逻辑层,UI 层使用 flutter)。另外大家伙都是支持扩展的,基础能力不够,依然需要自行扩展。目前据了解,该方案主要使用方为 YY 团队,并且他们的 flutter 系列文章也推荐一看(见文章底部)。 + +- 多线程接口 +- orm 模型接口 +- 文件操作接口 +- http 请求 +- 异步 socket 接口 +- 全局通知机制 +- Lua 代码加解密 + +PS: 部分同学可能想问:我仅仅只是想用个 ORM 怎么办?作者贴心的给出了纯 flutter 调用的版本来降低使用成本:[flutter_orm_plugin](https://pub.dev/packages/flutter_orm_plugin)。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#83-2019.09.09.md b/Reports/2019/#83-2019.09.09.md new file mode 100644 index 000000000..08bf72d4d --- /dev/null +++ b/Reports/2019/#83-2019.09.09.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #83 | 2019-09-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect warning: UIWebView API deprecation](https://forum.ionicframework.com/t/app-store-connect-warning-uiwebview-api-deprecation/172063/3) + +[@looping](https://github.com/looping):上月(8月)底陆续有人在打包上传到 App Store 时收到苹果审核的反馈邮件,提到他们将会停止接收还在使用 UIWebView API 的应用,希望开发者在下次提交的时候处理好这个问题。同时在 GitHub 上观察到有使用 UIWebView 的大部分主流开源库也收到了开发者提的苹果废弃 UIWebView API 的 issue,并且很多库都已经做好了更新。虽然苹果提醒开发者处理这个问题,但是没有给出审核规则具体的执行时间,所以应该会预留一些时间供开发者对工程代码进行技术迁移。为了应对这个问题,我们建议接下来做好以下几个事情: + +- 列出自己工程里有用到 UIWebView 的地方,并想办法逐步迁移到 WKWebView +- 关注工程里用到的开源类库和三方 SDK,有更新的及时更新 +- 做好准备,等待苹果审核的进一步消息 + +## 新手推荐 + +### 🐎 [从 Flutter Go 到 Flutter Go web - 手把手带你轻松玩转 Flutter-web(一)](https://juejin.im/post/5d6a9456e51d4561cc25f080) + +[@极速男孩](https://github.com/ztlyyznf001):Google 在今年的 Google 大会中发布了 Flutter for Web ,本文介绍了如何使用 Flutter-go-web 去创建一个 flutter-web 的项目,并给出了具体[示例](https://github.com/alibaba/flutter-go/tree/web/flutter-go-web-0.0.1)。 + +## 文章 + +### 🐎 [在闲鱼实习做 Flutter 是什么感受?](https://mp.weixin.qq.com/s/DVl6s3EE5pKMoE-qltsK3A) + +[@老峰](https://github.com/GesanTung):本文作者分享在闲鱼学习上手 Flutter 的过程,通过重构发布页,熟悉项目工程,熟悉项目流程,学习并优化已有框架。最后也给出了 Flutter 的初步学习路线,以及对职场新人的建议,感兴趣的读者可以看看。 + +### 🚧 🐎 [Should you write your app in SwiftUI?](https://thatthinginswift.com/should-you-use-swiftui-in-your-app/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B419) +[@水水](https://www.xuyanlan.com):本文就是否应该在你的 APP 中使用 SwiftUI 进行了讨论,列举了比较完整的几个优缺点进行对比,希望给犹豫不决的读者有所启发和更进一步的了解。 + +### 🐎 [iOS调试Block引用对象无法被释放的一个小技巧](https://juejin.im/post/5d70655e518825618e67ad63) + +[@J_Knight_](https://github.com/knightsj):而本文作者介绍了一种使用 dis -s 指令来查看 block 所对应的实现代码的方法:通过在 lldb 控制台输入 dis -s [block 地址],就可以反汇编该地址所对应符号信息以及开始一部分的汇编实现,我们就可以知道该地址所对应 block 所在的方法了。 + +### 🐕 [马蜂窝视频编辑框架设计及在 iOS 端的业务实践](https://mp.weixin.qq.com/s/-GGbakkEe7dmC23HT0k3ow) + +[@莲叔](https://weibo.com/aaaron7):视频拍摄与视频编辑模块逐渐成为很多超级 App 的必备模块之一。除了像抖音和快手这样的短视频应用,像比如点评和马蜂窝这样的 O2O app在面临内容形式从图文到视频,生产方面从 PGC 到 UGC 的转变下,都需要在 APP 中实现视频拍摄和编辑模块。视频编辑模块相比传统的客户端组件,技术栈除了平台的 API 之外还包括一系列音视频处理的知识,存在一定的门槛。马蜂窝这篇文章比较系统的介绍在在 iOS 上实现一套视频编辑框架需要做的事情,是很好的入门素材,建议有兴趣的同学可以看看。 + + +### 🐎 [Dark Mode on i​OS 13](https://nshipster.com/dark-mode/) + +[@红纸](https://github.com/nianran):作者写的标题有点大,本文实际仅针对于 iOS 13 上颜色的管理提及了 6 个方面(色值/HEX值/系统色值/组件默认色值/Color Set/Xib Color/)。其主要包含如何查找/替换工程中应用的色值以用于适配 iOS 13。 + +### 🐎 [历时五天用 SwiftUI 做了一款 APP,阿里工程师如何做的?](https://mp.weixin.qq.com/s/QgDSuTFjwFlXzhksfgmkIQ) + +[@四娘](https://kemchenj.github.io):淘宝内部尝试使用 SwiftUI 编写一个内部数据监测的 App,简单介绍了一下 SwiftUI 的数据流以及 UI 的自定义,文末对于 SwiftUI 给出了很正面的评价: + +> 此项目在短短的 10 个工作日内就能完成,不得不说 SwiftUI 的开发效率真的惊人,虽然目前还有一些 Bug ,但是相信在未来,SwiftUI 会是 Apple 平台 UI 布局的解决办法,关于 SwiftUI 如何在淘系落地业务,还在持续探索中。 + +### 🐎 [The Curious Case of the Core Data Crash](https://blog.iconfactory.com/2019/08/the-curious-case-of-the-core-data-crash) + +[@anotheren](https://github.com/anotheren):Twitterrific 的开发者多年来一直被一个 Core Data 的 Crash 问题困扰,但是一直找不到问题的确切原因。直到近期 TestFlight 反馈上线以后,他发现了一些蛛丝马迹。原来 Twitterrific 被切换时可能会有一些后台下载任务,完成后需要写入 CoreData。虽然后台下载能够正确完成,但数据还未完全写入 Core Data 时,就被错误的标记了后台任务完成,于是应用就被 iOS 系统杀死了。这时在 Crash Report 中就会报告一个 Core Data 的问题,但是实际问题却不在 Core Data 这边。如果你也有类似的问题,不妨看看作者的分析。 + +### 🐎 [在 Flutter 中如何把报错信息通过服务上传](https://mp.weixin.qq.com/s/foCab1u5je34MdMeb2_-2w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):App 开发中一个比较重要的环节就是错误捕获上传, Flutter 应用也不例外. 本文介绍了如何通过 Sentry 来捕获 Flutter 应用的错误并上传, 文末附上了完整的 Demo. 这里小编顺带提醒一句: Flutter 1.9.x 对应用的报错进行大量的改良 🎉🎉🎉 + +### 🐕 [RxSwift异步事件追踪定位工具的研发历程](https://mp.weixin.qq.com/s/h48jcWghZBysU0-0gH8bog) + +[@AidenRao](https://weibo.com/AidenRao):当你使用 RxSwift 来实现一些简单的功能如发送一次网络请求、监听按钮点击事件等会让你的代码看起来非常直观简洁,但是如果你使用 RxSwift 实现了一个异步热流且在不同的类之间层层传递和加工转换之后代码的可读性就大大降低,甚至因为抓不到异步事件产生的堆栈而出现难以调试的情况。 + +为解决 RxSwift 的调试难题,作者通过阅读源码分析 RxSwift 操作符实现原理,然后利用 Swift 反射机制来 dump “Observable Link”,最后又根据 Swift 语言的函数派发机制和命名空间机制设计了一套安全高效的 hook Swift 的动态及静态方法的方案,通过这套 hook 方案完成了对流事件传递链上的关键函数的拦截处理从而顺利实现了精准定位和调试 RxSwift 中异步事件的目标。 + +## 工具 + +### 🐎 [Unused code cleanup in iOS projects](https://www.onswiftwings.com/unused-code-cleanup/) + +[@zvving](https://github.com/zvving):无用代码总随着项目迭代猥琐发育,逼迫我们养成定期清理的习惯。 + +本文简单介绍几种清理方式,尤其是能精准的分析 Swift 无用代码的 [Periphery](https://github.com/peripheryapp/periphery),推荐一试。 + +## 代码 + +### [KKJSBridge](https://github.com/karosLi/KKJSBridge) + +[@享耳先森](https://github.com/iblacksun): 一站式解决 WKWebView 支持离线包、Ajax 请求和 Cookie 同步的问题 (基于 Ajax Hook 和 Cookie Hook): +- 基于 MessageHandler 搭建通信层 +- 支持 ajax hook 避免 body 丢失 +- Cookie 统一管理 +- WKWebView 复用 +- 兼容 WebViewJavascriptBridge + +### [TTAnalyzeLoadTime](https://github.com/huakucha/TTAnalyzeLoadTime) + +[@张嘉夫](https://github.com/josephchang10):通过 Mach-O 文件 NonlazyClassList 构建动态库进行 iOS load 方法耗时检测: +- 仓库中提供了源码以及二进制的文件,源码提供了整个 AnalyzeLoadTime 的全部文件 TTLoadTime.mm,二进制文件为一个动态库,动态库为尽可能提前执行 Load Method Swizzling 提供了可能。 +- 重写 _getObjc2NonlazyCategoryList、_getObjc2NonlazyClassList,可以快速拿到全部 load 的所属 Class 以及 load 的 IMP 地址。 +- 防止运行环境被破坏使用 method_setImplementation 构建 block 执行原函数。 +- 寻找 mach-o 中的 load 以及 Swizzle 共耗时 4 毫秒。 + +### [LookinServer](https://github.com/QMUI/LookinServer) + +[@Jimq](https://github.com/waz0820):[Lookin](https://lookin.work) iOS 端的代码已开源( macOS 端的代码并未开源)。作为 iOS UI 调试工具,主要看点包括与所连接 Mac 的点对点通信,当前页面 UI 信息的结构化提取、使用、传输与导出,UI 图层的 2D/3D 预览,UI 继承树的展示,点选的 UI 控件信息展示,指定方法监听等,对此比较好奇的同学可以一读。 + +## 音视频 + +### [ggtalk | 没事刷刷算法](https://talk.swift.gg/41?from=timeline&isappinstalled=0) + +[@AidenRao](https://weibo.com/AidenRao):本期磊子和 wamaker 会聊聊算法。算法是个大话题,这期讲的只是两个从业者的小故事,看看他们如何认识算法,如何学习算法,如何看待算法。 + +## 内推 + +- [上海-百度手机输入法_iOS 资深研发工程师](https://www.lagou.com/jobs/6101507.html):项目在技术上很有挑战性,团队技术氛围极好。诚心希望各路大神前来撩~。简历发邮箱 xuyanlan@baidu.com 哦~ 急急急! +- [杭州 丁香园 丁香妈妈业务线 iOS 资深研发工程师](https://www.lagou.com/jobs/6253973.html):要求有 Swift 实际开发经验,简历请发至 gp@dxy.cn . + + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#84-2019.09.23.md b/Reports/2019/#84-2019.09.23.md new file mode 100644 index 000000000..6f68d67e8 --- /dev/null +++ b/Reports/2019/#84-2019.09.23.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #84 | 2019-09-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [《WWDC19 内参》专栏免费开放啦](https://xiaozhuanlan.com/wwdc19?rel=7579246804) + +[@老峰](https://github.com/GesanTung):《WWDC19 内参》是 iOS 三大组织(老司机 iOS 周报、SwiftGG 翻译组、知识小集),一起联名发起的一个小专栏,这个专栏集结了三大组织内的一线 iOS 工程师,为你深度解读 WWDC19 中那些值得关注的 Session。上周 iOS 13 正式推送,如何在 iOS 13 上适配深色模式;iOS 13 有哪些新特性等...这些热点问题专栏内都有答案,目前专栏已免费开放,干货多多,感兴趣的读者快来[订阅](https://xiaozhuanlan.com/wwdc19?rel=7579246804)吧。 + +### [Flutter 1.9 正式发布](https://mp.weixin.qq.com/s/A58tTlb4jeJ3qyPdSiDVMA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):在谷歌为中国开发者举办的最高级别会议 Google Developer Days 的第一天,现场公布了 Flutter 的最新稳定版本:Flutter 1.9。这是有史以来**规模最大**的更新,包含来自 100 多位贡献者的超过 1,500 个 PR. 其中几个比较重大的更新如下: + +- 支持macOS Catalina和iOS 13操作系统 +- 新的 Material 小部件 +- 全球语言支持 +- Dart 2.5 发布 +- 工具链改进 +- Web 平台的 Flutter + +## 文章 + +### 🐎 [iOS 13 APNS Device Token 兼容问题](https://info.umeng.com/detail?id=174&&cateId=1) + +[@享耳先森](https://github.com/iblacksun):iOS 13 修改了 `[NSData description]` 实现,导致友盟、个推等 Push SDK 有兼容性问题。`description` 方法其实是 debug 用的,希望开发者们谨慎使用。 + +### 🐕 [RxSwiftWidgets: Declarative Development for UIKit](https://medium.com/better-programming/introducing-rxswiftwidgets-f7a81bc54fe1) + +[@zvving](https://github.com/zvving):想要与 SwiftUI+Combine 类似的声明式开发,还想要支持较低版本 iOS,还想要用 RxSwift,贪心吗? + +如果你也有这些期望,推荐参考本文作者设计实现 [RxSwiftWidgets](https://github.com/hmlongco/RxSwiftWidgets) 的心路历程。 + +> 注:RxSwiftWidgets 基于 Swift 5.1,最低支持 iOS 11。 + +### 🐕 [小程序底层实现原理及一些思考](https://mp.weixin.qq.com/s/EbO7Wp6s29X9YliA2M-iCg) + +[@Damonwong](https://github.com/Damonvvong):这是一篇站在前端工程师的角度去分析如何去设计一个小程序框架,文章针对解决在 Vue、SPA、JS 等技术选型前提下,去限制一些把标签的使用和 js 的逻辑控制,写的还是很赞的。但是,个人觉得作者针对小程序的技术框架点评还是有些片面。目前主流的小程序技术主要有几个技术要点: + +1. 设计一套精简而不臃肿的 DSL,并解析交给渲染引擎渲染。 + 目前主要还是基于 WebView,但也有人在研究基于 RN 或者基于 Flutter 各种不同的引擎。 +2. 设计一个 Service worker 做全局管理和逻辑分离 + +个人觉得使用 Vue + SPA + JS 作为小程序的开发技术选型,不是一个明智之举,还是可能可能会被放弃的。 + +### 🐎 [Google Engineering Practices Documentation](https://github.com/google/eng-practices) + +[@张嘉夫](https://github.com/josephchang10):来自谷歌的工程通用最佳实践,覆盖各种语言和项目。这个文档会尽可能公开,从而帮助开源项目或其他组织。此文档当前包含如下文档:[谷歌代码审核指南](https://github.com/google/eng-practices/blob/master/review/index.md)。 + +### 🐎 [GitHub Actions 入门教程](http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html) + +[@红纸](https://github.com/nianran):GitHub Actions 是 GitHub 的持续集成服务,于 2018 年 10 月推出(但目前任然处于测试阶段)。Github 将动作拆分成 Actions,这样有助于我们多项目公用同一份 Actions,市面上也有提供官方的 [Actions](https://github.com/marketplace?type=actions) 和 awesome 系列的 [awesome-actions](https://github.com/sdras/awesome-actions) 库供你选择。在本文中你将收获基础的 CI 搭建知识以及操作流程。相较于先前每次都要硬写脚本命令来说,这样做极大的降低了使用成本。 + +### 🐎 [App Store Review Guidelines -- Sign in with Apple](https://developer.apple.com/app-store/review/guidelines/?from=groupmessage&isappinstalled=0#sign-in-with-apple) + +[@极速男孩](https://github.com/ztlyyznf001):在2019年 WWDC 上,苹果推出了 Sign In with Apple 功能。苹果更新了审核规则以后要求所有使用第三方登录的应用必须向用户提供以苹果账号登录的选项。但苹果同样举出了几种特例的情况: + +- 仅使用公司内部账号登陆。 +- 教育或者企业应用,需要使用现有的教育和企业帐号登录。 +- 应用需要使用政府或者行业背景的共名身份系统或者 电子ID 进行登录。 +- 应用是特定的第三方客户服务客户端,需要使用邮箱,社交帐号,或者其他第三方服务来获取她们的内容。 + + +### 🐕 [WWDC 2019: 机器学习移动端的峥嵘初现 Core ML 3.0](https://www.jianshu.com/p/eed7dd1d266b) + +[@莲叔](https://weibo.com/aaaron7):CoreML 相信广大的开发者们一定不陌生,自从苹果在 iOS 上推出该框架后,越来越多的 app 都会加入一些数据驱动的应用来优化用户的体验。本文介绍了苹果最新的 CoreML3.0 的新 feature,比如本地模型个性化(能够根据本地用户的行为数据增量的更新模型)、神经网络优化(更多的传输类型化和网络结构),更多的数据类型支持(声音和活动)等等。总体来说 CoreML 越来越强大了,可以预见在未来的 1-2 年内,app 的智能化仍然是一大趋势。 + +### 🐕 [WWDC 2019: 机器学习新工具 Create ML App](https://www.jianshu.com/p/a5ca26d296ba) + +[@莲叔](https://weibo.com/aaaron7):CreateML 是 Apple 官方推出的一款能够一站式通过数据生成模型的工具,配合 iOS 上的 CoreML,能够实现很 fancy 的移动端 AI 应用。本篇文章简单的介绍了 Create ML app 的基本使用流程,感兴趣的同学可以关注 + +### 🐕 [技术面试最后反问面试官的话](https://github.com/yifeikong/reverse-interview-zh) + +[@AidenRao](https://weibo.com/AidenRao):面试就像相亲,你需要用心准备一些问题,好足够了解对方,才能找到适合自己的对象。本文列了一些提问,帮助你更好的了解招聘方。 + +### 🐎 [iOS13 适配](https://juejin.im/post/5d745f8af265da03b5746fa0) + +[@J_Knight_](https://github.com/knightsj):作者在本文中介绍了 10 个关于 iOS 13 的适配问题。这些问题中有关于 API 的调整:比如直接调用 KVC 的 ``setValue:forKeyPath: `` 会造成崩溃,以及在 iOS 13中需要显示设置 ``modalPresentationStyle``。也有关于工程设置方面的问题,比如 LaunchScreen 替代 LaunchImage;以及暗黑模式的适配。近期有做 iOS 13 适配的读者可以简单浏览一下本文。 + +## 代码 + +### [Dio 3.0发布,支持Flutter Web 和 Http/2.0](https://juejin.im/post/5d822aefe51d4561cf15e07e?utm_source=gold_browser_extension) + +[@邦Ben](https://weibo.com/linwenbanag):Flutter 常用网络库 Dio 日前发布3.0新版本更新,主要支持点如下: + +- 支持 Flutter web +- 将 CookieManager 抽离为单独的包 +- 提供了 Http/2.0 adapter. + +大版本升级带了一些破坏性升级,升级的时候,可以看下提供的[升级指南](https://github.com/flutterchina/dio/blob/master/migration_to_3.0.md) + +## 音视频 + +### 🐎 [在 Xcode 11 中创建一个不带有 storyboard 的项目的方法有些新变化](https://www.youtube.com/watch?v=Htn4h51BQsk) + +[含笑饮砒霜](https://weibo.com/chinafishnews/):SceneDelegate 是 iOS 13 中新加入的通过 Scene 管理 App 生命周期的方式,在 App 完成启动后,控制权被交接给 SceneDelegate。因此在没有 Storyboard 的情况下创建新项目的方式发生了一些变化。在这个视频中,作者 Sean Allen 将介绍如何在不使用 Storyboard 的情况下在 Xcode 11 中创建新的项目。 + + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#85-2019.09.30.md b/Reports/2019/#85-2019.09.30.md new file mode 100644 index 000000000..52292dc10 --- /dev/null +++ b/Reports/2019/#85-2019.09.30.md @@ -0,0 +1,143 @@ +# 老司机 iOS 周报 #85 | 2019-09-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +明天就国庆长假了,本期也是国庆前的最后一期周报,长假期间周报将暂停一期,节后恢复正常节奏。祝大家长假快乐~ + +## 新闻 + +### [Swift Release Process](https://swift.org/blog/5-2-release-process/) + +[@四娘](https://kemchenj.github.io):Swift 宣布接下来的 5.2 版本会专注于提升性能。 + +### [开源 React Native 组件库 beeshell 2.0 发布](https://mp.weixin.qq.com/s/5XgNTQdBm4QxiStj8dFtHg) + +[@looping](https://github.com/looping):近期美团发布了 React Native 组件库 [beeshell 2.0](https://github.com/Meituan-Dianping/beeshell),共计开源 38(33 个组件与 5 个工具)个功能。同时本文也对这套组件的系统设计和方案实现进行了详细的讲解,并描述了这套工具在测试和开发调试上的探索,最后也列出了他们对组件库开源建设的长期规划。感兴趣的同学可以持续关注下。 + +## 新手推荐 + +### [iOS 实践检查清单](https://github.com/Binlogo/iOS-Practice-Checklist) + +[@Parsifal](https://github.com/ParsifalC):一份较细致的 iOS 项目实践检查清单,列举了 iOS 项目从“创建-开发-调优-发布”不同阶段分别需要注意到的一些细节,适合新人入门上手前几个项目时做自查。 + +## 文章 + +### 🐎 [将 flutter_web 迁移到 flutter1.9+](https://github.com/SwiftOldDriver/iOS-Weekly/issues/1671) + +[@邦Ben](https://weibo.com/linwenbang):前不久的 Google 大会上公布了 Flutter 1.9,该版本最大的 feature 就是正式支持 Flutter web,这篇文章简要的翻译了一下迁移 Web 到 1.9 版本的方式。按需阅读即可。 + +Flutter web 还存在不少问题 + +- 已经的性能问题还没解决 +- 不支持 hot reload +- 不支持 flutter plugins +- 不支持 dart:io,只走 http +- 还不支持 Platform.is + +### 🐕 [Flutter 无痕埋点](https://juejin.im/post/5d8c6d40f265da5b633cc5a2) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):无痕埋点一直是各端都在不断探索的一个方向, Flutter 由于刚刚诞生不久, 这方面的资料甚少, 作者从 Flutter 源码层面探寻到不少解决方案, 不失为一个不错的参考. 另附上咸鱼技术组的 Flutter 埋点方案作为补充参考: + +- [揭秘!一个高准确率的Flutter埋点框架如何设计](https://www.infoq.cn/article/3-vxBwYJXQxXLDlbu09x) + +> 本文由 [枫自飘零](https://juejin.im/user/5cf8c575f265da1bb80c1ea1) 自荐。 + +### 🐢 [Apple Push Notification Device Tokens](https://nshipster.com/apns-device-tokens/) + +[@享耳先森](https://github.com/iblacksun):iOS 13 发布后,不少推送厂商都通知开发者们升级 SDK,`Mattt` 特地写文章介绍此次改动。 + +APNS `DeviceToken` 的类型其实是 Data,具体含义和格式是个黑盒,只是 App 拿到 Data 后需要提交给各自的服务端,这就涉及到将 Data 进行格式转换的问题。 + +iOS 7 之前 Foundation 没有 `NSData -base64EncodedStringWithOptions` 方法,开发者们发现可以使用 `NSData description` 方法输出再进行转换,而 `description` 其实是一个 Debug 方法,具体实现随时会改。 + +### 🐎 [Flutter Face Detection](https://medium.com/flutter-community/flutter-face-detection-ac18e3e2211f) + +[@老驴](https://www.weibo.com/6090610445):这是一篇比较基础的用 Flutter 和 Firebase 来实现面部识别的教程。 + +作者介绍了如何使用 Firebase ML Kit 和 Flutter 中 CustomPainter 类相结合,在图片上直接显示出面部位置。 + +总体来说,这算是个不错的入门教程,有兴趣的话不妨看看。 + +### 🐕 [iOS 13 适配要点总结](https://juejin.im/post/5d8af88ef265da5b6e0a23ac) + +[@anotheren](https://github.com/anotheren):iOS 13 正式发布已经快两周了,本文总结了各种看得见和看不见的迁移问题,如果你还没有动手迁移,是时候开始了。例如 Dark Mode / Sign In with Apple 这类改动更是需要联动产品和设计,需要尽早准备。 + +### 🐕 [Xcode 11 初体验](https://juejin.im/post/5d8b0b6951882502c5533e9b) + +[@J_Knight_](https://github.com/knightsj):本文作者从工作流,编辑器,设计工具,代码管理,Debug 工具,性能分析工具,模拟器等方面介绍了 Xcode 11 的更新内容;本文图文并茂,介绍得比较全面,值得参考。 + +### 🐢 [SwiftNIO —— Swift 版的 Netty](https://juejin.im/post/5d774b2ce51d453b5c121948) + +[@xiaofeu86](https://weibo.com/xuyafei86):SwfitNIO 是一款基于事件驱动的跨平台网络应用程序开发框架,其目标是帮助开发者快速开发出高性能且易于维护的服务器端和客户端应用协议。本文是一篇整理性文章,从网络编程的几种并发模型到 Netty 的介绍再到 SwfitNIO,内容比较全面,适合想要了解 SwfitNIO 和并发编程的人阅读。 + +### 🐕 [Swift Concurrency Manifesto 中文翻译](https://gist.github.com/yxztj/7744e97eaf8031d673338027d89eea76) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章旨在来为 Swfit 讨论出一种 first-class 的并发模型。这个提案主要提供了 async/await 和 Actor 两种不同的方法。更多的内容可以参考作者的[原文](https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782)。 + +### 🚧 🐎 [一个 delegate 被声明为强引用又被悄悄地改掉了](https://twitter.com/chockenberry/status/1171102488205787141?s=20) + +[@JimQ](https://github.com/waz0820):本 tip 来自一条 tweet。`UIViewController.presentationController.delegate` 的 delegate 在 iOS 13 之前的声明是 strong 的,导致 delegate 的两端相互强引用无法正常释放,苹果在 iOS 13 悄咪咪地改为了 weak,但对于 iOS 12 及之前的版本这个内存泄漏问题则会一直存在,有使用 UIPresentationController 的同学留意一下。 + +### 🐎 [WCCgiMock - 客户端模拟网络回包工具介绍](https://juejin.im/post/5d834380e51d4561ea1a9514) + +[@红纸](https://github.com/waz0820):CgiMock 工具可以帮助开发者在不侵入代码的情况下,构造模拟数据,模拟网络回包。**WCCgiMock** 实现了两种工作模式: + +1. 第一种是在 Cgi 请求阶段拦截请求,返回预设好的模拟数据给业务层。 +2. 第二种模式是,在请求阶段不拦截,等到后台返回回包后,将模拟数据与后台回包进行合并,再返回给业务层。 + +与此同时,此工具具有以下特点:编写语言跨平台、内部DSL设计、响应式数据、用例组织能力、热更新调试等。遗憾的是 **WCCgiMock** 暂时还未开源,作者正在筹划准备当中,尽情期待。 + +### 🐕 [一种查看 Block 中引用的所有外部对象的实现方法](https://juejin.im/post/5d7e3b8de51d4561ac7bcd5f) + +[@looping](https://github.com/looping):本文通过分析 Block 内部布局结构来查看一个 block 所引用的外部对象,原理如下: + +1. 系统在编译 block 时会把所有要访问的外部对象或变量复制到 block 对象实例内部; +2. 当一个 block 中有引用外部对象或变量时,它的 `Block_layout->flags` 值中就会有 `BLOCK_HAS_EXTENDED_LAYOUT` 标志; +3. 如果有 `BLOCK_HAS_EXTENDED_LAYOUT` 标志,那么所有引用的外部数据成员的扩展描述信息就能在 block 的 `Block_layout->descriptor` 中找到; +4. 其中布局描述信息又能在 `Block_descriptor->layout` 上找到,包括引用对象的指针修饰类型和数量; +5. 这样一来,就能通过计算偏移来得到外部对象的地址,并转化成 OC 对象输出。 + +作者在文中不仅对 block 结构进行了解析和说明,同时还给出了完整的代码实现和使用方式,是一份很好的学习资料。 + +### 🐎 [我开发了一个 SwiftUI 库,将 CSS 引入 iOS 开发](https://mp.weixin.qq.com/s/I0HMHBBzhxsKj528mUqXmg) + +[@Damonwong](https://github.com/Damonvvong): 今年 WWDC 推出的 SwiftUI 和以往 iOS 接触的界面开发方式完全不同,是一套全新的设计。坦率的说,整套设计更接近于目前的 Web 开发。作者也正是看到了这点,对是否能将 CSS 的设计引入到 SwiftUI 中做了一些探索,写了一些总结。并开源了 [SwiftUI-CSS](https://github.com/hite/SwiftUI-CSS) 感兴趣的可以了解一下。 + +当然,目前 SwiftUI 还处于极度不稳定的阶段,不建议大家盲目跟风学习,学有余力稍微了解一下是不错的,现阶段学习并运用到实际应用中是不切实际的。 + +## 音视频 + +### [ggtalk | 从石油到 iOS,听听思琦的转行经历](https://talk.swift.gg/45?from=timeline&isappinstalled=0) + +[@Parsifal](https://github.com/ParsifalC):关注我们周报的读者相信对思琦([@SketchK](https://github.com/SketchK))都会有印象,因为他是我们目前 Logo 的设计者。这次 GGTalk 思琦和梁大一起聊了他是如何从石油相关专业转化成功到 iOS 开发的历程。 + +> 梁大:在我认识的人当中,思琦绝对是最厉害的那一批。当然我说的不是天赋,有些人就是天才,你怎么努力也无法超越。思琦厉害的地方在于思考分析能力和执行力。从有转行想法开始,收集信息、了解行业、分析不同职位,最终确定 iOS。然后开始转行,培训班、自学、开源项目、发文章、准备面试、拿到 offer。入职美团之后,完善知识体系、尝试不同方向、不断给自己提出挑战,每一年都在飞速成长。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#86-2019.10.14.md b/Reports/2019/#86-2019.10.14.md new file mode 100644 index 000000000..5552e85f1 --- /dev/null +++ b/Reports/2019/#86-2019.10.14.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #86 | 2019-10-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Twitter 重新上架 macOS 客户端](https://apps.apple.com/us/app/twitter-for-mac/id1482454543?mt=12) + +[@张嘉夫](https://github.com/josephchang10):10 月 11 日,Twitter 重新上架了经过 Project Catalyst 重写后的 Twitter for Mac 客户端。新版 Twitter 客户端支持拖拽、深色模式、多窗口浏览以及快捷键操作等功能。 + +## 文章 + +### 🐕 [Swift 的字符串为什么这么难用?](https://kemchenj.github.io/2019-10-07/) + +[@Damonwong](https://github.com/Damonvvong): **Swift** 的字符串的设计可以说是 **Swift** 中最难以理解的语法之一了。不过,我们周报的小伙伴 [@kemchenj](https://github.com/kemchenj) 同学写了一篇通俗易懂的文章,详细阐述了 + +- 为什么会存在 `Collection.Index` 这个设计 +- 目前的 `Collection.Index` 是怎么设计的,存在哪些问题 +- 未来的 `Collection.Index` 会怎么改进 + +感兴趣的同学可以仔细阅读一下,算是一篇不错的 **Swift** 语法进阶文章。 + +### 🐕 [iOS 端 h5 页面秒开优化实践](https://juejin.im/post/5d8da122f265da5b5a7209fa) + +[@莲叔](https://weibo.com/aaaron7):基于移动端的 H5 快开优化已经成为各大 App 的标配模块,通常的做法有资源缓存、离线包、data prefetch等等。本文作者首先分析了 H5 页面加载的流程,并在 iOS 上基于 WkWebview 通过实现请求的拦截,实现了资源缓存的机制。文章整体不算体系,因为并没有包含很多 state of the art 的优化方式,但在 WkWebview 的使用技巧上介绍的还比较详细,仍是一篇值得一看的文章。 + +### 🐕 [The Simple Life(cycle) of a SwiftUI View](https://medium.com/flawless-app-stories/the-simple-life-cycle-of-a-swiftui-view-95e2e14848a2) + +[@老驴](https://www.weibo.com/6090610445): 相信大家对 UIKit 中 UIView,UIViewController 的生命周期一定是熟悉到不能更熟悉了,这些知识点也一直是面试中的常考问题。那么在 SwiftUI 中,View的生命周期又是怎么样的呢?这篇文章就介绍了作者对其的理解。有兴趣使用 SwiftUI 的同学么可以简单的了解一下。 + +### 🐕 [Reducing iOS storyboard merge hell](https://medium.com/flawless-app-stories/ios-storyboard-merge-hell-b4cbb2e57dfc) + +[@J_Knight_](https://github.com/knightsj):作者介绍了几种避免在合并代码时在 storyboard 引起的冲突的方法:使用 SwiftUI,使用 nib,Diff 工具,锁定文件等方法。经常使用 storyboard 开发的朋友可以看一下。 + +### 🐕 [iOS 13](https://nshipster.com/ios-13/) + +[@老峰](https://github.com/GesanTung):本文来自 +Mattt (@mattt) 分享了 iOS 13 中的一些新的 API 及框架: + +- [Presentation framework](https://developer.apple.com/documentation/LinkPresentation):App 通过 URL 获取站点元数据,以富文本形式展示 URL, 可以丰富 URL 的展现形式。 +- [SFSpeechRecognizer](https://developer.apple.com/documentation/speech/sfspeechrecognizer):设备内置语音识别,支持离线语音识别。 +- [URLSessionWebSocketTask](https://developer.apple.com/documentation/foundation/urlsessionwebsockettask):提供 Web Socket 系统原生框架,不在需要使用三方框架。 +- [BackgroundTasks framework](https://developer.apple.com/documentation/backgroundtasks?language=objc):新的 Background Tasks 框架可以更方便的执行后台任务。 +- [OperationQueue progress](https://developer.apple.com/documentation/foundation/operationqueue/3172535-progress):OperationQueue 通过 progress 属性可以方便的获取运行队列的进度。 + +[文章](https://nshipster.com/ios-13/)还分享了 MapKit、JavaScriptCore、UIKit 等新的 API,限于篇幅不一一列举。 + +### 🐎 [Alternatives to protocols in Swift](https://www.swiftbysundell.com/articles/alternatives-to-protocols-in-swift/) + +[@四娘](https://kemchenj.github.io/):Swift By Sundell 这周探讨的是 protocol 的替代品,虽然 Swift 称自己为 protocol-oriented,但实际上有很多问题都不适合使用 protocol,作者列举了一些例子并且提供了更好的解决方案。 + +### 🐎 [重磅|庖丁解牛之——Flutter for Web](https://mp.weixin.qq.com/s/krR2XsDXvakMlZWbV-VvSg) + +[@邦Ben](https://weibo.com/linwenbang):众所周知,1.9 版本加入了 Flutter Web 的支持,但也仅限于技术预览。该文通过移动端原理和 Web 方式进行对比,直观感受到两者区别(差异主要在 dart:ui 和 engine 这一层)。 + +优点:通过 HTML + CSS + Canvas 的方式更好的兼容,低成本迁移(Flutter 上层直接兼容) +缺点:dart2js 生成的代码过大,功能尚不完备,使用的 BitmapCanvas 会导致一些缩放场景有性能问题 + +在这么一个优秀的分层设计中,Flutter Web 仍值得继续期待,等到可用版本出现。 + +### 🐕 [A Comprehensive Guide to All 120+ Settings URLs Supported by iOS and iPadOS 13.1](https://www.macstories.net/ios/a-comprehensive-guide-to-all-120-settings-urls-supported-by-ios-and-ipados-13-1/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B424) + +[@享耳先森](https://github.com/iblacksun):iOS 的 `Settings` App 一直都支持通过 URL Scheme 的方式打开某一个子项,本文作者收集了 120+ 个在 iOS 13 下支持的 URL,大家可以浏览看是否有满足自己需求的点。需要注意的是:这些 URLs 随时可能在未来 iOS 版本中移除或被 Apple 审核团队以 Private API 为由拒绝上架。 + +### 🐕 [Reverse Engineering Swift Applications](https://github.com/iOS-Reverse-Engineering-Dev/Swift-Apps-Reverse-Engineering/blob/master/Reverse%20Engineering%20Swift%20Applications.pdf) + +[@极速男孩](https://github.com/ztlyyznf001):本篇文章主要介绍了如何去反编译一个 Swift 的 app 。首先介绍了使用如何通过 Name Mangling 和 swift-demangle 来反编译得到一个 Swift 的 app 中的方法。Class Dump 现在已经对 Swift 提供了有限的支持。最后探索了去 hook swift 中的方法的可能。 + +## 代码 + +### [基于 NSProxy 开发的支持数据绑定、事件绑定的库](https://github.com/ghwghw4/GICDataBinding) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):GICDataBinding 是一款基于 NSProxy 开发的数据绑定库,支持数据绑定(单向、双向)和事件绑定,重要的是支持 JS 表达式,当然也支持 Swift 开发,但是要求 Swift 中的数据类型必须是 NSObject 子类。基于 GICDataBinding 数据绑定系统,可以做一些之前实现起来比较复杂的功能,比如重新思考 ViewModel 的定义,将 ViewModel JS 化、配合 Texture 实现整个 UI 基于绑定系统的可响应式设计等。 + +### [Flutter 动画组件](https://juejin.im/post/5d9c701e6fb9a04e187c9799?from=timeline&isappinstalled=0) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):[Flutter Animation Set](https://github.com/YYFlutter/flutter-animation-set) 由 YYFlutter 团队开发, 简洁的 API , 简化了动画实现, 特别是组合动画. 项目默认实现了不少酷炫的效果, 开箱即用. + +### [Yaap: Yet Another (Swift) Argument Parser](https://github.com/hartbit/Yaap) + +[@anotheren](https://github.com/anotheren):Yaap 是一个 Swift 写的 CLI 库,它使用了 `Mirror` 和 `Property Wrapper` 简化参数和选项的声明,并具有以下特性: + +* 强类型的参数和配置解析; +* 自动生成帮助和使用信息; +* 多命令路由; +* 智能拼写错误提示 + +如果你也在从事命令行相关的开发,不妨试一试。 + +### [xcderiveddata](https://github.com/NSHipster/xcderiveddata) + +[@Jimq](https://github.com/waz0820):用于打印 Xcode 工程的派生数据目录(derived data directory)的命令行工具,也支持把结果传递给 xcodebuild 或其他命令去自行化你的构建过程。 + +## 音视频 + +### [ggtalk | 互联网公司的开发流程](https://talk.swift.gg/47?from=timeline&isappinstalled=0) + +[@ggtalk](https://talk.swift.gg/):最近几个月翻译组的大事之一,就是蓉老师的开发流程调研。为了获得最新最全的信息,专程去广州和各位大佬讨论开发流程。蓉老师基本聊遍了国内的一线互联网公司,整理了一份文档,会在这期中详细介绍。 + +除了介绍流程,我们还讨论了一些相关内容,比如流程存在的问题、国内流程做的好的公司、研究流程对我们自己的意义等等。如果你的团队正面临流程问题,应该能从这期节目中获得一些灵感。 + +这期讲的内容比较长,容易走神,大家可以对照着文字版来听:[文字版流程整理摸我](https://github.com/numbbbbb/ggtalk-rss/blob/master/development_process.md)。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#87-2019.10.21.md b/Reports/2019/#87-2019.10.21.md new file mode 100644 index 000000000..e1afb8584 --- /dev/null +++ b/Reports/2019/#87-2019.10.21.md @@ -0,0 +1,99 @@ +# 老司机 iOS 周报 #87 | 2019-10-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 新成员介绍 + +热烈欢迎 [@五子棋](https://github.com/SatanWoo) 加入我们编辑部,同时也恭喜我们周报的编辑阵容继续升级,为大家提供更多有价值的内容!! + +## 新闻 + +### 🌟 [Transporter Now Available on the Mac App Store](https://developer.apple.com/news/?id=10152019a) + +[@anotheren](https://github.com/anotheren):Xcode 11 中 Apple 移除了 Application Loader,导致如果你需要上传 ipa 或 pkg 只能使用 Archive 功能或者必须依赖 Xcode 10.3 或更早版本的 Application Loader。现在,Transporter 作为替代品,已经在 [Mac App Store](https://apps.apple.com/us/app/transporter/id1450874784?mt=12) 上线。并且你可以从它的名称变化发现,不仅是应用,现在所有 Apple 生态链中最终产品的交付均可由它完成。 + +## 文章 + +### 🌟 🐢 [前端从 0-1 学习](https://juejin.im/post/5d9fc32f5188256c6d51dae6) + +[@张嘉夫](https://github.com/josephchang10):由知识小集团队 [Lefe](https://github.com/lefex) 发起的前端小课,一本帮助你学习前端的多媒体电子书。每天一小课,分阶段、系统地学习前端知识,前端从 0 到 1。 + +### 🌟 🐕 [Flutter in action 闲鱼技术最佳实践](https://mp.weixin.qq.com/s/RzvJeT_w69oZJmS9JHGBCg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):最近咸鱼技术组又开源了自用 Flutter 项目开发 CLI ([flutter-boot](https://github.com/alibaba-flutter/flutter-boot)), 这对于混合开发来说简直是福音, 大大简化了 Flutter 开发在混合项目上的配置流程和难度。文末的福利更是给力, 放出了阿里系对于 Flutter 探索过程中一些实践经验 - Flutter In Action , 书中详细讲解了多个 Flutter 知名开源项目, 可谓是 Flutter 进阶必读参物。 + +### 🌟 🐎 [Objective-C objc_msgSend 方法的新原型](https://zhuanlan.zhihu.com/p/86358529) + +[@五子棋](https://github.com/SatanWoo):从事 iOS 开发的同学想必都对 objc_msgSend 这个函数不陌生,许多黑科技玩法都是依托于 objc_msgSend 自身的实现。本文从 objc_msgSend 自身的流程谈起,摸索函数原型在 ABI 不匹配情况下会产生的一些非预期现象,最终推导出苹果最近为什么需要修改 objc_msgSend 函数原型。 + +### 🐢 [Flutter 浪潮下的音视频研发探索](https://mp.weixin.qq.com/s/GqoAMeuv1VRDpWT65YMzsQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文分享内容主要分为四个方面,首先对 Flutter 有一个简单介绍以及说明选择 Flutter 作为跨平台框架的原因,其次介绍了 Flutter 中与音视频关系非常大的外接纹理概念,以及对它做出的一些优化,并且对闲鱼在音视频实践过程中碰到的一些 Flutter 问题提出了一些解决方案—— TPM 音视频框架。最后详细介绍了闲鱼 Flutter 多媒体的开源组件,包括视频图像拍摄组件、播放器组件、视频图像编辑组件等。这些组件正在逐渐开源,开发者在基于 Flutter 开发音视频应用时可以充分利用闲鱼开源出的音视频模块能力,搭建 APP 框架,尽可能的减少重复劳动。 + +### 🐢 [如何在 Flutter 上实现高性能的动态模板渲染](https://mp.weixin.qq.com/s/fX6DtXYtKw0hFqf7t---eA) + +[@老峰](https://github.com/GesanTung):本来介绍了闲鱼技术团队通过动态模板下发,实现 Flutter 端的动态化模板高性能渲染,包括 Flutter 在 Layout 过程中 RelayoutBoundary 优化、Element 更新优化、以及自定义 Widget、Element 以及 RenderObject 优化,虽然当前方案还存在一些问题,但为我们实现态模板渲染提供了思路。 + +### 🚧 🐎 [React Native App : White Label 101](https://medium.com/flawless-app-stories/react-native-white-label-101-163c1967c12a) + +[@looping](https://github.com/looping):本文介绍了使用不同的 target 构建 iOS 端 React Native 的 white label(贴牌,模板 app) 应用的一种方案。主要是通过 WhiteLabelConfig.tsx 在 RN 侧获取应用信息,原生则通过在 target 对应的 WhiteLabelConfig.m 里提供应用信息,这样不同的 target 就能显示不同的内容了。 + +Android 也有类似方案,参考 [White Label 102](https://medium.com/@najera.sean/react-native-white-label-102-aba9c56f385c)。 + +### 🐕 [macOS 内核之 hw.epoch 是个什么东西? | 枫言枫语](https://justinyan.me/post/3935) + +[@四娘](https://kemchenj.github.io):作者在学习 macOS 系统的 `sysctl()` 函数时,其中一个用来标记计时标准的常量 `EPOCH ` 在电脑里打印出来却与实际不相符,所以一路追查到 BSD 层去查看。虽然最后还是没有了解到原因,但也是一次有趣的代码之旅。 + +## 工具 + +### [XcodeCleaner-SwiftUI](https://github.com/waylybaye/XcodeCleaner-SwiftUI) + +[@水水](https://www.xuyanlan.com):这个 MacOS 的应用可以帮助你清除遗留以及废弃文件,从而极大的节省硬盘空间,你可以每月或者每周运行一次进行清理。更关键的是它是开源的,使用 SwiftUI 进行开发,对实现原理感兴趣的小伙伴可阅读源码一窥究竟。 + +### [lldb-symbolic](https://github.com/luoqisheng/lldb-symbolic) + +对于线上的 Crash ,有很多工具可以去采集,如 Fabric 等,以便我们可以方便的定位 Crash 的原因。而对于开发中的 Crash ,我们依然可以通过异常断点或者查看堆栈的方式来做,但操作相对来说还是繁琐一些。于是,作者写了这个库来简化这一流程,有兴趣的同学可以看一下,也可以顺带了解下定位 Crash 的方式。 + +## 代码 + +### 🌟 [Impact - A crash detection and recording library](https://github.com/ChimeHQ/Impact) + +[@xiaofei86](https://weibo.com/xuyafei86):Impact 是一个用来检测和记录崩溃的工具库,它并不是一个完整的崩溃报告系统,但一定是其中最重要的一环。进程内的崩溃报告系统的运行环境是十分糟糕的,现有的第三方系统在某些方面都存在着一定的权衡与取舍。苹果自己的崩溃系统对开发者又十分不友好。而本仓库的作者在 [Crashlytics](https://firebase.google.com/products/crashlytics) 工作多年,也与 [PLCrashReporter](https://www.plcrashreporter.org/) 有过合作,在这方面的拥有相当多的经验。尽管进程内的崩溃报告还存在很多难题,但正因此才使得这项工作充满魅力,相信读者们也会在深入理解这个领域后受益良多。 + +### [ASCollectionView - A SwiftUI port of UICollectionView](https://github.com/apptekstudios/ASCollectionView) + +[@享耳先森](https://github.com/iblacksun):开始使用 SwiftUI 了吗?那你应该看看这个库:Swift UI 下对 UICollectionView 和 UITableView 的实现,支持 `preloading` 和 `onAppear/onDisappear`,还支持 `UICollectionViewCompositionalLayout`。 + +### [NEKit - A toolkit for Network Extension Framework](https://github.com/zhuhaow/NEKit) + +[@EyreFree](https://weibo.com/eyrefree777):NEKit 能够在我们构建一个基于 `NETunnelProvider` 的 Network Extension 应用时提供各种绕过网络过滤和审查所需的功能,同时尽可能减少对框架本身的干扰。它也是目前 GitHub 上与 Network Extension 相关的库中 Star 数最高的。同时我们也发现有国内的开发者基于该库实现了一些不可描述的功能,并开源了相应源码 [BearFree](https://github.com/zlyBear/BearFree),可以作为使用示例,有需求的同学可以自行学习 & 研究。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#88-2019.10.28.md b/Reports/2019/#88-2019.10.28.md new file mode 100644 index 000000000..4e89881ed --- /dev/null +++ b/Reports/2019/#88-2019.10.28.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #88 | 2019-10-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 🌟 [浅谈移动工程师跨界机器学习之路](http://satanwoo.github.io/2019/10/27/MNN1/) + +[@莲叔](https://weibo.com/aaaron7):移动开发工程师,尤其是 iOS 开发,到底有没有人要,堪称是技术界的薛定谔的猫问题。但从另一方面看,移动开发的市场大幅降温、回归理性也是事实。本文作者是近期新加入老司机编辑[@五子棋](https://satanwoo.github.io)大佬,来自于手淘的 MNN 团队(MNN 是手淘开发的移动端 AI 前向计算框架),结合自己的经历,探讨了从移动开发工程师跨界机器学习的可能性与潜在收益。 + +本文首先阐明了广义的 AI 、或者说产业界的 AI 其实90%在纯算法之外,是一个实打实的需要用工程手段解决问题的领域,所以工程师跨界机器学习是可行的。之后文章举了三个在实现端侧前向计算框架的过程中可能会涉及到的技术领域,分别是数据自描述协议(用于构成模型文件)、汇编知识(用于实现底层的 Op 性能优化)以及 GPU 相关知识(通过 OpenGL 等 GPU 接口利用 GPU 来跑相关的计算)。从我的经验来看确实这里每一个子领域都值得深挖并都有一定的技术红利。(甚至对于不做机器学习也很有用)整体来说这篇文章值得一看,尤其适合具备一定经验但苦于没有深入方向的移动工程师参考。 + +### 🐕 🌟 [Swift 5.2 将使用新的诊断框架](https://juejin.im/post/5dac17efe51d4524d6748831) + +[@四娘](https://kemchenj.github.io/):`error: type of expression is ambiguous without more context` 可能是大家最经常在 Swift 看到的编译错误,它很准确地描述了问题,但却对于解决问题毫无帮助。 + +在完成了 ABI 和 Module 稳定之后,Swift 团队终于有时间静下来优化诊断系统的体验,他们近日在博客里更新了诊断系统的重构方向以及思路。著名开发者[图拉鼎](https://weibo.com/1846569133/Ic2BSxNBh)也在微博表示对于这次优化表示期待: + +> 我记得我刚开始学编程时,当时学 C 语言,用的编译器是 GCC。当时 GCC 的 Diagnostic 做的很差,经常给出一些不知所云的错误提示。当时 Apple 用的也是 GCC,但很快就换成了 LLVM/Clang,后者的一大改进就是 Diagnostic。有理由相信这次 Apple 会做好 Swift 的 Diagnostic。 + +### 🐕 [The Scene Delegate In Xcode 11 And iOS 13](https://learnappmaking.com/scene-delegate-app-delegate-xcode-11-ios-13/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B426) + +[@张嘉夫](https://github.com/josephchang10):在 Xcode 11 中,iOS app 的默认模版会自动添加 `SceneDelegate`,那么这个在 iOS 13 中新出现的 `scene delegate` 的作用究竟是什么?作者深入分析了 iOS 13 和 Xcode 11 带来的一些改变,尤其是关于 scene delegate 和 app delegate,并探讨了其如何影响了 [SwiftUI](https://learnappmaking.com/swiftui-getting-started-how-to-ios-swift/)、Storyboard 和基于 XIB 的 UI 界面。 + +### 🐕 [Chris Lattner 讲述 Swift 起源故事](https://juejin.im/post/5daaf962f265da5b6a16aa87) + +[@老峰](https://github.com/GesanTung):本文 Chris Lattner 讲述了 Swift 起源故事,内容包括 Swift 初始团队与原型的介绍、Swift 文档编辑、Swift 社区对 Swift 发展的贡献、 Swift 发展现状及预期、Swift 在 Apple 生态外的推广及布局、Swift Evolution 在 Swift 演进中的影响,本文由 SwiftGG 翻译组翻译,感兴趣的读者可以阅读[原文](https://oleb.net/2019/chris-lattner-swift-origins/)。 + +### 🐕 [iOS 开发请您面向未来学习](https://juejin.im/post/5da6d14ae51d4524b601b78a) + +[@EyreFree](https://weibo.com/eyrefree777):本文作者从一位 5 年经验的 iOS 开发读者的诉苦为切入点,结合当前 iOS 开发市场行情,为我们分析了一个资深 iOS 开发人员在当下到底应该掌握哪些知识、技能,才能继续在日新月异的 IT 行业有自己的一席之地。且文中作者用多幅思维导图抛出了认为有必要深入研究的方向与领域,或许可以给一些尚无明确职业发展规划或入行一段时间但仍比较迷茫的 iOS 开发同学们一些启发。 + +### 🐕 [SwiftUI Layout System | Alexander Grebenyuk](https://kean.github.io/post/swiftui-layout-system) + +[@四娘](https://kemchenj.github.io/):今年新出的 SwiftUI 在易用性上做到了极致,其中起到支撑作用的就是布局引擎,作者在这篇文章里带我们剖析了 SwiftUI 的布局机理和 Stack 的实现,与 AutoLayout 进行比较,解释了 SwiftUI 为什么不需要处理约束无法解决的情况,并且总能给出一个 valid 的布局。 + +### 🐕 [小程序底层实现原理及思考](https://mp.weixin.qq.com/s/T6Mcu24Cmih-E_VCUo3PEQ) + +[@老驴](https://www.weibo.com/6090610445):虽然小程序的热度已经远远不如前两年那么疯狂了,但是现在越来越多的公司都希望自己能够在自己的 App 里加入小程序来打造自己的生态。 + +本文是《深入浅出Vue.js》的作者在接到开发小程序引擎任务后所做的一些尝试以及自己的思考。作者在选定使用 Vue 作为基础之后,从安全性,性能角度上出发,做了很多种的方案,最后选定了最合理的方案。相信能够对现在在开发小程序的同学们有一定的帮助。 + +### 🐢 [如何只用 Swift 写一款句子阅读 App](https://www.iweslie.com/index.php/archives/219/) + +[@JimQ](https://github.com/waz0820):这是『简・阅 - Simple Reader』App 作者关于开发这款作品的深度分享。用作者的话说,“这篇文章会讲述 Simple 整个 App 从诞生到现在所发生的一切,包括 UI 的设计,客户端的开发,后端服务器的搭建,宣传等等”。不同于多数侧重于讲理念、历程或运营,作者从需求文档、草图、设计稿、交互原型,到客户端界面实现、功能适配、动画细节,再到服务端弃第三方用 Vapor 开发,全栈还原,且全部高清截图或源码,全程无打码,就差开源了,也是个耿直的 boy 🙃,相信大家看了会有收获。 + +### 🐕 [Swift​UI Previews on macOS Catalina and Xcode 11](https://nshipster.com/swiftui-previews/) + +[@J_Knight_](https://github.com/knightsj):作者介绍了几种 SwiftUI 的使用方法:不用重新编译就可查看 UI 组件的多状态(比如按钮上的不同文字,文字的不同大小,多语言文字),某一个控件的 Dark Mode,同一个页面在不同机型(包括 iPhone 和 iPad)的展示效果。对 SwiftUI 感兴趣的读者可以参考一下这篇文章。 + +### 🐕 [看到这篇启动优化,让你的App有顺滑无比的启动速度~~](https://juejin.im/post/5cff0ada6fb9a07edc0b4c3c) + +[@极速男孩](https://github.com/ztlyyznf001):本文主要介绍了如何去优化 APP 的启动时间。首先介绍了如何去查看自己的 APP 的启动时间,然后介绍了如何分别去从 T1 部分(包括删除无用代码,+load 方法优化,减少 framework 的使用,减少 c++ 虚函数等方法)和 T2 部分(通过 ONLDynamicLoader 来优化各个组件的启动时间)对启动时间进行优化。 + +### 🐎 [Type-safe User Defaults](https://danieltull.co.uk//blog/2019/10/09/type-safe-user-defaults/) + +[@zvving](https://github.com/zvving):对 UserDefaults 封装的库很多,类型安全的处理多限于通过方法名控制 value 类型。作者另辟蹊径,使用 struct + where 子句定义 key 和对应数据类型,提供如下类型安全的调用方式: + +```swift +defaults.set("Noooope", for: .someKeyForStr) +defaults.set(1, for: .otherKeyForInt) +``` + +对于一些 kv 操作及其它需要根据 key 约束内容类型的场景很有借鉴意义,推荐一试。 + +## 代码 + +### [IOSSecuritySuite - An advanced and easy-to-use platform security & anti-tampering library](https://github.com/securing/IOSSecuritySuite) + +[@五子棋](https://satanwoo.github.io):IOSSecuritySuite 是一个完全用 Swift 实现,可以用来检测你的 App 是否运行于存在安全隐患环境中的工具库。它能够检测你的 App 是否处于越狱环境、是否被类似 Frida 或 Cycript 这样的调试工具注入、是否被加载了调试器等等。对于广大的应用逆向爱好者来说,是一份不错的学习资料。 + +### [MNN - A lightweight deep neural network inference engine](https://github.com/alibaba/MNN) + +[@五子棋](https://satanwoo.github.io):MNN 是一个轻量级、高性能的深度学习推理引擎。通过它,你能够轻松的在移动客户端上使用机器学习的能力,制作令人震撼的应用。对于想要从客户端领域进军机器学习的同学,这是一份不可多得的学习佳作;对于想要研究底层技术的同学,这份代码里面大量的手写汇编、指令流水线排布的代码,更是值得细细品味。 + +### [bytedance/AWERTL · GitHub](https://github.com/bytedance/AWERTL/blob/master/README.md) + +[@kyo](https://github.com/KyoLi):对于一些需求,可能需要我们从右到左进行页面的布局,例如做国际化的时候,使用阿拉伯语的用户他们就习惯从右到左使用文字和功能。iOS 9 之后推出了系统解决方案以支持 RTL(Right To Left),但使用系统方式还有一定问题,例如必须支持 Autolayout,不支持 iOS 8 以下等。AWERTL 这个库在做到支持 RTL 的同时,弥补了系统方案的一些问题,有这方面需求的同学可以看一看。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#89-2019.11.04.md b/Reports/2019/#89-2019.11.04.md new file mode 100644 index 000000000..67588cee9 --- /dev/null +++ b/Reports/2019/#89-2019.11.04.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #89 | 2019-11-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [SSWG Annual Update](https://swift.org/blog/sswg-update/) + +[@looping](https://github.com/looping):本文是 SSWG (Swift Server Work Group) 小组向我们分享的他们在去年设定的工作目标上的最新进展。文章一开始介绍了他们的工作方式,即通过一个叫做 孵化过程(Incubation Process) 的机制,或流程(类似 Swift Evolution)来保证在类库和工具演进上的质量。接着列举了通过该流程产出的 9 个提议,分别对应 9 个类库,以及在 Linux 上输出的一些工具。最后描述了接下来 2020 年的工作重点,虽然对要演进的内容只做了简短描述,但也让人感觉是清晰明确和有所期待的。 + +## 文章 + +### 🐎 🌟 [iOS 13.2 为何杀 App 这么频繁以及什么是 wakeup](https://imtx.me/archives/2809.html) + +[@zvving](https://github.com/zvving):升级 iOS 13.2 后微信在后台频繁被杀给大量用户带来困扰。网络上微信 wakeup 分析日志流传甚广,也有人因此断定微信不遵守 iOS 后台唤醒规则,因此被杀。 +``` +Wakeups: 45001 wakeups over the last 192 seconds (234 wakeups per second average), exceeding limit of 150 wakeups per second over 300 seconds +``` +[图拉鼎](http://weibo.com/tualatrix)查阅资料后,用这篇文章告诉大家:日志中的 wakeup 并不是用户使用意义上的后台唤醒,而是线程唤醒。比如调用`peformSelector:onThread:`或者`dispatch_async`都会触发线程唤醒。 +目前能确定的是 wakeup 调用不是微信等 App 被杀掉的直接原因,不能简单归因后台频繁被杀是开发商微信问题。 + +事实上,频繁后台被杀的不仅仅有微信,希望苹果和相关开发商早日解决此问题。 + +### 🐕 [Packages 的开发和提交](https://mp.weixin.qq.com/s/sDstU5YqwFHzbMxPAfbkvw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):在 Flutter 项目的开发中通过 Package 可以创建易于共享的模块化代码, 所以如何创建 Package 是一个必会技能, 本文可谓是手摸手带你完全掌握 Package 的开发方法, 并且对多端的实现有详细的讲解. + +### 🐕 [Draft Proposal: Swift PM Package Resources](https://forums.swift.org/t/draft-proposal-package-resources/29941?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B427) + +[@享耳先森](https://github.com/iblacksun):Swift PM 终于要有正式的资源打包及加载方式了。这个提案的主要内容想解决 Swift PM 如何约定资源存储路径及各平台下如何用一致的代码进行加载。 + +### 🐕 [MetricKit](https://nshipster.com/metrickit/) + +[@AidenRao](https://weibo.com/AidenRao):[MetricKit](https://developer.apple.com/documentation/metrickit?language=objc) 是 iOS 13 中的一个新框架,用于收集 APP 的各项性能指标。诸如耗电,启动时长,交互耗时,磁盘使用等指标。 +文章介绍了 MetricKit 及它的使用方式,也提供了一个收集 MetricKit 数据的自建 Web 服务方案。帮助你,提供更好的用户体验。 + +### 🐕 🌟 [macOS 内核之从 I/O Kit 电量管理开始 | 枫言枫语](https://justinyan.me/post/3961) + +[@莲叔](https://weibo.com/aaaron7):对于绝大多数 iOS 开发者朋友来说,电量管理都是相对陌生的话题,一方面是系统往往不会提供特别友好的 API,另一方面需求确实也不多。不过这并不妨碍以电量管理作为口子去了解学习系统内核的知识。本文作者也是从这个目的出发,分别介绍了 macOS 中的电量管理的 API 以及使用方法,顺带介绍了 mach_port 的通信机制,最后也介绍了 iOS 上的一些使用。整体内容比较详实,推荐对系统编程感兴趣的同学研究。 + +### 🐕 [iOS 调试 Rust](https://juejin.im/post/5db06e03e51d452a284c0d92) + +[@EyreFree](https://weibo.com/eyrefree777):本文记述了作者在成功进行 [iOS 编译和部署 Rust Library](https://juejin.im/post/5dabeac451882506974d6cb6) 后对编译产物的具体使用和调试过程。Rust 是一门为内存安全和速度而设计的系统级编程语言。由 Mozilla 打造,目的是用来开发下一代高性能跨平台软件,它能够在 Android 和 iOS 平台间以一种高性能和安全的方式共享代码,又比 C++ 容易使用得多。如果你对此感兴趣,作者后续还写了一篇 [Xcode 调试 Rust](https://juejin.im/post/5db1b7476fb9a0202d0448ab) 进一步介绍了更多调试姿势。 + +### 🐎 [Mac下通过Apple Configurator 2获取ipa包](https://juejin.im/post/5c6e87af51882523f02666a6) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):想要获取苹果应用商店的 ipa 包可以通过 PP 助手直接下载,而且都是已经砸过壳的,但是现在 PP 助手上很多软件已经不再更新了。如果有系统在 9.0 以下的苹果设备也可以通过手机直接导出,但是现在 9.0 以下的手机已经寥寥,抑或是通过越狱机导出。还有一个导出 ipa 包的方法,就是本文所说通过 Apple Configurator 2 导出,操作简洁明了。 + +### 🐎 [闲鱼前端基于serverless的一种多端开发解决方案](https://mp.weixin.qq.com/s/VLsVTe4ZyOJ9rNyVf5aXyg) +[@极速男孩](https://github.com/ztlyyznf001):本文主要介绍了通过 serverless 来统一前端的 viewmodel 层,前端不需要任何的数据处理逻辑,而仅仅需要根据后端返回的数据来直接进行展示。这样使得前端不需要了解业务逻辑也可以完成页面的开发,也方便对 viewmodel 层进行复用。 + +### 🐢 [SwiftSyntax 详解](https://juejin.im/post/5dac6d3ef265da5b741514b0) + +[@老峰](https://github.com/GesanTung):本文详细介绍了SwiftSyntax 开源库,使用它我们可以分析、生成、优化 Swift 代码。文章包括 Swift 编译器结构介绍,SwiftSyntax 主要结构,SwiftSyntax API 示例,以及 SwiftSyntax 的一些实际应用(检测未使用代码,语法高亮等),对编译原理或者代码分析、生成、转换工具实现原理感兴趣的读者可以研究研究。 + +推荐阅读: +- [Improving Swift Tools with libSyntax](https://academy.realm.io/posts/improving-swift-tools-with-libsyntax-try-swift-haskin-2017/) + +### 🐎 [Announcing the pod merge plugin for Cocoapods!](https://swiftier.co/2019-10-17/announcing-cocoapods-pod-merge) + +[@四娘](https://kemchenj.github.io/):在使用 Cocoapods 时一个常见的问题就是动态库数量的增加会大幅降低 App 的启动速度,解决方案有两个方向,其中一个是动态库合并。但之前动态库的合并基本上都需要大家手写脚本去完成,现在 Cocoapods 社区就发布了一个新的插件去简化这个过程: + +```ruby +group "Networking" + pod "AFNetworking" + pod "SDWebImage" +end +``` + +只要编写动态库合并的声明文件,在 `pod install` 时插件就会自动完成动态库的合并,使用这种方式可以减少 13-30% 的启动时间,唯一美中不足的就是无法接入二进制库,必须以源码接入才可以。 + +## 工具 + +### [InjectionIII](https://github.com/johnno1962/InjectionIII) + +[@EyreFree](https://github.com/EyreFree):InjectionIII 允许您在 iOS 模拟器中以增量方式更新类方法的实现,而无需重新生成或重新启动应用程序,从而为开发人员节省了大量时间。 + +### [dirtrace - 终极文件夹内容占比查看工具](https://mp.weixin.qq.com/s/BJF35SFlM7oU8mvT8duBRg) + +[@水水](https://www.xuyanlan.com): dirtrace 这个小工具的作用是把一个文件夹的内容,用 Chrome Tracing 展示出来,表示出文件的大小以及文件夹之间的父子关系,还提供了可视化浏览方法。 附上源码地址:https://github.com/everettjf/dirtrace, 有兴趣的朋友可以研究和使用哦~ + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#90-2019.11.11.md b/Reports/2019/#90-2019.11.11.md new file mode 100644 index 000000000..25eded4f5 --- /dev/null +++ b/Reports/2019/#90-2019.11.11.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #90 | 2019-11-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 新手推荐 + +### 🐎 [用 Flutter 打包 iOS 应用的一些细节知识](https://mp.weixin.qq.com/s/PsvVFoB91_jGzibFPIwnIw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文向大家介绍 Flutter 的构建系统是如何将 Flutter 项目 (及其资源) 转换为 iOS 应用包的。可以直接使用 Flutter 工具生成,也可以使用自定义的 Xcode 或 Gradle 设置。 分析了 Flutter iOS 应用包中 Flutter.framework 和 App.framework 的结构和组成,如果你在使用 Flutter 构建 iOS 应用时有什么疑惑,可以参考阅读。 + +## 文章 + +### 🐎 [Best resources for Advanced iOS Developer (Swift)](https://medium.com/flawless-app-stories/best-resources-for-advanced-ios-developer-swift-ade30374593d) + +[@AidenRao](https://weibo.com/AidenRao):作者花了几年时间,收集整理的,对于他很有帮助的 iOS & Swift 文章和视频。涉及架构、组件化、面向协议、调试、SwiftUI 等多个分类。收藏它们并学习,对你会很有帮助。 + +### 🌟 🐕 [美团 iOS 端开源框架 Graver 在动态化上的探索与实践](https://mp.weixin.qq.com/s/PD9hnWv8B32ZCYj1UokUBA) + +[@老驴](https://www.weibo.com/6090610445):从去年开始,动态化的讨论热度似乎突然冷了下来,究其原因,和 Apple 一再缩紧审核进而导致各大公司选择自用而非开源来规避风险有关。 + +美团这次就分享了他们的 Graver 框架的背后原理,以及他们对提升渲染性能的一些思考。最后的结果也做到了令人满意,有兴趣在自己产品上想做性能优化的同学不妨一度。 + +### 🐢 [Device Identifiers and Fingerprinting on iOS](https://nshipster.com/device-identifiers/) + +[@JimQ](https://github.com/waz0820):苹果一直致力于保护用户隐私,在不断地更新识别用户的限制措施,但广告商还是会玩猫捉老鼠的游戏,通过设备的各种基本信息组合或者各种骚操作来识别用户指纹(此处非指手指指纹信息,而是代指可以唯一标识用户的信息)。本文主要介绍了在此背景下 iOS 设备标识符的不断迭代,以及在系统各种限制下仍可能被用于识别用户指纹的各种方式,还是相当涨姿势的。而且作者收集到的主要是国外的方式,国内的厂商肯定也有更多秘而不宣的奇葩操作。 + +这也是一个不断扑火的过程,此处方歇,彼处又生。文章开头作者通过比较宏大的视角来看待这个问题,把广告追踪比作我们这个时代的怪物,但文章结尾还是抱有希望的,毕竟我们还有一个在致力于保护用户隐私的平台,以及作为技术人员,我们还可以发出自己的声音。 + +### 🐕 [Dart2.6正式版发布](https://mp.weixin.qq.com/s/9xCrzEmwOf8P9MzpQ4COaQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):近日 Dart 团队又双叒叕 更新了。是的,你没听错。Dart团队在11月初正式发布了 Dart2.6 的正式版本. 最大的亮点是:dart2native。它是现有编译器基础上的一个扩展,能够将Dart程序编译为包含预编译 (AOT) 机器码的 self-contained 的可执行程序。使用 dart2native,您可以使用 Dart 通过 macOS/Windows/Linux 上的命令行创建工具. + +## 工具 + +### [中文独立博客列表](https://github.com/timqian/chinese-independent-blogs) + +[@EyreFree](https://weibo.com/eyrefree777):作者希望创造一个可以连接到中文圈高质量独立博主的工具,在保持独立博客自由的同时,让独立博客们也有一个稳定的被发现的渠道,把独立博客们收集起来,目前初步采用 Markdown 列表的形式。同时作者也通过建立 Telegram 群等方式,把独立博客的创作和读者群体组织起来使大家能够建立联系。当然,如果您认为自己的个人博客质量很不错,也可以尝试提交到该仓库的哟。 + +### [cocoapods-static-swift-framework](https://github.com/leavez/cocoapods-static-swift-framework) + +如果项目中有许多动态库,会增加启动时间,而静态链接则没有这个问题。一个方式支持静态库是使用 Cocoapods,但 Cocoapods 仅支持单个 pod,也就是说 podspec 中的静态库选项仅对该 pod 有效。cocoapods-static-swift-framework 这个插件就是解决这个问题的,只需要一句话就可以将所有 pod 编程静态库! + +## 代码 + +### [Repeat - 轻量级定时器](https://github.com/malcommac/Repeat) +[@五子棋](https://satanwoo.github.io): Repeat 是一个基于 GCD - Grand Central Dispatch 的轻量定时器,在功能上可用于替代 NSTimer。同时针对 NSTimer API 设计繁琐不易用的特点,作者提供了多种简洁的调用方式。整体代码非常精简,值得一读。 + +### [Swift.org - Swift Numerics](https://swift.org/blog/numerics/) + +[@享耳先森](https://github.com/iblacksun):Swift Standard Library 成员 Steve Canon 创建的开源项目,提供数学计算相关 API,弥补标准库中的不足。 + +### [SDWebImageSwiftUI](https://github.com/SDWebImage/SDWebImageSwiftUI) + +[@四娘](https://kemchenj.github.io/):SDWebImage 的 SwiftUI 版,基于原版的 SDWebImage 进行封装,之前的生态也可以无缝对接过来,例如各种图片样式的支持等等。 + +### 🐎 [5 iOS Libraries to Improve and Inspire Your UI](https://medium.com/better-programming/5-ios-libraries-to-improve-and-inspire-your-ui-3a7c768a176c) + +[@极速男孩](https://github.com/ztlyyznf001):五个不同的基于 UICollectionView 的 UI 框架。 + +### 🐎 [Swiftly - Swift 5.1 references for busy coders](https://swiftly.dev/) + +[@水水](https://www.xuyanlan.com):Swift5.1 的一些基本类型的简单介绍和参考示例代码,有需要的读者可以收藏该地址,以备查阅哦~ + + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#91-2019.11.18.md b/Reports/2019/#91-2019.11.18.md new file mode 100644 index 000000000..eb18aa1ff --- /dev/null +++ b/Reports/2019/#91-2019.11.18.md @@ -0,0 +1,98 @@ +# 老司机 iOS 周报 #91 | 2019-11-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Apple Push Notification Service Update](https://developer.apple.com/news/?id=11042019a) +[@looping](https://github.com/looping):近期苹果发布通知,将在 2020 年 11 月后不再支持基于二进制协议的 APNs,建议我们尽快把推送服务更新到基于 HTTP/2 的 API 上。关于 APNs 详细内容可查看官方文档 [APNs Overview](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html)。 + +### [You Cannot Submit an Electron 6 (or 7) App to the Apple Store](https://david.dev/you-cannot-submit-an-electron-6-or-7-app-to-the-apple-store) + +[@张嘉夫](https://github.com/josephchang10):开发者 David.dev 报告,App Store 会拒绝使用 Electron 6 或 7 开发的 app,原因是使用了非公开框架,包括 CAContext、CALayerHost、NSAccessibilityRemoteUIElement、NSNextStepFrame、NSThemeFrame 以及 NSURLFileTypeMappings 等。Apple 在回复作者的消息中还说,如果在未来提交的 app 中继续使用或隐瞒非公开 API,可能会导致 Apple 开发者账号被停用,并从 App Store 移除所有相关的 app。 + +## 文章 + +### 🐢 [做一个高一致性、高性能的Flutter动态渲染,真的很难么?](https://mp.weixin.qq.com/s/R6IxJqawwbmlWvlwb3ZXww) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):最近闲鱼 Flutter 小组在尝试使用 DinamicX 的 DSL ,通过下发 DSL 模板实现 Flutter 端的动态化模板渲染。在解决了性能方面的问题后,又面临了一个新的挑战——渲染一致性。本文详细讲解了, 在实现的过程中各类坑的拆解, 从思路到实现的全过程, 抽丝剥茧带你一步步实现。 + +### 🐕 🌟 [Swift 在 GAIA 平台云端一体化的探索](https://mp.weixin.qq.com/s/7B2FDBZ_vnvswiYWjLih4Q) +[@莲叔](https://weibo.com/aaaron7):Server Side Swift 一直以来都随着 Swift 的发展而发展,虽然陆续有公司、团队开始在 prod 环境使用 Swift 进行开发,但整体来看仍然相对小众,相比 GO、Java 等传统 Server-side 的语言仍有较大的差距。从另一方面,近段时间的服务端技术也得到了长足的发展,Faas(Function as a service) 逐步进入人们的视野,Faas 在容器化的基础上,将后端的服务更进一步的抽象为一个个函数,由于隐藏了大量的服务侧的技术细节,Faas 让前端、移动端开发人员全栈的完成端到云的逻辑成为可能,这似乎是 Server-Side Swift 新的机会。 + +作者就做了这样的一件事,在淘宝的 Faas 平台:GAIA,实现了 Swift 语言的适配。这样便可以用一门语言全栈的快速完成一个 App 的落地。作者分享了一个具体的案例以及对应的技术细节,虽然从文章本身无法窥见全貌,但仍然算一种 mind-opener,引人思考。感兴趣的同学可以阅读。 + +### 🐕 [Understanding the iOS 13 Scene Delegate](https://www.donnywals.com/understanding-the-ios-13-scene-delegate/) +[@anotheren](https://github.com/anotheren):iOS 13 带来了全新的 Scene Delegate 以适配应用多窗口。本文详细讲解了 Scene Delegate 对传统的 App Delegate 的替换要点,对于理解全新的 Scene Delegate 所承担的职能很有帮助。无论你是否已迁移至 Scene Delegate,本文都值得一读。 + +### 🐕 [基于 SwiftSyntax 写一个命令行工具检测 Xcode 项目中不用的图片资源](https://juejin.im/post/5dc2a969f265da4d2a432249) +[@anotheren](https://github.com/anotheren):类似的工具虽然已经有了喵神的 [FengNiao](https://github.com/onevcat/FengNiao),但是重复造轮子的过程中总能够学到新的东西。作者分析了用于路径检索的 [Path.swift](https://github.com/mxcl/Path.swift) 以及用于语法分析的 [SwiftSyntax](https://github.com/apple/swift-syntax),并将他们组合成一个完整可用的工具。 + +### 🐕 [iOS 程序员眼中的 Emoji](https://juejin.im/post/5dc3b9a46fb9a04a95289a84) +[@zvving](https://github.com/zvving):😂有人评价 Emoji 是世界唯一通用语言。🤔你思考过它的编码原理吗? + +从浏览 Emoji 到查看对应编码,从 ASCII 到 Unicode 基础概念,从 Emoji 拼接到对应 iOS 字符处理。本文清晰明了,带你快速了解 Emoji 编码基础原理。 + +### 🐕 [5 Reasons Why Apps Fail & How To Avoid Them](https://simpleprogrammer.com/why-apps-fail) +[@老驴](https://www.weibo.com/6090610445):我们读者里应该有很大一部分在做个人项目,比如在工作之余做个 App 上架之类的。这个时候,大家也就变身 PM,努力用各种方法去推广自己的产品,让自己的产品能被更多的人喜爱。 + +这篇文章就用了比较概括的语言,阐释了作者心中的五种最常见的产品失败的原因,同时也给出了一点建议。来读读文章看看能否从中学到点什么吧。 + +### 🐕 [Flutter 性能分析](https://mp.weixin.qq.com/s/VydPJnfEno0-yvGdS5P0Ug) +[@五子棋](https://satanwoo.github.io):性能优化是所有应用开发者都必须面对的一个挑战。而随着 Flutter 等跨平台框架的不断涌现,移动端的开发范式也正经历着转变。 +本文从方法论和对应工具使用等两个层面阐述如何分析 Flutter 中的性能问题。文中的一些经验对于帮助大家快速定位问题能起到不小的作用。 + +## 工具 + +### [iShot 截图工具](https://apps.apple.com/cn/app/ishot-%E6%88%AA%E5%9B%BE-%E9%95%BF%E6%88%AA%E5%9B%BE-%E6%A0%87%E6%B3%A8%E5%B7%A5%E5%85%B7/id1485844094?mt=12) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Mac 自带的截图功能,大部分使用场景下基本足够,但长截图的痛点苹果迟迟没有成全用户。相信不少用户曾被推荐 Xnip 这款截图工具,但毕竟是付费的。iShot 工具的出现应该会让不少 Xnip 用户倒戈阵营,iShot 是 Mac 上一款免费优秀、功能全面的区域截图、窗口截图、长截图、延时截图、快速标注的工具,小巧实用,非常适合对截图有多重需求的用户。 + +### [Topology](https://github.com/le5le-com/topology) +[@Jimq](https://github.com/waz0820):Topology 是一款开源的基于 canvas + typescript 的绘图引擎,可用于实现软件架构图、微服务部署结构图、流程图、活动图、类图、时序图、SCADA 等,也可以按照自己的想法实现任何想要的图形库。 + +官方有基于 Topology 实现的在线绘图平台,可在线编辑,一键保存到云服务器,免费使用,且前端开源。 + +## 代码 + +### [xcdiff - A tool which helps you diff xcodeproj files](https://github.com/bloomberg/xcdiff) +[@xiaofei86](https://weibo.com/xuyafei86/):一个用来对比 xcodeproj 文件的开源库,能够输出更易于理解的对比结果。关于使用场景,作者举例:“当我们使用工具来生成 xcodeproj 文件时,对比 xcodeproj 文件能够增强我们对迁移过程的信心”。推荐给有需求的同学。 + +### 🐕 🌟 [LDNetDiagnoService](https://github.com/Lede-Inc/LDNetDiagnoService_IOS) +[@莲叔](https://weibo.com/aaaron7):如果关注用户反馈的开发者可能多多少少都会遇到这样的一个无力时刻:用户反馈使用 App 期间遇到网络问题无法正常使用,但缺乏相应的信息来判断是 App 本身的问题还是用户的设备所处的环境问题。LDNetDiagnoService 是一个网络诊断的库,基于 ping 和 traceroute 的原理对指定的域名进行测试,并生成诊断报告。结合该库,在用户网络出错的时候运行该诊断,想必能更好的协助用户和开发者定位原因。有类似困扰的开发者不妨一试。 + +### [UIFontComplete](https://github.com/Nirma/UIFontComplete) +[@anotheren](https://github.com/anotheren):这是一个可以安全调用字体的管理库,使用 enum 将字体的调用方式进行了封装,而不使用字符串这种不安全的方法。同时支持 iOS 和 tvOS。 + +### 🐎 [FSPagerView](https://github.com/WenchaoD/FSPagerView) + +[@老峰](https://github.com/GesanTung):FSPagerView 是一个 Swift 实现的优雅轮播图库,它可以在制作横幅视图、产品展示、欢迎 / 指南页面、屏幕 / 视图控制器滑块等为我们带来很大的便利。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#92-2019.11.25.md b/Reports/2019/#92-2019.11.25.md new file mode 100644 index 000000000..25b5013c6 --- /dev/null +++ b/Reports/2019/#92-2019.11.25.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #92 | 2019.11.25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [​Flutter 智能闹钟挑战赛约你来战!](https://mp.weixin.qq.com/s/mp2XxbP1jfsayw6oVEjb2Q) +[@老驴](https://www.weibo.com/6090610445):是不是学了 Flutter 却无处练手?机会来了!Google 联合 Google Assistant,联想,一起搞了这个智能闹钟挑战赛,用 Flutter 为联想智能音箱开发一个智能闹钟功能,不仅能让你练手 Flutter, 更能赢得最高大奖:一台顶配的 iMac Pro 哦。心动不如行动,赶紧点击链接参与起来! + +## 文章 + +### 🌟 🐕 [Command-line argument parsing using Swift Package Manager's SPMUtility module](https://rderik.com/blog/command-line-argument-parsing-using-swift-package-manager-s/) + +[@looping](https://github.com/looping):本文介绍了通过使用 SPM 的 SPMUtility 模块配合解析终端命令参数,来完成编写命令行工具的任务。在列举完基本的命令参数概念和设计规则后,就开始工具编写实战,讲解过程非常详细,附带源码,入门教程必备。在文章最后,作者提到了前段时间他自己写的另一篇文章,[Building a CLI tool using Swift and Vapor's Console module](https://rderik.com/blog/building-a-cli-tool-using-swift-and-vapor-s-console-module/),使用这两个模块都能写出很好的工具,并且也有各自的设计风格,有写命令行工具需求的小伙伴可以深入了解下。 + +### 🐕 [Thread Sanitizer explained: Data Races in Swift](https://www.avanderlee.com/swift/thread-sanitizer-data-races/) + +[@EyreFree](https://github.com/EyreFree):本文通过对并发编程中经典的数据竞争(Data Race)问题进行了举例、分析,由此引入和介绍了 Thread Sanitizer(也称为 TSan)的使用方法以及它的基本工作原理,并演示了如何依靠它来解决文中举出的数据竞争问题。Thread Sanitizer 是在 Xcode 8 中引入的基于 LLVM 的工具,用于审查 iOS 代码中的线程问题,能给我们的并发编程调试带来很大的便利,值得一看。 + +### 🌟 🐢 [Flutter 应用性能优化最佳实践](https://mp.weixin.qq.com/s/2CbtwcyKlmB2u2c02gDP0w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):通常来说,Flutter 技术构建的应用程序在默认情况下都是高性能的。所以你只需要避开常见的陷阱,就可以获得优异的性能,而不需要使用复杂的分析工具对细节做优化. 本文总结了一些 Flutter 应用开发过程中的最佳实践, 可以有效的帮助你避开一些坑点. + +### 🐕 [自定义WKWebView显示内容(一)](https://juejin.im/post/5dc41b44e51d456e824cf137) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文作者结合代码与 Demo 展示分享了的如何通过 WKContentRuleList 来制定 WKWebView 的内容过滤规则(例如更改 http 请求的 URL 为 https );以及如何通过 WKURLSchemeHandler 来加载相册中图片显示到 WKWebView 中的方案。 + +### 🐎 [Message-ID and Mail.app Deep Linking on iOS and macOS](https://nshipster.com/message-id/) + +[@四娘](https://kemchenj.github.io/):这周 NSHisper 给我们带来的是 Deep Linking 相关的内容,讲解 iOS / macOS 里 Mail.app 使用链接跳转时如何编码链接信息,避免信息泄漏。 + +### 🚧 🐎 [iOS Deferred Deep Link](https://medium.com/zrealm-ios-dev/ios-deferred-deep-link-%E5%BB%B6%E9%81%B2%E6%B7%B1%E5%BA%A6%E9%80%A3%E7%B5%90%E5%AF%A6%E4%BD%9C-swift-b08ef940c196) + +[@老峰](https://GesanTung.github.io/):Deferred Deep Link 是指用户打开一个 Web Page 的时候并没有安装对应的 App,希望用户在安装 App 以后可以 Deep Link 到对应内容,本文作者介绍了首先介绍了 Deep Link 概念以及其局限性,然后通过实例给出使用 [Firebase Dynamic Links](https://firebase.google.com/docs/dynamic-links) 方式实现 iOS Deferred Deep Link 的过程。 + +### 🐕 [NSCopying uses in Swift](https://swiftrocks.com/nscopying-nszone-uses-in-swift.html) + +[@极速男孩](https://github.com/ztlyyznf001):和 Objective-C +中一样,在 Swift 中同样有 NSCopying 和 NSMutableCopying。本文首先介绍了 NSCopying 的用法和原理。然而在 NSMutableCopying 中,和 Objective-C 不一样,当你不需要定义一个单独的 mutable 类型的情况下,在 Swift 中只需要用 let 和 var 就可以了。 + +### 🐎 [Flutter 中文文档:使用 Mockito 模拟依赖关系](https://mp.weixin.qq.com/s/e9orvqzdLmFwMXDVLUtcLw) + +[@AidenRao](https://weibo.com/AidenRao):本篇教程介绍了 Mockito 包的基本用法,模拟 Web 服务或数据库,根据条件返回特定结果,解决直接依赖 Web 服务或数据库的以下不便: +- 访问线上服务或数据库会拖慢测试执行效率。 +- 原本可以通过的测试可能会失败,因为 web 服务或数据库可能会返回不符合预期的结果。 +- 使用线上 web 服务或数据库来测试很难覆盖全所有可能成功或失败的场景。 + +## 工具 + +### 🐕 [自动切换输入法 - Mac](https://apps.apple.com/cn/app/%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E8%BE%93%E5%85%A5%E6%B3%95/id1470350547?mt=12) + +[@水水](https://www.xuyanlan.com):Mac 上的自动切换输入法 App, 支持所有常用输入法,能够根据当前正在运行的不同的应用程序,自动切换对应的输入法,免去人工手动切换的麻烦~ + +## 代码 + +### [IBPCollectionViewCompositionalLayout](https://github.com/kishikawakatsumi/IBPCollectionViewCompositionalLayout) + +[@张嘉夫](https://github.com/josephchang10):在 WWDC 2019 上 Apple 为 UIKit 增加了一个新的 [UICollectionViewCompositionalLayout](https://developer.apple.com/documentation/uikit/views_and_controls/collection_views/using_collection_view_compositional_layouts_and_diffable_data_sources) 类,让创建复杂的自定义 collection view 布局变得简单很多。在 iOS 12 及更早的版本中,我们只能继承 `UICollectionViewLayout` 来实现自定义布局,要重写很多方法,导致容易出现问题。IBPCollectionViewCompositionalLayout 这个库让 iOS 12 及之前的版本也能够支持 UICollectionViewCompositionalLayout,并且可以使用同一套 API,无需同时维护两个代码库。 + +### [MagazineLayout](https://github.com/airbnb/MagazineLayout) + +[@zvving](https://github.com/zvving):为 UICollectionView 提供易用的垂直滚动网格和列表布局。相较于 UICollectionViewFlowLayout,支持多列、高度自适应,Section 自定义背景,Section Header/Footer 跟随滚动等增强特性。 + +Airbnb 家出品,在其产品页面中已广泛应用,久经考验,推荐选用。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#93-2019.12.02.md b/Reports/2019/#93-2019.12.02.md new file mode 100644 index 000000000..0b947f261 --- /dev/null +++ b/Reports/2019/#93-2019.12.02.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #93 | 2019.12.02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [美团外卖前端容器化演进实践](https://mp.weixin.qq.com/s/SAuKvlB0Bfj7dRIBzkhO8w) +[@莲叔](https://weibo.com/aaaron7):容器化和动态化是目前大前端业务开发中最绕不开的两个命题。尤其是在产品架构已经相对成熟,业务侧的需求逐步过渡到精细化运营之后,往往随之而来的就是单个页面承载大量功能,并由不同的团队负责,代码也部署在不同的仓库,这给业务开发的效果、质量的把控都带来的新的挑战。本文介绍的美团提单页就是这样的一个典型场景,本文从提单页面临的现状问题以及业务的特点,介绍了通过容器化的思路来解决上述问题,虽然方案中部分模块美团并未开源,但其架构与设计思想仍然值得借鉴。 + +### 🌟 🐎 [了解 SIMD 指令](http://satanwoo.github.io/2019/12/01/SIMD-1/) +[@五子棋](https://github.com/SatanWoo):SIMD 是一种常见的利用单指令完成多数据量处理的计算方式。本文给出了基于 Xcode 环境的实践的 SIMD 指令使用指南,同时通过数据加法来对比 SIMD 指令对于计算性能的提升。对于想要了解 SIMD 相关知识的读者来说是一篇适合快速上手的教程。 + +### 🐕 [天罗地网? iOS卡顿监控实战(开源)](https://juejin.im/post/5db65fe0e51d452a1e58f37c) + +[@EyreFree](https://github.com/EyreFree):本文介绍了作者在公司项目中使用的 Swift 版卡顿监控工具 [XXPerformanceMonitor](https://github.com/HJTXX/XXPerformanceMonitor) 的整个开发历程。作者通过对比 fps、ping、runloop、hook、msgSend 等主流卡顿监控方案的优缺点,陈述了自己的方案选择理由。并且给出了关键逻辑的核心代码实例,同时结合流程图直观地演示了具体的卡顿排查分析方法。作者最后还给出了自己在实际工作过程中遇到的常用卡顿场景的总结,以及在做完针对性优化后的线上效果对比,值得一看。 + +### 🐢 [How Swift Achieved Dynamic Linking Where Rust Couldn't](https://gankra.github.io/blah/swift-abi/) + +[@四娘](https://kemchenj.github.io):ABI 稳定是 Swift 重要的里程碑之一,但相关的资料却很少,其实这可以说是 Swift 做过最有野心,最具原创性的功能。这篇文章就比较详细地阐述了相关的实现内容以及实现难度,并与 Rust 进行对比,解释为什么 Rust 从设计上就难以做到动态链接。 + +### 🌟 🐕 [技术文章配图指南](https://draveness.me/sketch-and-sketch) + +[@享耳先森](https://github.com/iblacksun): 如果你是技术博主,相信都遇到过如何给文章配图的困惑,本文从配图的原则、工具、实践等方面进行论述,建议阅读。 + +### 🐎 [HTTP/2 的学习实践和翻译](https://github.com/halfrost/Halfrost-Field) + +[@老峰](https://GesanTung.github.io/):本系列是 @halffrost 霜神 关于HTTP/2 的学习实践和翻译的分享,其中包括 HTTP/2 基础概述、多路复用、HTTP 语义、HTTP/2 头压缩算法 —— HPACK 等,有换工作的同学可以深入了解下。 + +### 🐢 [Secret Management on iOS](https://nshipster.com/secrets/) + +在平时的开发中,我们会将涉及到需要加密的重要内容都放到服务端上存储,因为目前如何在 iOS 上安全的存储一直是一个尚未解决的问题。本文详细解释了无论是采用硬编码、Xcode Configuration 还是对代码进行混淆进行存储都可能存在的风险,所以,请尽量不要在客户端存储设计机密的文件。 + + +## 工具 + +### [LookinLoader](https://github.com/creantan/LookinLoader) + +[@张嘉夫](https://github.com/josephchang10):[Lookin](https://lookin.work/) 是一款免费的 macOS App,用于 iOS View Debugging。但由于 Lookin 官方没有提供集成的越狱版本,不便于逆向分析,因此作者参考 RevealLoader 编写了这个叫做 LookinLoader 的插件,支持 iOS 8~iOS 13。LookinLoader 可以在越狱设备上的 iOS App 中动态加载 LookinServer(支持 Lookin.app),然后通过 Lookin 来查看和修改 iOS app 中的视图,就像 Xcode 的 UI Inspector 和 Reveal 那样。此外还包括 Console 和 Method Trace 等功能,iPhone 和 iPad 甚至不用连接到 Mac 就可以运行 Lookin。 + +### [SwiftPM Catalog](https://zeezide.com/en/products/swiftpmcatalog/) + +[@xiaofei86](https://weibo.com/xuyafei86):SwiftPM Catalog 是 [SwiftPM Library](https://swiftpm.co) 的一款轻量且实用的 macOS 前端,用来查询和浏览使用 [Swift Package Manager](https://swift.org/package-manager/) 的 Packages。[SwiftPM Library](https://swiftpm.co) 通过开源社区维护的仓库 [SwiftPMLibrary](https://github.com/daveverwer/SwiftPMLibrary) 中的 [JSON 文件](https://github.com/daveverwer/SwiftPMLibrary/blob/master/packages.json) 来找到这些 Packages 并抓取相应的信息作为搜索结果展示。此列表已经有 100 多位贡献者,汇集了 3000 多个 Packages,基本覆盖了所有常用的 Swift 库。在将来的某个时候,也许苹果或 GitHub 会提供正式的 Packages 列表,但是在那之前,总比没有的好。 + +### [Commitizen](https://github.com/commitizen/cz-cli) + +[@AidenRao](https://weibo.com/AidenRao):Git 提交信息生成和约束工具,帮助团队成员规范化 Commit Message。它使用的是 [Angular](https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0) 规范,有对应的工具去生成 change log。每次提交,Commit message 都包括 Header, Body 和 Footer 三个部分。 Header 是必须的,包括三个字段:type, scope 和 subject,用于说明提交类别,影响范围,和一个简短的描述。Body 部分是对本次 Commit 的详细描述,Footer 用于 close issue 和声明版本不兼容情况的迁移方法。也可以自定义规范,并且添加约束,对不符合规范的 commit 直接拒绝。 + +## 代码 + +### 🌟 [MyLinearLayout](https://github.com/youngsoft/MyLinearLayout) + +[开源 UI 界面布局框架 MyLayout1.9 发布](https://juejin.im/post/5de3ca906fb9a071975009a7)!MyLinearLayout 是一个目前几乎集成了大前端所有 UI 界面布局解决方案的开源布局框架,其提供的九大布局体系可以满足您所有的 UI 布局需求。本库从 2015 年开始发布,历时四年的维护和发展,服务应用了数千 app,目前 GitHub 上 star 数量 3600 左右。是一个值得接入并提高您工作效率的好框架。 + +> 由美团资深开发 [欧阳大哥](https://github.com/youngsoft) 自荐。 + +### [Siren](https://github.com/ArtSabintsev/Siren) + +[@looping](https://github.com/looping):Siren 是使用 Swift 开发的用来检测并提醒用户进行应用版本升级的类库。它会从 [iTunes 的 lookup 接口](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/iTuneSearchAPI/LookupExamples.html)获取应用在 App Store 的版本信息,帮我们处理了包括版本比对(支持 2 到 4 位版本系统)、弹窗提醒(3 种弹窗样式)等基本操作,支持规则自定义,同时包括对 App Store 更新延迟、最低支持系统、阶段性发布等问题也做了兼容处理,考虑很全面,即使不直接使用这个类库,自研版本更新提醒的话,也是很有参考价值的。 + +### [xcconfigs for Universal Frameworks](https://github.com/mrackwitz/xcconfigs) + +[@极速男孩](https://github.com/ztlyyznf001):在我们维护一个多平台的 framework 的时候我们经常要去复制多个 target,而有了这个 Xcode configuration 我们可以仅仅使用一个 target ,然后根据不同的条件,使用不同的 build settings 中的设置,方便我们去复用和修改。这样我们只要在编译时选择对应的平台就会自动选择不同的 build settings。 + +## 内推 + +> 深圳-字节跳动,抖音 App 基础技术小组 客户端研发岗位 +- 职位内容:主要负责抖音基础技术方向的研发工作,包括不限于组件化、自动化测试、研发流程工具脚本等方向的研发工作。 +- 联系方式:邮箱(chenxiancai@bytedance.com) / 微信(cheney-cai) +- JD: https://job.toutiao.com/s/XdEU32 / https://job.toutiao.com/s/Xd7vWs + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2019/#94-2019.12.09.md b/Reports/2019/#94-2019.12.09.md new file mode 100644 index 000000000..90c80f513 --- /dev/null +++ b/Reports/2019/#94-2019.12.09.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #94 | 2019-12-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [Flutter Interact 2019 即将到来!全球同步直播最先了解新动态](https://mp.weixin.qq.com/s/28hbpByPwjSNETO0W8b4GQ) + +[@zvving](https://github.com/zvving):Flutter Interact 将在 12 月 11 日于纽约布鲁克林举办,聚焦于跨平台打造精美体验。现场提供同声传译的直播服务,对 Flutter 感兴趣的小伙伴不要错过! + +## 新手推荐 + +### 🐎 [不同平台操作体验的差异和适配](https://mp.weixin.qq.com/s/Ze4m95HeFoUXoP7FLbHcmQ) + +[@极速男孩](https://github.com/ztlyyznf001):flutter 在 iOS 和 Android 当中不同的适配效果,包括不同的手势,控件效果和字体图表等。 + + +## 文章 + +### 🐢 [开发企业级移动APP,Flutter准备好了吗?](https://mp.weixin.qq.com/s/M8x44Fb0NdLlr0TfKo_1wA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自 1.0.0 正式版发布以来, 已经一整年过去了. 在过去的一段时间里面, 官方开发团队始终保持着飞速的迭代效率, 社区的发展状况也让人欣喜, 国内外各大厂开始投入精力. 即使如此, Flutter 在生产中的使用覆盖率仍不是太高, 那么 Flutter 在生产中的表现到底如何? 本文从以下几个角度, 和你深入探讨 Flutter 企业级开发的方方面面: + +- 架构 +- 开发环境 +- 用户界面 +- 访问硬件功能 +- 安全性 +- 其他杂项 + +### 🌟 🐕 [纷争再起:Flutter-UI 绘制解析](https://juejin.im/post/5c866cf6f265da2de165d89d) + +[@四娘](https://kemchenj.github.io):作者通过生动形象的方式跟我们讲述了 Flutter 的 Widget 树实现,如何通过轻量级的视图树达成高效的视图树重建,与我们熟知的 View 进行协作完成最终渲染。 + +### 🌟 🐕 [​Flutter 沙龙回顾 | 如何缩减接近 50% 的 Flutter 包体积](https://mp.weixin.qq.com/s/Ls3cDcqjlyOX80PXUO0wRw) +[@老驴](https://www.weibo.com/6090610445):这是字节跳动技术团队做的一篇针对 Flutter 实际落地应用中针对包体积优化的文章。 + +文章比较长,干货非常多,看得出字节跳动团队在 Flutter 落地应用上做出的努力。虽然大家在自己的项目中并不一定用得到这些优化,但是不妨一读,一定会对大家的实际项目有帮助。 + + +### 🌟 🐕 [Key​Value​Pairs](https://nshipster.com/keyvaluepairs/) + +[@xiaofei86](https://weibo.com/xuyafei86):Swift 5 将 DictionaryLiteral 重命名为 KeyValuePairs [SE-0214](https://github.com/apple/swift-evolution/blob/master/proposals/0214-DictionaryLiteral.md)。本周,NSHipster 就为我们带来 KeyValuePairs 的详解。本文延续了 mattt 一贯的“哲学”开场,由宇宙学对事物的分类到阴阳、五行、八卦,从而引出 Array、Set 等 Swift 中的常用集合类型(不得不感叹 mattt 大神的博学)。通过本文对 KeyValuePairs 的介绍,与 Dictionary Literal 的对比以及应用,我们会对 Array、Set 和 Dictionary 之间的根本区别,以及他们在 Swift 中的工作方式产生更加深入的理解。 + +### 🐕 [Making Swift code extensible through plugins](https://www.swiftbysundell.com/articles/making-swift-code-extensible-through-plugins/) + +[@EyreFree](https://github.com/EyreFree):本文介绍了如何用 Plugin 模式提高代码的可扩展性。Plugin 是一段代码,可以将其插入另一种类型或系统以修改其功能。Plugin 有许多不同的形式和规模,比如文中举出的例子 `typealias Plugin = (T) -> T` 就是一个简单的 Plugin。合理利用该模式,能降低我们所编写的代码的复杂性,但如果滥用也会导致系统代码过于分散,一切都取决于我们要构建的软件系统类型。对架构和设计模式感兴趣的同学一定不要错过。 + +### 🐕 [Vision Framework: Working with Text and Image Recognition in iOS 13](https://www.appcoda.com/animal-recognition-vision-framework/) + +[@张嘉夫](https://github.com/josephchang10):2 年前 Apple 在 WWDC 2017 上发布了 *Vision* 框架,一个令人惊叹但又十分简便的框架,让计算机视觉功能的开发更加容易。不论是文字检测、面部识别、条形码扫描还是与 Core ML 配合执行机器学习任务都可以用这个框架实现。今年,Apple 在 WWDC 2019 为 Vision 框架带来了更多新功能,着实将计算机视觉领域向前推进了一步。AppCoda 在这篇文章里会带领大家构建一个叫 *Snapcat* 的应用,使用 `Vision` 全新的动物检测器来检测喵星人、添加滤镜然后拍照。然后 AppCoda 会教你如何利用全新的 `VisionKit` 来扫描名片,就像 iOS 原生的备忘录 app 一样。最后,Appcoda 还会展示如何对扫描后的名片进行文字识别。 + +### 🐎 [Faster way to download and install Xcode](https://blog.kulman.sk/faster-way-to-download-and-install-xcode/) + +[@JimQ](https://github.com/waz0820):平时下载 Xcode 最便捷的渠道就是 App Store,但只能用于下载最新的正式版,而且用过的人都知道,其下载速度和成功与否,除了看网速,有时还要看人品。所以我们需要更多的解决方案: + +1. 使用 Apple Developer 官网在浏览器下载最新的正式版或 beta 版; +2. download/more 路径下下载更多之前的版本; +3. 使用 aria2 脚本加速下载; +4. .xip 包双击之后会有一个合法性验证,可以使用命令跳过这个步骤; +5. 先删除 Xcode 再安装比覆盖安装速度更快。 + +## 代码 + +### [NXDrawKit](https://github.com/Nicejinux/NXDrawKit) + +[@老峰](https://GesanTung.github.io/):NXDrawKit 是使用 Swift 开发的一个简单易用的手写绘图板类库,提供了绘图应用的基本功能如:撤销、恢复、清除、保存、设置线条颜色,粗细,透明度等,使用它可以实现类似你画我猜,手写签名等功能,因为是作者第一个 Swift 项目,所以代码风格比较偏 OC,另外 Palette and ToolBar 自定义支持并不是太友好。 + +### [LEEAlert](https://github.com/lixiang1994/LEEAlert) + +[@looping](https://github.com/looping):LEEAlert 是一个可自定义 Alert 和 ActionSheet 样式的视图控件库,支持的功能特性相当丰富,能满足绝大多数弹窗提示的需求。通过 `.config` 开始链式调用,整体语法结构还是非常优雅的,有感兴趣的小伙伴可以参与共同维护。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#95-2019.12.16.md b/Reports/2019/#95-2019.12.16.md new file mode 100644 index 000000000..3564a9699 --- /dev/null +++ b/Reports/2019/#95-2019.12.16.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #95 | 2019-12-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐢 [Flutter 1.12 重磅发布:支持 Web 与 macOS](https://mp.weixin.qq.com/s/-ZNHZWoNZj1P9dcAIRpbyg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):随着 [Flutter Interact](https://mp.weixin.qq.com/s/EEIwryZaQh3uEv5vzTHZ5Q) 的落幕,Flutter 1.12 稳定版本如期而至,此次不仅完成了成吨的 issues 修复 (关闭了 5303 个 issue,合并了来自 484 个贡献者的 5950 个 PR),而且带来诸多新功能和优化. + +- 增加了对 Android App Bundles 和 iOS 13 的支持 +- 改进后的 Add-to-App +- Dart 2.7 Release +- Flutter 1.12 的 master、dev 和 beta 频道都提供了改进的 Web 支持 +- macOS 支持 +- 新版 [DartPad](https://dartpad.dev/) +- [Hot UI](https://github.com/flutter/flutter-intellij/wiki/HotUI-Getting-Started-instructions) +- [Layout Explorer](https://flutter.dev/docs/development/tools/devtools/inspector#flutter-layout-explorer) +- 🌟多设备调试 +- 还有更多新功能和社区插件等你探索... + +### 🌟 App Store Connect 的部分功能将于 12 月 23 日 - 27 日暂停使用 + +一年一度的美国长假又来了,App Store Connect 已经正式向所有开发者推送节假日安排,时间段是 12.23-12.27。 + +> App Store Connect:请确保您的 App 为最新版本,以准备迎接假期。App Store Connect 在 12 月 23 日 - 27 日(太平洋时间)期间不接受新 App 和 App 更新,因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。 + +## 文章 + +### 🌟 🐕 [Lightweight API design in Swift](https://www.swiftbysundell.com/articles/lightweight-api-design-in-swift/) +[@zvving](https://github.com/zvving): +> - 强大、灵活、易用?在 API 设计过程中你更在意哪一点?或者说,该如何把握这三者间的平衡? +> - 面对 Swift 诸多新特性,我们会困惑:都能实现功能,我为什么要知道这些特性? + +本文尝试通过两个技术方案的设计变迁,回答上面的问题:(请留意每次设计变迁要解决的问题及其所带来的优劣) +1. 协议(强大功能与灵活性) -> 带参枚举(更加易用) -> Self 为返回类型的静态方法(摒除 enum 带来的弊端,更灵活易用) +2. 数组参数 -> 可变参数(更易用灵活) -> 提供 group 实现(向后兼容)-> 新场景(展示灵活性) + +就像文中所说,我们的最初目标是让 API 更易用,而更易用也能带来更易组合、灵活性更高的副产品。 + +事实上, **在实践过程中,建议首要设计目标定义为(对使用者)易用,其次是(可预期的灵活性),最后才是功能强大。** 因为迫于问题领域的业务需要,功能强大是最容易并且一定会达成的目标。 + +以易用性为目标,要在两个方向上持续前进:一是在业务领域不断深入思考问题本质,定义简明扼要的抽象;二是在『API 设计的工具箱』中选用最合适的工具,在提供强大功能与可预期的灵活性的前提下(记住这是一定可达成的),尽可能提升易用性。 + +如果仅限于用类和协议抽象,设计时可用的手段将捉襟见肘。你手中『API 设计的工具箱』更丰富,就能有更多手段达成易用的目标。熟练掌握 Swift 语言特性,相信你能设计出更易用的 API。 + +### 🐎 [用故事说透 HTTPS](https://mp.weixin.qq.com/s/MfvUuitrF8MN16nxyZNB8A) + +[@J_Knight_](https://github.com/knightsj):本文作者通过漫画故事的方式介绍了 HTTP 的不安全性,并讲解了 HTTPS 的几个概念:对称加密、非对称加密,数字证书以及数字签名,而且模拟了中间人攻击的场景,生动形象,易于理解。对 HTTPS 不熟悉的朋友可以阅读此文帮助理解。 + + +### 🐎 [The Advanced Guide to UserDefaults in Swift](https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/) + +[@老峰](https://GesanTung.github.io/):本文主要介绍了 UserDefaults 的基础概念以及内部实现细节,如何使用 Swift5 中 Property Wrapper 和 UserDefaults 实现类型安全的键值存储;如何使用观察者模式监听 UserDefaults 的值变化。 + + +### 🐕 [iOS 图片内存优化](https://juejin.im/post/5ddc8258518825734f2b8eb2) + +[@EyreFree](https://github.com/EyreFree):本文介绍了作者对 iOS 平台上的 HEIF 图片格式使用过程中的性能问题进行优化的经验,结合实践针对 HEIF 图片加载过程中的内存暴涨和 CPU 高占用原因进行了分析,并给出了自己的解决方案,有遇到类似问题的朋友可以参考。 + +### 🐕 [Quick tip: clearing your app’s launch screen cache on iOS](https://rambo.codes/ios/quick-tip/2019/12/09/clearing-your-apps-launch-screen-cache-on-ios.html) + +[@Jimq](https://github.com/waz0820):iOS 13 Launch screen 的缓存机制有所改变,当我们想动态改变 Launch screen 时会发现并不能看到自己想要的效果,作为 Xcode 的资深用户,我们莫逆于心,使出清缓存、重启真机/模拟器、重启 Xcode、删掉 App 的手法,但可能还是不能如愿,那么试试这篇文章里的方法吧,或许可以缓解痛苦,起码作者[推文](https://twitter.com/_inside/status/1204102470999400449)(🚧)下面一伙人是这么认为的。 + +### 🐕 [如何对 iOS 启动阶段耗时进行分析](https://www.jianshu.com/p/c0c4f19d317f) + +[@五子棋](https://satanwoo.github.io):网上关于 App 启动优化的文章已经不计其数,但是这篇来自戴铭的文章对启动优化问题进行了很充分的定义。从问题分析 - 纬度联系 - 如何执行 - 优化维持等多个角度对优化所涉及的知识点进行了完整的描绘。同时文章提供了大量资料和工具来帮助大家更好地完成启动优化,是一篇不可多得的佳作! + + +## 工具 + +### [Pecker](https://github.com/woshiccm/Pecker) + +[@张嘉夫](https://github.com/josephchang10):`pecker` 是用来自动查找无用代码的工具,基于 [IndexStoreDB](https://github.com/apple/indexstore-db.git) and [SwiftSyntax](https://github.com/apple/swift-syntax.git),可以检测无用类、结构体、枚举、协议、函数、别名以及运算符。目前有五种规则,分别是 `skip_public`, `xctest`, `attributes`, `xml`, `comment`,可以禁用不需要的规则。 + +### [NativeConnect](https://nativeconnect.app/blog/official-launch/) + +[@anotheren](https://github.com/anotheren):`NativeConnect` 是一款为 macOS 开发的 App Store Connect 原生桌面工具,相比直接使用游览器访问,它更加快捷。它采用工程化的设计,交互逻辑类似于 Xcode,方便你把项目分享给工作伙伴。目前支持应用元数据、用户评论的管理。 + +## 代码 + +### [Diagnostics](https://github.com/WeTransfer/Diagnostics) + +[@老驴](https://www.weibo.com/6090610445):`Diagnostics` 是一个帮助开发者诊断用户反馈信息的库。它可以快速集成入 App,自动生成邮件格式,添加包含系统日志在内的附件,甚至可以过滤日志中的敏感信息。在大公司的大型项目中,一般都有专门的组来完成这样的支持,而这样的开源项目,则可以帮助个人开发者或是小项目,快速轻松补全反馈功能。 + +### [超甜的 Swift 初始化语法糖 - Then](https://github.com/devxoul/Then) + +[@水水](https://www.xuyanlan.com): Swift 初始化语法糖开源库,让你的代码更简洁。实现超简单,对实现感兴趣的朋友可以看看哦~ + +## 程序员的副业 + +> 让我们来探索一下 Coding 以外的世界,看看程序员除了在 996 之后还会在做点什么? + +团队成员 [@J_Knight_](https://weibo.com/1929625262/profile?topnav=1&wvr=6) 从去年年末开始了自己的股票和基金的投资之旅,用部分的业余时间学习投资理财方面的知识,从今年年初到现在的股票收益超过40%,基金收益超过20%;并在今年下半年开设了个人投资理财公众号「复利维他命」:该公众号主要分享理财,股票和基金投资的相关知识和实战经验,以及相关书籍的读书笔记。 + +![](https://fuli-blog.oss-cn-shanghai.aliyuncs.com/id/qrcode-258.jpg) + +在这里分享他在上个月发布的一篇文章: [我为什么把投资作为自己的一项兴趣爱好](https://mp.weixin.qq.com/s/Vrp0DZssNb4vkiF04rlBBw)。这篇文章总结了他在这一年之内投资股票和基金的心得和体会,以及为什么把投资理财作为了自己的一项兴趣爱好的原因。本文对还没有开始投资股票和基金的朋友会有一些启发;对已经开始投资股票和基金的朋友可能也会有一定的借鉴意义。 + + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#96-2019.12.23.md b/Reports/2019/#96-2019.12.23.md new file mode 100644 index 000000000..e2e4bf2d0 --- /dev/null +++ b/Reports/2019/#96-2019.12.23.md @@ -0,0 +1,131 @@ +# 老司机 iOS 周报 #96 | 2019-12-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [iOS 微信编译速度优化分享](https://mp.weixin.qq.com/s/-wgBhE11xEXDS7Hqgq3FjA) + +[@J_Knight_](https://github.com/knightsj):作者首先列举了调研过的,目前已有的编译速度优化方案,然后分享了微信使用的编译速度优化方案: + +1. 优化头文件搜索路径 +2. 关闭 Enable Index-While-Building Functionality +3. 优化 PB/模版,减少冗余代码 +4. 使用 PCH 预编译 +5. 使用工具优化头文件引入;尽量避免头文件里包含 C++ 标准库 + +而且在分享具体方案的过程中,还简单介绍了编译原理的知识,以及分析耗时的工具。对编译速度优化感兴趣的读者可以学习一下此文章。 + +### 🐎 [Flutter: 首个面向环境计算打造的 UI 平台](https://mp.weixin.qq.com/s/ItRWmXPKt81tKLLTWoJqEQ) + +[@邦Ben](https://weibo.com/linwenbang):文章中写道,在这个新兴世界中,大家关注的焦点也开始从单一设备转向环境——一个允许您随时随地获取服务和软件的环境。我们将其称为环境计算 (ambient computing)。 + +从这里我们可以了解到 Flutter 跨平台的决心和愿景。文章中大略总结了 Flutter 的近况,没了解过的可以看下,然后挑感兴趣的深入了解一番。 + +- Flutter 发布 1.12 +- Flutter web 支持 beta 版 +- 可以发布 macOS App +- Dart 2.7 发布 +- Supernova / Rive / Adobe 等在设计与原型工具中,增加对 Flutter 的支持,还支持设计稿导出 Flutter 代码 + +### 🐕 [React Native 在美团外卖客户端的实践](https://mp.weixin.qq.com/s/9wv4uHg51EELU0yoIFQw8A) + +[@looping](https://github.com/looping):MRN(Meituan React Native)是美团研发团队基于 React Native 开源框架,并结合美团业务场景,定制化开发的一套动态化框架。 + +本文从接入 MRN 后应用的整体架构,业务开发在现有技术栈上的选型,动态化后对研发流程的变化,在运维上对业务可用性的监控以及使用 MRN 后对效率的衡量等方面的实践做了非常详尽的介绍。 + +如果有在建设动态混合开发方案,或对这块的工程化感兴趣的同学,推荐仔细阅读,从中还是能得到很多参考和启发的。 + +### 🐎 [Swift API Availability](https://nshipster.com/available/) + +[@xiaofei86](https://weibo.com/xuyafei86):本周 NSHipster 为你带来 `@available` 的详细用法,与 `#available` 的对比,以及在第三方 Framework、Swift Packages 中的使用建议。 + +### 🐕 [百度 APP iOS 暗黑模式适配的完美解决方案](https://mp.weixin.qq.com/s/QOPCCIC-PbmUtuq2XUS34g) + +[@张嘉夫](https://github.com/josephchang10):由于 Dark Mode 只支持 iOS 13 以上的系统,为了给全系统所有用户最好的体验,百度研发出了一套皮肤主题框架,不仅可以全系统支持 DarkMode,还可以扩展多套皮肤主题。本文主要从皮肤主题框架实现、色值表的管理以及配套工具链等方面详细的介绍了百度 App iOS 暗黑模式的适配。目前系统所有控件及其 Color 属性和 Image 属性均已支持这套皮肤主题框架,业务方只需使用简单的 API 设置 Color 和 Image,即可实现主题换肤。同时为了提升一键刷新所有视图主题的性能,采用了 NSHashTable 弱持有控件的方案,通过测试数据得出: 在上万个视图量级下, HashTable 性能是远远优于通知的方式。 + +### 🐎 [iOS 开发调试概览](https://www.cnblogs.com/kenshincui/p/11953536.html) + +[@红纸](https://github.com/nianran):本文是一个概览文章,简述 iOS 开发过程中,常用的一些调试手段。 + +1. 常用的一些 LLDB 命令,扩展介绍了一下 [chisel](https://github.com/facebook/chisel) 和 [lldb_commands](https://github.com/DerekSelander/LLDB) 两个 lldb 的扩展仓库 +2. 常见的异常捕获方式。全局异常、EXC_BAD_ACCESS、Memory Leak +3. Xcode 自带的调试方法。条件断点编辑、UI Debugger、主线程检查等等 +4. 第三方工具,[Charles](https://www.charlesproxy.com/) 网络调试工具和百宝箱 [WoodPecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12) 集网络沙盒等功能于一体的调试工具 + +> 注:推荐 [《Advanced Apple Debugging & Reverse Engineering》](https://store.raywenderlich.com/products/advanced-apple-debugging-and-reverse-engineering) 一书,从中你能了解到更加细节的调试方法 + +### 🐢 [iOS 项目技术还债之路《二》IAP 掉单优化](https://juejin.im/post/5df64beff265da33e97fcd2f) + +[@anotheren](https://github.com/anotheren):本文介绍了作者团队对于 IAP 的掉单优化,对于下单及验证流程进行了详细的分析,并介绍了优化后的实践方案。如果你也遇到类似的 IAP 问题,不妨一起讨论一下。 + +### 🐕 [亮剑 - Stinger 是如何在速度上吊打 Aspects 的](https://juejin.im/post/5df6e5c96fb9a016301d9255) + +[@JimQ](https://github.com/waz0820):如题,饿了么团队进行了一项卓越的工作,其开源的 AOP 库 Stinger 的执行速度比目前最具统治力的 AOP 库 Aspect 快了大约 20 倍。本文从基本原理对比、测试速度对比、源码分析对比、各项功能对比四个层面与 Aspect 进行了综合 PK,其言吊打,亦不为过。 + +### 🐢 [聊聊 Symbol](https://github.com/LeoMobileDeveloper/Blogs/blob/master/Compiler/unstanding-symbol.md) + +在日常开发中,我们或多或少都应该接触过 Symbol ,而真正使用到它的地方可能并不多。其实 Symbol 在编译期和运行时都扮演了重要的角色,但了解 Symbol 、Symbol Table 等概念对我们在一些问题的定位甚至做程序架构都很有帮助。 + +### 🐕 [Objective-C Direct Methods](https://nshipster.com/direct/) + +[@AidenRao](https://weibo.com/AidenRao):Direct Methods 是 Objective-C 上新的方法调用机制(最早可能出现在 Xcode 11.x 上),调用 Direct Methods 时,它直接调用其基础实现,而不是通过 objc_msgSend。由于 objc_msgSend 在优化上已经做了很多,Direct Methods 并不会有太大的性能优势。实际的优点:Direct Methods 是私有方法,并不能被外部访问,也可以防止被 Objective-C 运行时动态地调用。不过根据实现此功能的 [Pierre](https://twitter.com/pedantcoder/status/1197269246289444864) 所说,此优化的主要好处是减少了代码大小。 + +## 工具 + +### [PodfilelockToPng](https://github.com/Orange-W/PodfilelockToPng) + +[@EyreFree](https://github.com/EyreFree):便利小工具,通过 Profile.lock 快速生成项目库依赖关系图,由作者 [Orange-W](https://github.com/Orange-W) 自荐。同类工具还有 [pretty](https://github.com/octree/pretty)、[EFPodsAnalyzer](https://github.com/EyreFree/EFPodsAnalyzer) 等。 + +## 代码 + +### [SwipeCellKit](https://github.com/SwipeCellKit/SwipeCellKit) + +[@老峰](https://GesanTung.github.io/): UITableViewCell/UICollectionViewCell 侧滑组件 Swift 版,支持左右滑动、图标文字自定义、自定义拖拽动画等,可优雅的实现 Cell 侧滑事件。 + +### [flutter dart 私有仓库](https://github.com/bytedance/unpub) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):作用跟 Pod 私有库类似,作为公司内的私有备份还是很有必要的。同时包含了一个简单的搜索页面,强烈推荐。 + +### [推荐一款 Postman 的开源替代品: Postwoman](https://mp.weixin.qq.com/s/8viBJ46-5-POvMftNfY-Eg) + +[@水水](https://www.xuyanlan.com):大家都知道,Postman 是一个非常受欢迎的 API 接口调试工具,小编自己也用过哦~,它提供有 Chrome 扩展插件版和独立的 APP,不过它的很多高级功能都需要付费才能使用。而 Postwoman 是一个 Postman 的免费、快速且美观的替代方案,作为一款开源的 Postman 替代品,主打特性有如下一些: + +- 轻盈,可直接在线访问; +- 简约,采用简约的 UI 设计精心打造; +- 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法; +- 支持验证; +- 实时,发送请求即可获取响应。 + +有兴趣的朋友可以点击[Postwoman GitHub 项目官网](https://github.com/liyasthomas/postwoman)下载体验啦~ + +## 内推 + +> 字节跳动-视频(北京)团队收 iOS/Android/Flutter/服务端/前端/QA。初中高级开发+实习都可以哟。收到的每一份简历都会帮大家跟踪流程。简历发送至:silence007pp@bytedance.com 如果感兴趣可以加微信详细聊一下:LuaPlayer + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2019/#97-2019.12.30.md b/Reports/2019/#97-2019.12.30.md new file mode 100644 index 000000000..cf63e14d9 --- /dev/null +++ b/Reports/2019/#97-2019.12.30.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #97 | 2019-12-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Updating Apps that Use Web Views](https://developer.apple.com/news/?id=12232019b) + +[@anotheren](https://github.com/anotheren):如果你还在使用 `UIWebView`, Apple 已经给你下了最后通牒。自 2020 年 4 月起,使用 `UIWebView` 的新应用将无法提交到 App Store;自 2020 年 12 月起,相关旧应用也将无法提交更新。赶紧计划迁移到 `WKWebView` 吧。 + +## 新手推荐 + +### 🌟 🐎 [Clean Architecture and MVVM on iOS](https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了如何在 iOS 中使用 MVVM 架构,MVVM 各个部分如何在 iOS 中发挥作用,以及如何保持一个清晰的文件结构。 + +## 文章 + +### 🌟 🐢 [系列文章:多地图源业务向地图控件开发思路](https://juejin.im/post/5e01c75c51882512766f4cf0) + +[@享耳先森](https://github.com/iblacksun):如果你在开发地图相关 App,应该知道服务商地图质量各有长短,所以,最好是能适配多种地图,让用户选择。 + +这系列文章介绍了如何对地图服务进行抽象,可以方便的切换地图服务,同时在地图之上封装了统一的 UI 交互。 + +### 🌟 🐕 [用户端智能的应用实践](http://blog.cnbang.net/tech/3643/) +[@莲叔](https://weibo.com/aaaron7):端智能是近年来客户端除了动态化之外为数不多的技术新方向。端智能,顾名思义就是在客户端上运行机器学习/深度学习的算法。传统的端智能多半都 focus 在解决图形图像领域、NLP 方向的任务,比如 Apple 的 CoreML 与 Vision 框架。最近两年国内的互联网公司纷纷开始尝试拓宽端智能的应用范畴,比如端侧推荐重排等。目前端智能的瓶颈其实并不在于模型如何裁剪,算法如何提效,更多的在于合适的业务场景+合适的特征选取(也就是训练数据)。bang 的这篇文章介绍了他的团队在端智能上的一些业务场景尝试,对于希望落地端智能应用的同学与团队都非常有参考价值。文章举了金额推荐、智能 push 和本地处理三个场景,并且给出了落地过程中遇到的一些问题。从另一个侧面反映了目前端智能仍然处于不断探索的阶段,还没有到大规模普及与应用,但仍然蕴含着巨大的空间。 + +### 🌟 🐢 [你的 App 在 iOS 13 上被卡死了吗?](https://mp.weixin.qq.com/s/W_AqP8cQy3d5QCMJ8Nzftw) + +[@Parsifal](https://github.com/ParsifalC):一篇由 [OpenUDID](https://github.com/ylechelle/OpenUDID) + `UIPasteboard` + iOS 13 上引发 App 卡死问题的深入分析好文。全文并不局限于这个问题,而是同时总结了排查这个问题过程中用到的方方面面知识技巧,十分值得我们借鉴。看完这篇文章,除了学习到排查复杂小概率问题的技巧,你还会对以下几个知识点有一个更清楚的认识。 + +- Bugly 等第三方崩溃日志收集服务局限性在哪里? +- 在第三方后台无法捕获崩溃日志时,我们可以做些什么? +- 如何分别在有 dSYM 文件和无 dSYM 文件时解析崩溃日志? +- `UIPasteboard` 是一个系统共享的服务,那么它的数据同步是如何做的? +- UDID 被苹果禁用后的这么长时间,社区使用 UDID 的方式有着怎么样的变化? + +### 🐎 [UserDefaults Access via Property Wrappers Is Worse Than You Might Think](https://christiantietze.de/posts/2019/12/userdefaults-property-wrappers/) + +[@老峰](https://github.com/gesantung):本文讨论了文章 [The Advanced Guide to UserDefaults in Swift](https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/) 使用 Property Wrappers 封装 UserDefaults 可能存在多个地方定义不同初始值的问题,并给出了更优的方案 [SwiftyUserDefaults](https://github.com/sunshinejr/SwiftyUserDefaults.git) 。 + +### 🐎 [No space left on device: Testing low storage scenarios](https://www.avanderlee.com/debugging/no-space-left-on-device/) + +[@Parsifal](https://github.com/ParsifalC):如果你的 App 大量用到持久化存储技术,那么存储空间不足的错误应该是比较常见的。本文提出了一种利用模拟器重现存储空间不足的技巧,让我们可以轻松在该场景下测试和调试自己的 App。 + +## 工具 + +### [Proxyman:网络调试工具](https://proxyman.io) + +[@Jimq](https://github.com/waz0820):Proxyman 是一款 macOS 上的网络调试工具,使用 Swift 和 C++ 编写,美观高效功能强大,免费版就能使用抓包 / rewrite / breakpoint 等基本功能,推荐一试。PS:Setapp 也包含了这个 App。 + +## 代码 + +### [R.swift](https://github.com/mac-cain13/R.swift) + +[@zvving](https://github.com/zvving):类似于 Android 开发中的 R 类,为 image、font、localized-string 等资源提供强类型的访问方式,如: + +```swift +let icon = R.image.settingsIcon() +let font = R.font.sanFrancisco(size: 42) +let string = R.string.localizable.welcomeWithName("Arthur Dent") +``` +在减少字符串硬编码的同时,带来代码自动完成、编译期检查等功能,推荐一试。 + +### [HomeKit Accessory Development Kit (ADK)](https://github.com/apple/HomeKitADK) + +[@老驴](https://www.weibo.com/6090610445):苹果放出了 HomeKit 附件开发包,其缩写为 HomeKit ADK。 + +此 SDK 主要面向开发 HomeKit 相关的设备的开发者,提供了快速开发 HomeKit 相关功能的 API。需要注意的是,HomeKit ADK 只能用于非商用用途开发和使用,若进行商业开发,则需要注册 MFI,然后使用对应的商业版本的 SDK。 + +### [KeyedCodable](https://github.com/dgrzeszczak/KeyedCodable) + +[@四娘](https://kemchenj.github.io):KeyedCodable 是一个简化 Codable 逻辑的库,之前一些自定义的逻辑都需要通过手写 decode 和 encode 去完成,例如嵌套,默认值和自定义编码策略等,现在使用这个库就即可自动完成。 + +### [Hippy](https://github.com/Tencent/Hippy) + +[@looping](https://github.com/looping):Hippy 是由腾讯 QQ 浏览器部门发起,针对**前端开发者**推出的跨端解决方案,它同时支持 React 和 Vue 两种前端主流框架,并且已经在 GitHub 上正式开源。 + +Hippy 在腾讯内部已经形成一套完整生态,包括对 GCanvas、Lottie、SVG 等都有相应组件封装,同时腾讯内部自研的 Hippy 业务组件库、高性能图形库、异常上报(支持 Sentry)等,也会在未来逐步对外开放。 + +## 内推 + +> 美团点评平台事业部业务研发中心技术架构组的招聘高级 iOS 开发,负责美团 App 部跨平台动态化布局项目iOS端SDK开发和维护,参与动态化布局项目编译脚本开发与维护。我们需要你 3 年或以上 iOS 开发经验,扎实的 Objective-C 语言基础,熟练掌握iOS开发、测试、调优等技术,以及相关工具的使用,积极主动,有良好的团队合作精神和强烈的责任感,对移动产品有浓厚兴趣及见解。详情联系美团点评 iOS 高级工程师 SketchK:zhangsiqi1988@gmail.com。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2020/#100-2020.02.10.md b/Reports/2020/#100-2020.02.10.md new file mode 100644 index 000000000..0183ab1ae --- /dev/null +++ b/Reports/2020/#100-2020.02.10.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #100 | 2020-02-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Enumerating elements in ForEach](https://oleb.net/2020/foreach-enumerated/) + +[@looping](https://github.com/looping):本文介绍了如何通过 SwiftUI 的 ForEach 来遍历展示列表,并对列表元素进行编号。作者记录了对这部分代码进行重构优化的整个过程,使用了 key-path-based 写法让代码变得清晰易懂,是一份不错的学习优化代码的材料。 + +### 🐎 [iOS中编写高效能结构体的7个要点](https://www.jianshu.com/p/1369508e477d) + +[@极速男孩](https://github.com/looping):本文通过介绍在内存中一个结构体是如何被存放和使用的,来介绍在 iOS 中定义一个结构体有哪些需要注意的地方。 + +## 文章 + +### 🌟🐕[2019年终总结](https://mp.weixin.qq.com/s/VtWeOJj6SeQ7yzNL9ZMFPA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):一篇迟来的年终总结,作者从5个方面概括了自己一年的收益和变化: + +- 技术&职场 +- 投资 +- 读书 +- 生活 +- 2020 展望 + +读完觉得很受触动,时间对每个人都是有限的,但是每个人用来做的事却不尽相同。作为技术人员,在技术道路上不断前进之外,似乎也有必要在其他方向上多有涉猎,这是个见仁见智的问题。相信各位读者会有自己的感受体会。 + +### 🌟🐕🚧 [用 struct 还是 class?让 Swift-NIO 的开发者来告诉你](https://www.dotconferences.com/2019/01/johannes-weiss-high-performance-systems-in-swift) + +[@五子棋](https://satanwoo.github.io):稍微了解 Swift 的同学都知道 Swift Community 比较推崇使用 Struct,因为它是一种值语义,可以确保你的程序不会被各种 Side Effect 造成奇怪的影响。但本文的作者在开发 SwiftNIO 的时候发现在函数传参数的过程中 Struct 类型参数的性能要慢于 Class 类型,因此就深入研究了一番。同时,作者提出了一种 Struct 中嵌套 Class 并配合 COW 方式的设计,既能提升性能,又能维持值语义,是一篇适合 Swift 开发者的佳作。 + +### 🐕 [@](https://nshipster.com/at-compiler-directives/) + +[@EyreFree](https://weibo.com/eyrefree777):Mattt 大神新作,以新手入门的视角列举并介绍了 Objective-C 中 `@` 符号开头的一系列指令,同时对它们的设计哲学做了简单描述(顺便黑了一下 Lisp)。 + +参考:[中文翻译链接](https://nshipster.cn/at-compiler-directives/) + +### 🌟🐕 [Binary Frameworks in Swift](https://pspdfkit.com/blog/2018/binary-frameworks-swift) + +[@四娘](https://kemchenj.github.io):PSPDFKit 从一个服务商的角度介绍了 Swift 二进制 SDK 分发的细节,包括了 ABI 稳定的含义和开发内容,以时间线的形式给我们介绍了整个开发过程。 + +### 🌟🐢 [为什么 SwiftPM 的开发进度比 Cocoapods 慢那么多?](https://artsy.github.io/blog/2018/12/21/why-is-swiftpm-taking-so-long/) + +[@享耳先森](https://github.com/iblacksun):CocoaPods 开发者 [Orta Therox](https://github.com/orta) 写了篇文章分析为什么 SwiftPM 开发速度比 CocoaPods 慢?总的来说,两者所关注的层级不一样:SwiftPM 需要关注全链路的编译,需要支持 Linux 等系统,脱离了 Xcode;而 CocoaPods 是基于 Xcode 之上的,其产物是给 Xcode 用的,只需关注 macOS 平台。 + +### 🐎[再见,整洁代码(译)](https://overreacted.io/zh-hans/goodbye-clean-code/) + +[@JimQ](https://github.com/waz0820):这又是一篇对“代码洁癖者”的“劝你三思”的文章。正如作者文中所说,对“整洁代码”的沉迷、好于“消除重复代码”,是我们大多数开发者都会经历的阶段,但作为开发者不应仅仅关注于“整洁”,还要把一切需要权衡的因素考虑在内,考虑到对团队协作效率的影响,是否能够应付需求变化,以及这种行为对整个工程的影响等等。 + +### 🐕 [TopLevelEncoder and TopLevelDecoder in Combine](https://oleb.net/2020/topleveldecoder/) + +[@anotheren](https://github.com/anotheren):在使用 Codable 这组协议时,你可能会发现已经内置于标准库中的 [`JSONDecoder`](https://developer.apple.com/documentation/foundation/jsondecoder) 和 [`PropertyListDecoder`](https://developer.apple.com/documentation/foundation/propertylistdecoder) 并未遵从于一个统一用于描述顶级解码器的协议,而编解码的起点与结果也并非仅有 `Data` 这一种而已。于是 `Combine` 中,为此定义了 [`TopLevelDecoder`](https://developer.apple.com/documentation/combine/topleveldecoder) 和 [`TopLevelEncoder`](https://developer.apple.com/documentation/combine/toplevelencoder) 协议来统一描述顶级的编解码器。本文以实际案例出发,简述了这组协议存在的缘由。在 Swift 未来的某一个版本中,它们会以不破坏 ABI 稳定的方式加入标准库。 + +## 代码 + +### [Barber](https://github.com/michaeleisel/barber) + +[@老驴](https://www.weibo.com/6090610445):此 framework 用了点投机取巧的方式来加快项目开发中增量编译的速度问题,基本思路是去掉 AppDelegate,转而为每一个大 ViewController 各自建立自己的 dependency,这样在针对某个 ViewController 做开发的时候,可以避免小改动就导致全部重新编译的情况。 + +其实个人并不是很推荐在正儿八经的项目中使用这样的 framework,不过,这样的思路倒是可以参考一下。 + +### [Pure-Swift-UI](https://github.com/CodeSlicing/pure-swift-ui) + +[@AidenRao](https://weibo.com/AidenRao):PureSwiftUI 是一个辅助 SwiftUI 的工具类,用于优化编写 SwiftUI 的体验。 +- 删除了大量的显示参数,通过更能表达含义的接口,将参数配置组合起来,使代码结构更清晰。 +- 只要你的变量是 Int,Double,Float,或者 CGFloat,PureSwiftUI 上都能混合着使用。 +- 通过修改 geometryReader 的备份 GeometryProxy,可以不影响 geometryReader 布局。 +- offsetToPosition 修饰符,可以将 View 的位置设置为任何坐标空间内的绝对位置。 +- 条件修饰符替代三目运算符,根据状态有条件地对视图进行样式配置。 +- SF Symbols 使用常量,替代字符串调用。 + + +## 内推 + +> **回响科技招人啦,求简历:** +> - 回响科技研发中心长期招聘 iOS 开发工程师、Android 开发工程师、Go 开发工程师/架构师、前端开发工程师,另有产品、运营、销售等非技术部门职位也欢迎投递! +> - 坐标上海,主营业务为潮流文化产品交易平台&社区,团队技术氛围良好,对新技术接受程度高,对各类能够提升团队开发效率的工具/方法持开放态度。 +> - 简历以【姓名+投递岗位+手机号】格式发送至 eyrefree@eyrefree.org 或者直接加微信 `EyreFree`。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) \ No newline at end of file diff --git a/Reports/2020/#101-2020.02.17.md b/Reports/2020/#101-2020.02.17.md new file mode 100644 index 000000000..44ca838e1 --- /dev/null +++ b/Reports/2020/#101-2020.02.17.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #101 | 2020-02-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [On the road to Swift 6](https://forums.swift.org/t/on-the-road-to-swift-6/32862) + +[@xiaofei86](https://weibo.com/xuyafei86):Swift 官方发布 Swift 6 未来方向: + +1. 加速 Swift 生态发展 +2. 优化开发体验(Compiler,Debugger,IDE 等工具) +3. 朝着为开发者赋能的语言前进(语言功能层面) + +为此,将沿用 SSWG 的方式,在各个领域设立各自的工作组进行开发,并且 Core Team 也将进行人员调整,引入各个工作组的核心负责人。 + +Swift 6 目前有两个目标: + +1. 加强并发的功能支持 +2. 继续沿着 [Ownership Manifesto](https://github.com/apple/swift/blob/master/docs/OwnershipManifesto.md) 的计划推进,优化内存模型 + +这一次 Swift 6 不会有具体的时间安排,只会按照功能去公开各自的开发进度和时间表,当这些目标全都完成时就会 release Swift 6,在目标完成之前都只会按照周期 release Swift 5.x 版本。 + +## 新手推荐 + +### 🐕 [SwiftUI-官方教程翻译](https://github.com/WillieWangWei/SwiftUI-Tutorials) + +[@zvving](https://github.com/zvving):SwiftUI 已经公布半年了,开始逐渐有大批开发者尝试学习和使用。此项目翻译了共十篇官方的 SwiftUI 教程,在保留官方的文字内容、配图、代码外,还进行了细微的优化,推荐 Swift 新手参考。 + +> 推荐人:[@Willie](https://github.com/WillieWangWei) + +## 文章 + +### 🌟 🐕 [一次让刷新控件好玩起来的尝试](https://mp.weixin.qq.com/s/TOWIpYWfxxtgHE6oYDEd4g) + +[@zvving](https://github.com/zvving):相信你也有过『手里拿着锤子,看什么都像钉子』的经历。 + +从学会 SpriteKit 能用在哪里?到下拉刷新游戏化『一本正经』的可行性分析,再到具体的代码实现。作者在创造需求的同时,提供了『严谨思考,细心实现』的样本。 + +看完本文,会让人手痒,也想学些新技术,再找个场景用起来。 + +### 🐕 [Library Evolution in Swift](https://swift.org/blog/library-evolution/) + +[@老驴](https://www.weibo.com/6090610445):Swift 编译器组的 Slava Pestov 在 Swift 官方网站上写了一篇关于 Swift 5.1 中 binary stability 相关的介绍。 + +在 Swift 5.1 中,Swift 引入了两项新功能:Module stability 和 Library evolution。前者可以让不同版本编译器编译的 Swift Module 同时在一个 App 中运行,而后者,则可让 binary framework 开发者在不影响老版本兼容性的同时添加新功能。 + +本文中,Slava 用了一些例子来介绍其中两个比较常用的 attribute:`@inlinable` 和 `@frozen`。 如果你在开发一些 framework 的话,不妨来读一读这篇文章。 + +### 🌟🐕 淘系专家带你初探端智能与MNN + +[上篇](https://mp.weixin.qq.com/s/NUXVB4aK87keQD21wJx3Cw?from=timeline&isappinstalled=0&scene=2&clicktime=1580719278&enterid=1580719278) + +[下篇](https://mp.weixin.qq.com/s/mj3_44pvQaXoWP9dW3R0tQ) + +[@莲叔](http://aaaron7.github.io/):MNN 的文章之前也陆续推荐过一些,不过比较偏技术细节。本次推荐的两篇相对来说更加 general 一些。从为什么要做端智能聊到为什么要用MNN。上篇侧重于讲解了为什么端上 AI 是未来的发展方向,同时对于端智能面临的挑战和未来的发展趋势做了一些总结。下篇则主要分享了 MNN 的优势以及工作流程。两篇文章适合对于端智能持观望态度的研发同学参考,对于已经入坑的,参考价值不大。 + +### 🌟🐢 [Static and Dynamic Callable Types in Swift](https://nshipster.com/callable/) + +[@JimQ](https://github.com/waz0820):上周 Xcode 11.4 第一个 beta 版给我们带来了大量有价值的更新,其中包括 Swift 比较受关注的两个新语法:[作为函数的 key path 表达式](https://github.com/apple/swift-evolution/blob/master/proposals/0249-key-path-literal-function-expressions.md) 和 [callAsFunction](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md) 。作者通过提供一些历史和理论背景,来帮助我们认识到新语法的真正价值点,以及 Swift 怎么把静态、动态可调用类型的版图一步步拼起来的。对于 Swift 不断并入的新提案导致“含糖量”逐渐增加的问题,作者也发出了“庐山不识真面目,只缘身在此山中”式的无奈之慨。 + +### 🐕 [WatchKit渲染原理以及SwiftUI桥接](https://dreampiggy.com/2019/12/10/WatchKit渲染原理以及SwiftUI桥接/) +Apple Watch 从发布以来,经过几次更新换代,目前已经成为市面上最受欢迎的可穿戴设备。Swift UI 是去年苹果新推出的 UI 相关框架。虽然 WatchKit 推出已经有一段时间了,但是相信多数同学并没有开发 Watch App 的经历,所以这两个对很多人相对陌生的技术如何结合开发,相信很多人对此会有兴趣。本文不仅介绍了 WatchKit 的渲染原理,还介绍了如何与 SwiftUI 进行桥接,值得好好了解下。 + +## 工具 + +### [ControlRoom](https://github.com/twostraws/ControlRoom) + +基于 simctl,让你可以通过 GUI 来便捷地控制模拟器,例如发送推送通知,切换夜间模式等。 + +### [Sitrep](https://github.com/twostraws/Sitrep) + +Sitrep 是 Swift 的源码分析工具,为你提供代码的高级分析: + +- 你的类,结构体,枚举,协议和扩展的数量。 +- 总代码行数,以及源码行数(减去注释和空格)。 +- 列出最长行数文件,以及它们的源代码行数。 +- 哪些内容被 import 以及 import 的频率。 +- 你的项目中有多少个 UIView,UIViewControllers 和 SwiftUI 视图。 + +## 代码 + +### 🌟 🐕 [MLN —— 支持热更的移动跨平台解决方案](https://mp.weixin.qq.com/s/I4FRuC81AOgaNSEROrJVWw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):MLN 是陌陌技术团队开源的移动跨平台开发框架,因其较低的学习成本、较高的人员效率、良好的性能、支持线上热更新等优势,目前在陌陌 App 中已全面替换 Weex,成为唯一在用的跨平台方案,并广泛应用于多种业务场景. MLN 优点良多: + +- 包体积小,加载速度快,流畅度高(对比 Flutter/RN/Weex ) +- 开发调试支持热重载,提升开发调试体验,节约时间成本 +- 支持热更新,通过网络下载lua离线包即可实现热更新 +- 提升开发效率,一套代码适应 Android 和 iOS 两端 + +## 音视频 + +### 🌟🚧 [iPlayground 2019 | 網路難,難於上青天 - 用部件化的方式簡化網路程式設計](https://www.youtube.com/watch?v=Xk4HZfW6vK0&list=PLJN8Q2M8xECkvIbNFM30Bu91qbN92SXND&index=14) + +[@老峰](https://github.com/GesanTung): 视频是 [喵神](https://weibo.com/u/2210132365) 在 iPlayground 2019 的演讲,分享了 Line SDK 关于网络层的单一职责设计架构思路, 有兴趣的同学可以点这里看[源码](https://github.com/line/line-sdk-ios-swift/tree/master/LineSDK/LineSDK/Networking/Client)。 + + +## 内推 + +> 杭州萧山微医集团招聘资深 iOS 开发工程师(Mac 方向)。微医集团是国内领先的互联网医疗方向独角兽企业,现招聘精通 Mac 端音视频方向研发工程师,参与音视频 SDK 的开发和维护,负责云会议客户端核心功能的设计开发和维护。有意向者发送简历至 zhangmw1@guahao.com,有投必回,实时反馈进度~ + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2020/#102-2020.02.24.md b/Reports/2020/#102-2020.02.24.md new file mode 100644 index 000000000..51e119cb2 --- /dev/null +++ b/Reports/2020/#102-2020.02.24.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #102 | 2020-02-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift Playgrounds For Mac](https://apps.apple.com/us/app/swift-playgrounds/id1496833156?mt=12) + +[@张嘉夫](https://github.com/josephchang10):Swift Playgrounds 最初于 [2016 年](https://tidbits.com/2016/06/13/playing-around-with-swift-on-the-ipad/)在 iPad 上发布,目的是为普通用户提供一种友好的方式来学习 Swift 语言。现在使用 Catalyst 技术制作的 Mac 版本已经发布,在 Mac App Store 上可以免费下载,大小为 155.1 MB,需要 macOS 10.15.3 Catalina 或更新的操作系统。 + +## 文章 + +### 🐎 [从探索到落地,手淘引入 Swift “历险记”](https://mp.weixin.qq.com/s/oHGkoGzhMs-l8TX6t0831w) + +[@JimQ](https://github.com/waz0820):本文还原了手淘 iOS APP 历时一年将 Swift 语言从调研到基础设施建设,再到顺利落地业务的全过程,其推进的策略、所遇到的问题及其解决方案,对国内还在踌躇如何落地 Swift 的同学具有很好的借鉴意义。 + +### 🐎 [iOS Performance tips you probably didn't know](https://www.fadel.io/blog/posts/ios-performance-tips-you-probably-didnt-know/) + +[@EyreFree](https://github.com/EyreFree):作者为前苹果工程师,有多年苹果系统库和系统应用开发经验。文中介绍了 UILabel 和 tag 在资源占用与性能上的一些问题,并且讨论了多线程编程时的一些影响执行效率的细节。文中也提到了某些控件的缓存会在收到 `didReceiveMemoryWarning` 时进行释放(例如 UICollectionView 的重用区),开发者不必对 App 的高内存使用率耿耿于怀,模拟“内存警告”可以观察这一现象。建议对性能优化感兴趣的朋友阅读。 + + +### 🐕 [有赞iOS-基于二进制的编译提效策略](https://mp.weixin.qq.com/s/fcGfyM6hDGY6U1d-fBguuQ) + +[@莲叔](http://aaaron7.github.io/):iOS 从推出至今已经超过 10 年,越来越多的 iOS 工程都变得十分庞大。组件二进制化变为越来越主流的优化方案,能够显著减少全量编译的耗时。这篇文章介绍了有赞在优化过程中的一些心得。其中包含了一些比较零碎的优化手段,如 Xcode 编译优化,CCache 优化等,也包含一套相对完成的 Pod 二进制方案的介绍。整体还算比较体系,比较适合不愿意投入太多时间整理架构的中小型公司参考。大公司往往都有自己的打包架构,不一定适用。 + +### 🐕 [Standard Library Preview Package](https://swift.org/blog/preview-package/) +[@AidenRao](https://weibo.com/AidenRao):Swift 团队针对 Swift 迭代,添加标准库的预览版,提供给开发者使用。Swift 团队在正式版本之前,可以通过预览版的使用反馈,来做 API 的调整。 + +## 工具 + +### 🐎 [URLFormat](https://github.com/ilyapuchka/URLFormat#vapor) + +[@极速男孩](https://github.com/ztlyyznf001):这是在 [vapor] (https://github.com/vapor/vapor) 中基于 [common-parsers](https://github.com/ilyapuchka/common-parsers) 的不需要使用正则并且类型安全的来对 url 请求进行匹配的工具。 + +### 🐕 [Swift 编写的 iOS 端抓包工具(Knot)](https://juejin.im/post/5e426f1a518825496f38149a) + +[@老峰](https://github.com/GesanTung):已支持的动能: +- Http、Https 流量抓取 +- 流量解析、多格式导出、过程分析 +- 可抓取局域网内其他设备与外界通信数据 +- CA 证书安装、导出 +- 中英文国际化 +- 过滤规则配置、导出 + +### 🐕 [ swift-doc - Generates documentation for Swift projects](https://github.com/SwiftDocOrg/swift-doc) + +[@水水](https://www.xuyanlan.com):swift-doc 可以为你的 Swift 项目生成文档,能给定 Swift 文件的目录,为每个类、结构、枚举和协议以及顶级类型别名、函数和变量生成 CommonMark(Markdown)文件。 +swift-doc 支持以命令的形式安装和使用在 MacOS 和 Linux 系统上。 +虽然目前输出仅限于 CommonMark,但计划同时支持 HTML 和其他格式。该项目正在积极开发中,预计在首次稳定发布前会有显著变化。 + +## 代码 + +### 🌟 🐕 [开源 | Objective-C & Swift 最轻量级 Hook 方案](https://mp.weixin.qq.com/s/wxigL1Clem1dR8Nkt8LLMw) +[@zvving](https://github.com/zvving):字节跳动技术团队带来一套基于消息转发机制的 instance 粒度的轻量级 hook 方案:SDMagicHook。 + +相较于 [Stinger](https://github.com/eleme/Stinger) 和 [Aspects](https://github.com/steipete/Aspects),SDMagicHook 只支持实例维度的 hook,函数替换、消息调度等过程都在 objc 层面处理,框架实现更轻量,源码更易懂。本文详细描述了其实现过程,推荐阅读学习。 + +### [swift-checkit](https://github.com/karwa/swift-checkit/) + +[@享耳先森](https://github.com/iblacksun):这个库起源于作者遇到一个 bug:自定义了一个 `collection`,但对 index 处理和 SDK 行为不一致。所以作者写了这个库,面向协议的接口抽象了测试用例,一行代码即可完成协议 Conformance 的测试。 + +### 🌟 🐕 [Flutter:图像的爆炸动画💥](https://juejin.im/post/5e3c17876fb9a07cab3a87fe?utm_source=gold_browser_extension) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):文章展示了如何使用 Flutter 粒子动画完成一个效果爆炸的动画效果,效果流畅. + +## 书 + +### [Thinking in SwiftUI](https://www.objc.io/books/thinking-in-swiftui/) + +[@老驴](https://www.weibo.com/6090610445):objc.io 又要出新书了!这次是 SwiftUI 相关的书。根据目前的简介,本书将会专注在帮助大家从面向对象编程的思维转变成声明式编程。 + +现在预购的话可以 early access 本书的内容,不过,估计喵神之后也会出对应的中文版,如果想看中文版的童鞋可以再等等。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2020/#103-2020.03.02.md b/Reports/2020/#103-2020.03.02.md new file mode 100644 index 000000000..3bc08ff61 --- /dev/null +++ b/Reports/2020/#103-2020.03.02.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #103 | 2020-03-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Flutter 智能闹钟挑战赛评选结果揭晓](https://medium.com/flutter/its-time-the-flutter-clock-contest-results-dcebe2eb3957) +[@zvving](https://github.com/zvving):Google 联合 Google Assistant、联想,发起的 Flutter 智能闹钟挑战赛已经评选结束,获奖及提名作品均有源码奉上,Flutter 爱好者不容错过。 + +> 赛事网址:https://flutter.dev/clock + +## 文章 + +### 🌟 🐢 [Flutter 在字节跳动的现状与工程实践](https://mp.weixin.qq.com/s?__biz=MzUxMzcxMzE5Ng==&mid=2247493836&idx=1&sn=979792491d0abe803c0f00ed412fb0de&chksm=f9525d8fce25d499f5c9815529f7fc25d5e130986a44e430352e375b77d5fe727a8d88f783e1&mpshare=1&scene=1&srcid=&sharer_sharetime=1582811190556&sharer_shareid=b37c346ca5a345410d47741175cc1271&rd2werd=1#wechat_redirect) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一篇主要分享 Flutter 在字节跳动的现状以及工程实践经验的深度好文。字节跳动希望把 Flutter 打造成下一代研发体系,支撑众多 App 的各种使用场景。文章分为几个部分: + +- Flutter 在字节跳动的现状 + - Flutter 的优势与业务现状 + - 建设进展与规划简介 + +- 工程实践 + - FlutterW 研发套件 + - 容器化工程方案 + - ByteRedux 状态管理方案 + +- 总结与展望 + +尤其是工程实践部分,FlutterW 研发套件标准化了 Flutter 的开发环境,提供了方案统⼀实施的能⼒。容器化方案让运行环境提供统⼀基础能力,真正实现“Write Once, Run Everywhere”。 ByteRedux 状态管理方案以很低的成本解决了 Redux 的问题,保留了 Redux 的优势,使其可以适应大中小型应用。字节跳动基于 Flutter 技术落地的解决方案以及相关的技术创新,相信会为更多企业和开发者提供启发和借鉴! + +### 🐕 [Four Easy Ways to Debug Network Requests in Flutter](https://medium.com/flutter-community/three-easy-ways-to-debug-network-requests-in-flutter-53043e898929) + +[@老峰](https://github.com/GesanTung):这篇文章分享了关于 Flutter 网络请求 Debug 的四种方式: + + - 使用log 日志:使用 logs package 打印日志,可读性较差 + - 使用 Alice:集成在 Flutter App 内部,可视化的展示网路请求记录 + - 使用 Flipper:来自 Facebook 的 桌面 App + - 使用 Proxy 代理:在网络框架中配置代理 IP,配置 Charles,这个也是作者推荐的方式 + +### 🐢 [How Swift imports C APIs](https://github.com/apple/swift/blob/master/docs/HowSwiftImportsCAPIs.md) + +[@xiaofei86](https://weibo.com/xuyafei86):当 Swift 从基于 C 的语言(C,Objective-C)导入一个模块或者解析 bridging header 时,这些语言的接口被映射为 Swift 接口以便可以在 Swift 代码中直接使用。这提供了 Swift EFI 功能的基础(Foreign Function Interface 外部函数接口)— 对基于 C 的语言开发的库提供互相操作的能力。 + +本文为苹果的官方文档,讲述了接口怎样从基于 C 的语言映射到 Swift。文章的受众很广,在必要的时候会解释一些高级概念,除了技术专家,也推荐给 Swift 和 C 语言的初学者。 + +### 🐕 [Swift.org - Announcing ArgumentParser](https://swift.org/blog/argument-parser/) + +[@AidenRao](https://weibo.com/AidenRao):Swift 发布 ArgumentParser,一个命令行解析库。可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 ArgumentParser 将对命令行进行解析,支持子命令,自定义帮助和参数验证提示。 + +## 工具 + +### [zld](https://github.com/michaeleisel/zld) + +[@四娘](https://kemchej.github.io/):一个更快的 linker。在大型项目里增量编译 link 阶段的耗时占用非常大,这个项目在 Apple 版本的基础上改为使用更加高效的 Hash 实现,增加任务的并行处理,Benchmark 显示 link 时间比原本缩短了 40% 左右。 + +> 推荐人:[SketchK](https://github.com/SketchK) + +## 代码 + +### 🌟 [DarkModeKit](https://github.com/microsoft/DarkModeKit) + +[@Damonwong](https://github.com/Damonvvong): Microsoft 作为老牌的软件公司,开发了不少优秀的 iOS App,比如 Office 套件。年前的时候 Office 有了一次比较大的更新,同时也支持了 DarkMode。令人兴奋的是,Office 套件中使用的 DarkModeKit 已经开源了。感兴趣的可以了解一下 + +本人也学习和了解了一下 DarkModeKit 的源码,不得不说 DarkModeKit 的代码质量也非常高,非常值得学习。 + +### [KeyboardGuide](https://github.com/niw/KeyboardGuide) + +[@EyreFree](https://github.com/eyrefree):众所周知的是,iOS 开发中如何优雅地处理键盘是一件比较有挑战性的事情。我们可以通过搜索引擎找到很多方案,但大多数都不是很完善。KeyboardGuide 将各种需要考虑的状况都包含在内,并且对 iPad 也提供了良好的支持,有需求的同学可以尝试一用。 + +## 音视频 + +### [Vue.js - The Documentary,Vue.js 纪录片,配中文字幕](https://www.bilibili.com/video/av92525472/) + +[@享耳先森](https://github.com/iblacksun):纪录片总长 30 分钟,记录 Vue 的发展过程。 +尤雨溪在片中讲了 Vue 名字由来,介绍了关键时间节点的发展过程,也和 `Angular` `React` 做了些对比。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) + + diff --git a/Reports/2020/#104-2020.03.09.md b/Reports/2020/#104-2020.03.09.md new file mode 100644 index 000000000..db48ecd4d --- /dev/null +++ b/Reports/2020/#104-2020.03.09.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #104 | 2020-03-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [近期 iOS 开发者需要关注的官方新闻](https://developer.apple.com/news/?id=03042020b) + +[@looping](https://github.com/looping):主要内容如下: +- 目前 iOS 13 覆盖率已经达到 77% +- 从 4 月 30 日起,所有提交到 App Store 的 iPhone 应用都必须使用 iOS 13 SDK(Xcode 11) 打包,也就是说要完成 iOS 13 适配 +- 再次强调了从 4 月 30 日起,所有提交到 App Store 的应用都必须使用 storyboard 作为 launch screen,并要求 iPhone 应用要适配所有的 iPhone 屏幕尺寸 +- 另外,审核条款也有更新([Updated App Store Review Guidelines Now Available](https://developer.apple.com/news/?id=03042020a)),可浏览知识小集团队整理的变更内容:[划重点:《App Store 审核指南》更新条目一览](https://mp.weixin.qq.com/s/Tzt0jmVt2q7zpL7g8kpb5g) + + +## 文章 + +### 🌟 🐕 [Project LightSpeed: Rewriting the Messenger codebase for a faster, smaller, and simpler messaging app](https://engineering.fb.com/data-infrastructure/messenger/) +[@zvving](https://github.com/zvving):Facebook 新版 iOS Messager 为了达成『更快、更小、更简单』的目标,进行了一项罕见的工作:重构架构并重写所有代码。 + +- 重写效果:保留大多数功能,启动快一倍,大小为之前四分之一,代码从 170w 行降低到 36w 行 +- 追求架构全局最优的四原则: + - 优先使用系统实现,少部分跨平台逻辑扩展 C 实现 + - 合并重用 UI 逻辑 + - 基于 SQLite 打造通用平台 MSYS:驱动 UI 业务,自动化测试 100% 覆盖 + - 统一客户端与服务端交互&同步机制 +- 面对未来的代码增长,为每个功能设置复杂度预算,长期评估质量 + +架构的抉择来自于 FB 工程师对如何用最新技术打造 IM 项目的整体思考:使用最新系统实现,追求复用,针对 IM 打造 DB 驱动核心,保持简单。读起来颇有『重剑无锋,大巧不工』的味道。 + +顺带一提:这是一次 native to native 的重写,和 RN 没有直接关系。 + +> - [@Dan Abramov 在 Twitter 上的回应](https://twitter.com/dan_abramov/status/1234801507805138945) +> - [感谢知识小集提供的译文](https://mp.weixin.qq.com/s/kdezRmk_tgjUTsuCQcAqsw) + +### 🌟 🐢 [系列文章 - Swift Intermediate Language 初探](https://mp.weixin.qq.com/s/UQksScr_LZ1n7wLAVjzEMg) + +[第二篇 - 真实案例引发的 iOS 底层实现窥探](https://mp.weixin.qq.com/s/KHvWSsvKNxJq9IwAsZu4qw) + +[@享耳先森](https://github.com/iblacksun):Swift 是构建在 LLVM 上,使用 LLVM 中间表示(IR) 和 LLVM 不同后端生成机器语言。除此之外,Swift 编译器在生成 IR 之前,还设计了一门新的高级中间语言 `Swift Intermediate Language`,简称 `SIL`,SIL 会对 Swift 进行高级别的语意分析和优化。 + +当你遇到一些无法理解的表面现象,没有办法通过文档或者前人经验解读问题的实质,想要尝试探究编程语言背后的实现细节,那么就需要跨越语言本身的了解,向下去专研编译器的实现细节。系列文章使用项目中实际遇到的一个真实案例,从一个具体的 `UITableView` 实现的例子引出,试图通过 `SIL` 这个中间语言,探究 Swift 背后的一些实现细节,帮助我们理解一些问题。 + +> 推荐人:[@kingnight](https://github.com/kingnight) + + +### 🐕 [Flutter +MLKit = ❤](https://medium.com/flutter-community/flutter-mlkit-8039ec66b6a) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文分享了一个 Flutter 与 MLKit 结合起来的 Demo:给名片拍照后提取其中的邮件地址。具体从下面三个步骤来展开: +1. 照相(使用 Flutter 的 camera package) +2. 使用 MLKit 提取照片中的文字(使用 textRecognizer 实例来提取出图片中的文字) +3. 寻找文字中的邮件地址(使用正则表达式) + +而且在每一步骤作者都提供了相关代码,并在文章中提供了 Demo 地址:[Business-Card-Mail-Extractor](https://github.com/DaemonLoki/Business-Card-Mail-Extractor) + +### 🌟 🐕 [dna --- 一个 dart 到 native 的超级通道](https://juejin.im/post/5e5f1d41518825495b29a05b) + +[@老驴](https://www.weibo.com/6090610445):Flutter 最近是越来越火了,有越来越多的大厂开始进行尝试。 + +dna 就是饿了么团队针对 Flutter 使用中的痛点:原生能力的调用,做的一个 channel 类型的框架。本文中也叙述了在 Android 和 iOS 下的实现的一些具体细节,有兴趣的同学也可以学习参考一波。 + +### 🐕 [My experience replacing CocoaPods with SwiftPM](https://www.jessesquires.com/blog/replacing-cocoapods-with-swiftpm) + +[@anotheren](https://github.com/anotheren):Xcode 11 中已经自带集成了 Swift Package Manager,随着越来越多第三方库的支持,切换到 SPM 已经逐渐成为可能。本文介绍了当前切换到 SPM 存在的优势与不足,现在主要影响的问题还有: +1. 不支持 Objective-C 和 Swift 的混合使用 +2. 不支持资源文件 + +### 🐢 [深入剖析 WebKit](https://ming1016.github.io/2017/10/11/deeply-analyse-webkit/#more) + +[@kyo](https://github.com/KyoLi):虽然苹果从 iOS 8 开始就引入了 WKWebView,但在过去很长一段时间里是允许 UIWebview 和 WKWebView 共存的。苹果从 iOS 13 开始将 UIWebview 列为 Deprecated API,意味着开发者将不得不升级至 WKWebView。而 WKWebView 和 UIWebView 是完全不同的。如果想要更好的了解 WKWebView,那么就有必要深入了解一下 WebKit。本文是 @戴铭 老师关于 WebKit 的一篇文章,对于升级至 WKWebView 遇到的一些问题,或者想更深入了解 WebKit ,这里可能就有你想要的答案。 + +> 推荐人:[@sigsegv](https://juejin.im/user/5a3123a26fb9a044fa19dc7b) + +### 🐕 [iPhone可以运行Android了](https://mp.weixin.qq.com/s/hYjmPNxlX8P_BiEo4LveJQ) + +[@EyreFree](https://github.com/EyreFree):Project Sandcastle(沙堡计划,项目地址:[https://projectsandcastle.org/](https://projectsandcastle.org/)),目前支持在 iPhone7 / 7 Plus 设备上运行 Android,本文记录了作者完整的尝试过程,有兴趣的朋友可以看一下。 + +## 工具 + +### [MultipeerKit](https://github.com/insidegui/MultipeerKit) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):MultipeerKit 是一个 Swift 软件包,它允许 iOS、macOS 和 tvOS 设备通过 Wi-Fi 网络,点对点 Wi-Fi 和蓝牙在它们之间交换数据。可以通过查看 Public API 文件夹中的 Swift 文件,了解使用 MultipeerKit 的更多信息。 + +### [Xcode Build Settings](https://xcodebuildsettings.com/) +[@AidenRao](https://weibo.com/AidenRao):Build Settings 有数百种配置,这个网站整理了每一个配置的含义,可以随时用来查询。结合 [Mattt](https://github.com/mattt) 的 [Xcode Build Configuration Files](https://nshipster.com/xcconfig/),了解使用 xcconfig 来管理 APP 的 Build Settings。 + + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#105-2020.03.16.md b/Reports/2020/#105-2020.03.16.md new file mode 100644 index 000000000..8e477275b --- /dev/null +++ b/Reports/2020/#105-2020.03.16.md @@ -0,0 +1,114 @@ +# 老司机 iOS 周报 #105 | 2020-03-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [WWDC20 改成线上举行](https://developer.apple.com/wwdc20/) + +[@享耳先森](https://github.com/iblacksun):受新冠疫情影响,苹果宣布一年一度的 WWDC 大会改为线上举行,具体日期及形式还未定,只指明将在六月举行。 + +## 新手推荐 + +### 🌟 🐕 [UIAlertController with Function Builders](https://felginep.github.io/2020-03-10/uialertcontroller-function-builders) + +[@AidenRao](https://weibo.com/AidenRao):Function Builder 是 Swift 5.1 的新特性,在 Swift 的基础上构建自己的 DSL 的语法。文章基于 Function Builder,创建简单且易读的 UIAlertController API,包括基础的 Function Builder 实践,条件语法,以及通过创建一个辅助函数,在 Function Builder 中实现 for 循环。 + +## 文章 + +### 🌟 [打破重重阻碍,Flutter 和 Web 生态如何对接?](https://mp.weixin.qq.com/s/eL02zPLFbTOXm1vS6UEA4g) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 在 2019 几乎已经成为了跨端开发的代名词了,其中其官方团队在下半年宣布的 Flutter Web 更是让其火热的势头更进一步,让大家看到了一个大统一的远景。本文是手淘技术对 Flutter 对接 Web 的一个深度解析,从 what,why,how 三方面娓娓道来,最终结论: 不要对接!不要对接!不要对接! + +### 🌟 🐕 [Fluttify](https://fluttify.com/#/) +**系列文章:** +- [Flutter 插件开发必备 原生 SDK -> Dart 接口生成引擎`Fluttify`介绍](https://juejin.im/post/5dc65fa2f265da4d23759cec) +- [如何利用 Fluttify 开发一个新的 Flutter 插件](https://juejin.im/post/5e06faa651882512416a7630) +- [Fluttify 输出 Flutter 插件工程详解](https://juejin.im/post/5e19306c6fb9a02ff67d3780) +- [Fluttify 编译器原理介绍](https://juejin.im/post/5e67321751882549717d8de7#heading-1) + +[@红纸](https://github.com/nianran):Fluttify 是一个可以为原生 SDK 生成 Dart 接口的一个工具。工具解决了一些插件开发过程中带来的类型安全,编码繁琐等痛点。主要原理通过语法解析生成器 [ANTLR](https://www.antlr.org/) 产生树状分析器解析出 JSON 格式的中间文件,再利用中间文件和工程模板生成对应的 Dart 接口以及目标工程。 + +如果你对于 **ANTRL** 想了解更多推荐:[JSPatch Convertor 实现原理详解](http://blog.cnbang.net/tech/2915/)和[从 antlr 扯淡到一点点编译原理](https://awhisper.github.io/2016/11/18/%E4%BB%8Eantlr%E5%88%B0%E8%AF%AD%E6%B3%95%E8%A7%A3%E6%9E%90/) +> 推荐人:[@yohom](https://github.com/yohom) + +### 🐎 [Testing Push Notification on iOS Simulator from Xcode 11.4 Beta](https://medium.com/flawless-app-stories/testing-push-notification-on-ios-simulator-from-xcode-11-4-beta-2fdd91d67bff) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):从 Xcode 的 11.4 beta 版本开始支持在 iOS 模拟器推送。作者介绍了两种方式来实现在 iOS 模拟器的推送: +1. 使用命令行:``xcrun simctl push booted test_push_notification.apns`` +2. 通过拖拽 apns 文件到模拟器的方式来实现推送。 + +通过以上两种方式,开发者不需要使用真机,也不需要推送证书,更不需要使用 APNS 服务就可以实现推送,非常方便。 + +### 🐎 [Flight rules for Git](https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md) + +[@JimQ](https://github.com/waz0820):这是一篇 Git 急救指南,所谓"飞行规则",即用来指导问题出现后的应对之法。不像官方指南以罗列功能为主,本指南多以常见问题为小标题,然后给出该问题的具体解决步骤,非常适合就病投医,对症下药,且有中文版本。 + +### 🐕 [Introducing Swift Crypto](https://swift.org/blog/crypto/) + +[@EyreFree](https://github.com/EyreFree):Swift Crypto 是一个新的 Swift 系统库,它对 Apple CryptoKit 的 API 进行了出色的封装。这个新的库提供了跨平台的解决方案,无论部署在什么平台上,Swift 开发人员都可以访问这些 API,以实现一系列通用的加密操作。只需要 `import Crypto` 就可以获取所有 CryptoKit API,在编写跨平台加密代码时非常有用。本文对该库进行了简单介绍,感兴趣的朋友可以了解一下。 + +### 🚧 🐎 [The Nested Closure Trap](https://medium.com/flawless-app-stories/the-nested-closure-trap-356a0145b6d) + +[@Satanwoo](https://github.com/SatanWoo):Block / Closure 导致的循环引用想必大家在日常在开发中已经有了很深的体会。作者从 Swift 嵌套的闭包入手,提及了在多层嵌套中可能出现的内存泄漏场景。感兴趣的朋友可以用作一个补充知识漏洞的文章,时刻提示自己。 + +### 🐕 [设计模式(Swift 5.0 实现)](https://github.com/Binlogo/Design-Patterns-In-Swift-CN) + +全面的 Swift 5.0 示例实现的设计模式,结合概念理论与代码示例可以更好地理解设计模式的实际应用。源项目为英文,此为中文整理翻译版本。 + +### 🐕 [使用 protocol 和 callAsFunction 改进 Delegate](https://onevcat.com/2020/03/improve-delegate/) + +[@老驴](https://www.weibo.com/6090610445):喵神的新作。这篇文章也是之前喵神的小专栏的[文章](https://xiaozhuanlan.com/topic/6104325798)的后续。 + +本文主要是通过 Swift 5.2 中最近新加的特性来完善之前的 Delegate Pattern 方案。有兴趣的同学不妨新老两篇文章一起读哦。 + +## 工具 + +### [CocoaHub](https://cocoahub.app/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B445) + +[@xuyanlan](https://www.xuyanlan.com):挺不错的一个 iOS 资讯 App,而且仅看 Feed 简介的话不用翻墙哦,[CocoaHub 下载链接](https://apps.apple.com/app/id1467755462)。 + +## 代码 + +### 🐕 [SwiftCurrency: Type-safety and algorithms for working with money in Swift.](https://github.com/peek-travel/swift-currency) + +[@极速男孩](https://github.com/ztlyyznf001):Swift Currency 是一个在 Swift 中来表达 [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) 的一个货币的库。这个库是一个类型安全的,并支持文字表达,文字插入和数学表达式等对货币的操作。 + +### 🐕 [Time: Building a better date/time library for Swift](https://github.com/davedelong/time) + +[@莲叔](http://aaaron7.github.io/):做过时间管理、日历等 App 的同学一般都会有一个同感,即系统提供的日期相关的 API 着事不怎么友好,尤其是涉及到时区的考虑,往往都非常容易采坑。Time 是一个纯 Swift 实现的日期 API 集合,提供了 SwiftPM 的方式接入。提供了一种“讲人话”的方式来操作日期和时间,比如可以简单的针对不同的时区生成 clock 对象,并能够轻而易举的从 clock 对象中拿到年月日,时分秒等信息。不用写很多 boilerplate code。有相关需求的同学可以尝试一下。 + +### [YMHTTP](https://github.com/zymxxxs/YMHTTP) +[@张嘉夫](https://github.com/josephchang10):`YMHTTP` 是一个适用于 iOS 平台,基于 [libcurl](https://curl.haxx.se/) 的 IO 多路复用 HTTP 框架,其 API 设计和行为与 NSURLSession 保持高度一致。因为 YMHTTP 是基于 libcurl 进行封装,所以有着较高的定制性,目前的版本与 NSURLSession 在 API 保持高度一致的同时拓展了 DNS 的能力(包括 SNI 的场景)。 + +### [Swift Argument Parser](https://github.com/apple/swift-argument-parser) +[@xiaofei86](https://weibo.com/xuyafei86):近日苹果开源了由 Swift 实现的 ArgumentParser。它用于解析命令行参数,具有直观、易用、简洁、安全的特点,是一个很出色的解析器。目前 ArgumentParser 的 star 数已达 1k。苹果还推荐了两个 ArgumentParser 在 Swift 项目工具中采用的示例: +1. indexstore-db:一个包含两个命令的简单实用程序。 +2. swift-format:使用了一些高级功能,例如自定义选项值和隐藏标志。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#106-2020.03.23.md b/Reports/2020/#106-2020.03.23.md new file mode 100644 index 000000000..32b0dad45 --- /dev/null +++ b/Reports/2020/#106-2020.03.23.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #106 | 2020-03-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store 对 COVID-19 相关应用的审核要求](https://developer.apple.com/cn/news/?id=03142020a) + +[@享耳先森](https://github.com/iblacksun):苹果此前发出通知:为了保证数据源的可靠性,要求 COVID-19 相关应用必须以机构身份提交。同时,正常的审核流程可能需要比较长的时间,鼓励 COVID-19 相关应用在提交审核时发起「TimeSensitive Event」请求优先审核。 + +## 新手推荐 + +### [Determining which frameworks use UIWebView](https://blog.kulman.sk/determining-which-frameworks-use-uiwebview) + +[@老峰](https://github.com/gesantung):苹果已经弃用了 UIWebView,从 2020 年 4 月开始将不再接受新的 UIWebView 应用,从 2020 年 12 月开始将不再接受旧的 UIWebView 应用升级。本文介绍了检测三方库是否包含 UIWebView 的方法: + +- 源码:grep -r 'UIWebView' . +- 非源码(.framework):nm *.framework/* | grep -i UIWebView + +## 文章 + +### 🌟 🐕 [性能深度分析之 System Trace](https://mp.weixin.qq.com/s/wTF3JSFH5b2zIUYAbnC-Bw) + +[@五子棋](https://satanwoo.github.io):作者从 Time Profiler 的原理出发,阐述了性能优化过程中仅仅使用 Time Profiler 的一些瓶颈。然后引出了平时大家可能较少使用的 System Trace。通过一个具体加载 Dyld Lib 的例子来直观的对比 System Trace 能够对性能优化起到什么样的 “补缺” 式帮助。最后作者还补充了一些技术原理,来帮助大家更好的理解性能优化中的一些关键点,总之是一篇具有深度的 Instrument 佳作。 + +### 🌟 🐕 [FlutterBoost1.0到2.0,我一共做了这几件事](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247485085&idx=1&sn=277e1c7d555099f1cb1018614810f14e&chksm=fd54d28cca235b9a16518428b7f7df249e6da193e6fa9b567f19bcf9d88790e02b888c0c93bc&token=1853870359&lang=zh_CN#rd) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):FlutterBoost 目前已经来到 2.0 版本,在从 1.0 到 2.0 的过程中,踩了不少坑,本文是 FlutterBoost 小组对于升级过程中坑点的一个全盘解析,社区一直反馈的白屏和闪屏问题也在此次迭代中得到了解决。 + +### 🐎 [基于时间轮片方式处理超时任务](https://juejin.im/post/5e733e4f51882549417fe9aa) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):如果每次判断某个任务是否超时的时候都要开启定时器的话,对性能上会带来一定的消耗。本文作者参考了使用时间轮片的方式去处理 TCP 心跳连接的方案,实现了一个基于时间轮方式来处理超时任务的框架,从一定程度上避免了性能的消耗。作者结合了代码框架代码和使用示例进行了讲解,并在文末附上了 demo。 + +推荐阅读:[时间轮片(Timing Wheel)实现心跳机制](https://blog.csdn.net/u010837612/article/details/79582137) + +### 🐕 [一个不规范的 Category 写法导致的“血案”](https://mp.weixin.qq.com/s/odkqXKHkshXKS_ZPk_EhBA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):文中举例通过线上监控发现项目前后两个版本在没有较大改动的前提下,启动时间缩短了并且包体积也变小了,然后追根朔源找到是因为一个 UIView 分类把实现写在了头文件导致。 + +因为这个分类会被工程中很多地方 import,而实现如果直接写在头文件中,相当于头文件的内容直接 copy 到对应文件,对应符号也编译到了对应的 .o 文件中,导致 .o 文件变大,所以会导致包体积变大。另外由于是 copy 到多个文件内,相当于生成了多个具有相同方法的分类,导致 UIView 的方法列表变长,进而导致在 UIView 消息发送过程中的查找时间变长,因为又会导致启动时间变长。 + +### 🐕 [MediaPipe - 跨平台机器学习应用开发框架](https://juejin.im/post/5e702e06e51d4526f363c62a?utm_source=gold_browser_extension) + +[@老驴](https://www.weibo.com/6090610445):MediaPipe 是 Google 开发并开源的数据流处理机器学习跨平台应用开发框架。作为基于图的数据处理管线,MediaPipe 适用于视频,音频,传感器数据等这些时间序列数据。 + +框架主要想要解决的是性能,充分利用设备功能等在跨平台机器学习开发中比较有难度的问题。MediaPipe 同时还提供了可视化图编辑器,使用的时候,对新手更加友好。有兴趣的童鞋们不妨来看看。 + +### 🐢 [Avoiding massive SwiftUI views](https://www.swiftbysundell.com/articles/avoiding-massive-swiftui-views/) + +基于 UIKit 开发的应用程序,很容易使我们开发出 “Massive View Controller” ,因为 ViewController 通常承担了过多的职责。SwiftUI 是 Apple 去年发布的一个全新 UI 框架,它采用声明式的界面开发方式,没有各种 view controllers ,可以使我们更容易写出低耦合的代码。但即便如此,如果要避免 “Massive View Controller” ,依然需要进行一些良好的设计。本文介绍了如何在基于 SwiftUI 开发的前提下,将 UI 分解成更小的模块,让职责更单一,这会有助于我们写出更易迭代和维护的代码。 + +## 工具 + +### [Profiling and debugging your Combine code with Timelane](https://www.donnywals.com/profiling-and-debugging-your-combine-code-with-timelane) + +[@zvving](https://github.com/zvving):[Timelane](http://timelane.tools/) 是一个响应式编程调试工具,结合 Instrument 提供更直观、交互式的调试过程,同时支持 Combine 和 RxSwift。这篇文章告诉你如何上手 Timelane,告别 print 的调试方式。 + +### [GitHub 手机客户端正式发布 ](https://github.com/mobile/) + +[@xuyanlan](https://www.xuyanlan.com):GitHub 手机客户端已经正式发布在了 Google Play 和 AppStore。 + +## 代码 + +### [FLUI](https://github.com/rannie/flui) + +[@looping](https://github.com/looping):[FLUI](https://www.flui.xin/) 是一个基于 Flutter 开发的 UI 框架,拥有完善的使用示例和文档,同时支持动态化渲染、Dark Mode 等特性,喜欢 Flutter 的同学可以好好学习研究一番。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#107-2020.03.30.md b/Reports/2020/#107-2020.03.30.md new file mode 100644 index 000000000..f72936340 --- /dev/null +++ b/Reports/2020/#107-2020.03.30.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #107 | 2020-03-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [【译】用UIKit和UIView在视图上执行iOS动画](https://juejin.im/post/5e784681f265da57671be823) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了 UIView 中实现动画的几种方法以及各个参数的意义,最后简单介绍了如何去优化动画的性能。可以参考[原文](https://www.smashingmagazine.com/2019/11/performing-ios-animations-views-uikit-uiview/)。 + +## 文章 + +### 🐎 [为什么 Debug Information Format 改为 DWARF 可以提高编译速度?](https://mp.weixin.qq.com/s/97h0oeotOpyTc_a-9ZSJtQ) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文探索了将 Debug Information Format 改为 DWARF 可以提高编译速度的原因。首先介绍了 DWARF 和 dSYM 的生成时机,以及设置 DWARF with dSYM 与否的产物区别和性能区别,并提供了在不同情况下的性能测试结果。通过本文可以让我们对编译器的编译过程、调试器的调试符号查找过程有较为深入的认识,也可以让我们明白为什么这种优化可以带来编译性能的提升。 + +### 🐕 [微信支付跨平台软件架构](https://mp.weixin.qq.com/s?__biz=MzAwNDY1ODY2OQ==&mid=2649287208&idx=1&sn=6f3813deaad2aa6f096bc0b0d7ba8c34&chksm=8334ceaab44347bc903bcf1d00898e124ccbc509fd628b119071b41a05959f09df2ef0716bea&mpshare=1&scene=1&srcid=&sharer_sharetime=1584703159505&sharer_shareid=c357a4972a00ef443223641b12ffbd76#rd) + +[@莲叔](http://aaaron7.github.io/):说起跨平台,我们一般想到的都是 RN、Weex 这样基于 JS 技术栈的跨平台技术。但 iOS、Android 都提供了比较友好的交叉编译工具,使得基于 C/C++ 的跨平台开发也是非常值得考虑的一个选项。微信支付基于业务逻辑复杂、双端实现不一样导致的高昂的维护成本的背景下,开发了一套基于 C++的跨平台开发框架,使得核心的业务逻辑都下沉到 C++中,使用同一份代码来实现,取得了非常显著的业务效果。该文对该架构进行了详细的介绍,也有很多关于架构设计过程中的考量的解析,非常有参考价值。推荐工作中有较多架构工作内容的同学阅读。 + +### [Swift 5.2 正式发布 & 5.3 正在路上](https://swift.org/blog/5-3-release-process/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.2 已经正式发布,主要是对错误诊断的增强以及以下两个新特性: +- [SE-0249 Key Path Expressions as Functions](https://github.com/apple/swift-evolution/blob/master/proposals/0249-key-path-literal-function-expressions.md) +- [SE-0253 Callable values of user-defined nominal types](https://github.com/apple/swift-evolution/blob/master/proposals/0253-callable.md) + +Swift 5.3 已确定相关计划,专注于质量和性能提升,另外,预计将增加对 Windows 及其他 Linux 发行版的支持。 + +### 🐎 [Weex、RN 还是 Flutter?资深技术专家与你聊聊阿里跨平台思路](https://mp.weixin.qq.com/s/AufpOA4ZDu0sf0sL-Sv_Sw) + +[@looping](https://github.com/looping):本文介绍了跨平台开发的发展趋势和变化,并提出从研发成本、灵活性、性能体验这三个角度来考虑如何选择适合自己的跨平台开发框架,同时也介绍了阿里各跨平台开发框架的发展及应用,以及 5G 时代给移动领域带来的新机会。 + +### 🐎 [手淘 App 如何落地 Swift ?一边探索实践,一边“打怪升级”](https://mp.weixin.qq.com/s/_iweRWQCjnoASCmUAKHDFA) + +[@JimQ](https://github.com/waz0820):上个月周报推荐了[从探索到落地,手淘引入 Swift “历险记”](https://mp.weixin.qq.com/s/oHGkoGzhMs-l8TX6t0831w),本篇是 InfoQ 对文章作者最新的采访稿。 + +1. 首先,更细致的讲述了决定引入 Swift 之前的各种考虑,以及在落地过程中流程和方法的摸索。 +2. 讨论了中国 Swift 生态落后于国外的原因,以及随着 Swift ABI 的稳定,对未来一两年国内生态进步的极大期许。 +3. 最后,谈了年度热点 SwiftUI 和 Flutter,以及移动跨平台技术的选择问题。 + +### 🐎 [滴滴正式发布开源客户端研发助手DoKit 3.0,新特性解读](https://mp.weixin.qq.com/s/cTze8_-0KBIHHh96aEcilg) + +[@红纸](https://github.com/nianran):[DoKit](https://github.com/didi/DoraemonKit)([DoraemonKit](https://github.com/didi/DoraemonKit)) 是滴滴开源的一款功能齐全的客户端研发助手。在最新发布的 3.0 版本中,新增了多项新功能: + +1. 接口 Mock:拦截 APP 的网络请求进行转发至 DoKit 平台,返回开发人员预先设定好的数据 +2. 健康体检:该功能开启后,DoKit 会在一定间隔时间内去记录 CPU、内存、FPS 等信息,与此同时会触发式收集网络、页面卡顿类数据。将此类数据上传到 DoKit 平台后可以进行图形化展示分析 +3. DBView:将我们的 APP 内数据库同步到 PC,在 PC 上完成的增删改查会同步到 APP 的数据库内 +4. 函数耗时:采用 **Hook objc_msgSend** 的方式,来记录每个函数的耗时,并已树形结构输出 + +如果你的 APP 还没有合适的 Debug 工具集合,DoKit 值得一试。详细文档请查阅 [DoKit 官方文档](http://xingyun.xiaojukeji.com/docs/dokit/#/intro)。 + +### 🐢 [Flutter Platform Channel 使用与源码分析](https://juejin.im/post/5e78989cf265da575c16e75c) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):日常的 Flutter 开发中,如果你想和 Native 层交互,那么 Platform Channel 是必经之路,提供方便之余我们也好奇其实现原理,底层是如何操作的,本文多个纬度深度剖析 Platform Channel ,其中源码分析更是抽丝剥茧,从更深的层次带你全方位了解 Platform Channel 。 + +### 🐢 [在 ARC 下对非 ObjC 类型的指针进行操作的编译器陷阱](https://mp.weixin.qq.com/s/SE5vpD733SQw9_yc1JN_TQ) + +[@kyo](https://github.com/KyoLi):在 MRC(手动管理内存) 时代,内存管理是一件很重要的事,稍有不慎,就可能造成内存泄漏甚至 crash 。如果开启了 ARC 模式,在 backend 阶段会通过几个 ObjcARC Pass 插入基于引用计数的内存管理语句,从而使我们不必再去手动 `retain` 或者 `release` 对象,而且,ARC 下的内存管理常常会比我们手动管理得更好,内存泄漏更少。但 ARC 也并不是完全不会出错,如果某些隐式操作逃过了 ObjCARC Pass 的“火眼”,可能会生成不配对的 RC 语句,从而导致运行时异常。本文介绍了两种可能引发 ARC 异常的情况并分析了原理,也可以让我们更深入了解 ARC 的底层原理。 + +## 代码 + +### 🐕 [SourceKitForSafari](https://github.com/kishikawakatsumi/SourceKitForSafari) + +[@莲叔](http://aaaron7.github.io/):相信对于绝大多数开发同学来说,在选择把一个 github repo clone 到本地之前,都会在页面上先浏览一下代码,看一下是否能够大概满足自己的要求。但在网页上看代码普遍是比较痛苦的,SouceKit for Safari 就是解决这个痛点的一个插件,它实现了在浏览器的环境中实现一些基本的 IDE 功能,比如跳转到定义,查看文档以及查看变量定义等功能。配合 Octotree 插件(github 的文件列表插件),相信可以极大的提升 github 的使用体验。我已经迫不及待想要尝试一下了。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#108-2020.04.06.md b/Reports/2020/#108-2020.04.06.md new file mode 100644 index 000000000..dd8ed2e88 --- /dev/null +++ b/Reports/2020/#108-2020.04.06.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #108 | 2020.04.06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [通用购买现可包含 Mac App](https://developer.apple.com/cn/news/?id=03232020b&from=timeline&isappinstalled=0) + +[@水水](https://www.xuyanlan.com):现在,可以在通用购买中包含 app 的 macOS 版本,让用户只需购买一次,即可在 iOS、iPadOS、macOS、watchOS 和 Apple tvOS 上使用您的 app 和 App 内购买项目。为此着手准备,只需在 Xcode 中为您跨平台的 app 绑定相同的 bundle ID,并在 App Store Connect 中为通用购买设置好 app 记录。 + +## 新手推荐 + +### 🐢 [字符串比较中 NSNumericSearch 选项的工作原理](https://blog.harrisonxi.com/2019/02/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%AF%94%E8%BE%83%E4%B8%ADnsnumericsearch%E9%80%89%E9%A1%B9%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86) + +[@极速男孩](https://github.com/ztlyyznf001):比较版本号是我们开发中常见的需求,在字符串中我们经常会使用到 NSNumericSearch 对当中的数字进行比较,本文主要介绍了在各种不同情况下字符串通过 NSNumericSearch 比较的结果和从中得到原理。 + +## 文章 + +### 🌟 🐢 [Apple 操作系统可执行文件 Mach-O](https://ming1016.github.io/2020/03/29/apple-system-executable-file-macho/) + +[@J_Knight_](https://www.weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1/):Mach-O 在 Mach 内核的操作系统(macOS,iPadOS 和 iOS)中使用。学习它有助于理解程序是如何加载到这些系统和如何执行的,也有助于了解符号查找,函数调用堆栈符号化等等。本文结合代码,从 Mach-O 的构建方法,如何组织,如何工作,导入和导出的方法,对其做了比较详细的介绍。对于想学习 Mach-O 的读者来说,本文是一篇可以初步了解 Mach-O 的文章。 + +### 🌟 🐎 [字节跳动为什么选用 Flutter:并非跨平台终极之选,但它可能是不一样的未来](https://mp.weixin.qq.com/s/biRl-SCXro3U_96X9N2UBg) + +[@looping](https://github.com/looping):本文是 InfoQ 对字节跳动移动平台部 Flutter 架构师、知名博客 Gityuan 博主袁辉辉采访内容的整理,主要有分析了大家看好 Flutter 以及字节跳动选择 Flutter 的原因,还分享了公司内部在 Flutter 实践和推广过程中遇到的一些问题和阻力,最后也提出了他个人对跨平台技术的一些看法,这些都可以作为我们在做跨平台技术选型时的参考。 + +### 🐕 [A Look Into ArgumentParser](https://www.fivestars.blog/code/a-look-into-argument-parser.html?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=email&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B448) + +[@xiaofei86](https://weibo.com/xuyafei86):最近,苹果开源了由 Swift 实现的用于解析命令行参数的 [Swift Argument Parser](https://github.com/apple/swift-argument-parser)。在了解基本使用后,本文将带你深入探究 ArgumentParser 的内部实现,了解 ParsableCommand 协议和四个属性包装器背后隐藏着的复杂性。通过本文,你可以了解到 Swift 团队为实现优雅接口所付出的巨大努力,并希望你也可以欣赏这些优雅设计。 + +### 🐕 [iOS 端矢量图解决方案汇总(SVG 篇)](https://dreampiggy.com/2020/03/30/iOS端矢量图解决方案汇总(SVG篇)/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SVG 作为目前在 Web 上最流行的矢量格式,在 iOS 端的支持可以说是一言难尽。文中列举了几个目前已有的实现,可以说是各有优劣,具体使用何种方案还要根据自己的实际需要来选择。 + +### 🐕 [全网最详!暗黑模式在 Trip.com App 的实践](https://mp.weixin.qq.com/s/oU13hMQ2MJIYZoJWC74EMQ) + +[@红纸](https://github.com/nianran):本文是携程团队对于适配 **Dark Mode** 的实践总结,从视觉设计、设计方案(颜色映射及插画设计)等角度来阐述 **Dark** 跟 **Light** 在设计上的区别。最后配套有 iOS/Android/RN 三端的适配方案可供开发大大们进行参考。 + +往期周报中的两则相关内容推荐给大家:Office 开发组件 [DarkModeKit](https://github.com/microsoft/DarkModeKit) 和开发适配相关的 [How To Adopt Dark Mode In Your iOS App 🌙](https://www.fivestars.blog/code/ios-dark-mode-how-to.html) + +### 🐕 [Kotlin/Native and Xcode integration insights](https://medium.com/@mateuszmatrejek/kotlin-native-and-xcode-integration-insights-357b8747a1c8) + +[@老峰](https://github.com/gesantung):Kotlin/Native 是一种基于 LLVM 将 Kotlin 代码编译成本地二进制文件的技术,它可以在没有虚拟机的情况下运行。本文介绍了在 Xcode 集成 Kotlin/Native 工具集实现,从而实现 iOS 调用 Kotlin 公共业务代码库的具体操作过程,感兴趣的读者可以进一步了解。 + +### 🐕 [静态插桩的方式来实现 Hook Method](https://juejin.im/post/5e74bc39f265da576a57a293) + +[@Parsifal](https://github.com/ParsifalC):[99 期周报](https://juejin.im/post/5e1c04626fb9a03013306396#heading-5)推荐过美团欧阳大哥关于「静态拦截 iOS 对象方法调用的简易实现」一文,该文从另一个新颖的角度“静态库会将自己引用的外部符号单独保存在一张表中”出发,提出了 Method Hook 的新思路。本篇文章则基于这个理论完成了实践。文中作者总结了几点实践过程中遇到的问题,包括对静态库和目标文件的理解、Python 实现的坑等方面,值得我们借鉴。 + +> 本文由作者 [maniackk](https://github.com/maniackk) 自荐。 + +## 工具 + +### [Echo](https://github.com/didi/echo) + +[@EyreFree](https://github.com/EyreFree):Echo 是一款简单易用、插件化易扩展、大屏显示和操作的客户端研发调试工具,可以实时查看 App 各类数据(网络请求、日志、埋点等),也可以无须改动代码快速修改预览 App 的效果。相比其他 Debug 工具,它还具有以下优势: + +- 大屏幕:显示效果更优,不影响原 App 的用户操作,使用体验更好; +- 扩展性:内置通用模板及插件机制可快速扩展新功能,只需关注业务数据即可,降低新功能扩展成本; +- 聚合型:收敛客户端研发调试工具为一体,提高 RD 和 QA 同学的效率; +- 缓存机制:插件自带缓存机制,出现问题时即使脱离大屏,后续也可快速连接排查定位。 + +## 代码 + +### 🐎 [TextureSwiftSupport](https://github.com/TextureCommunity/TextureSwiftSupport) + +[@JimQ](https://github.com/waz0820):脸书大厂出品的 [Texture](https://github.com/TextureGroup/Texture) 采用者众多,SwiftUI 风格的 Texture 现在可以尝试了(非官方),基于 Swift 为 SwiftUI 引入的新特性 [Function builders](https://github.com/apple/swift-evolution/blob/9992cf3c11c2d5e0ea20bee98657d93902d5b174/proposals/XXXX-function-builders.md)。 + +## 音视频 + +### [道长三十:工科生如何去美国读研?](https://talk.swift.gg/62?from=timeline&isappinstalled=0) + +[@张嘉夫](https://github.com/josephchang10):ggtalk 这期的嘉宾是目前在美国工作的[故胤道长](https://www.weibo.com/soapyigu?refer_flag=1005055013_),总节目时长接近五个小时,按照内容分为三期。第一期道长主要和大家聊聊在 CMU 读研的过程,从准备、申请到入学之后的各种经历。 + +### [ATP 371: Chris Lattner 访谈](https://atp.fm/episodes/371) + +Chris Lattner 大神再一次作客 ATP,这次聊的话题有: + +- Swift for TensorFlow +- MLIR(本期的标题来源) +- Swift 统治世界 +- SwiftUI & Combine +- Swift ABI Stability + +这期节目跟上次一样也是非常欢乐,聊 MLIR 之前 Chris 还问主持人这个话题对他来说会不会太过极客?🤣 + +> There's another project called MLIR. Have you heard of anything about that? Do you want to talk about that? Or is that too geeky for John Siracusa? + +总的来说这期节目非常推荐收听,另外没有听过上次访谈的读者,也直接可以看道长整理的文字版 [Chris Lattner 访谈录](https://zhuanlan.zhihu.com/p/31189342)。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#109-2020.04.13.md b/Reports/2020/#109-2020.04.13.md new file mode 100644 index 000000000..4037ba652 --- /dev/null +++ b/Reports/2020/#109-2020.04.13.md @@ -0,0 +1,78 @@ +# 老司机 iOS 周报 #109 | 2020.04.13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Using Closures to initialize properties in Swift](https://www.donnywals.com/using-closures-to-initialize-properties-in-swift/) + +[@anotheren](https://github.com/anotheren):本文介绍了如何使用闭包来初始化存储属性,特别是使用 `lazy var` 来延迟初始化,你甚至可以在闭包中“安全”地使用 `self`。闭包将原本分散在程序各处的代码合理地组合到一起,推荐尝试。 + +[@zvving](https://twitter.com/zvving):值得注意的是,`lazy var` 这种方式并不能做到 thread-safe,使用时有必要考虑到这点。更多的 Swift 资源竞争相关知识可以再阅读下 92 期周报推荐的 [Thread Sanitizer explained: Data Races in Swift](https://github.com/SwiftOldDriver/iOS-Weekly/blob/f457fc59fdbc7fa4df4325bd30a1dbffa8f9626a/Reports/2019/%2392-2019.11.25.md#-thread-sanitizer-explained-data-races-in-swift) 一文。 + +### 🐎 [tintColor](https://sarunw.com/posts/tintcolor/) + +[@水水](https://www.xuyanlan.com): tintColor 是 UIView 中返回颜色的变量,如果未定义这个颜色,则返回系统的默认色(亮蓝色),就比如你不定义一个按钮的文字颜色,则你会看到默认的蓝色。并且通过将 tintColor 设置到视图控制器的视图上,您可以轻松更改应用程序的外观。更多关于 tintColor 的使用方法具体可以查看文章~ + +## 文章 + +### 🌟 🐢 [揭秘 APM iOS SDK 的核心技术](https://mp.weixin.qq.com/s/oChCjP_S1NVsBeh_sui4PQ) + +[@J_Knight_](https://github.com/knightsj):本文参考了听云、OneAPM 和 Firebase Performance Monitoring 等 APM SDK,并结合代码分享了几项 APM 核心技术的实现: + +1. 页面渲染时间监控 +2. 启动时间监控 +3. 网络监控 + 1. NSURLSession(NSURLSessionDataTask,NSURLSessionUploadTask,NSURLSessionDownloadTask 的 所有API) + 2. 响应时间(发送请求开始到服务端的相应到达客户端的时间间隔) + +具体的实现方式可以参考文中的详细代码,对我们自己实现这些监控项目会有帮助。 + +### 🐕 [看完这一篇,再也不用担心 Git 的“黑魔法”](https://mp.weixin.qq.com/s/wWgapBH1YRxLuf2CuZhKBw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):标题起的有点魔幻,其实本文算是对 Git 的一些基本命令做了一个粗略的概述,目的是抛砖引玉,让大家对 Git 有一个基本的认识。大家可以作为参考以便使用时查阅。 + +### 🐕 [Understanding Swift's ObjectIdentifier](https://swiftrocks.com/understanding-swifts-objectidentifier) + +[@Damonwong](https://github.com/Damonvvong):ObjectIdentifier 是 Swift 中一个比较冷门的类型。这里的冷门并不是指作用不大,而是日常使用不多。在 Swift 内部,ObjectIdentifier 承载着重要的作用,是运算符 === 实现的根本。也可以作为 metatypes 相互比较的工具。(默认的 metatypes 不遵循 Hashable)。这篇文章主要是稍微简单的介绍了一下 ObjectIdentifier 是什么,ObjectIdentifier 的原理以及如何使用 ObjectIdentifier 来提高我们 App 的性能。 + +### 🐕 [Configuring the Main Thread Checker](https://bryce.co/main-thread-checker-configuration/) + +[@老峰](https://github.com/GesanTung):本文是作者关于 Main Thread Checker 系列的第一篇,详细讲解了 Main Thread Checker 配置项如 MTC_MAX_HIT_COUNT(Main Thread Checker 停止之前,从后台线程调用给定方法的次数)等,另一篇着重讲 Main Thread Checker 实现原理,感兴趣的读者可以进一步研究。 + +### 🐎 [探索?WhatsApp应用名称中的隐藏符号](https://mp.weixin.qq.com/s/192iBBMtOmss4Yo-_3x_Fw) + +[@五子棋](https://github.com/satanwoo):本文是作者在一次偶然研究过程中发现一种特殊的字符,可以确保在复杂的从右至左的过程中保持名称显示的正确性。很简短的一篇文章,但是却很有趣,建议一读。 + +## 代码 + +### [Thrio](https://github.com/hellobike/thrio) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):flutter_boost 已经是 Flutter 混合开发体系一个有着举足轻重的框架了,但目前社区里似乎除了 flutter_boost 并没有其他可替代方案,最近哈啰出行团队开源了自家的 Flutter 混合开发框架 [Thrio](https://github.com/hellobike/thrio),更加轻量,入侵性更小,也不失为一个不错的选择。搭配[这篇](https://mp.weixin.qq.com/s/6PMjjF7Jqx1WnJWWRpRRyA)一起食用更佳。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#110-2020.04.20.md b/Reports/2020/#110-2020.04.20.md new file mode 100644 index 000000000..db7aa9bf1 --- /dev/null +++ b/Reports/2020/#110-2020.04.20.md @@ -0,0 +1,168 @@ +# 老司机 iOS 周报 #110 | 2020.04.20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub is now free for teams - The GitHub Blog](https://github.blog/2020-04-14-github-is-now-free-for-teams/?from=timeline&isappinstalled=0) + +GitHub CEO Nat Friedman 宣布已面向全体 GitHub 用户和团队提供不限制协作人数的私有仓库,并宣称 GitHub 的全部核心功能现已对所有人免费提供。 + +去年 GitHub 宣布私有仓库免费,同时提供 3 个免费协作人数的名额,如果需要更多的协作人数,则需要付费。但从现在开始,任何团队都可以免费使用不限制协作人数的私有仓库。 + +## 新手推荐 + +### 🐢 [为什么使用汇编可以 Hook objc_msgSend(上)- 汇编基础](https://mp.weixin.qq.com/s/ty8Pt56EQ3sKiIfYypZ1fA) + +[@J_Knight_](https://www.weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1/):本文讲解了 ARM64 的汇编基础知识,其中包括: +- iOS 的内存分区及栈区; +- ARM64 中的寄存器及其含义; +- 开辟和释放栈空间以及什么是"爆栈"; +- 方法调用时的栈空间表现; +- 函数栈基于寄存器的回溯思路方案; +- stp 命令解释; + +通过学习本文的这些知识可以为学习 Hook 的汇编方案做准备,而且对于想学习汇编的读者可以作为汇编的入门知识来学习。 + +## 文章 + +### 🐢[Contact Tracing](https://nshipster.com/contact-tracing/) + +[@享耳先森](https://github.com/iblacksun):为应对 COVID-19,苹果和谷歌宣布将在未来几个月内部署联系人追踪功能,声明中两家公司分享了这一技术的规范草案。在这篇文章中,[Matt](https://nshipster.com/authors/mattt/) 介绍了是苹果公司提出的 ContactTracing 框架,简单来说:ContactTracing 会为设备生成随机代码,利用蓝牙技术进行广播并记录所有近期接触过的设备。当某个用户被确诊了,卫生机构将请求得到 Ta 的随机码并进行登记,设备会间隔的向卫生机构进行比对,万一与名单中的设备接触过则提醒用户尽早需求医治。 + +### 🐕 [Why iOS Developers Feel Stuck In Their Careers & What To Do](https://medium.com/essential-developer-ios/why-ios-developers-feel-stuck-in-their-careers-what-to-do-d800a50470a2) + +[@莲叔](http://aaaron7.github.io/):看这个标题就知道这并不是一个技术文章。iOS 从出现到现在已经超过 10 年时间,已经并不算一门很新的技术了。同样的,iOS 工程师们也逐渐从新手到了老手,当然,也有一部分只是成了工作很多年的新手。但不管是谁,iOS 领域的同行似乎都持续在焦虑之中,从 16 年开始的创业浪潮退烧导致大量创业公司关门带来的移动就业萎缩,到现在的大数据时代,作为前端、客户端工程师所能为业务创造的价值似乎相对有限。作为结果,“iOS 没人要了”似乎一直是笼罩在大家头上的一片乌云。 + +从这篇文章来看,似乎国外的 iOS 同行也或多或少在面临相同的问题,感觉到了瓶颈。文章有两个核心观点: +1. 焦虑的本质是急功近利,对于获得回报所投入的时间不够实事求是,我们应该要关注 long term success,即短期会让你比较痛苦的方向,而不要醉心于 short term success,能够给你一些立竿见影的成就感那种。 其实也就是延迟满足。 +2. 目前的就业市场反应, 软技能(Leadership、情商、沟通能力等)和技术能力本身同样重要。 + +其实观点不是新观点,但能 serious 的拿出来讨论,对于同行们肯定是好处,能够让大家更加重视这个问题。这里提一点,很多软技能:如 leadership,大家可能会觉得我不当 leader 是不是就不用 care,事实上不是,即便不带人工程师也可以通过体现 leadership 去正面的影响自己的合作方、客户和老板和自己的看法和态度,形成正向的循环。文章里面还有更多的相关讨论,有兴趣的同学可以看看。 + + +### 🐢 [iOS 优化篇 - 启动优化之 Clang 插桩实现二进制重排](https://juejin.im/post/5e97c3c751882573b86f9d00) + +[@looping](https://github.com/looping):本文首先讲述了二进制重排的基本原理,然后尝试 clang 插桩(编译期静态插桩)的方式来解决抖音团队遗留下来的 [基于静态扫描+运行时 trace 的二进制重排方案不能进行 100% 的符号覆盖问题](https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q),并通过实际工程来探索实现了启动时期所需的方法符号全覆盖的二进制重排方案。对通过二进制重排来优化应用启动感兴趣的同学可以好好学习研究一番了。 + +### [一个易迁移、兼容性高的 Flutter 富文本方案](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247485159&idx=1&sn=76d1d0d4603a5a2ae0dfaa037cdb22c6&chksm=fd54d2f6ca235be009b651e8ad3efa1ec8fa3fa8dc6331cde86afb395388168e1bebf3455d87&token=761182588&lang=zh_CN#rd) + +[@老驴](https://www.weibo.com/6090610445):闲鱼团队不愧是最早实践 Flutter 的,踩了无数的坑,也总结了无数经验。本文就是闲鱼团队根据自己的需求,对 Flutter 中富文本的做了一套易迁移高兼容的方案。富本文也一直是跨平台方案的难点,有富文本方面需求的同学不妨来学习一下。 + +### [细化 Flutter List 内存回收,解决大 Cell 问题](https://mp.weixin.qq.com/s/Mcfj3lRR8VJACxsjjIiVsA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):何谓大 Cell 问题?在基于 Native List 的渲染方案中,都会遇到大 Cell 问题。这个问题最直接的结果就是:导致内存过高。在 Flutter 里同样有这个问题,本质原因都是因为 List 进行回收的单位是 Cell,而不是 Cell 中的图片。本文详细介绍了手淘团队通过细化 Flutter List 的回收能力,在 Cell 回收的基础上,可以做到以图片为单位进行回收。 + +### [FluentDarkModeKit 微软的暗黑模式适配框架](https://juejin.im/post/5e82a0d0e51d4546b70d3c9e) + +[@红纸](https://github.com/nianran):FluentDarkModeKit 原名 DarkModeKit,本文是该库的源码分析文章。开发者通过方法设置 Light 跟 Dark 对应图片跟颜色。DarkMode 会使用中间类(DMDynamicImageProxy/DMDynamicColorProxy)将其存储,在使用过程中,将所有事件转发到对应模式下颜色或者图片。 + +> 推荐人:[ztlyyznf001](https://github.com/ztlyyznf001) + +### 🐕 [Swift Logging](https://nshipster.com/swift-log/) + +[@四娘](https://kemchenj.github.io/):当 App 或者服务上线之后,出了问题最有效的 Debug 手段之一就是查看日志,那么该如何构建一套可靠的日志系统呢?这周 NSHisper 带来的是 swift-log 的介绍,推荐感兴趣的同学阅读。 + +### 🐕 [用Dart语言来写异步程序](https://mp.weixin.qq.com/s/wkNW6HrQmoHla--xrAPbBQ) + +[@老峰](https://github.com/gesantung):在 iOS 开发中用过 Promise 对 async await 异步编程概念并不陌生,本文作者详细介绍了 Dart 中的 Main Queue, Event Queue、Microtask Queue 异步执行顺序及相互关系。 + +### 🐕 [iOS 浅谈GPU及“App渲染流程”](https://juejin.im/post/5e80b49751882573be11b138) + +[@邦Ben](https://weibo.com/linwenbang):该文大致概括了 GPU 的工作原理,以及对比了 iOS,WebView,ReactNative,Flutter 的渲染流程,但是都比较概括,如果感兴趣的可以另外找文章继续深入了解。 + +### 🐕 [Flutter 究竟是如何渲染的?](https://juejin.im/post/5e931cd0e51d4546f5790806) + +[@AidenRao](https://weibo.com/AidenRao):本文从原理层面讲解 Flutter 渲染架构、渲染策略及渲染工作流水线。文章简单易懂,配合作者的另一篇文章 [iOS 浅谈GPU及“App渲染流程”](https://www.jianshu.com/p/8b0572f2c23a) 阅读,能快速的对 Flutter 的渲染原理有一定了解。 + +## 工具 + +### 🐕 [iOS线程数量监控工具](https://github.com/maniackk/KKThreadMonitor) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):一个用来监控整个 App 的线程数量和瞬间新建的线程数量的工具,当数量不合理的时候,就打印所有的线程堆栈,便于分析造成的原因。可参考阅读对应的[博客](https://juejin.im/post/5e92a113e51d4547134bdadb),文中详细介绍了开发这个工具的核心逻辑。 + +### 🐕 [DocTest:将单元测试代码置于注释中](https://github.com/SwiftDocOrg/DocTest) + +[@EyreFree](https://github.com/EyreFree):DocTest 提供了一种在文档注释中添加 Swift 代码示例并和预期结果的方法,并且可以自动测试,就像单元测试一样。DocTest 通过与 Swift REPL(Read Eval Print Loop) 交互来实现测试代码的执行,依靠标准输入传递每个代码语句,并通过标准输出或标准错误读取其结果。示例如下: + +```swift +/** + Returns the sum of two integers. + + ```swift doctest + add(1, 1) // => Int = 2 + ``` +*/ +func add(_ a: Int, _ b: Int) -> Int { ... } +``` + +### 🐎 [swift-outdated](https://github.com/kiliankoe/swift-outdated) +[@kemchenj](https://github.com/kemchenj):在使用 Cocoapods 的时候我们每隔一段时间就会用 `pod outdated` 来查看哪些依赖可以升级了,但 Swift Package Manager 却没有这个功能,所以社区里就有人自己写了一个: + +```shell +$ swift outdated + +----------------------- ----------------- --------- -------- + Name Requirement Current Latest +----------------------- ----------------- --------- -------- + version 2.0.0..<3.0.0 2.0.0 2.0.0 + files 4.0.0..<4.1.0 ⬆️ 4.0.2 ⬆️ 4.1.1 + shellout 2.3.0..<3.0.0 2.3.0 2.3.0 +----------------------- ----------------- --------- -------- +``` + +## 代码 + +### 🐎 [MPITextKit](https://github.com/meitu/MPITextKit) +文本控件是我们日常开发使用最多的控件之一。系统的 UILabel 由于是在主线程渲染,在一些情况下不能满足性能要求,所以后续也有 YYText 这样的框架出现。不过由于 YYText 已经有一段时间没有维护了,这里推荐它的一个代替方案,MPITextKit 。MPITextKit 具有下面这些特性: + +- 兼容 UILabel API +- 支持 AutoLayout +- 基于系统原生 TextKit, 所以能够使用所有系统文本属性,例如:NSAttachmentAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName 等等 +- 附件支持 UIImage、UIView、CALayer +- 支持截断文本设置 +- 支持异步渲染 +- 支持排斥路径 +- 支持文本选中 +- 支持文本布局 debug + +### [SwiftyBeaver](https://github.com/SwiftyBeaver/SwiftyBeaver) + +[@张嘉夫](https://github.com/josephchang10):便捷、安全、多彩、灵活、轻量的日志输出类,支持 Swift 3, 4 & 5。在开发阶段支持 Xcode 控制台或直接输出 log 文件,发布后可以将日志加密并输出到 SwiftyBeaver 平台。此外,SwiftyBeaver 还提供了一个免费 [Mac App](https://swiftybeaver.com/),用来浏览、搜索和过滤日志。 + +## 内推 + +### 杭州 - 阿里巴巴淘系技术基础平台:高级无线工程师(P6)/ 无线专家 (P7) + +- iOS架构、底层方向 +- iPad、新特性方向 +- 业务开发和架构方向(iOS/Adnroid) + +感兴趣的欢迎加微信了解具体要求。VX: damonwong2。也可以直接发送简历到 coderonevv@gmail.com + +### 老司机推荐 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#111-2020.04.27.md b/Reports/2020/#111-2020.04.27.md new file mode 100644 index 000000000..dddfdd9de --- /dev/null +++ b/Reports/2020/#111-2020.04.27.md @@ -0,0 +1,164 @@ +# 老司机 iOS 周报 #111 | 2020-04-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🚧 [Apple 正在网页版的 iWork 里尝试使用 ObjC + WebAssembly 实现部分功能](https://mjtsai.com/blog/2020/04/17/iwork-10-in-webassembly/) + +[@looping](https://github.com/looping):苹果开发人员在其 [Twitter](https://twitter.com/lrz/status/1250455566213877760) 上透露,最近上线的网页版 iWork 10.0 里,部分功能是从原生 App 的 C++ / ObjC 代码改为使用 WebAssembly 编译后用到网页上的。虽然目前并没有找到更多资料,但也是可以感觉出苹果在跨平台开发上的一些新的尝试和相关思路。 + +## 新手推荐 + +### 🐎 [Flutter 技能篇: debug 看程序启动 | 开发者说·DTalk](https://mp.weixin.qq.com/s/hqCJglkdZi6W6fK1r5tZeg) + +[@邦Ben](https://weibo.com/linwenbang):本文适合刚接触 AndroidStudio 的 flutter 新手来看,详细说明了 debug 调试的一些基础功能,以一个简单的报错例子一路演示,自行跟着操作一遍,也可以顺便了解一下渲染流程。如果你使用 vscode 的话,也可以类比一下,都差不多。 + +flutter 渲染流程参考文章: +[Flutter渲染机制—UI线程](http://gityuan.com/2019/06/15/flutter_ui_draw/) + +## 文章 + +### 🐎 [如何断点到函数的return](https://mp.weixin.qq.com/s?__biz=MzUxMTkwNDg0OQ==&mid=2247484659&idx=1&sn=775d9f018330360a4aeda18709f5869e&chksm=f96dd9cdce1a50dbf0d755c041d3ecd63c208c4817f69634acafb38e0e1b383cdea12931c943&mpshare=1&scene=1&srcid=&sharer_sharetime=1587606656735&sharer_shareid=ba950e64c9e1fd56aad199c82bacc05d#rd) +在开发断点调试中,假如有这样一个场景:有一个很长的函数,里面有很多个 return ,而我们想快速断点到执行的是哪一个 return ,这时候怎么做比较好呢?单步执行或 return 处挨个断点?这两个方法虽然可以生效,但是却有些麻烦。本文介绍了更方便的方法,通过 LLDB 去快速定位,对我们日常开发而言,是一个很实用的小技巧。 + +### 🐎 [Testing push notifications on the iOS simulator](https://www.avanderlee.com/workflow/testing-push-notifications-ios-simulator/) + +[@张嘉夫](https://github.com/josephchang10):如果能够在 iOS 模拟器中测试推送通知,会让远程推送功能的开发更加容易,通常需要迭代许多次才能验证实现的功能是否达到预期。在 Xcode 11.4 之前,我们只能用 NWPusher 等第三方应用和真实的设备才能测试 Rich Notifications 等功能,虽然效果也不错,但迭代速度还是不如使用 iOS 模拟器。从 Xcode 11.4 开始,我们只要使用一条新增加的 simctl 命令就能在模拟器中测试推送通知,这篇文章会为你介绍实现的具体细节,包括使用三种不同的方式来触发远程推送通知。 + + +### 🐕 [Optionals in Swift Objective-C Interoperability](https://fabiancanas.com/blog/2020/1/9/swift-undefined-behavior.html) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文介绍了在 Objective-C 定义的 nonnull 属性(对象),在做 Swift 桥接后的使用上会产生的问题。作者举了 NSCalendar 和 NSArray 等例子并结合了 ``_unconditionallyBridgeFromObjectiveC`` 的方法的源码进行了讲解。有类似做法的读者可以阅读本文来检验一下自己在使用上是否会出现问题。 + +### 🐕 [SE-0281: @main: Type-Based Program Entry Points](https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md) + +[@四娘](https://kemchenj.github.io):在 ArgumentParser 发布了之后,大家也想要类似于 @UIApplicationMain 这样的注解去声明入口函数,并且 windows 平台支持多种入口函数类型,此时 main.swift 就无法很好地满足使用。 + +SE-0281 就是为了解决这些问题而出现的,提案的内容也非常简单,可以使用 @main 注解声明入口函数: + +```swift +@main +struct MyProgram: ApplicationRoot { + static func main() { ... } +} +``` + +这个提案已经通过并且完成了实现,预计将会在 Swift 5.3 里发布。 + +### 🐕 [复杂业务如何保证Flutter的高性能高流畅度?](https://mp.weixin.qq.com/s/iXFa9C68gUHr7PL8NHnZUA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):高性能高流畅度一直是 Flutter 团队宣传的一大亮点, 但是随着业务的复杂度持续上升,那么有一个矛盾的问题出现了:这类页面的性能可能还不如 Native 的表现!这是为什么?是我们的姿势不对?[本文](https://mp.weixin.qq.com/s/iXFa9C68gUHr7PL8NHnZUA)由咸鱼团队,他们也遇到了同样的困惑,并抽丝剥茧,从原理层面带你逐步定位并解决这类问题。 + +### 🐢 Xcode Build Time Optimization + +- [Xcode Build Time Optimization 1](https://www.onswiftwings.com/posts/build-time-optimization-part1) +- [Xcode Build Time Optimization 2](https://www.onswiftwings.com/posts/build-time-optimization-part2) + +[@JimQ](https://github.com/waz0820):本“Xcode 优化构建时间”系列分为上下两篇,上篇讲指标衡量,下篇讲优化措施。 + +- 指标衡量: + - 衡量什么 + - 干净构建的时间 + - 增量构建的时间 + - 衡量构建时间 + - Xcode 构建报告 + - Xcode 构建报告摘要 + - 类型检查警告,为耗时超过指定检查时间的任何函数或表达式生成警告 + - 编译器诊断选项,编辑器内置了多种诊断选项,可用于分析构建 + - 测量 Targets 的构建时间,使用 [xcode-build-times](https://github.com/PaulTaykalo/xcode-build-times-rendering) 命令工具来了解要构建或可以并行构建的 Targets + - 使用 [XCLogParser](https://github.com/spotify/XCLogParser) 汇总指标,它是 Xcode 生成的 xcactivitylog 的日志解析器,可提供有关项目中每个模块和文件的构建时间、警告、错误和单元测试结果的大量见解,且可以 HTML 的形式可视化输出 + - 自动化 +- 优化措施: + - 构建设置优化 + - 源代码改进 + - 查找编译缓慢的代码,可使用工具 [Build Time Analyzer](https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode) + - 减少重建工作 + - 在单独的文件中定义实体 + - 正确使用访问修饰符 + - 删除未使用的代码 + - 预构建依赖,使用预构建的动态框架和库来提高构建效率 + - 代码 vs Xibs/Storyboards,构建时间的差异并不明显 + - 项目增强 + - 改善运行脚本阶段 + - 采用模块化架构,以并行构建 Targets + - 第三方构建系统 + +### 🐕 [Cross-Pollination](https://nshipster.com/cross-pollination/) +[@AidenRao](https://weibo.com/AidenRao):有很多好想法,从被批评到整合进苹果产品中,如: +- Windows 上的应用程序切换 ⌥ ⇥(macOS 上 ⌘ ⇥) +- Android 的黑暗模式(已在 iOS 13 中添加) +- Java 和其他语言的泛型(Swift 的核心功能, 后来添加到 Objective-C) +- JSX 风格的 dsl 声明性 UI(SwiftUI 中的函数构建器) + +但在苹果公司这么做之前,为什么我们认为这些好主意是异端的?如果你将竞争技术的存在,视为善恶斗争,自豪的去宣布”Pure Swift”或“100% 无 JavaScript”时,如果不是通过一系列的权衡来评估出的解决方案,那只是一种效忠,这种效忠,并不能让你很好的完成所有的工作。 + +## 工具 + +### [Debugging superpowers with FLEX](https://alejandromp.com/blog/debugging-superpowers-with-flex/) + +[@享耳先森](https://github.com/iblacksun):FLEX 是 Flipboard 团队出品的 App 调试工具,在开发过程中集成 FLEX 可以监控网络请求、查看 UI 树、查看沙盒文件等,注意:FLEX 不能包含在 Release 环境中,否则审核可能被拒。 + +### [ResilientDecoding](https://github.com/airbnb/ResilientDecoding) + +[@极速男孩](https://github.com/ztlyyznf001):ResilientDecoding 是一个弹性的解码工具,他可以对可选,数组,字典或者符合本宝所提供的 ResilientRawRepresentable 协议的自定义类型类型进行解码。 + +### [啄木鸟 iOS 开发工具](https://github.com/alibaba/youku-sdk-tool-woodpecker) + +[@红纸](https://github.com/nianran):啄木鸟 iOS 开发工具是来自于优酷团队的 APP 内 Debug 工具集合,其包含了常见的 UI 检查、JSON 抓包、CPU 占用、Crash 监听等 17 项功能。能够不依赖电脑联调,直接获取运行时数据快速定位 Bug,提升开发效率。与其他开发工具不同,其多了方法监听跟 po 命令,运行期间能调用任意方法。 + +### [XcodeColorSense2](https://github.com/onmyway133/XcodeColorSense2) + +[@水水](https://www.xuyanlan.com):一个能在 Xcode 中直接预览16进制颜色值效果的 Xcode 插件。无需找其他方式查验颜色是否正确啦!安装和使用方式都很简单,有需要的读者可以试试哦~ + +### [X-SwiftFormat](https://github.com/ruiaureliano/X-SwiftFormat) + +[@EyreFree](https://github.com/EyreFree):Swift 代码格式化工具,可集成到到 Xcode 中使用,满足大部分常见的代码格式化需求,可通过 GUI 配置中心管理格式化规则,当然也可以直接编辑 `.swift-format`。可通过配置快捷键快速启用,很方便,值得一试。 + +### [Flr:一个出色的Flutter资源管理工具](https://juejin.im/post/5e514a76518825494f7df5f5) + +[@老驴](https://www.weibo.com/6090610445):Flr,读作 Flutter-R,是一个由网易严选智造团队研发的,用于管理 Flutter 资源的开发工具。Flr 可以帮助 Flutter 开发者在修改项目资源后,自动为资源添加声明到 pubspec.yaml 以及生成 r.g.dart 文件。Flr 还提供了三种不同的工具来满足各种需求,包括了 Android studio plugin, CLI 和 VSCode extension。有兴趣的同学可以看看,鉴于最近 Flutter 大火,即便不用学习一下源码也是不错的。 + +> 推荐人:[YorkFish](https://github.com/YK-Unit) + +## 代码 + +### 🐕 [Lasso - iOS architectural pattern and framework](https://github.com/ww-tech/lasso) +[@zvving](https://github.com/zvving):遵循 redux 思想的 iOS 架构实现。用 Screen 实现最小 redux 模块,通过 Flow 组合配置 Screens。整体实现简洁清晰,代码质量很高,是不错的架构学习资源,应用于实际项目可能过于理想化。 + +## 内推 + +### 杭州 - 阿里巴巴淘系技术基础平台:高级无线工程师(P6)/ 无线专家 (P7) + +- iOS架构、底层方向 +- iPad、新特性方向 +- 业务开发和架构方向(iOS/Adnroid) + +感兴趣的欢迎加微信了解具体要求。VX: damonwong2。也可以直接发送简历到 coderonevv@gmail.com + +### 老司机推荐 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#112-2020.05.11.md b/Reports/2020/#112-2020.05.11.md new file mode 100644 index 000000000..0fedfee2b --- /dev/null +++ b/Reports/2020/#112-2020.05.11.md @@ -0,0 +1,146 @@ +# 老司机 iOS 周报 #112 | 2020-05-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Apple 将于 6 月 22 日起召开虚拟全球开发者大会](https://www.apple.com.cn/newsroom/2020/05/apple-to-host-virtual-worldwide-developers-conference-beginning-june-22/) + +受今年新冠疫情的影响,早些时候苹果就已经宣布今年的 WWDC 会以线上形式继续进行,而现在正式官宣明确了时间为 6 月 22 日。这是第 31 届开发者大会,而今年的 WWDC 又是以全新的线上形式举行,相信也会带来全新的体验。 + +> 忘了 WWDC 19 讲了些啥?欢迎查收周报编辑们参与编辑的专题特辑 - [WWDC 19 内参](http://xiaozhuanlan.com/wwdc19)。 + +### [Flutter 1.17 发布](https://medium.com/flutter/announcing-flutter-1-17-4182d8af7f8e) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 2020 年的第一个稳定版本发布了🎉🎉🎉,这次的新版本主要以增强稳定和修复历史 Bug 为主。在 iOS 端支带来了 Metal 的支持,使得性能大幅提升,同时对 Flutter 的包体积做了不小的优化,新组件的增加等等。不想看英文的同学可以看[中文版](https://mp.weixin.qq.com/s/5O7I3irCU-xnX-kluTh93Q), 同样推荐一起发布的 [Dart-lang Release Note](https://medium.com/dartlang/announcing-dart-2-8-7750918db0a)。 + +## 文章 + +### 🌟 [一次关于 Swift 在 iOS 生态圈里的现状调研](https://mp.weixin.qq.com/s/Ib48PWpKJNALlNoL4lm4-g) + +> SketchK 的一篇数据调研笔记,可以帮助大家看清当前国内 iOS 开发形式。 + +总的来说,国外 Swift 社区活跃度已经比 Objective-C 高了,国内大厂也在推进,具备 Objective-C 与 Swift 混编能力,如果你还没上车,现在买票吧。 + +### 🌟 🐢 [百度小程序框架性能优化实践](https://mp.weixin.qq.com/s/F3kYYW5_Iu7ny0p3Rzp3Dw) + +在移动互联网时代,众多的跨平台、动态化方案,其本质都是在寻找 NA 和 H5 之间的平衡。从渲染层面上,可分为 NA 渲染(RN、Flutter 等),以及 H5 渲染(小程序)。在一个平台型的 APP 里,目前业界最广泛使用的方案就是小程序,因为它可以有效降低生产者和用户的使用成本。小程序作为 H5 渲染流派,灵活性已经被证实,所以性能一直是最受关注的技术点。本文介绍了百度小程序在性能优化方面的实践,从框架启动、小程序包下载、小程序包加载以及渲染等 4 个方面进行了全面的优化。 + +### 🌟 🐕 [我是如何让微博绿洲的启动速度提升30%的](https://mp.weixin.qq.com/s/SUHaGD1T2Vce4Ag-qgxtgg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):启动速度是 App 给用户的第一印象,对用户体验来说至关重要。本文主要讲述对微博绿洲 App 的启动优化并阐述优化原理,主要从以下两个方面入手: + +- 动态库转静态库, 优化了 dylib loading time +- 通过二进制重排,让启动需要的方法排列更紧凑,减少了 Page Fault 的次数 + +### 🐕 [Flutter 势头正盛 | 2020 春季速递](https://mp.weixin.qq.com/s/DS8lAkqtK_Qp37o8ISlthA) + +[@邦Ben](https://weibo.com/linwenbang):Flutter 如今已经发布了 1.17 稳定版本,迭代速度还挺不错的。该文大体介绍了一下目前的应用情况,例如:使用最多的国家前五是:印度、中国、美国、欧盟和巴西;在 Play Store 上 Flutter 应用约 5w 个。还介绍了亚洲以外的最大的数字银行 Nubank 选择了 Flutter 的原因(有视频)。有兴趣可以点进去了解了解。 + +### 🐎 [The big Facebook crash of 2020 and the problem of third-party SDK creep](https://rambo.codes/posts/2020-05-07-the-big-facebook-crash) + +[@张嘉夫](https://github.com/josephchang10):Facebook SDK 引发了大规模应用崩溃,原因是 Facebook 服务器向其 SDK 发送了错误的数据,并导致 SDK 中的代码崩溃,进一步导致运行该 SDK 的 app 终止运行。这篇文章提出了第三方 SDK 可能带来的问题,由于它们是在编译时链接的动态库,会让 Facebook、Google 等数据收集、挖掘公司对这些 app 拥有控制能力。Facebook 导致的应用崩溃问题就是该能力的体现,他们彷佛拥有了一个 “kill app 开关”。随后作者提出了两种技术解决方案,第一种方案是在不使用 Facebook SDK 的情况下实现 Facebook 登录,另一种方案则是将这种类型的 SDK 和主 app 的代码通过“沙盒”进行隔离。最后作者还提出了人为解决方案,例如限制市场部门向 app 添加第三方数据分析代码的权力。 + +### 🐕 [拆!对比详解 Flutter Widget 和 CSS,你关心的布局原理都在这儿了](https://mp.weixin.qq.com/s/ZjrcYN6Asq1RpdgTrCUbiw) + +[@looping](https://github.com/looping):本文对比了 Flutter Widget 和 CSS 布局原理的差异,客观地分析了两者的优缺点,并且对它俩的优势能否互补也做了进一步的探讨评估,同时还分享了实践过程中遇到的一些问题和解决方案,对这块技术感兴趣的同学可顺其思路好好研究一番。 + +### 🐕 [围观 GitHub 重磅推出的四大新功能](https://juejin.im/post/5eb4287a5188255fd54de601) + +[@红纸](https://github.com/nianran):近期 Github 推出了四项新功能,以帮助开发社区协同工作: + +- Codespaces: GitHub 中完整的开发环境,云编辑器 + 云托管的开发环境 +- GitHub Discussions: 开发者新的对话空间,issue 跟 PR 随时都可能会被关闭,但是 discussion 不会被关闭,可以用来维护 FAQ 或者协作文档 +- Code scanning and secret scanning: 利用 Code scanning 对每一次 **git push** 进行安全漏洞扫描,结果会直接体现在 PR 上。Secret scanning 可以监视私有仓库中的已知 secret 格式,并在发现它们时立即通知开发人员。 +- GitHub Private Instances: 这是一个面向企业客户的全新的、全托管选项,提供增强的安全性、合规性和策略功能。 + +### 🐕 [History of Auto Layout constraints](https://sarunw.com/posts/history-of-auto-layout-constraints/) + +[@EyreFree](https://github.com/EyreFree):本文介绍了 Auto Layout 自 iOS 6 引入后如何发展至今的过程,通过举例方式让读者直观感受到苹果如何一步步解决 Auto Layout 的约束代码冗长性问题。在您阅读完本文之后,您可能会考虑淘汰第三方布局库,并开始直接使用标准 API。 + +### 🐢 [一道 Block 面试题的深入挖掘](https://juejin.im/post/5eaa2a87e51d454db7436726) + +[@JimQ](https://github.com/waz0820):又到了复习 Block 源码(~~找工作~~)的时间,作者从一道 Block 面试题出发,深入源码为大家剖析 Block 存储域,Block 捕获的变量传递类型,__block 修饰过的变量传递类型及其在 Block 中的存储域变化,并结合 __weak 说明符,探讨如何解除循环引用,避免内存泄露。 + +### 🐕 [Realm.Object 与 NSObject 的转换中 swift 协议妙用的体现](https://mp.weixin.qq.com/s/zR9M9hewQjnVUyShOxJyHA) + +[@anotheren](https://github.com/anotheren):Realm 是一个跨平台的移动数据库引擎,在实际业务中,我们一般会把业务模型和 Realm 的存储模型分开。本文介绍了如何设计协议及其默认实现来快速完成 `NSObject` 到 `Realm Object` 的相互转换。对于还处在大量混编阶段的团队,这是一个不错的案例。 + +### 🐎 [如何快速列出 App 的所有 +load 方法](https://mp.weixin.qq.com/s/6O3G72-Pdx60zrvots5-3g) + +[@水水](https://www.xuyanlan.com):一个基于 lldb 的 breakpoint 命令快速列出 App 的所有 +load 方法的实用小技巧,大家可以收藏起来,万一要用到呢~ + +## 工具 + +### [opentrace-ios](https://github.com/opentrace-community/opentrace-ios) + +[@极速男孩](https://github.com/ztlyyznf001):opentrace-ios 是在 iOS 上实现[ BlueTrace 协议](https://bluetrace.io/)的一个开源 APP。BlueTrace 一开始是新加坡政府开发的一个便于公共卫生机构使用低功耗蓝牙对 COVID-19 的接触者进行追踪的工具,后来这个协议背影用到了全球。同样这个 APP 有安卓版本,具体可以查看[链接](https://github.com/opentrace-community/opentrace-android)。 + +## 代码 + +### 🌟 [TrampolineHook](https://github.com/SatanWoo/TrampolineHook) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):TrampolineHook 是一个可以替换和拦截目标函数的框架。它可以用来查看任意函数的耗时和调用链路以及帮助实现日志功能等等。其流程设计是: + +- 把需要替换的原方法 IMP A 取出来,保存起来。 +- 给这个原方法塞一个动态分配的可执行地址 B。 +- 当执行这个原方法的时候,会跳转到 可执行地址 B。 +- 这个 B 经过一段简短的运算操作,可以获取到原先保存的 IMP A。 +- 在跳转回 IMP A 之前,统一拦截函数先做些想做的事情,比如检查是不是主线程调用等等。 + +而且在该流程下,可以保证参数寄存器、返回地址等不会错乱。读者也可以从下面的三篇文章(框架作者原创)来看一下该框架的从思路到实现的演进过程: + +- [基于桥的全量方法Hook方案 - 探究苹果主线程检查实现](http://satanwoo.github.io/2017/09/24/mainthreadchecker1) +- [基于桥的全量方法 Hook 方案(2) - 全新升级](http://satanwoo.github.io/2020/04/22/NewBridgeHook/) +- [基于桥的全量方法 Hook 方案(3)- TrampolineHook](http://satanwoo.github.io/2020/04/26/TrampolineHookOpenSource) + +### 🐕 [SwiftTrace](https://github.com/johnno1962/SwiftTrace) + +[@xiaofei86](https://weibo.com/xuyafei86):SwiftTrace 是用来追踪 Swift 和 Objective-C 中 non-final 类的方法调用的框架,它是 [Xtrace](https://github.com/johnno1962/Xtrace) 的 Swift 版本,通过将 Swift 类的函数指针替换为指向唯一汇编语言 “Trampoline” 入口点的指针来完成 Hook。通过 SwiftTrace 除了可以追踪类、实例、协议,还可以为成员函数创建切面,以在执行函数实现之前或之后调用一个闭包,在闭包中你甚至可以修改传入的参数或返回值。 + +### 🐕 [Localize](https://github.com/freshOS/Localize) + +[@老峰](https://github.com/gesantung):Localize 是一个很小的 Swift 实现的运行脚本,来提升本地化工作效率。主要包含:清除空格,按 Key 排序、检测未使用对的 Key、检测缺失的 Key、检测未翻译的 Key、检测冗余的 Key 等功能,使用简单只要在 Build Phases 配置 Run Script 即可,在国际化工作中有类似需求的同学可以研究一下。 + +## 音视频 + +### [71: “Polymorphic interfaces” with special guest Dave Abrahams](https://www.swiftbysundell.com/podcast/71/) + +[@四娘](https://kemchenj.github.io/):Swift by Sundell 的播客访谈这期请了一个**重量级嘉宾 Dave Abrahams,他之前是 C++ 委员会的一员,参与过 C++ STL 和 Boost 的早期开发**,后来在 Apple 参与了 Swift 的开发,现在在 Google 做 Swift For Tensorflow 的开发。(如果大家记得 WWDC 讲 Swift POP 的那个 Session,讲者就是他) + +这次聊了他早期的 C++ 开发经历和 Swift 标准库的一些设计决策,包括王垠在[Swift 语言的设计错误](http://www.yinwang.org/blog-cn/2016/06/06/swift)吐槽过的 Value Semantic Array,这个决定当时在 Swift 团队内部也引起了成员的强烈反对,对这段故事感兴趣的人非常推荐收听这期播客。 + +## 内推 + +> 北京 / 成都 - 抖音:应届 / 高级 / 专家 +> iOS、安卓、Server 都有大量 HC,欢迎 +> - 应届学生,一起和大佬学习撸码姿势。 +> - 熟练老手,一起做有挑战的事情。 +> - 行业专家,一起在抖音这个平台,实现更大个人价值。 +> +> 保证每一封简历,我都跟进进度,给与反馈。有任何想了解的,可以加我微信: jingmu1994,也可以直接发送简历到 raozhizhen@gmail.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#113-2020.05.18.md b/Reports/2020/#113-2020.05.18.md new file mode 100644 index 000000000..16c48dcc7 --- /dev/null +++ b/Reports/2020/#113-2020.05.18.md @@ -0,0 +1,120 @@ +# 老司机 iOS 周报 #113 | 2020-05-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Flutter web 最新进展: 发掘更多可能!](https://mp.weixin.qq.com/s/NGqF2OTvsV1A2KLiMXE2PQ) + +[@老驴](https://www.weibo.com/6090610445):Google 又来更新 Flutter Web 的进展啦。在最新的版本中,Flutter 已经提供了 PWA 的支持,也有越来越多的插件开始提供对 Web 的支持,同时 Flutter 也进一步改进了 Web 的调试与测试。 + +虽然 Flutter Web 支持还是处于 beta 阶段,但是,Google 正在努力一步一步提升 Flutter 的表现,也希望广大开发者也能加入进来,一起完善 Flutter Web。 + +## 新手推荐 + +### [Settings Bundles Management in Xcode](https://swiftsenpai.com/xcode/settings-bundles-management/) + +[@极速男孩](https://github.com/ztlyyznf001):Settings Bundles 支持开发者在 iOS 设置中加入一些自定义的内容。本文主要介绍了如何通过 shell 脚本来在设置中根据不同的 Configuration 或者不同的 Targets 来加入不同的内容。 + + +## 文章 + +### 🌟 🐕 [TrampolineHook 学习笔记](https://blog.dianqk.org/2020/05/11/trampolinehook-study-notes/) + +[@五子棋](https://github.com/satanwoo):虽然这个库是我写的,但是没想到竟然有大神这么详细的剖析了里面的每一方面。太赞了,必须推荐。 + +### 🌟 🐕 [超详解析 Flutter 渲染引擎|业务想创新,不了解底层原理怎么行?](https://mp.weixin.qq.com/s/xxdgoEBIC3Bg4OCOZcm-aQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):小编强烈推荐在用 Flutter 的小伙伴仔细阅读这篇文章,本文由手淘技术产出,从渲染引擎层面详细分析了一个控件是如何展示到屏幕上的,细致入微。文末简要地提了一下,手淘在 Flutter 上的一些探索,也是社区内常提到的把 Flutter 引擎作为小程序的渲染引擎👍。 + +### 🐕 [What’s new in Swift 5.3?](https://www.hackingwithswift.com/articles/218/whats-new-in-swift-5-3) + +[@享耳先森](https://github.com/iblacksun):Swift 5.3 即将发布,本文给你介绍 Swift 5.3 的新特性,最显著的两个就是 多尾随闭包(`Multiple trailing closures`) 与 多重异常捕获(`Multi-pattern catch clauses`),其余特性请阅读原文。 + +- 5.3 以前尾随闭包只能作于最后一个 `closure` 类型参数,对于有多个 `closures` 参数的情况,也不建议使用尾随闭包,Swift 5.3 开始将支持多 `closures` 参数使用尾随闭包模式。 +- 以前一条 catch 语句中只能匹配一种 error,5.3 开始将支持多个 error + + ``` + do { + let result = try checkReactorOperational() + print("Result: \(result)") + } catch TemperatureError.tooHot, TemperatureError.tooCold { + print("Shut down the reactor!") + } catch { + print("An unknown error occurred.") + } + ``` + +### 🐕 [Flutter 在 PLUS 业务中的探索和实践](https://mp.weixin.qq.com/s/eJxmeAJ0ljmbPbgNVkGttQ) + +[@looping](https://github.com/looping):本文介绍了京东 PLUS 会员业务团队入坑 Flutter 的原因,以及当时需要探索和解决的问题调研结论,并且详尽地描述了 Flutter 在 PLUS 业务中的实践过程,这对正在研究 Flutter 的同学是一份很好的学习交流资料。 + + +### 🐕 [WKWebView 默认缓存策略与 HTTP 缓存协议](https://juejin.im/post/5df75e3a6fb9a016266459da) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):WKWebView 默认缓存策略完全遵循 HTTP 缓存协议,苹果并没有做额外的事情。WKWebView 默认缓存策略流程总结如下: + + * 1. 是否有缓存,没有则直接发起请求,有则进行下一步 + * 2. 是否每次都得进行资源更新校验(响应头是否有 Cache-Control:no-cache 或 Pragma:no-cache 字段),不需要则进入 3,需要则进入 4) + * 3. 缓存是否过期(响应头,Cache-Control:max-age、Expires、Last-Modified 启发式缓存),没过期则使用缓存,不发起请求,过期了则进入 4 + * 4. 客户端发起资源更新校验请求(请求头,If-Modified-Since: Last-Modified 值、If-None-Match: ETag 值),如果资源没有更新,服务器返回 304,客户端使用缓存;如果资源有更新,服务器返回 200和资源 + + +> 推荐阅读: [可能是最被误用的 HTTP 响应头之一 Cache-Control: must-revalidate](https://zhuanlan.zhihu.com/p/60357719) + +### 🐕 [The different categories of Swift protocols](https://www.swiftbysundell.com/articles/different-categories-of-swift-protocols/) + +[@EyreFree](https://github.com/EyreFree):本文作者提供了一种新的 Protocol 分类设计思路,即根据它们所属的类别来区分它们。概括地说,作者将协议分为四个类别: + +- 动作使能器:使我们能够对每种符合类型执行统一的操作。它们通常具有以 `able` 结尾的名称,例如 `Equatable`; +- 需求定义:使我们可以将需求形式化为某种对象,例如 `Sequence`、`Numeric` 和 `ColorProvider`; +- 类型转换:协议用于让各种类型声明它们可以转换为另一种类型,或者可以通过原始值或文字进行表达(例如 `CustomStringConvertible` 或 `ExpressibleByStringLiteral`); +- 抽象接口:充当可以多种类型实现的统一 API,从而使我们可以按需快速替换实现代码而无需改动调用方代码,封装第三方代码或在测试中模拟某些对象。 + +你是否认可这种分类方式呢?或许看完本文你能够有自己的看法。 + +### 🐕 ["零"学习成本:使用 Web 标准开发动态化 Flutter 应用](https://mp.weixin.qq.com/s/57CprMfvTtIeq6AdgcDdcw) + +[@邦Ben](https:weibo.com/linwenbang):该文介绍了阿里的一个 Kraken 项目,该项目核心是用 Web 标准进行开发,Flutter 进行解析渲染。简而言之就是,HTML -> Flutter Render,基本有也可以理解为小程序的模式,最大的特点就是使用 W3C 标准规范,Web 童鞋入坑成本低。同时也介绍了其配套工具和一些性能特性,但是还没开源,可以作为一个思路进行参考。 + + +## 工具 + +### [How to add a shield on the App Icon of beta builds](https://diamantidis.github.io/2020/05/10/add-shield-on-the-app-icon-of-beta-builds) + +[@红纸](https://github.com/nianran):如果你还在烦恼装了太多测试包,却不能直观看出测试包版本/构建信息的话。不妨尝试下本文中的这个工具 [「Badge」](https://rubygems.org/gems/badge/versions/0.8.5),其允许你在 App 的 Icon 中添加你指定的版本信息。集成也非常方便,可以通过 Xcode 中的 Run Script Phase 或者通过 Fastlane 中对应的 badge 插件进行集成。 + +## 内推 + +> 上海 - 字节跳动:TikTok iOS/Android/前端/后端工程师 +> +> TikTok是目前全球最火爆,国内出海最成功的短视频App,全球累计下载接近20亿次。 +> +> 目前团队规模落后于需求增长,非常缺人,经验不限,应届生老司机专家都欢迎。 +> +> 简历发送至 martin.lv@bytedance.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#114-2020.05.25.md b/Reports/2020/#114-2020.05.25.md new file mode 100644 index 000000000..a5b90c92d --- /dev/null +++ b/Reports/2020/#114-2020.05.25.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #114 | 2020-05-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 新手推荐 + +### 🐕 [CS193p Spring 2020 (Developing Applications for iOS using SwiftUI) 开始更新](https://cs193p.sites.stanford.edu/) + +[@极速男孩](https://github.com/ztlyyznf001):斯坦福大学的 CS193p 课程是针对 iOS 开发所推出的一个基础教程。在2020年春季的更新中,加入了在去年 WWDC 中推出的 SwiftUI 的内容。更多的内容可以看[这里](https://cs193p.sites.stanford.edu/about-cs193p) 。 + +## 文章 + +### 🐕 [一波 N 折的携程酒店 Swift-Objc 混编实践](https://mp.weixin.qq.com/s/N6ToEkN9c-2_rIvkv4o9hA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 WWDC2019 大会上,随着 Swift5.0 发布之后,沉寂多年的 Swift 终于走上了快速发展的道路。iOS 开发语言的重心已经在悄悄倒向 Swift,本文即在讲述携程酒店在引入 Swift 混编带来的各种问题及解决方案,可供开发者们借鉴参考。 + +### 🐕 [The Future of Swift on the Server](https://www.timc.dev/posts/future-of-server-side-swift/) + +[@莲叔](http://aaaron7.github.io/):自从 IBM 在 Swift 上打了退堂鼓后,Server-side Swift 社区受到了不小的打击。大家纷纷猜测会不会这个命题已经不再成立。这篇文章带来了不少的好消息,甚至认为 2020 将会是 Server-side Swift 的利好年,其中最主要就是 Swift6 的 feature 中绝大多数都直接或间接的和 Server-side 有关或者利好。还有 Swift 的核心团队迎来了 Tom Doron 和 Saleem Abdulrasool, 一个是 SwiftNIO 的负责人,一个在尝试把 Swift 移植到 Windows,这些迹象都说明 Swift 的核心团队对于让 Swift 跳出 Apple 生态的决心。其他还有不少令人振奋人心的消息,具体建议大家直接看文章。 + +### 🐕 [Building a Design System for iOS](https://www.ramshandilya.com/blog/design-system-intro/) + +[@张嘉夫](https://github.com/josephchang10):为了便于设计师和工程师之间的沟通协作,作者为 iOS App 构建了一个设计系统,并在这个系列文章中介绍了他的经验,包括排版、颜色和动画等部分。设计系统能够定义产品的设计语言,包含可重用的组件,有明确的设计标准,可以将它们组合在一起来构建任意一款 app。采用设计系统的优势是可以提高设计的一致性、提高团队工作效率、方便辅助功能的开发,此外组件的可重用性还扩大了设计的应用范围。 + +### 🐕 [更方便、更强大: Flutter package 生态系统更新](https://mp.weixin.qq.com/s/y_lOfxlYlG6nM-4xduQ4Aw) + +[@邦Ben](https://weibo.com/linwenbang/):Flutter 这类新技术出现,最大的缺陷之一就是配套生态弱。近期,Google 为了提升 Flutter package 生态系统的可信度,增加了发布者认证和评分。根据各项指标评选出 270 个项目赋予 Favorite 徽章。这意味着,有 Favorite 徽章的三方库,你可以相对放心的使用。同时,Flutter 团队和英国的 Invertase 合作进行推进 Google Flutter 插件的优化(例如 firebase)。综上,这意味着 Flutter 生态会进一步得到改善,随着参与人数的日益增多,将会越来越好。 + +### 🐕 [Implementing design system components on iOS](https://medium.com/chili-labs/implementing-design-system-components-on-ios-6afe873ea586) + +[@享耳先森](https://github.com/iblacksun):Native View 如何进行组件化抽象并复用一直是个难题,作者通过一个实例介绍他的思路,并提供了 demo 项目。作者将可能复用的 View 抽取成 components,并提供对应的 ViewModel,同时,ViewModel 可以组合实现不同的 Protocol 完成诸如选中等事件分发。 + +### 🐕 [Fish-Lottie:纯 Dart 如何实现一个高性能动画框架?](https://mp.weixin.qq.com/s/4h6szVmDyiC5RjbLRC9ZZw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Lottie 是一个由 Airbnb 开源的横跨 Android,iOS,Web 等多端的一个动画方案,它以 JSON 的方式解决了开发者对复杂动画实现的开发成本问题。最近闲鱼开发团队在 Flutter 端实现了 Lottie - fish-lottie 。本文详细地介绍了 Lottie 架构以及 fish-lottie 实现思路👍。 + +### 🐎 [Verge — Start “store-pattern” state management before beginning Flux in UIKit iOS app development — preparation starting SwiftUI](https://medium.com/eureka-engineering/verge-start-store-pattern-state-management-before-beginning-flux-in-uikit-ios-app-development-6c74d4413829) +[@zvving](https://github.com/zvving):本文是 Verge 上手指南:从一个数据驱动页面的小型业务场景出发,介绍如何引入 Verge 提供良好的业务代码隔离。 + +> [Verge](https://github.com/muukii/Verge) 是 Flux 架构的又一 iOS 实现,设计与 Vuex 基本一致,View 同时兼容 UIKit 及 SwiftUI,事件绑定支持 RxSwift 及 Combine。 +更多内容请参考 [Verge-Docs](https://muukii-app.gitbook.io/verge/) + +### 🐢 [震惊!生产力提效 300% 的秘诀全公开](https://juejin.im/post/5ec0d6b4f265da7b950569a9) + +[@JimQ](https://github.com/waz0820):工作要高效,方法很重要,这是一篇写给技术人的个人工作学习管理的方法论。如果你对精力管理、多层次的工作/学习计划、番茄工作法、定额工作法、批处理、多任务并行、图层工作法这些概念一知半解,快到碗里来吧。值得一提的是,本文不只讲方法其然,还讲其所以然,逻辑体例清晰,排版重点突出,配上作者本人真实场景的思维导图,是一篇深度好文,不是标题党。 + +### 🐢 [iOS Rendering 渲染全解析(长文干货)](https://juejin.im/post/5ec35cc55188256d92438174) + +离屏渲染使用不当常常会导致屏幕卡顿,造成不好的用户体验,所以通常我们会尽量避免使用离屏渲染,例如减少圆角剪裁。但除了减少圆角剪裁,还有什么方式可以避免离屏渲染?以及离屏渲染使用过多为什么会造成卡顿?本文从计算机的渲染原理开始介绍,分析了屏幕成像和卡顿,然后讲到 iOS 中的渲染框架,最后引入离屏渲染这一问题,非常系统地让我们 iOS 的渲染原理有个比较深入的认知。 + +### 🐕 [大话 Socket](https://mp.weixin.qq.com/s/sVbWrWaq5P0kHxNhMVqzWA) + +[@水水](https://www.xuyanlan.com):要了解Socket首先要了解 TCP,而 Socket 是抽象出来的使用 TCP/UDP 的概念模型,屏蔽掉了晦涩的底层协议的实现,是一个接口。文本以图文趣味的方式带读者了解 TCP 的三次握手和四次挥手。相信你读完会让你对 TCP 有更好的理解。 + +## 工具 + +### [Introducing Piranha: An Open Source Tool to Automatically Delete Stale Code](https://eng.uber.com/piranha/) + +[@xiaofei86](https://weibo.com/xuyafei86):最近,Uber 开源了可自动删除无用代码的工具 Piranha。Uber 使用特性标记(Feature Flags)来做 A/B Test 和灰度发布,当这些功能完成测试或发布后就产生大量的无用代码,从而为项目带来技术债务。Piranha 通过扫描源代码来删除无用功能标志相关的代码,从而使代码库更干净,更安全,性能更高且更易于维护。Uber 已经在 Android 和 iOS 中使用 Piranha,并已使用它删除了大约两千个过时的功能标记及相关代码。感兴趣的读者可以阅读原文了解 Piranha 的实现,遇到的困难,以及在 Uber 自动化流程中的应用。 + +## 代码 + +### [Nuke 9](https://kean.github.io/post/nuke-9) + +[@老峰](https://github.com/gesantung):Nuke 9 是一个 Swift 版的图片加载库,Github 拥有近 5k Star,它有详细的文档,简洁的 API,支持更多的图片格式,使用全新的图片处理图形解码协议,支持图片预加载,更重要的是有高效的性能,比较遗憾的是目前仅支持 iOS 11+。 + +### [SwiftCoroutine](https://github.com/belozierov/SwiftCoroutine) + +[@四娘](https://kemchenj.github.io):一个 Swift 协程的第三方库实现,提供了 Future 和 Channel 等功能: + +```swift +// 在主线程执行协程 +DispatchQueue.main.startCoroutine { + + // 返回 CoFuture<(data: Data, response: URLResponse)> + let dataFuture = URLSession.shared.dataTaskFuture(for: imageURL) + + // 挂起协程 await CoFuture 的结果,并且不会阻塞线程 + let data: Data = try dataFuture.await().data + + // 把 data 转成 UIImage + guard let image = UIImage(data: data) else { return } + + // 在 global queue 执行耗时任务,在不阻塞线程的同时 await 结果 + let thumbnail: UIImage = try DispatchQueue.global().await { image.makeThumbnail() } + + // 在主线程将 image 设置给 UIImageView + self.imageView.image = thumbnail +} +``` + +## 音视频 + +### [macOS 10.15: Slow by Design](https://sigpipe.macromates.com/2020/macos-catalina-slow-by-design/) + +[@老驴](https://www.weibo.com/6090610445):在379 期的 ATP 中讨论了他们在升级了 macOS 10.15 之后明显感觉系统变慢。本文的作者就根据这个去排查问题的根源,找出解决方案,并记录下其中的每一步。 + +不知道有多少人感知到了这个问题的存在,如果你对系统底层感兴趣的话,不妨来看看这些作者们是怎么一步一步发现问题根源并解决问题的。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#115-2020.06.01.md b/Reports/2020/#115-2020.06.01.md new file mode 100644 index 000000000..3ae0db06a --- /dev/null +++ b/Reports/2020/#115-2020.06.01.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #115 | 2020-06-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [LLBuild2 开发工作正式启动](https://forums.swift.org/t/llbuild2/36896) + +[@四娘](https://kemchenj.github.io/):LLBuild2 开发工作正式启动: + +- 整理 Build System,SPM,swift-driver 和 swift 编译器的职责和交互,优化整体编译架构。 +- 接入 Bazel 的 Remote Execution API,改造 SPM,探索分布式编译和缓存。 + +## 新手推荐 + +### 🐕 [An In-Depth Look at Blur Effect Materials on iOS](https://pspdfkit.com/blog/2020/blur-effect-materials-on-ios/) + +[@老峰](https://github.com/gesantung):本文以实例的形式深入详细的介绍了如何在 iOS 中实现 Blur Effect (毛玻璃模糊)效果,包括 Blur Effect Styles 各种样式在深色模式下的不同呈现,以及 Vibrancy Effect Styles 文本内容在模糊效果下的不同样式,具体参见[原文](https://pspdfkit.com/blog/2020/blur-effect-materials-on-ios/)。 + +## 文章 + +### 🐢 [网易支付-高性能NEJFlutter小程序动态化架构实践](https://www.jianshu.com/p/be48a3dc80fa) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):NEJFlutter 是由网易支付出品并还在持续打磨的在 Flutter 小程序动态化方向上尝试的一套技术解决方案。自 Flutter 问世以来, 以毫秒级的热重载、丰富的可定制 Widget、难以置信的UI渲染能力、原生级的UI体验等特性迅速风靡。但尽管其渲染性能优异、跨端一致性强,但依然没有解决传统移动端开发中的痛点-无法动态化(热更新)。网易支付团队的动态化方案,在参考 MXFlutter 后,保留 了Flutter 作为视图层优秀的特性(高性能/高一致性/高能效)加上动态脚本语言作为逻辑层,来实现整套方案的动态化。目前该方案还在灰度阶段,广大开发者可以共同完善这个项目并加以使用。 + +### 🐕 [一个十年 iPhone 使用者的「重新体验 iPhone」之旅](https://imtx.me/blog/the-journey-of-reexperiencing-the-iphone/) + +[@张嘉夫](https://github.com/josephchang10):作者图拉鼎在这篇文章中总结了十年来围绕着 iPhone 体验的变化,从单独使用 iPhone 到现在使用 iPhone + Apple Watch + AirPods Pro 的复合全方面体验,具体包括无缝的设备迁移体验、无法抗拒的大屏体验、通勤路上的沉浸世界、双卡双待带来的双倍保险、Hand-free 的居家小能手 Siri、移动设备运动史、从「通讯设备」到「健康助理」、让随手拍变成专业拍、解锁 MacBook 等方面。作者认为这些体验构成了一个个生动的生活场景,让生活变得更加方便,并且相信未来还会变得更加的美好和愉快。 + +### 🐕 [[iOS]iOS11.0~13.5全系列设备越狱教程](https://mp.weixin.qq.com/s/0JuTk_iQCeYKjV3kIZMhHg) + +[@红纸](https://github.com/nianran):unc0ver 越狱团队在近期发布了最新的越狱工具(版本号:5.x),支持 iOS 11.0~13.5 版本的所有设备(包括最新的 iPhone 11、iPhone SE2 等),本文讲解了具体操作方法。 +近期[飘云阁](https://www.chinapyg.com/)出了《iOS应用逆向与安全之道》一书也值得大家一读,书中基于实战讲解当下的 iOS 逆向技术。 + +### 🐕 [苹果强制要求更换启动方式的解决方案](https://mp.weixin.qq.com/s/mdReGqt5E7T8VWC2q7ImKw) + +[@享耳先森](https://github.com/iblacksun):[苹果要求在 6 月 30 日以后,所有的 App 必须使用 `storyboard` 作为 App 的启动图](https://developer.apple.com/news/?id=03262020b),本文介绍了 `LaunchImage` 切换到 `LaunchScreen.storyboard` 的一些常见问题,特别是黑屏问题,建议阅读。 + +### 🐕 [A Deep Dive into the Flutter Animations package](https://medium.com/flutter-nyc/a-deep-dive-into-the-flutter-animations-package-3e26b10c43c1) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):今年二月份 Google 官方宣布 [animations](https://pub.dev/packages/animations) 作为 Flutter 中 [Material Design](https://material.io/design/motion/the-motion-system.html) 的动效系统。 [animations](https://pub.dev/packages/animations) 能够实现多种酷炫的动效,视图转换、共享轴动效、淡入淡出等,本文结合 [animations package](https://pub.dev/packages/animations) 中的几个主流动效,详细讲解 [animations](https://pub.dev/packages/animations) 的用法, 强烈推荐👍 + +## 代码 + +### 🐎 [LayoutKit](https://github.com/linkedin/LayoutKit) +[@zvving](https://github.com/zvving):LinkedIn 出品的布局库,在类似 FlexBox 布局语法的基础上提供接近手写 frame 的性能,支持异步线程计算布局和结果缓存。 + +需要留意的是:LayoutKit 在布局写法及[动画处理](http://layoutkit.org/animations/)上与 Autolayout 有较大区别。推荐对布局性能要求较高的朋友选用。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#116-2020.06.08.md b/Reports/2020/#116-2020.06.08.md new file mode 100644 index 000000000..8c3e27b73 --- /dev/null +++ b/Reports/2020/#116-2020.06.08.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #116 | 2020-06-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [3 steps to speed up storyboard](https://fluffy.es/3-steps-to-speed-up-storyboard/) + +[@极速男孩](https://github.com/ztlyyznf001):storyboard 作为 iOS 的一种对 viewcontroller 的控制的方法被广泛使用,本文简单介绍了如何快速的使用 storyboard 来对你的 viewcontroller 进行管理。 + +## 文章 + +### 🌟 🐕 [TrampolineHook - 解决栈污染问题支持变参 Hook](http://satanwoo.github.io/2020/05/18/TrampolineHookStack/?from=singlemessage&isappinstalled=0) + +本文是 `TrampolineHook` 框架系列文章最新的一篇。`TrampolineHook` 是一个中心重定向框架,可以通过一个函数替换/拦截所有你想要的函数的框架。如果对这个库不了解可以先看前面的几篇文章: + +- [基于桥的全量方法Hook方案 - 探究苹果主线程检查实现](http://satanwoo.github.io/2017/09/24/mainthreadchecker1/) +- [基于桥的全量方法 Hook 方案(2) - 全新升级](http://satanwoo.github.io/2020/04/22/NewBridgeHook/) +- [基于桥的全量方法 Hook 方案(3)- TrampolineHook](http://satanwoo.github.io/2020/04/26/TrampolineHookOpenSource/) + +本文主要讲该库在之前实现中的一个错误,关于上下文污染的问题,本文从汇编角度比较深入的讲解了这个问题,但并不需要读者很了解汇编的内容,有兴趣的同学可以看一下。 + +### 🌟 🐕 [移动前端开发和 Web 前端开发的区别是什么?](https://mp.weixin.qq.com/s/kPn-2y3Q_CMjwCB1c1yVTA) + +[@张嘉夫](https://github.com/josephchang10):前端这门技术,从诞生发展至今不过寥寥十余年。如果说前十年是 PC 前端的时代,那后十年一定是属于移动前端的时代。特别是随着网络制式的发展,移动设备在全球范围内得到了空前的普及,在前端领域,Hybird Web、React Native、Weex、Flutter 等等一系列新的移动前端技术也如同雨后春笋般冒出来。在这篇来自阿里巴巴新零售淘系技术部的文章中,作者分享了其对于「移动前端开发和 Web 前端开发」的理解,具体包括前端发展史回顾、移动前端混合技术的前世今生以及对未来回归本源的探讨。 + + +### 🌟 🐕 [How the SwiftUI DSL Works](https://harshil.net/blog/swiftui-dsl-function-builders) + +[@莲叔](http://aaaron7.github.io/):SwiftUI 算是 Swift 近几个大版本中最令人兴奋的 feature,虽然不少同学在试水后都得出了目前还不成熟的判断,但这并不影响其定位了未来的 UI 开发方式。本篇文章作者尝试聊了聊 SwiftUI 实现中的一些关键技术,主要描述了 function builder 机制,文章比较浅显易懂,内容不多,比较适合新手学习。 + +### 🐎 🚧 [A Type-Safe FileWrapper](https://heberti.com/posts/filewrapper/) + +[@xiaofei86](https://weibo.com/xuyafei86):在 Document Based Apps 中,NSDocument 作为最重要的基类,提供了自动保存、线程安全、iCloud 冲突解决等功能。NSDocument 可以持有 Data 和 FileWrapper 两种类型的文件数据。FileWrapper 为自定义文件类型的容器,本文通过示例简单讲述了 FileWrapper 的应用,有兴趣可以阅读原文了解,也可以通过苹果 [官方文档](https://developer.apple.com/document-based-apps/) 了解更多 Document Based Apps 的开发指南。 + +### 🐎 [Dealing with memory limits in iOS app extensions](https://blog.kulman.sk/dealing-with-memory-limits-in-app-extensions/) + +[@老驴](https://www.weibo.com/6090610445):Notification extension 和 share extension 算是 iOS 中前两年比较火爆的话题了,这两年似乎热点过去,大家关注的也不多,苹果也没有在这块继续着力,framework 更新的也很少。 + +这位作者就在开发中遇到了内存上限问题,Notification extension 最高只能支持 24 MB 的内存占用,而 Share extension 最多支持 120 MB 的内存占用。而开发中最有可能遇到内存上限问题的就是图片或者是视频了,作者使用了一些有意思的办法来绕过这样的限制,有兴趣的不妨来看看。 + +### 🐕 [How We Use Feature Flagging on iOS](https://mobile.blog/2020/05/29/how-we-use-feature-flagging-on-ios/) + +[@老峰](https://github.com/gesantung):Feature Flagging (又名 Feature Toggle、Flip 等)是一种允许控制线上功能开启或者关闭的方式,通常会采取配置文件的方式来控制。本文作者以 WordPress 为例讲解了通过 配置 Build Configurations 等在 iOS 中实现 Feature Flags,WordPress-iOS 是个开源项目,感兴趣的读者可以点[这里](https://github.com/wordpress-mobile/WordPress-iOS)阅读源码。 + +### 🐎 [Decode and Flatten JSON with Dynamic Keys Using Decodable](https://swiftsenpai.com/swift/decode-dynamic-keys-json/) + +[@四娘](https://kemchenj.github.io/):有时候后端下发的 JSON 文件会采取动态 key 的形式,那在 Codable 里该如何实现呢?这篇文章就介绍了如何动态 key 的结构该如何解析以及封装的方式。 + +## 代码 + +### 🌟 [InterposeKit](https://github.com/steipete/InterposeKit) + +[@EyreFree](https://github.com/EyreFree):InterposeKit 是一个可以帮助我们快速、优雅地在 Swift 中进行 Swizzle 的库,它的作者是 Peter Steinberger,你可能对这个名字没什么印象,但你可能听过他的另一个开源库 —— Aspects。InterposeKit 是用纯 Swift 5.2 编写的,有完备的文档并经过了全面的测试。它可以用于 Objective-C 实例方法和被 `@objc dynamic` 修饰的 Swift 函数。推荐在 Swift 中有 Swizzle 需求的同学一试,以下是一些关键点: + +- Interpose 直接修改方法的实现,这比基于 `selector` 的方式要好; +- 可以通过调用 `revert()` 轻松实现钩子的撤销; +- 纯 Swift 实现,而不是使用低效的 `NSInvocation`; +- 没有类型检查,虽然带来了一些 crash 风险但也更加灵活; +- 必须手动指定结果类型两次,这是一种为了避免使用 `NSInvocation` 或汇编的折衷; +- 当类在运行时被加载时,延迟插入。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#117-2020.06.15.md b/Reports/2020/#117-2020.06.15.md new file mode 100644 index 000000000..da05491ca --- /dev/null +++ b/Reports/2020/#117-2020.06.15.md @@ -0,0 +1,89 @@ +# 老司机 iOS 周报 #117 | 2020-06-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [苹果公布史上最大规模的 WWDC20 阵容](https://www.apple.com/newsroom/2020/06/apple-reveals-lineup-for-its-biggest-ever-worldwide-developers-conference/) + +[@享耳先森](https://github.com/iblacksun):WWDC 已经进入第 31 个年头,WWDC20 将于 6 月 22 至 26 日以前所未有的虚拟方式将全球超过 2300 万的苹果开发者社区聚集在一起,将成为迄今为止规模最大的 WWDC。 + +Keynote 主题演讲在北京时间 23 日凌晨 1 点开始,对于中国的观众来说,主题演讲也将在腾讯、爱奇艺、Bilibili 和优酷上进行直播。同时,超过 1000 名苹果工程师将在 Developer Forums 回答问题并参与技术讨论,开发者可以发布自己的问题,直接向苹果专家学习。 + +## 文章 + +### 🌟 🐕 [iOS 架构谈:剖析 Uber 的 RIB 架构](https://mp.weixin.qq.com/s/8mkPa-5IdddJ10I_sAMK-A) + +[@老驴](https://www.weibo.com/6090610445):这是一篇由 Uber 工程师撰写,知识小集团队翻译的对 Uber RIB 构架的解析文章。RIB 从很多年前 Uber 切换 Swift 开始使用,到今天已经存在了很长时间了,应该可以说算是一种经得住考验的构架。如果很多年前你对 RIB 构架的理解没有很深入的话,也许你今天再回头来看,就会有更深的理解。 + +还记得2,3年前,构架风潮兴起的时候,几乎所有的公司的,所有的团队都在搞自己的构架。然而,经历了时间的考验,并不是所有的构架最后都存活了下来。谈点个人看法:所有的构架都应该以自己的业务需求为出发,为了构架而构架,那就是耍流氓了。这个角度上去说,也许很多年以后,再回头去看,说不定觉得 MVC 才是更好的选择呢? + +### 🌟 🐎 [Flutter 卡顿问题的监控与思考](https://mp.weixin.qq.com/s/-BTEkHYeh_tHqJY2UNI_xw) + +[@极速男孩](https://github.com/ztlyyznf001) : 卡顿问题一直是开发中比较关注值得关注的问题。本文首先介绍了如何去判断卡顿以及卡顿的原理,然后从修改 Dart SDK, AOT 模式下采集堆栈(暂停线程),AOT 模式下采集堆栈(通过信号)这三种不同的解决方案,并比较了三中不同方案各自的优劣势。 + +### 🐢 [如何在模块化/组件化项目中实现 ObjC-Swift 混编?](https://juejin.im/post/5edd8ec16fb9a0480067d37d) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在单一 target 的项目中,ObjC 和 Swift 可以直接通过桥接文件 bridging header 实现混编,但如果是在多个 target 或 library 或 framework 中,是不能使用 bridging header 的,这时候如何实现混编呢?文中详细记录了在混编过程中的踩坑历程,可供大家参考借鉴。 + +推荐阅读:[一波 N 折的携程酒店 Swift-Objc 混编实践](https://mp.weixin.qq.com/s/N6ToEkN9c-2_rIvkv4o9hA) + +### 🐕 [iOS 中的网络调试](https://juejin.im/post/5ee07f45f265da76ce5795aa) + +[@looping](https://github.com/looping):本篇文章不仅详细地介绍了我们所熟悉的一些网络调试工具和原理,而且还经过实践给出了一个不会影响原有网络请求,又能拿到所有网络请求回调的方法。在阅读过程中我们会进一步了解到作者能通过学习借鉴开源框架、官方示例等的设计原理,为解决问题带来新思路,不断地优化演进成最终方案,非常值得肯定和学习。 + +### 🐢 [在block内如何修改block外部变量?](https://mp.weixin.qq.com/s/VFzTBCiFcbPHqWAnsDtT4A) + +[@水水](https://www.xuyanlan.com) : 如果面试被问:在 block 内如何修改 block 外部变量? 你会如何回答呢?如果你不清楚没关系,本文简洁明了的带你了解底层原理,值得一读。 + +### 🐎 [版本管理工具及 Ruby 工具链环境](https://mp.weixin.qq.com/s/s2yJEb2P0_Kk-rIpYBi_9A) + +[@红纸](https://github.com/nianran):来自瓜神的**「CocoaPods 历险记」**系列第一篇,本文介绍了版本管理工具以及 Ruby 工具链环境。从中我们可以学习几个不同的版本管理工具的差异,以及 Cocoapods 作为包管理工具如何控制 iOS 项目中各个依赖库版本信息。另外瓜神通过实操 Bundler 管理工程的全流程,详细介绍了如何控制 Gem 的版本信息,以及如何使用 rbenv 管理对应的 ruby 版本。 + +### 🐕 [Swift Pointers Overview: Unsafe, Buffer, Raw and Managed Pointers](https://www.vadimbulavin.com/swift-pointers-overview-unsafe-buffer-raw-and-managed-pointers/) + +[@anotheren](https://github.com/anotheren):指针是 Swift 语言中最复杂的功能之一,本文成体系地介绍了 Swift 中的 19 种指针,并详细解答了它们是什么,何时使用以及从中可以得到什么。如果你对音视频感兴趣,那么你在和底层接口(主要是一些 C API)打交道的过程中是绕不开指针的,快去了解一下吧。 + +## 工具 + +### [Swift Package Index](https://swiftpackageindex.com/) + +[@EyreFree](https://github.com/EyreFree):随着 Xcode 11 中开始集成 Swift Package Manager,越来越多的第三方库也添加了对 SPM 的支持,切换到 SPM 已经逐渐成为可能。`swiftpackageindex.com` 是一个对支持 SPM 的 Swift 库的索引,即一个 SPM 库搜索引擎,它目前是一个非官方的、由开源社区维护的项目。它的实现原理很简单,数据是依靠人工录入的,即当有人将开源库提交到主列表中时(有需要提交的库?[点这里](https://swiftpackageindex.com/add-a-package)),此站点会立即对它进行完全克隆,并且每隔几个小时进行一次轮询,以便在索引中看到的信息始终反映最新的库版本,而不需要库作者执行任何操作。选择正确的依赖关系不仅仅是找到满足您需要的代码,挑选高质量的库是很困难的,`swiftpackageindex.com` 软件包索引可以帮助您更好地决定依赖关系,快来尝试一下吧! + +## 代码 + +### [全新技能,FDottedLine](https://juejin.im/post/5ede002ef265da76e81a4226) + +[@邦Ben](https://weibo.com/linwenbang):Flutter 官方库并没有提供方便的实现虚线的库(其实就是生态还比较弱)。FDottedLine 这个库则提供了灵活构建虚线效果的组件。如果有虚线需求的童鞋,不妨使用一下。 + +- 同时支持水平、垂直两个方向的虚线 +- 支持创建虚线形状 +- 提供超简单的方式为 Widget 添加虚线边框 +- 支持创建灵活的虚线边角效果 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#118-2020.06.22.md b/Reports/2020/#118-2020.06.22.md new file mode 100644 index 000000000..fc647f0b1 --- /dev/null +++ b/Reports/2020/#118-2020.06.22.md @@ -0,0 +1,90 @@ +# 老司机 iOS 周报 #118 | 2020-06-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 通知 + +为了更好的筹备 `WWDC2020 内参`,老司机周报将暂时停止更新一周。 + +## 新闻 + +### [WWDC 20 将于北京时间本周 6 月 23 日凌晨举行](https://developer.apple.com/wwdc20/) + +WWDC 2020 将要在 6 月 23 日凌晨 1 点钟以线上发布会的形式举行,这是首次以线上直播的方式和大家见面。 +据“知情人”爆料,这次 WWDC 也会发布一款 ARM 的 Mac 电脑,同时还会把 iOS 系统重新命名为 iPhone OS,可以说非常值得期待了。 + +**同时,今年老司机周报依旧会和知识小集合、SwiftGG以及头条技术部门一起来创作《WWDC20 内参》,各位读者可以关注一下~** + +> 《WWDC 内参》是指根据 WWDC Session 内容,去除闲聊的内容,根据自己的实际开发经验,总结一篇文章。 +> +> 往年的 WWDC 内参活动供参考,[WWDC17 内参](https://xiaozhuanlan.com/wwdc17),[WWDC18 内参](https://juejin.im/post/5b1d284df265da6e572b3d87),[WWDC18 内参(补)](https://xiaozhuanlan.com/wwdc18),[WWDC19 内参](https://xiaozhuanlan.com/wwdc19) + +### [全新的 Apple 开发者论坛](https://developer.apple.com/forums/) 与 [App Store Connect 现已可用](https://appstoreconnect.apple.com/) + +[@张嘉夫](https://github.com/josephchang10):WWDC 2020 开幕在即,本周 Apple 对 Apple 开发者论坛和 App Store Connect 用户界面进行了改版,采用了全新的设计,使用起来更便捷美观,提供更简明的界面导航,并对移动设备提供了更好的支持。在 WWDC 2020 期间,开发者论坛会成为开发者社区和上千名 Apple 工程师一起探讨新技术、解答疑问的最佳场所。 + +## 新手推荐 + +### 🐎 [Easy way to detect a retain cycle in a view controller](https://sarunw.com/posts/easy-way-to-detect-retain-cycle-in-view-controller/) + +[@Parsifal](https://weibo.com/parsifalchang):循环引用导致的内存泄漏问题是 iOS 开发者最经常碰到的性能问题之一,通常我们可以使用苹果官方的性能检测工具 Instruments - Leaks 帮助我们排查和定位。最原始的方式可能是在 VC 的 dealloc 方法中输出打印页面已经被释放的日志。社区中也有开发者提供了便利的第三方工具,如微信读书出品的较为广为人知的 [MLeaksFinder](https://github.com/Tencent/MLeaksFinder) 通过在 VC 被 pop 或 dismiss 时检测其自身及其子视图是否正确释放来实现,再比如 [PLeakSniffer](https://github.com/music4kid/PLeakSniffer) 在 VC 释放后利用心跳机制来推测子视图是否被正常释放。 + +本文则提供了简单使用符号断点的方式来辅助检测 VC 是否被释放。这个方式无侵入性,也不需要编写任何代码,但局限性在于只能在跑工程的使用。 + +## 文章 + +### 🐕 [国内大厂在移动端跨平台的框架接入分析](https://juejin.im/post/5ed45cf2e51d457858775d01) + +[@AidenRao](https://weibo.com/AidenRao):本文通过对国内各大厂旗下知名的应用进行分析,统计各大厂在移动跨平台开发领域的接入情况,同时分析 Android 端应用的 arm 框架、 kotlin 和 androidx 的使用状态。当你需要向老板或者产品提供一些数据参考时,这份数据统计也许能帮助到你。 + +### 🐕 [渲染流水线系列 -- 光栅化策略对比](https://mp.weixin.qq.com/s/xuJ_-QpgrjVhuUKpINVn_g) + +[@looping](https://github.com/looping):本文对渲染流水线几种光栅化策略的优劣势进行了对比,同时重点讨论了光栅化的性能问题,感兴趣的同学可以翻看了解下。对光栅化不熟悉的话,可以看该系列的另一篇 -- [光栅化简介](https://mp.weixin.qq.com/s/qhCRkmzrLe7Osr_em2BmrA)。 + +### 🐎 [Modularity. Boundaries](https://dmtopolog.com/modularity-1-boundaries/) + +[@xiaofei86](https://weibo.com/xuyafei86):在代码中,我们一直都在处理不同子系统之间的边界。它发生在不同的抽象级别上。Functions, classes, modules, frameworks, layers 都是封装的实体,它们通过不同类型的边界与另一个世界分开。本文讲述了如何通过边界与模块化来保持关注点分离,构建不同类型的项目。感兴趣的同学可以阅读。 + +### 🐢 [Toggling iOS Render Debug Options Without a Computer](https://bryce.co/on-device-render-debugging/) + +[@水水](https://www.xuyanlan.com):我们经常用 Instruments 来调试渲染性能比如:Color Blended Layers 或 Color Offscreen-Rendered, 那有没有不需要 Instruments 就能调试的方式呢? 本文作者通过提供了一个方案来让开发者通过设备来调试渲染性能,如果你对代码感兴趣,或者想在自己的设备上尝试,可以在 [GitHub - RenderDebugPreferences](https://github.com/bryce-co/RenderDebugPreferences) 上找到该项目。 + +### 🐕 [Introducing Swift AWS Lambda Runtime](https://swift.org/blog/aws-lambda-runtime/) + +[@莲叔](http://aaaron7.github.io/):前面有一期提到了 Server-side Swift 仍然可期,其中一个利好消息就是 SwiftNIO 的负责人,Tom Doron 加入了 Swift 的 core team。很快 Tom Dorom 就带来了一个新的开源项目:Swift AWS Lambda Runtime。简单的说,通过 Swift 来编写 Server-less Function 来部署在 AWS Lambda 上,这对于创业公司使用 Swift 技术栈无疑是一大利好,毕竟 AWS Lambda 已经越来越受初创型公司的欢迎。本篇文章就是 Tom Doron 所发,介绍了该项目的基本情况。 + +## 工具 + +### [因为知道了30+款在线工具,我的工作效率提升500%!](https://juejin.im/post/5ee6f0b1e51d4578762019af) + +[@红纸](https://github.com/nianran):文中列举了 30+ 款在线工具,基本都是大家耳熟能详的几个著名的网站,有兴趣的同学可以稍微扫一眼。有些网站还是可以 Mark 一下的。 + +> PS:在文章的评论区发现了另外一款[导航工具](https://github.com/xjh22222228/nav)([在线阅览地址](http://nav.xiejiahe.com/#/index?page=1&id=5&_=1592796130661))其收录了更多的网站地址,供大家参考。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#119-2020.07.13.md b/Reports/2020/#119-2020.07.13.md new file mode 100644 index 000000000..809fb4236 --- /dev/null +++ b/Reports/2020/#119-2020.07.13.md @@ -0,0 +1,137 @@ +# 老司机 iOS 周报 #119 | 2020-07.13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**热烈欢迎周报团队的第 33 个编辑 - [@JonyFang](https://github.com/JonyFang)!他是 TIME 时间卡 App 的开发者,目前就职于本来生活网 P2C 项目组。** + +## 新手推荐 + +### 🐎 [Benefits of using throwing functions (try) - Swift's most underrated feature?](https://swiftrocks.com/benefits-of-throwing-functions-try-swift-underrated-feature) + +[@zvving](https://github.com/zvving):Swift 新手面对 `do-try-catch` 常望而却步,调用时使用 `try?` 轻率处理,对外提供错误处理时一般使用 Result 返回错误,Throwing 几乎不是一个可选项。 +本文作者认为 `do-try-catch` 可能是最被低估的 Swift 语言特性,并给出合理使用错误处理的建议: + +- Result & Throwing 都可以作为函数返回错误处理的方式 + - 需要业务方显式处理 Error 时,推荐 Result + - 业务方不关心错误,期望更外层处理时,推荐 Throwing + - 一个方法内有多种类型错误需要返回时,只能选择 Throwing +- XCTestCase 对 Throwing 有很好的支持:Case 书写可以更聚焦于自身逻辑 +- Result 与 Throwing 可以方便的相互转化 + +关于错误处理文中未提及的几点也值得留意: + +- 虽然语法相似,但 `swift-try-catch-error`(错误处理) 与 `objc-try-catch-exception`(异常处理)并不相同 + - Objc 中异常处理因为性能和安全问题,不推荐使用 + - [Swift 中的错误处理](https://swiftgg.gitbook.io/swift/swift-jiao-cheng/17_error_handling#handling-errors)不涉及解析调用栈,性能好非常多,可以和 return 语句相媲美,推荐灵活选用 +- Swift 中错误处理也要留意资源清理的工作,[推荐通过 defer 完成](https://swiftgg.gitbook.io/swift/swift-jiao-cheng/17_error_handling#specifying-cleanup-actions) + +## 文章 + +### 🐕 🌟 [Flutter 上的内存泄漏监控](https://juejin.im/post/5ee748df5188251f8649a226) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 所使用的 dart 语言具有垃圾回收机制,有垃圾回收就避免不了会内存泄漏, 内存泄漏的检测在各个端都是 Debug 的重头,iOS 侧的 Instruments , Android 侧的 LeakCanary ,本文将会带你实现一个 Flutter 可用的 LeakCanary。 + +### 🐕 🌟 [Apple Clip 技术详解](https://juejin.im/post/5ef41c9b6fb9a07e6143b0d0) + +[@享耳先森](https://github.com/iblacksun):苹果在 WWDC2020 上发布了 App Clip,本文从产品定位及实现细节上介绍了 App Clip 的方方面面,还与 `PWA`、`Instant Apps`、`小程序` 进行横向比对,推荐阅读。 + +### 🐕 [干货 | 携程 RN 渲染性能优化实践](https://mp.weixin.qq.com/s/3F8TOEdbiNX7SvXcy38Qrg) + +[@looping](https://github.com/looping):本文从理论方案、操作过程以及实用工具三个方面系统地总结介绍了携程在 React Native 渲染优化方面的实践经验,同时部分优化理论也同样适用于 H5 与 Native 平台。希望这篇文章能为对跨平台性能优化感兴趣的小伙伴带来一些实际的帮助与启发。 + +### 🐢 [iOS Memory 内存详解](https://mp.weixin.qq.com/s/YpJa3LeTFz9UFOUcs5Bitg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):为了从根本上更好地理解和分析 iOS 系统上的内存特性,我们要了解一般操作系统的内存管理、iOS 系统内存和 app 的内存管理。本文主要内容的目录如下: + +- 操作系统的内存机制 + - 冯.诺伊曼结构 + - 存储器的层次结构 + - CPU寻址方式 + - 虚拟内存 + - 内存分页 + +- iOS 内存机制 + +- iOS 系统内存占用 + - clean memory & dirty memory + - compressed memory + - 内存占用组成 + +- iOS app 内存管理 + - iOS app 地址空间 + - 引用计数 + - 循环引用 + - weak 和 unowned + - 不会导致循环引用的情况 + +- OOM 崩溃 + - jetsam机制 + - 如何检测OOM + - OOM的常见情况 + +- 内存分析 + +### 🐕 [The Origins of Objective-C at PPI/Stepstone and Its Evolution at NeXT](https://dl.acm.org/doi/abs/10.1145/3386332?fbclid=IwAR0osl29GyKY9x3nFJE8bxYtDm5TnN4k0YOmqavny3uW5BaoL-Sk34xxOJs) + +[@莲叔](http://aaaron7.github.io/):OC 毫无疑问是移动互联网时代最有影响力的编程语言之一。我们都知道 OC 是 NeXT 主要编程语言,随着 NeXT 被苹果收购后就成为苹果主推的编程生态,但其实 OC 并不是 NeXT 发明的。OC 的前身叫 Object-Oriented Pre-Compiler(OOPC),其作用是将 Smalltalk 语言转换为 C 语言。当时正处在“软件危机”的时代,关于如何更好的提升开发效率的研究如火如荼,OOPC 也是其中的一个研究项目。关于 OC 的发展值得回味的地方还有很多,有兴趣的同学可以看一下这篇由 OC 原作者和 NeXT 退休工程师共同撰写的关于 OC 发展历史的论文,非常详细的列举了不同时代的 OC 的迭代,可以看到不同的 feature 分别都是在什么样的背景下被发明出来的,对于未来怎么用好这些 feature 也非常有帮助。 + +### 🐕 [动手实现一个精简的动态布局 DSL](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAwMzc1NzU3Nw==&action=getalbum&album_id=1410655476664303616&subscene=159&subscene=158&scenenote=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzAwMzc1NzU3Nw%3D%3D%26mid%3D2247483732%26idx%3D1%26sn%3D0b3a6c988190e8e87e62f97abac03d88%26chksm%3D9b370232ac408b241791b1172b8d19c90cc9f5ecb218cad39759fcd447df811c8172497ed6ab%26scene%3D158%23rd#wechat_redirect) + +[@老峰](https://github.com/gesantung):AutoLayout 是目前 iOS 上常用的布局方案,而它的本质也是通过 Cassowary 求出元素具体的位置与大小。这个系列作者将基于 Flex 布局算法,打造一个基于 C++ 的跨平台布局 DSL,实现一个精简动态布局引擎。那怎么才能让数据动起来呢?React Native 是通过 javascript 来实现数据动态化的,而这个系列作者基于编译器前端技术实现一个自定义的脚本,利用 C++ 实现一个精简的脚本解释器完成数据动态化。Flex + Script 实现元素的布局计算,再通过原生渲染。对自定义动态布局 DSL 感兴趣的读者不妨阅读。 + +### 🐕 [Flutter 中的图文混排与原理解析 | 开发者说·DTalk](https://mp.weixin.qq.com/s/Scl4lP-sgesti74pZH4efg) + +[@极速男孩](https://github.com/ztlyyznf001):图文混排是在开发中比较常见的需求,在 flutter 中我们主要通过在 Text.rich 中添加 TextSpan 和 WidgetSpan 来实现,我们可以通过 WidgetSpan 来添加任何你想要的 Widget,包括 Image 和 Card 等。这篇文章主要通过分析 RichText 的源码,看到 flutter 如何通过 MultiChildRenderObjectElement 来管理当中的 Widget,并如何一步步的如何去绘制这些 Widget 的。 + +### 🐕 [iOS Jailbreak Principles 0x02 - codesign and amfid bypass](https://mp.weixin.qq.com/s/WyjWk9vrVAscDggX8GDNbQ) + +本文是 **iOS Jailbreak Principles** 系列文章的最新一篇。前面的文章介绍了从内核漏洞到 tfp0,再到 rootfs 系统可读写。但到这为止,我们能做的事情还是比较有限的,为了做更多事情需要控制系统的 binary 或者分发自己的 binary 到系统,而为了做到这样,则必须绕过 codesign 机制。本文分析了 iOS 12 以后的 codesign 机制,随后从 amfid 入手分析了其绕过方案和实施过程。 + +### 🐎 [@StateObject 和 @ObservedObject 的区别和使用](https://onevcat.com/2020/06/stateobject/) + +[@JonyFang](https://github.com/JonyFang):今年 SwiftUI 补完了不少内容,其中状态管理方面是一个重要的话题。对于那些从外界接受 ObservableObject 的 View,究竟是使用 @ObservedObject 还是 @StateObject,需要根据情况和需要确定。像是那些存在于 NavigationLink 的 destination 中的 View,由于 SwiftUI 对它们的构建时机并没有做 lazy 处理,在处理它们时,需要格外小心。本篇博客文章展开介绍了 @StateObject 和 @ObservedObject 的区别和使用。 + +### 🐕 [iPadOS 鼠标的设计哲学](https://mp.weixin.qq.com/s/z1ZVYXjNGutoovth5-lL-Q) + +[@张嘉夫](https://github.com/josephchang10):作者王禹效在这篇文章里详细分析了 Apple 是如何为 iPadOS 设计鼠标功能的,包括与传统桌面操作系统鼠标在逻辑、显示和设计上的区别,以及 Apple 做出这些改变的原因。作者认为其实 Apple 不是什么魔法师,只是在设计时认真的去为用户做考量,愿意在这些别人不在意的细节上投资。一点点积累之后,就有了自己独特的用户体验。 + +### 🐎 [iOS Crash 分析攻略](https://mp.weixin.qq.com/s/hVj-j61Br3dox37SN79fDQ) + +[@老驴](https://www.weibo.com/6090610445):淘系技术出品的一篇关于 Crash 的文章。从基础到深入的介绍 Crash 日志渠道、Crash 捕获的原理、看懂 Crash 日志、Crash分析方法。这些东西可能在平时的开发中已经被 crash kit 工具所处理,很多时候大家并不会去深究其中的原理和含义。而这篇文章就很好的补充了这些。 + +其中的一些 debug 技巧很实用,在开发中也可以尝试着实践一下。总之,这是一篇不错的从入门到精通类的文章,值得一读。 + +## 音频 + +### 🐕 [网恋奇遇记 :偶遇杀猪盘之我能反杀](https://www.xiaoyuzhoufm.com/episode/5efeafa36d76607427547473) + +网络一线牵,珍惜这段缘;时间套路深,网恋需谨慎。 + +这期播客讲述了一个程序员使用网恋交友应用后遇到“爱情骗子”的故事,厉害的是小哥凭借执着的正义感最后成功追回骗款,还增加了额外收入。希望通过这期节目可以提高大家对网恋的警惕性。前 5 分钟主播们在日常寒暄,着急的朋友可以从 5 分钟后开始直接进入。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#120-2020.07.23.md b/Reports/2020/#120-2020.07.23.md new file mode 100644 index 000000000..959ff6f48 --- /dev/null +++ b/Reports/2020/#120-2020.07.23.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #120 | 2020-07-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**热烈欢迎周报团队的第 34 个编辑 - [@Damien](https://github.com/ZengyiMa)!Damien 目前就职于携程国际基础平台。** + +## WWDC20 + +本周在周报公众号上我们推送了 5 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- 🌟 [WWDC 2020 Session 10041 - What's new in SwiftUI](https://mp.weixin.qq.com/s/uwDTHvfQtsikDDSJyEkVcQ) +- 🌟 [WWDC2020 10646 - What's new in Web Inspector](https://mp.weixin.qq.com/s/tidA4bwYz3C5qNGrOtTaKQ) +- 🌟 [IAP 订阅服务的生命周期和最佳实践](https://mp.weixin.qq.com/s/9cG9TPFxDbtSD3hqTqimLA) +- 🌟 [介绍 Xcode 中 StoreKit 测试](https://mp.weixin.qq.com/s/m2twCCn5G4o0cTeWUKDn_w) +- 🌟 [在 SwiftUI 中创建复杂功能](https://mp.weixin.qq.com/s/T_N1VE2UJrRwKqVTfXDT4w) + +## 新闻 + +### 🐎 [Github 徽章 +1:Arctic Code Vault Contributor](https://github.blog/2020-07-16-github-archive-program-the-journey-of-the-worlds-open-source-code-to-the-arctic/) + +[@JonyFang](https://github.com/JonyFang):GitHub 在今年已经将 21TB 的开源代码封存到北极圈中,通过特别设计的胶卷以及北极代码保险柜(GitHub Arctic Code Vault),这些代码预计将能够保存 1 千年,而这项代码封存工作已经在 2020 年 7 月 8 日完成。 GitHub 还设计了一个特别的徽章,来感谢有贡献的开发者,当开发者所贡献的代码,被选择封存到北极,在其个人页面便会显示 Arctic Code Vault 徽章。另外,GitHub Archive Program 还与 Project Silica 合作,Project Silica 开发了可储存云端规模资料的媒体,透过超高速雷射光技术,改变玻璃材料的结构,将资料储存在石英玻璃中。 GitHub 提到,因为石英玻璃是一种耐用的储存材质,可将资料保存上万年,具有抗电磁干扰、抗水和抗热的特质,是开源程式理想的储存媒体,目前 GitHub 利用这项技术封存了 6 千个最受欢迎的存储库。 + +> 中文的译文可以参考这篇:[你的 Git 代码已成功入驻北极圈,至少保存 1000 年](https://mp.weixin.qq.com/s/61dD_RyExzs6EGvQIN_z2Q) + +## 新手推荐 + +### 🐎 🌟 [Flutter widgets 快问快答 | 第一期](https://mp.weixin.qq.com/s/rBNAs1r5j0DzlhOeRu9H0A) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):这是 Google 官方做的一个比较有意思的教程,这是一系列的,在 B 站持续更新,有助于新接触 Flutter 的同学快速了解 Widgets 及各种酷炫的用法,强烈推荐新手刷一下,每个视频讲解都很短,[传送门](https://space.bilibili.com/64169458/channel/detail?cid=131083)。 + +## 文章 + +### 🐕 🌟 [iOS14 隐私适配及部分解决方案](https://mp.weixin.qq.com/s/CJML-2YUv6sqEEnI8rI0Bw) + +[@享耳先森](https://github.com/iblacksun):隐私一直是 iOS 系统的重中之重,在刚刚结束的 WWDC 2020 ,苹果向我们展示了新的 iOS14 系统。iOS14 的适配,很重要的一环就集中在用户隐私和安全方面。本文介绍了 iOS 14 系统隐私方面的调整以及开发者如何跟进适配,涉及以下方面的调整: + +- 相册增加 Limited +- 地理位置增加模糊定位 +- 局域网信息 +- 剪贴板 +- 相机和麦克风 +- IDFA + +### 🐕 🌟 [iOS 14 苹果对 Objective-C Runtime 的优化](https://mp.weixin.qq.com/s/vSw98xbpEe4pjtBfqFNGAw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):尽管 `Swift` 势头凶猛,但 `Objective-C` 也依然在发挥着自己的余热。在 `WWDC 2020` 中,`Apple` 针对 `Objective-C` 中的 `Runtime` 做了三项优化: + +- 类数据结构变化:节约了系统更多的内存 +- 方法地址的优化:节约了内存,并且提高了性能 +- `Tagged Pointer` 格式的变化:提高了 `msgSend` 性能 + +### 🐢 🌟 [美团外卖 Flutter 动态化实践](https://mp.weixin.qq.com/s/wjEvtvexYytzSy5RwqGQyw) + +[@xiaofei86](https://weibo.com/xuyafei86): 动态化是 Flutter 无法避开的话题。本文从 Flutter 的特点讲起, 阐述了美团外卖团队在整个 Flutter 动态化上探索的心路历程,还有设计理念、核心原理以及业务应用的经验。本文的视角也不局限于框架本身,更多思考了在解决问题的过程中技术团队需要做的事情,希望能对大家有所启发和帮助。 + +### 🐎 🌟 [构建健全的空安全](https://mp.weixin.qq.com/s/rgVJn928fyGunNO5kDKnSA) +[@Damien](https://github.com/ZengyiMa):空值错误是最常见的错误之一,Dart 团队为了让开发者构建更安全的程序,带来了空安全的计划。本文将会从设计原则、语法介绍、易用性、兼容性等方面来介绍 Dart 团队在构建空安全计划的努力。空安全计划的推出不仅可以让你程序更安全而且还可以在编译器的优化下提升 19% 的性能。从事 Dart & Flutter 相关领域的同学必读文章。 + +### 🐢 [A Best in Class iOS App](https://www.swiftjectivec.com/a-best-in-class-app/) + +[@AidenRao](https://weibo.com/AidenRao):作者维护了一个列表,去支持列表里提到的每一个细节,帮助你使 APP 变得更好,它涵盖五个部分: + +- 辅助功能:最好的应用,为每个人的使用而设计,例如支持视力辅助功能 Voice Over,足够高的色彩对比度(至少 7:1)。 +- 平台技术:去支持苹果提供的新特性,例如暗模式,iPadOS 的多任务处理。 +- 用户体验:好的用户体验让人无需思考,一切理应如此。例如使用正确的音频设置并优雅地响应音频中断,所有可点击的界面元素至少为 44*44 大小。 +- 设计:这部分列出了经过深思熟虑的设计规范。例如使用正确的系统边距(layoutMarginsGuide,safeAreaLayoutGuide 等)。 +- App Store:App Store 展示资料经过精心的设计,例如创建预览视频,对关键词和类别进行仔细研究。 + +### 🐕 [Our Transition to React Native](https://blog.khanacademy.org/engineering/our-transition-to-react-native/) + +[@looping](https://github.com/looping):本文介绍了将 Khan Academy(可汗学院)的应用迁移到 React Native 的原因,其中遇到的挑战,以及整体迁移过程。同时也讨论了在混编、国际化等问题上的解决方案。最后提出了个人对 RN 的一些看法,目前自己团队技术现状和对今后的展望。推荐有正在做类似技术迁移和对长期跨平台技术演进感兴趣的同学阅读参考。 + +### 🐕 [Flutter 和桌面应用的最新进展](https://mp.weixin.qq.com/s/AfgT7jqv4m0YjFRIF5HhbA) + +[@极速男孩](https://github.com/ztlyyznf001):flutter 的目标是全平台的语言,包括移动端桌面端和 Web 的应用。在最新的 dev 分支中,flutter 已经开始提供了对 mac app 的支持,本文主要介绍了 flutter desktop 的最新进展。flutter desktop 在新版本中主要优化了桌面端的键盘和鼠标输入体验,提供了 Windows 的外部函数的支持,通过通用接口的方法提供 Windows 和 Linux 插件的支持,并在 Windows 中提供较好的兼容性。值得注意的是 Windows 和 Linux 在 master 的 Channel 上可用,而 macOS 只在 dev 的 Channel 上可用,macOS 版本虽然较为稳定,但不推荐在生产环境使用。 + +### 🐕 [You Should All Build This Custom Instrument for Your App](https://blog.cocoafrog.de/how-to/2020/06/20/You-should-all-build-this-custom-instrument.html) + +[@四娘](https://kemchenj.github.io/):Instruments 是一个强大的调优工具,在 18 年的时候 Xcode 10 就重写了 instruments 的核心,让我们可以更加便捷地进行自定义,作者通过一个测量网络请求时间的例子介绍相关的操作步骤和 API。 + +### 🐎 [探索WebAssembly实现iOS热修复/第一篇/WebAssembly快速上手](https://mp.weixin.qq.com/s/YGY7M1PjXEujAKoIOnCWtQ) +### 🐎 [探索WebAssembly实现iOS热修复/第零篇/前言](https://mp.weixin.qq.com/s/U0q4n71VhIe6AawPtNVTzg) + +[@五子棋](https://satanwoo.github.io): 作者基于 libffi + WebAssembly 实现了一套 iOS 热修复的框架,整体思路比较清晰,对于想要了解 Objective-C Runtime 的同学来说是一个不错的文章。本文是系列第一、二篇。 + + +### 🐕 [Metal新特性:大幅度提升iOS端性能](https://mp.weixin.qq.com/s/cJocn4bLXsO2336Cha9woA) + +[@莲叔](http://aaaron7.github.io/):WWDC20 推出了非常多关于 Metal 的专题,足以可以苹果对于推广这项新的 GPU 计算框架的决心。本文较为系统的介绍了其中的主要内容,主要包括以下章节 +- 【Harness Apple GPUs with Metal】 +- 【Optimize Metal apps and games with GPU counters】 +- 【Build GPU binaries with Metal】 +- 【Debug GPU-side errors in Metal】 +- 【Gain insights into your Metal app with Xcode 12】 + +内容涵盖了功能介绍、性能优化,Debug 技巧和相关工具等。对于 iOS 渲染类栈的同学建议学习。 + +## 工具 + +### [是时候扔掉 Postman 了,Apifox 真香!](https://xie.infoq.cn/article/ae84a97dcda218e46cd885e8d) + +[@Parsifal](https://github.com/ParsifalC):Apifox 是一款集成了 Postman 的接口调试、Swagger 的接口文档管理以及 Mock 的假数据模拟三个功能的工具,目前正在开放内测,厌烦了在各个工具间切换的朋友可尝试。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#121-2020.07.27.md b/Reports/2020/#121-2020.07.27.md new file mode 100644 index 000000000..3ef93a47b --- /dev/null +++ b/Reports/2020/#121-2020.07.27.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #121 | 2020-07-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机技术周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 6 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [SwiftUI 的可视化编辑工具](https://mp.weixin.qq.com/s/cRCdRtdVVCbHLbZNzuLB_w) +- [打造更容易 Preview 的 SwiftUI 应用](https://mp.weixin.qq.com/s/lHMMvvVKbLxZ_tisQIVLsQ) +- [SwiftUI 中的 App 要领](https://mp.weixin.qq.com/s/Pog25zL_essR47p57FBElw) +- [为小组件构建 SwiftUI 视图](https://mp.weixin.qq.com/s/MC14yFDO2Y2tKje9gM1ibg) +- [如何用 SwiftUI 写一个独立的 App?](https://mp.weixin.qq.com/s/eFqci9voCoMjlZ5B2PfAHQ) +- [十年过去了,Swift 发展的怎么样了?](https://mp.weixin.qq.com/s/ABGp6l3WVBn4QjjDg0qIOA) + +## 文章 + +### 🐕 🌟 [Apple Widget:下一个顶级流量入口?](https://mp.weixin.qq.com/s/ujZfU1CEQ1EfqoO8UR_kSg) + +[@EyreFree](https://github.com/EyreFree):Widget 是 Apple 在 WWDC20 推出的新的桌面内容展现形式。Widget 的出现,让 iOS 系统的桌面有了破局,更多产品能够有机会借助 Widget 来丰富自己产品的内容表达。本文对 Widget 的特点、刷新方式、Widget 和 SwiftUI 的关系、Widget 的展示形式等进行了全面的介绍,并进行了总结与展望,对 Apple Widget 感兴趣的同学千万不要错过! + +### 🐕 🌟 [有赞移动热修复平台建设](https://mp.weixin.qq.com/s/u4l4DXoijR4ZkGlqL3DRcA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文主要介绍了有赞的热修复平台,及在搭建过程中遇到的一些问题。以 Android 端为例,目前有赞的热修是基于 Tinker 自建的后端服务 + Android SDK 实现的。有赞热修复平台,是结合有赞移动团队实际开发过程遇到的问题,逐步解决逐渐完善的,读者可以结合自身团队打造合适的热修复管理平台。 + +### 🐕 🌟 [猿辅导 iOS 精准测试实践 - Objective-C 与 Swift 混编工程精准测试探索](https://mp.weixin.qq.com/s/14hmLWNXAh1FKZT5NI5QsQ) + +[@Damien](https://github.com/ZengyiMa):文章从质量保障问题出发抛出「精准测试」的概念,进一步深入到如何在 iOS 移动端使用 LLVM Code Coverage 方案来实现覆盖率的检测,以及深入挖掘了 LLVM Code Coverage 覆盖率的实现原理。最后作者分享了猿辅导在落地精准测试体系的探索和实践经验,为业界的覆盖率检测方案提供了新思路。 + +### 🐎 [WWDC20 Summary](https://kean.blog/post/wwdc20-summary) + +[@张嘉夫](https://github.com/josephchang10):[WWDC20](https://developer.apple.com/wwdc20/) 结束后,世界各地的团队正在积极地适配 Apple 平台里最新、最棒的技术。设计和产品团队通常专注于产品,不一定会密切关注来自平台的最新技术。而另一方面,开发者的主要关注点则是各个技术 session。因此,很多情况下没有人会直接对平台的演进负责,这也导致来自平台的新技术可能需要花上几个月、几年才能适配。不论是开发者还是设计师,只有少数的 geek 才会关注平台的每一项更新,因此作者制作了一份[总结 WWDC20](https://kean.blog/assets/wwdc20-summary.key.zip) 的 Keynote 幻灯片(只涵盖 iPhone 和 iPad),以便让您的产品和设计团队获悉来自平台的所有技术更新。 + +### 🐕 [What should you know about a navigation history stack in iOS 14](https://sarunw.com/posts/what-should-you-know-about-navigation-history-stack-in-ios14/) + +[@老峰](https://github.com/gesantung):iOS 14 导航栏新特性,返回上一级页面时,长按返回按钮,会出现选择返回到第几级页面菜单,更加人性化。本文主要介绍了适配这个 feature 时处理长标题,自定义标题,无标题等场景时需要注意的问题,适配 iOS 14 的同学可以了解一下。 + +### 🐎 [我们重新设计了 pub.dev,不来试试?](https://mp.weixin.qq.com/s/NodeZQs4Krkmcz_bOfjOAQ) + +[@极速男孩](https://github.com/ztlyyznf001):pub.dev 对 flutter 开发者来说是重要的查找包的工具。google 最近对他进行了更新,是我们更方便的找到优质的 package 。进一步优化了 pub.dev 的评分体系,从而更能通过评分判断一个 package 的质量。并对多平台通过筛选和标签做了进一步的区分,方便我们快速的找到正确的平台支持。 + +### 🐎 [WasmPatch 开源,又一个 iOS 热修复框架](https://mp.weixin.qq.com/s/4W2NNfvsgsaUQg0Q7SsSZg) + +[@五子棋](https://satanwoo.github.io): 作者基于 libffi + WebAssembly 实现了一套 iOS 热修复的框架,整体思路比较清晰,对于想要了解 Objective-C Runtime 的同学来说是一个不错的系列文章。 + +### 🐕 [Swift Code Injection using dyld_dynamic_interpose](http://johnholdsworth.com/dyld_dynamic_interpose.html) + +[@四娘](https://kemchenj.github.com):Injection 是一个代码注入工具,可以在不重启 App 的情况下让代码修改生效(也就是俗称的热刷新),在最早的 Objective-C 版本里,这件事情很简单,只要在加载完 dylib 之后调用 Runtime API 进行替换即可。 + +问题在于 Swift,最早 Swift 1.0 发布之后,作者只能使用修改 vtable 的方式去修改 non-final 的函数,但 struct 和 enum 的声明和函数派发一直是个问题。 + +在最近发布的 InjectionIII 里这个问题终于得到了解决,作者在 Twitter 的讨论里发现了一个 dyld 的私有 API `dyld_dynamic_interpose`,这个 API 可以在加载 dylib 时便捷地替换掉函数实现,在此基础上作者还添加了 SwiftUI 的支持,感兴趣的同学可以看一下。 + +### 🚧 🐎 [Streamoji - Custom Emoji Library for iOS UITextView](https://dev.to/cardoso/introducing-streamoji-custom-emoji-library-for-ios-4g65) + +[@xiaofei86](https://weibo.com/xuyafei86): 自定义表情符号是一种有趣的方式,可以给你的 App 带来更多的活力和可定制性。它们在一些最流行的 App 中都有使用,比如 Slack、Discord 和 Twitch。然而,iOS SDK 并没有为自定义 Emojis 提供直接的支持。现在,使用新的开源库 [Streamoji](https://github.com/GetStream/Streamoji) 只需几行代码就可以将它们添加到自己的 App 中。 + +你可以通过 gif、png、unicode 来定义表情,用 UITextView 来渲染他们,还可以控制显示质量并与文本大小自动匹配。如果感兴趣,通过 [Slackmojis](https://slackmojis.com) 找到更多有趣的表情并应用到你的 App 中吧。 + +### 🐕 [Handling deeplinks in iOS 14 with onOpenURL](https://www.donnywals.com/handling-deeplinks-in-ios-14-with-onopenurl/) + +[@JonyFang](https://github.com/JonyFang):Xcode 12 beta 3 最新消息,SwiftUI 在 iOS 14 中为 deeplink 的处理新增了 onOpenURL 方法。开发者可以在视图上注册一个 URL 处理,以便这些视图可以根据需要来响应 URLs。这让 deeplink 的处理变得更加灵活,对项目解耦也有很大的帮助,与过去在 AppDelegate 和 SceneDelegate 中处理 URL 的方式有了很大的不同。 + +## 代码 + +### [Exposure Notification](https://developer.apple.com/exposure-notification/) + +[@老驴](https://www.weibo.com/6090610445):Apple 和 Google 合作的新冠病毒接触历史 API 已经上线有一段时间了,Apple 和 Google 也给这个 Framework 制作了文档。有兴趣的话可以来看看 Apple 和 Google 是怎么实现这个 API 的。 + +强烈建议搭配 nshipster 的 [Contact Tracing](https://nshipster.com/contact-tracing/) 来看,这篇文章我们在之前也做过推荐。 + +### [OCRunner](https://github.com/SilverFruity/OCRunner) + +[@Parsifal](https://github.com/ParsifalC):以 [JSPatch](https://github.com/bang590/JSPatch) 为代表的基于 JSCore 系列热修复方案接连被苹果审查后,社区近几年也涌现了不少其他的实现思路。在开源社区这块,比较多的是利用自定义轻量级 OC 解释器配合 `libffi` 来实现,比如 [OCEval](https://github.com/lilidan/OCEval),以及这个 [OCRunner](https://github.com/SilverFruity/OCRunner)。 + +> 本开源代码由 [SilverFruity](https://github.com/SilverFruity) 自荐。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#122-2020.08.03.md b/Reports/2020/#122-2020.08.03.md new file mode 100644 index 000000000..9eefe906a --- /dev/null +++ b/Reports/2020/#122-2020.08.03.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #122 | 2020-08-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🌟 🐕 [详解 WWDC 20 SwiftUI 的重大改变及核心优势](https://mp.weixin.qq.com/s/hp1nMopK_XBkFT7zp3gCfA) + +[@zvving](https://github.com/zvving):在苹果统一平台的大方向下,SwiftUI 不仅是用来替代 UIKit 的布局引擎,也是统一苹果所有终端视图的『终极方案』。在这个背景下,不难理解 SwiftUI 2.0 大量的内容更新。 + +本文汇总了其中的重大改变,并介绍 SwiftUI&Swift 在淘宝的落地情况。都 0202 年了,如果你的团队还没开始用 Swift,是不是该反思一下?😄 + +### 🌟 [​ 我们用 Flutter 写了一套全新的 Flutter 开发者工具](https://mp.weixin.qq.com/s/4mcFo3z8DhCDkEMX7IPmww) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Dart DevTools 是由官方团队产出的 Flutter 开发工具,日前官方团队用 Flutter 重新构建了 Dart DevTools ,目前已经在最新版本的 Flutter 插件中集成。在重构原有工具的基础上新增了不少新工具,比如 Layout Explorer , Networking View 等。强烈建议正在使用 Flutter 开发的同学仔细研究一番。 + +### 🐢 [PRODUCT THINKING · 产品沉思录](https://index.pmthinking.com/PRODUCT-THINKING-a601a12335044f349a22caf57f274c27) +[@zvving](https://github.com/zvving):老朋友 [少楠(Plidezus)](https://mp.weixin.qq.com/s/Pj4VHdUQNYMqRAQ9uX5-jA)是资深产品经理、设计师、连续创业者,还曾开过超市、做过外卖。同时,他更是充满好奇的互联网玩家:三年前,少楠发起并持续建立了这个数字后花园——**产品沉思录**。从人物集、产品历史、到跨界、认知与思维,不一而足,其中有不少很难收集的珍贵资料。 + +本期把产品沉思录推荐给大家,在这个后花园闲逛一会儿,相信你会发现诸多宝藏。 + +## 文章 + +### 🐕 [Swift 5.3 又更新了什么新奇爽快的语法?](https://mp.weixin.qq.com/s/pQiLyl572fSgMX1Fq3RDhw) + +[@享耳先森](https://github.com/iblacksun):Swift 从 WWDC14 发布至今,已经经过了五年多的迭代,5.3 随着 WWDC20 一起发布,看过相关 Session 的同学一定对 `[SE-0279] Multiple trailing closure` 印象深刻。本文作者给大家列出了 Swift 5.3 的一些改动点,同时对 Swift 的现状与未来,作者也给出了他自己的一些看法。 + +### 🐕 [Core Image:iOS 图像处理技术追踪](https://mp.weixin.qq.com/s/VeRohpOm_Wo6TNJ4IOTCAA) + +[@anotheren](https://github.com/anotheren):Core Image 是 Apple 平台上最实用的图像处理技术,并在各个平台上都提供了大量现成的工具以快速实现图片/视频的处理。本文介绍了在 WWDC20 中,苹果官方针对 Core Image 技术在三方面做的优化:Core Image 对视频/动图的支持、基于 Metal 构建 Core Image (CI) Kernel 以及 Core Image 的 Debug 支持。 + +### 🐕 [iOS 大解密:玄之又玄的 KVO](https://mp.weixin.qq.com/s/0Yfb-FYorH5GZ3ZB6bMCUQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):说到 KVO,不少人都知道其本质是基于被观察的实例的 isa 生成一个新的类并在这个类的 extra 空间中存放和 KVO 操作相关的关键数据,然后这个新的类以一个中间人的角色借助 extra 空间中存放各种数据完成复杂的方法调度。但是如果仿照系统的 KVO 来实现一套自定义的 KVO,你会发现各种诡异的 bug。本文从汇编层面向大家介绍了 KVO 的本质并提供了相关 bug 的解决方法,其分析和解决问题的思路很是值得我们借鉴。 + +### 🐕 [WWDC:无线网络优化实践,带来哪些启发?](https://mp.weixin.qq.com/s/R3jMJqNSFkjRtXGePPHKQA) + +[@Damien](https://github.com/ZengyiMa):本文从问题背景、实现原理、实践经验和业务价值角度出发深入介绍了 WWDC20 中推出的加密 DNS 以及受限网络中推送这 2 个新网络特性。并且在后文中介绍了手淘在新网络特性如 IPv6、HTTP/2、TLS1.3、MTCP 以及 HTTP/3 中的实践经验和落地情况,对正在做网络相关的体验优化和升级的同学提供了很好的参考资料。 + +### 🐕 [GitHub 用对了吗?Flutter 团队分享如何管理大型开源项目](https://mp.weixin.qq.com/s/zo7i232oCQexyegioB7kxA) + +[@老峰](https://github.com/gesantung):Flutter 作为近年热度非常高的跨端开源项目之一,从开发者那里收到了大量的反馈,以及海量的 issue。本文主要分享了 Google Flutter 团队使用 GitHub 管理维护大型开源项目的经验,包括使用 GitHub 管理海量 issue,issue 标签化优先级排序方案,通过 issue 完结率衡量项目运行状况,如何清理积压的 issue 等。 + +### 🐢 [连续 3 年最受欢迎:Rust,香!](https://mp.weixin.qq.com/s/TPV6uG7StvSQIj3lxufU0Q) + +[@tom510230](https://xiaozhuanlan.com/u/6682065345):本文全面地介绍了 Rust 语言的语言特性,包含以下几个 issue +- 性能:对比下来完胜 go 和 python,这个网上一直有人做 profile,感兴趣的同学可以找到很多的佐证,最大的原因是因为 Rust 的 runtime 不需要 JIT 之类的机制,编译后的 bitcode 即可直接运行 +- 内存安全性:所有权规则类似一个单引用计数的机制,考虑一下如果内存一直只有一个变量(所有者)能够操作的话,自然没有内存竞争的问题 +- 变量生命周期:编译器会自动发现潜在的野指针问题,要修正了以后才能够编译通过 +- 线程安全:在 Rust 中,线程间的数据共享是通过很“别扭”的方式来完成的,可以理解为就是显式获取,显式释放,显式转移所有权,然后才能完成多线程通信,但是这样子却可以通过代码逻辑,保证了不会出现多线程访问边界资源导致的多线程崩溃问题 +- 开发效率:看了以上的描述,可以大概看出来编写合理的 Rust 代码,需要很高的入门门槛,调试工具的缺失也一直是 Rust 被人诟病的问题 +- 跨平台:因为轻量级运行时的关系,所以 Rust 嵌入到各种语言的运行环境都没有什么压力 +- 社区生态:很弱,Stack Overflow 上面基本都是问问题居多,基础组件也有很多缺失,需要自己发明轮子 + +总体而言,国内大规模使用 Rust 的公司,目前公开分享的,除了[字节跳动](https://www.infoq.cn/article/OH79WEaK7Z3S2XaVO*BV)以外,还有就是在[区块链](https://xie.infoq.cn/article/ba4877ebb2ae379cda30ec136)领域中的高性能表现了,期待后续随着越来越多大厂的加入,Rust 会变得越来越香 + +### 🐕 [Flutter 季度调研结果分享 | 开发者的选择](https://mp.weixin.qq.com/s/3NAa-uNSZ-KmGsZoVgKs3Q) + +[@EyreFree](https://github.com/EyreFree):Flutter 团队每季度进行一次为期十天的问卷调研,以听取大家使用 Flutter 的体验。本文分享了今年 5 月启动的第九次季度调研的结果,包含了围绕 Flutter 的使用情况、代码示例、Flutter 应用性能、编写 package 等主题的调研结果,对目前 Flutter 在全球的使用情况有了一个比较直观的反映。虽然 Flutter 团队可能无法直接回答每一条评论,但开发者的需求和评论每天都会影响团队的决策,希望有越来越多对 Flutter 感兴趣的朋友能够参与到 Flutter 生态的建设中来。 + +## 代码 + +### [如何实现一行命令自动生成 Flutter 插件](https://mp.weixin.qq.com/s/MKQAcYwJ4kiYg-Z8UeddkQ) + +[@邦Ben](https://weibo.com/linwenbang):首先,这个插件是基于 DartNative 框架衍生出来的辅助代码生成工具,用于提高开发 DartNative 框架开发效率,因此不能单独使用。所以如果对 DartNative 还不了解,那请先看下下方两个链接。简而言之,就是通过 `antlr` 进行分析 Native 语言(Objective-C, JAVA, Swift, Kotlin 等)得到 AST ,最后生成 Dart 代码(当然,你可以手写 ~)。对于不使用 DartNative 的读者来说,也可以了解一下工作原理,这类工具在基础工程效率方面或许可以给你带来不少启发。 + +参考阅读: + +- [DartNative Github Repo](https://github.com/dart-native/dart_native) +- [用 Dart 来写 Objective-C 代码](https://mp.weixin.qq.com/s?__biz=MzA5NzMwODI0MA==&mid=2647765287&idx=1&sn=219d4f944b22c0381b1c9e301b5bbd40&chksm=8887ca18bff0430ee847b4f5820f42b79c664a054fd7c149a5e5498f2d96b46f12cb63ca49e7&scene=158#rd) +- [告别 Flutter Channel,调用 Native API 仅需一行代码!](https://mp.weixin.qq.com/s?__biz=MzA5NzMwODI0MA==&mid=2647767683&idx=1&sn=77c7d56ee5c3c141209424a138b94f72&chksm=8887c1bcbff048aa2e0a077893338ef79c630b833d19bcf73beb40a42cbc835b3f159a24504e&scene=158#rd) + +### [jVirus/swiftui-2048](https://github.com/jVirus/swiftui-2048) + +[@JonyFang](https://github.com/JonyFang):一个很棒的 SwiftUI 开源项目,使用了纯 SwiftUI 2.0 编写了经典的 2048 游戏,同时支持 iOS 和 iPadOS,也可以轻松拓展以支持 macOS。另外,作者对 iPad 纵向和横向的屏幕旋转也做了切换支持。对于想学习 SwiftUI 的读者,这是一个可以拿来作为参考的示例项目~ + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#123-2020.08.10.md b/Reports/2020/#123-2020.08.10.md new file mode 100644 index 000000000..377cd67b6 --- /dev/null +++ b/Reports/2020/#123-2020.08.10.md @@ -0,0 +1,137 @@ +# 老司机 iOS 周报 #123 | 2020-08-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 4 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [App Clips 探索之旅](https://mp.weixin.qq.com/s/_Uc2EBTk26IjZzS9GmVJ-g) +- [SwiftUI 编程指南](https://mp.weixin.qq.com/s/smQmdXF-3VkHQnUV3G8Z3w) +- [App Clips 开发设计指北](https://mp.weixin.qq.com/s/yBBIkBdwvhJMSWsDnJJMsA) +- [为其他商户构建 App Clips](https://mp.weixin.qq.com/s/2_pmJ0JFtAP0nbSoEj8V9g) + +## 文章 + +### 🌟 🐕 [Flutter 1.20 正式发布,新特性解读](https://mp.weixin.qq.com/s/Ua-463pSzEUiwl4WZMW5bw) + +[@邦Ben](https://linwenbang.weibo.com):Flutter 1.20 正式发布,带来了不少新特性,Flutter 的更新速度还是非常让人满意。 + +- 图标字体摇树优化(即删除你未使用的图标字体,降低体积) +- 提供 SKSL 预热功能,优化动画效果(需要设置)。 +- 优化了鼠标命中测试,提高 web 性能。 +- Dart 2.9 优化了 utf-8 解码器,在低端 ARM 设备上,英语文本的解码速度也提升至近 200%,而中文文本更是提升至 400%。 +- 支持 Android 和 iOS 自动补全功能。 +- 更新了 InteractiveViewer 组件(用于平移、缩放、拖拽以及大小调整等)。 +- 更新 Meterial Slider、RangeSlider、TimePicker 以及 DatePicker. +- AboutDialog 用于显示所有用到的 package 的 licenses +- pubspec.yaml 新格式,主要是指定特定平台 +- VSCode 集成 Dart DevTools(可以不打开网页了)。 +- DevTools 支持网络分析。 +- VSCode 重命名或者移动自动更新对应引用。 +- Channel 生成器(Pigeon),通过 Dart 声明,工具生成 Channel 三端通信代码。 +- 还有很多的 bugfix 以及一些新特性处理。 + +除了性能优化之外,特别推荐关注一下 Pigeon,可以节省下不少编写 Channel 的时间。 + +### 🌟 🐕 [Flutter 初学者必读的高级布局规则](https://mp.weixin.qq.com/s/t5R112IIQUc9SXwWeAgsoA) + +[@Damien](https://github.com/ZengyiMa):本文通过 29 个示例来展示了 Flutter 高级布局规则并且总结 Flutter 布局的原理如下: + +1. Widget 从其父项获得自己的约束 。一个“约束”是由 4 个 double 值组成的:分别是最小和最大宽度,以及最小和最大高度。 +2. Widget 会遍历自己的 子项(Children)列表。Widget 会逐个向每个子项告知它们的约束(各个子项的约束可以是不同的),然后询问每个子项想要设置的大小。 +3. 接下来,Widget 一个个确定子项的位置(在 x 轴上确定水平位置,在 y 轴上确定垂直位置)。 +4. 最后,Widget 将其自身大小告知父项(当然这个大小也要符合原始约束)。 + +对于 Flutter 初学者来说,这是一篇很好阐述 Flutter 布局规则的文章。 + +### 🐢 [Verify your app’s integrity with the new App Attest API](https://developer.apple.com/news/?id=2sngpulc) +[@anotheren](https://github.com/anotheren):新的 App Attest API 是 [DeviceCheck](https://developer.apple.com/documentation/devicecheck) 框架的一部分,可帮助防止 iOS 14 或更高版本上的应用受到安全威胁,从而减少对服务的欺诈性使用。借助 App Attest,你可以在设备上生成特殊的加密密钥,并在服务器提供对敏感数据的访问之前,使用该密钥来验证应用程序的完整性。其核心类为 [DCAppAttestService](https://developer.apple.com/documentation/devicecheck/dcappattestservice)。Apple 提供了一个系列文章来具体讲述如何使用该新特性,包括:[建立应用程序的完整性](https://developer.apple.com/documentation/devicecheck/establishing_your_app_s_integrity);[验证连接到服务器的应用程序](https://developer.apple.com/documentation/devicecheck/validating_apps_that_connect_to_your_server);[评估欺诈风险](https://developer.apple.com/documentation/devicecheck/assessing_fraud_risk);[准备使用 App Attest 服务](https://developer.apple.com/documentation/devicecheck/preparing_to_use_the_app_attest_service)。 + +### 🐎 [Dependency Injection via Property Wrappers](https://www.kiloloco.com/articles/004-dependency-injection-via-property-wrappers/) + +[@四娘](https://kemchenj.github.io/):依赖注入是一种解决高低层级抽象耦合的方式,这篇文章介绍了在 Swift 里如何简单地实现这种模式,并且使用 `@propertyWrapper` 优化它的语法: + +```swift +struct ContentView: View { + @Inject var dependency: MyDependency + + var body: some View { + Button("Tap Me", action: dependency.doSomething) + // prints "Next level injection 💉" when tapped + } +} +``` + +### 🐢 [Swiftʼs Collection Types](https://harshil.net/blog/swift-sequence-collection-array) + +[@JonyFang](https://github.com/JonyFang):这篇文章基于 Sequence、Collection 和 Array 进行拓展,解释了一些重要协议的功能及其存在的原因。在深入探讨复杂结构之前引入了两项思考: +- 1.如何设计 API 以达到最低要求? +- 2.如何设计共享和专项的实现? + +Sequences 和 Iterators 是构建其他协议和具体类型的基础,文中做了部分介绍。最后以 Collection、BidirectionalCollecton、RandomAccessCollection、MutableCollection、RangeReplaceableCollection 的对比分析,解释了为什么存在这些协议及他们可以实现的改进。为了进一步阅读,也可以深入了解源码,尽管 Swift 本身以 C++ 编写,但标准库大部分是使用 Swift 编写的,包括[公共 API 源代码目录](http://github.com/apple/swift/blob/master/stdlib/public/core)。可以最先从 [Sequence](http://github.com/apple/swift/blob/master/stdlib/public/core/Sequence.swift) 和 [Collection](http://github.com/apple/swift/blob/master/stdlib/public/core/Collection.swift) 类型的源代码看起。 + +### 🐕 [MessageMock:优雅的模拟 Objective-C 方法](https://mp.weixin.qq.com/s/jm2QvYqnvFCPcRPocpj9ZQ) + +在代码测试中,对于一些不容易获取的对象,可以虚拟(mock)出一个对象来帮助完成测试。在 iOS 中,已经有 OCMock 这样比较有名的开源框架去解决这个问题。但是 OCMock 在使用上的问题是比较繁琐麻烦,测试一个小的功能可能在使用上也比较麻烦。本文为这种场景提供了一种新的思路,基于 `objc_msgSend` 来进行方法的“模拟”和“校验”。 + +[项目源代码](https://github.com/indulgeIn/MessageMock) + +### 🐕 [Self-Sizing UITableView Cells with SwiftUI](https://noahgilmore.com/blog/swiftui-self-sizing-cells/) + +[@zvving](https://github.com/zvving):在已有 UIKit 项目中如何 Hybrid 使用 SwiftUI,很多小伙伴都关心这个问题。作者尝试在一个略有复杂度的场景:自适应 UITableviewCell 中使用 SwiftUI。如何解决自适应高度,cell 复用?状态改变如何更新?作者对这些问题做了细致的探索,提供不错的实践参考。 + +## 工具 + +### [为啥 Flutter Hooks 没有受到太多关注和青睐?](https://mp.weixin.qq.com/s/L96a8Jc_HAzPdk4VYJ1Q3g) + +[@极速男孩](https://github.com/ztlyyznf001):hooks 最早起源于 React 当中,他可以是我们在不用写类的情况下去管理我们的 state。Flutter Hooks 并不需要掌握 React ,他可以使我们方便的在多个 widget 中共享同一套代码,他为我们提供了状态管理的另一种思路。flutter_hooks 中我们即可以只是用一个函数也同样可以创建一个类去创建一个 hook 。更多的内容可以参考 pub.dev 中的[文档](https://pub.dev/packages/flutter_hooks)。 + +## 代码 + +### [ConfigableCollectionView](https://github.com/miku1958/ConfigableCollectionView) + +[@老峰](https://github.com/gesantung):一个类似用 iOS 13 UICollectionViewDiffableDataSource + CellRegistration 配置 UICollectionView 的库, CellRegistration 封装了 DataSource 简洁 API 配置 CollectionView,DiffableDataSource 提供了高效安全数据操作 API, 对 UICollectionView 新特性感兴趣的读者可以尝试一下。 + +>推荐人:[庄黛淳华](https://weibo.com/augcommaaugust) + +### [HappyCodable](https://github.com/miku1958/HappyCodable) + +[@EyreFree](https://github.com/EyreFree):通过使用 SourceKittenFramework 去自动生成 Codable 代码,让人更愉悦地使用 Codable,具有以下优势: + +- 支持自定义某个属性的 Coding Key; +- 支持忽略掉某些不能 Codable 的属性; +- 支持自动合成非 RawRepresentable 的 Enum; +- Decode 时支持多个 Coding Key 映射同一个属性; +- 便于调试; +- 可以使用模型的默认值; +- 支持简单的类型转换,比如转换 0/1 到 False/True, "123" 到 Int 的 123 或者反过来。 + +>推荐人:[庄黛淳华](https://weibo.com/augcommaaugust) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#124-2020.08.17.md b/Reports/2020/#124-2020.08.17.md new file mode 100644 index 000000000..ab6129638 --- /dev/null +++ b/Reports/2020/#124-2020.08.17.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #124 | 2020-08-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [App Clips 的配置及链接处理](https://mp.weixin.qq.com/s/7CY_C1Y8FSlFy5mQJH5g0g) +- [App Clip 的最佳实践](https://mp.weixin.qq.com/s/D26QI0uBa71UVQIOm2PjOg) + +## 新手推荐 + +### 🐕 [深入理解 YYCache](https://juejin.im/post/6856665902655078407#heading-11) + +[@JonyFang](https://github.com/JonyFang):iOS 开发过程中会用到各种缓存,YYCache 也是大家所熟悉的一个缓存框架。由 YYKit 作者 @ibireme 开发,也是 YYKit 组件之一,是一个线程安全的高性能缓存框架。本篇主要是对 YYCache 内部 YYMemoryCache 和 YYDiskCache 的部分核心源码进行分析及提出了一些使用过程中的小 Tips,可以拿来借鉴使用。除了本文,也推荐看下其他的几个 YYCache 的源码分析文章。链接放到这里: + +- [YYCache 设计思路](https://blog.ibireme.com/2015/10/26/yycache/) +- [YYCache 源码解析](https://juejin.im/post/6844903554214264840#heading-2) +- [从 YYCache 源码 Get 到如何设计一个优秀的缓存](https://lision.me/yycache/) + +## 文章 + +### 🐕 [一文读懂fishhook原理](https://juejin.im/post/6857699952563978247) + +[@五子棋](https://satanwoo.github.io):一篇写的比较清晰的 fishhook 原理的解析文章,整体流程上写的比较完善,可以作为入门 fishhook 学习的一篇文章。 + +### 🐕 [Hook Alamofire](https://github.com/neil-wu/FridaHookSwiftAlamofire/blob/master/howto.md) + +[@四娘](https://kemchenj.github.io):这篇文章着重从 Swift Runtime 数据结构入手进行分析,面向 GitHub 上 3.3 万 star 的 Swift HTTP 网络库 Alamofire,实现一个基础版本的抓包工具,具备:打印 GET / POST 请求;屏蔽 SSL Pinning。过程中会介绍到 Swift 的内存布局,函数调用约定,参数传递,运行时函数调用。 + +> 推荐人:[Neil Wu](https://github.com/neil-wu) + +### 🐕 [经典源码分析之 OCMock](https://juejin.im/post/6856324901419909127) + +[@老驴](https://www.weibo.com/6090610445):OCMock 作为 iOS 圈内老牌 Mock framework,一直都被大家广泛使用。在使用 OCMock 过程中,有时候会遇到一些比较难以理解的问题,这个时候,想要 debug 就不会是那么容易的一件事了。文章作者也是因为这样的原因,去阅读了 OCMock 的源码。而通过阅读源码,作者也发现并且总结了一些比较难以发现的使用点。如果你现在在用 OCMock 的话,不妨一读。 + +### 🐎 [Flutter+FaaS一体化任务编排的思考与设计](https://mp.weixin.qq.com/s/y-poJ5yX4t91b88PDW1o_Q) + +[@Damien](https://github.com/ZengyiMa):本文是闲鱼团队 Flutter+Serverless 三端一体研发架构中任务编排相关的介绍,从如何提高 FaaS 研发体验与研发质量问题出发,通过将具体的业务流程抽象为任务的方式来进行任务编排,以及沉淀多个任务形成云端任务中台来提高研发体验。体系化的处理异常分类、捕获异常与异常监控等多种手段来提高研发质量。对研究移动端 FaaS 一体化研发模式的同学值得一读。 + +### 🐕 [为什么使用汇编可以 Hook objc_msgSend(下)- 实现与分析](https://mp.weixin.qq.com/s/H6BmHEocf5jN78gfuY-tuA) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文介绍了使用 fishhook + 内联汇编来实现 Hook objc_msgSend 的全部实现及其内在原理,包含了以下知识点: + +- 什么是 Inline Hook 技术? +- fishhook 的实现原理是什么? +- 为什么 fishhook 可以 Hook objc_msgSend 方法? +- 如何使用内联汇编来进行记录上下文和还原上下文操作? +- 如何使用内联汇编通过方法地址调用方法? +- 汇编语句模版的简单使用 + +### 🐕 [一文看破 Swift 枚举本质](https://mp.weixin.qq.com/s/Gx7L_Ev0DV19mLYMnH-R1Q) + +[@xiaofei86](https://weibo.com/xuyafei86):本文通过内存结构和 SIL 对 Swift 中枚举的实现进行分析,对过程感兴趣的同学可以阅读原文了解,主要结论如下: + +1. 简单枚举<没有关联值>的本质就是一个整型值,整型值的大小取决于该枚举所定义的类型的数量。 +2. 给枚举添加原始值不会影响枚举自身的任何结构,设置原始值其实是编译器帮我们添加了 rawValue 属性,```init(rawValue)``` 方法 RawRepresentable 协议。 +3. 添加关联值会影响枚举内存结构,关联值被储存在枚举变量中,枚举变量的大小取决于占用内存最大的那个类型。 +4. 添加/调用"实例方法"、"类型方法"、计算属性以及实现协议的本质都是添加/调用函数。 +5. 对于没有添加关联值的枚举系统会默认帮我们实现 Hashable/Equatable 协议。 + +### 🐕 [面向 5G 的阿里自研标准化协议库 XQUIC](https://mp.weixin.qq.com/s/rwa-xUamJtAaIBVZj3eCNA) + +[@looping](https://github.com/looping):XQUIC 是阿里巴巴淘系架构团队根据 IETF QUIC 标准化草案版本自研的协议库。本文对 QUIC 进行了基本的扫盲,并重点介绍了 XQUIC 的设计原理,网络传输优化,以及 Multipath QUIC 技术这几块,内容十分丰富。同时项目已经有开源计划,感兴趣的同学可以持续关注。 + +### 🐕 [客户端稳定性优化实战,Crash率最高下降40%](https://mp.weixin.qq.com/s/jQfrxyvVtBBjUXkJuRinGA) + +[@Parsifal](https://github.com/ParsifalC):我们可以通过提高代码质量和健壮性来降低 App 在线上的闪退率,做到这一步一般就能将 App 的用户闪退率保持在可接受的范围。但对于淘宝这种超级 App,亦或是类似电商产品上,在活动旺季往往遇到更多的是 OOM 类型闪退(产品和交互天花乱坠的营销页面设计,各类 AR、视频等等技术应用,跨端方案的集成,都会带来额外的内存开销)。OOM 类型闪退通常难以定位和排查,相应地也比较难修复。大厂在做性能优化中,都会将 OOM 作为一个比较重要的指标考察,也产出来不少工具和方案。比如周报往期推荐的腾讯出品的 [OOMDetector](https://github.com/Tencent/OOMDetector),Facebook 的 [Reducing FOOMs in the Facebook iOS app](https://code.fb.com/ios/reducing-fooms-in-the-facebook-ios-app/) 等等。淘宝团队根据这几年的沉淀,提出了三个内存优化策略: + +- 精打细算,提升内存的使用率 +- 兜底容灾,尽量让应用延长生命 +- 提升内存上限,突破系统的天花板 + +对业务的内存使用精打细算这是最直接有效的方式,控制内存使用以及降级方案都能有效减少 OOM;兜底容灾得益于 iOS 框架的优势系统已经能自动管理多余内存的释放(比如 UIImageNamed 的享元模式管理、NSCache 的 LRU 等),但 `didReceiveMemoryWarning` 往往会被我们忽略;提升内存上限,对于 iOS 侧这个只能依赖于 WKWebView 独立进程的应用了。总的来说,这是一篇淘宝团队对外总结自己内存管理策略的一篇文章,理念可以参考借鉴。 + +### 🐕 [iOS 开发体验优化方案](https://mp.weixin.qq.com/s/f6hHl9_TLnWqB4hs99ut1Q) + +[@红纸](https://github.com/nianran):本文是闲鱼团队针对于其团队搭建环境、切换分支打包慢,做了体验上的几点有效优化。 + +在解决环境搭建的问题上,闲鱼团队选择了部分 docker 化,即将包管理工具 cocoapods 和 taobaoenv 等配置 docker 化,pods 缓存内容挂在在 docker 上。由于 docker 的可移植性上的先天优势,使得开发者能够更快速的构建统一环境,解决了维护的问题。 + +切分支后 APP 打包速度问题上,其选择了 install 前先缓存 Pods Projects 跟 Flutter 的编译产物,切换分支后,复原编译产物。 + +> 小编注:闲鱼文中提及的 pod 版本为 1.2.0 版本,属于比较老的 pod 版本了。在 [pod 1.3.0](http://blog.cocoapods.org/CocoaPods-1.3.0/) 中,pod 增加了增量编译的更新内容,在切换分支后,会进行增量编译,理论上能解决部分闲鱼的打包速度问题。 + +### 🐕 [As We May Code](https://nshipster.com/as-we-may-code/) + +[@EyreFree](https://github.com/EyreFree):本文分享了 Mattt 对于将 [语义网](https://zh.wikipedia.org/wiki/%E8%AF%AD%E4%B9%89%E7%BD%91) 应用于源代码的一些想法。语义网(semantic web)这个词这个词可能很多人没有听过,本文展望了源代码结合语义网方式进行管理后的各种优势,整体看起来比较偏向于概念,还没有实际的应用,感兴趣的朋友可以看下。 + +## 工具 + +### [远程输入法](https://github.com/remoboard/remoboard-source) + +[@老峰](https://github.com/gesantung):远程输入法是来自 [@everettjf](https://github.com/everettjf) E神的一款开源远程输入法,可以实现使用电脑给手机打字,让手机打字更快.支持 Web 、蓝牙、IP 连接,实现思路巧妙,对输入法及远程交互感兴趣的读者可以阅读[源码](https://github.com/remoboard/remoboard-source)。 + +### [SwiftDump](https://github.com/neil-wu/SwiftDump/blob/master/README_zh.md) + +SwiftDump 是从 Mach-O 文件中获取 Swift 对象定义的命令行工具,类似大家都用过的 OC dump 工具 class-dump,SwiftDump专注于处理 Swift对象(当前只支持 Swift 5)。 +工具采用 Swift编写,代码简短,可以借此一窥 Mach-O 中是如何处理 Swift 相关信息的。 + +> 推荐人 [@neil-wu](https://github.com/neil-wu) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里: + +如果你想**招人**,点这里: + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅: 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#125-2020.08.24.md b/Reports/2020/#125-2020.08.24.md new file mode 100644 index 000000000..1dfb6f450 --- /dev/null +++ b/Reports/2020/#125-2020.08.24.md @@ -0,0 +1,139 @@ +# 老司机 iOS 周报 #125 | 2020-08-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 4 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [《Widgets 边看边写》第一部分:冒险开始了](https://mp.weixin.qq.com/s/hUcGDtdMzzgGOVHj7urTvA) +- [《Widgets 边看边写》第二部分:Timelines 的基本使用](https://mp.weixin.qq.com/s/atlYIXjcU54kfcfAST7ttA) +- [《Widgets 边看边写》第三部分:Timelines的进阶使用](https://mp.weixin.qq.com/s/iKrvJKWAUP5mH4jCR9BN9Q) +- [WidgetKit 入门指北](https://mp.weixin.qq.com/s/U56NbQbHCfFDFbk_DD2W-A) + +## 新闻 + +### [XCSSET Mac Malware: Infects Xcode Projects, Performs UXSS Attack on Safari, Other Browsers, Leverages Zero-day Exploits](https://blog.trendmicro.com/trendlabs-security-intelligence/xcsset-mac-malware-infects-xcode-projects-performs-uxss-attack-on-safari-other-browsers-leverages-zero-day-exploits/) + +[@张嘉夫](https://github.com/josephchang10):近期发现了一种非常规的、通过 Xcode 开发者项目进行传播的病毒。恶意代码会在建立本地 Xcode 项目时注入并运行,可以利用 [Data Vaults](https://support.apple.com/en-ph/guide/security/sece3bee0835/web) 的行为漏洞来窃取 cookie,还可以滥用开发者版本的 Safari。有一些在 GitHub 上分享项目的开发者受到了该病毒的影响,导致了因依赖而产生的链式攻击,因此威胁不断升级。VirusTotal 等来源也证实了该威胁的存在。这篇博客总结了对该病毒的发现,[附带的技术细节](https://documents.trendmicro.com/assets/pdf/XCSSET_Technical_Brief.pdf)包含了攻击的全部细节。 + +### [联合验证什么鬼,苹果又出幺蛾子了!](https://juejin.im/post/6863054279583678471) + +[@Parsifal](https://github.com/ParsifalC):周四下午(8月20日)有登录 App Store Connect 的朋友都会发现一条莫名其妙的通知 - “您的帐户即将需要迁移为联合验证。您可以立即开始流程,或等待帐户于2020年8月28日自动迁移。”,这个无厘头的通知一度让大家一脸懵逼,本文通过一些线索结合网上的讨论,得出这是一起乌龙事件。有兴趣吃瓜的不妨看看。 + +## 文章 + +### 🌟 🐕 [整体把握 CocoaPods 核心组件](https://mp.weixin.qq.com/s/eyjrhPgPFdidPWO7t2SDcA) + +[@JonyFang](https://github.com/JonyFang):Cocoapods 作为包管理工具,随着 Apple 生态的发展不断地迭代和进化,各部分核心功能也都演化出了相对独立的组件。这些功能独立的组件,均被拆分为一个个独立的 Gem 包,而 CocoaPods 则是这些组件的集合。本文主要介绍了CocoaPods 的主要构成,及各个组件在整个 Pods 工作流的关系。 + +可以带着这几个问题来看这篇文章: + +- CocoaPods 的核心模块包含哪些? +- pod 命令是如何找到并启动 CocoaPods 程序的? +- pod install 的流程是怎样的? +- resolve_dependencies 阶段中的 pre_download 是为了解决什么问题? +- validate_targets 都做了哪些校验工作? + +在我们知道了 CocoaPods install 的大致过程后,我们可以对其做一些修改和控制。例如知道了插件的 pre_install 和 post_install 的具体时机,我们就可以在 Podfile 中执行对应的 Ruby 脚本,达到我们的预期。同时了解 install 过程也有助于我们进行每个阶段的性能分析,以优化和提高 install 的效率。 + +### 🐎 [Mattt 谈 WWDC 2020 - NSHipster](https://nshipster.com/wwdc-2020/) + +[@zvving](https://github.com/zvving):WWDC 2020 落下帷幕,虽少了现场 Bash 的啤酒 🍺 和苹果高管们的舞蹈 🕺,制作精良、节奏适中的视频和崭新的直播方式依旧足够精彩。独特又精彩,就像 2020 年本身。 + +WWDC 2020 已落下帷幕,也许我们该像 [Mattt](https://nshipster.com/authors/mattt/) 建议的那样:走出『现实引力场』,好好睡觉、健康饮食、定期运动,照顾好自己和身边的人;在此基础上,合理地选用技术,好好工作。 + +### 🐕 [详解 Dart 中如何通过注解生成代码](https://mp.weixin.qq.com/s/ZA62prbsM6KwnHkBT4i7yQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文初步探索了在 Dart 通过注解生成代码的技术,比起 java 的 apt ,没有运行时反射用起来还是有点点麻烦,需要手动执行 build,而且各种繁琐的 builder 配置,但这种技术可以给我们在解决一些例如路由,模板代码、动态代理等,多了一种处理手段 + +### 🐕 [iOS 的自动构建流程](https://juejin.im/post/6860260103791050760) + +[@AidenRao](https://weibo.com/AidenRao):一个对效率有追求的公司,都应该有一套自动构建系统。 + +- 效率上,解放出开发人员的时间。也更方便其他同事使用。 +- 保证打包的标准,避免配置或环境问题,带来的失败。把事情做对,比做快更重要。 +- 权限安全上,通过构建系统集中管理,对于使用者来说是一个黑盒。 +- 项目流程上,便于有需求时做 Daily Build 或者 自动测试。 + +文章的这套 iOS 构建流程,经历作者 2 年的使用,基本稳定下来。介绍详细,除了可以作为搭建参考,也可以用于原理学习。 + +### 🐢 [探索 Flutter 中线程模型/消息循环的底层逻辑](https://mp.weixin.qq.com/s/yhni2q5XfxJ6qmfcJnSlBg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 多线程模型以及线程中的事件循环机制在 OS 里都是必不可少的一部分,也扮演着非常重要的角色,主要用来做异步任务的分发与调度。本文详细讲解了 Flutter 中的线程模型与事件循环是如何实现。 + +- 每个 Thread 对应相应的 TaskRunner,并且通过 Thread Local机制存储对应的 MessageLoop +- 每个 TaskRunner 对应相应的 MessageLoop +- 每个 MessageLoop 中有对应的 TaskQueue,TaskQueue 使用 priority_queue 实现 +- 每个 TaskQueue 通过 TaskQueueId 被存储在全局的 TaskQueues Map 中 + +### 🐕 [Force-Unwrapping in Swift is NOT a Bad Thing](https://wolfmcnally.com/82/force-unwrapping-swift-not-bad-thing/) + +[@Damien](https://github.com/ZengyiMa): 当你在 Swift 中使用强制解包功能的时候一定是倍加小心,因为如果可选变量为 nil 将会发生运行时崩溃,为了避免崩溃而会导致过度防御性编程,这会使你的代码增加复杂度和可维护性。我们应该在代码模块功能的设计角度上去拥抱强制解包这个 Swift 提供的功能,同时尽可能消除未定义行为的影响也是 Swift 语言的设计目标之一。在本文中,作者将会通过直观的例子来展示使用强制解包的最佳实践。 + +### 🐎 [京东商城订单模块 Swift 探索](https://mp.weixin.qq.com/s/iF5Jg17gQGSX_ngi0r4l-A) + +[@looping](https://github.com/looping):本文在介绍他们用 Swift 改造京东订单模块以及在改造中遇到的问题之前,对 ABI 稳定后的 Swift 变化进行了细致的分析,同时也罗列了后续技术演进的规划。可以作为在现有工程引入 Swift 的参考学习资料。 + +### 🐕 [App Attest: (Properly!) Protecting iOS apps from Jailbreak Tweaks in iOS 14](https://swiftrocks.com/app-attest-apple-protect-ios-jailbreak) + +[@anotheren](https://github.com/anotheren):在 iOS 14 中 Apple 引入了 App Attest 以保护你的应用不受越狱的侵害。本文详细介绍了具体实施的流程以及作者的一些心得。 + +### 🐢 [Hacking iOS Simulator with simctl and dynamic libraries](https://curvedlayer.com/2020/08/09/ios-simulator-plugin-simctl.html) + +[@老峰](https://github.com/gesantung):本文介绍了通过使用 Xcode simctl 命令、dynamic iOS libraries 等 Hook 模拟器任意 App,全文包含以下方面: +- 介绍 simctl 概念,以及如何使用 simctl 命令 +- 介绍 Runtime Method swizzling +- 介绍如何构建 dynamic iOS libraries +- 介绍如何给模拟器注入自定义动态库 + +## 工具 + +### 🐕 [OSLog and Unified logging as recommended by Apple](https://www.avanderlee.com/debugging/oslog-unified-logging/) + +[@水水](https://www.xuyanlan.com): OSLog 作为 print 和 NSLog 的替代品是苹果推荐的日志记录方式。它虽有点难写,但它有自己的优点: +- 通过编写一个小的扩展名,可以很容易地替换打印语句。将控制台应用程序与日志结合使用可以帮助您以更有效的方式调试问题。 +- OSLog 的性能开销很低,并且在设备上会进行存档。 +- 可通过 Type 设置日志等级 +- 通过 Console.app 查看和检索日志 +如果想要编写高性能的日志模块,推荐使用 OSLog,更多详细的使用方法可以阅读本文或者查看苹果文档哦~ + +## 代码 + +### [Flutter -如何创建炫酷粒子时钟效果!](https://juejin.im/post/6862158050237612039) + +[@邦Ben](https://weibo.com/linwenbang):本文为翻译稿。作者在 Google 2019 年的 `The Flutter Clock Challenge` 活动中,通过粒子动画效果的时钟获奖,该文讲述了原理。感兴趣的同学可以看看,可以说,动效优秀的作品真让人痴迷! + +参考链接: + +- [原文](https://ultimatemachine.se/articles/how-i-created-a-particle-clock-and-won-the-flutterclock-challenge/) +- [Github Repo](https://github.com/miickel/flutter_particle_clock) + +同时,里面提及的一个 [The Flutter Vignettes](https://flutter.gskinner.com/) 网站也值得留意一下,里面提供了不少优秀的 Flutter 例子。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里: + +如果你想**招人**,点这里: + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅: 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#126-2020.08.31.md b/Reports/2020/#126-2020.08.31.md new file mode 100644 index 000000000..127c6435a --- /dev/null +++ b/Reports/2020/#126-2020.08.31.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #126 | 2020-08-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [当 Widget 遇到智能化](https://mp.weixin.qq.com/s/jcZ7xJdxdLeKZRSwurc6mQ) +- [让 Objective-C 框架与 Swift 友好共存的秘籍](https://mp.weixin.qq.com/s/hPmL2fsAfQ-moeM5TjsliQ) +- [了解 Swift 中的数值计算](https://mp.weixin.qq.com/s/CI46VcJjm_WGQadJ8q4yIg) + +## 新手推荐 + +### 🐕 [Designing Custom UICollectionViewListCell in Interface Builder](https://swiftsenpai.com/development/custom-uicollectionviewlistcell-in-ib/) + +[@水水](https://www.xuyanlan.com): 此前作者发布了 [UICollectionView List with Custom Cell and Custom Configuration](https://swiftsenpai.com/development/uicollectionview-list-custom-cell/) 一文,文中作者教你使用代码自定义 UICollectionViewList 和 Cell,而本文作者又手把手教你如何在 Interface Builder 中自定义 UICollectionViewListCell。对于新手朋友来说这两种方式都有必要掌握,感兴趣的读者可以进行尝试哦~ + +## 文章 + +### 🌟 🐕 [Ex1. CocoaPods 中的 Ruby 特性之 Mix-in](https://mp.weixin.qq.com/s/uZx4cgbsNgE2iuguAOzbow) + +[@JonyFang](https://github.com/JonyFang):本文从 CocoaPods 中用到的 Ruby 语法特性说起,讲述了 Ruby 中为了解决多继承问题而引入的 Mix-in 模式,并且 Ruby 也为其定义了 `module` 和 `include` 关键词的语法糖。 + +可以带着这几个问题来看这篇文章: +- 什么是 Mix-in,它与多继承是什么关系? +- Mix-in 在大多数编程语言中是如何落地的?(可以说说 Swift 中的应用) +- 多继承的缺点有什么? +- 在 CocoaPods 中是如何使用 Mix-in 特性的? + +文中最后引入了 Duck Tying 程序设计思想,有兴趣可以自行研究。 + +### 🌟 🐕 [React Native 升级指南](https://supercodepower.com/docs/react-native-upgrade/index) + +[@looping](https://github.com/looping):React Native 作为一款跨端框架,有一个最让人头疼的问题,那就是版本更新。类库升级最关键的一步就是配置文件的更新,确保能正常通过编译。所以本文一开始就介绍了各端项目配置的技术细节,同时还分享了自己的升级流程,并提供了 0.60 到 0.62 三个版本的升级记录做参考。相信有了这份资料的指导,对有计划升级 RN 的团队来说想必会有很大帮助的。 + +### 🐕 [Entry Points in Swift: How @main and @UIApplicationMain work internally](https://swiftrocks.com/entry-points-swift-uiapplicationmain-main) + +[@EyreFree](https://github.com/EyreFree):本文介绍了 Swift 如何确定应用程序的入口点,在分析 @main 与 @UIApplicationMain 的作用原理的过程中也概括了苹果如此设计的初衷。 + +### 🐎 [SVG image assets supported in Xcode 12](https://sarunw.com/posts/svg-image-assets-supported-in-xcode12/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Xcode 12 又带来了一些新特性,我们发现 Assets 已经支持 SVG 资源了,尽管最终 Xcode 还是将 SVG 转换成了 PNG,与多年来为我们服务的 PDF 格式的工作方式相同,但这个更改依然带来了一些附带好处。 + +### 🐎 [SwiftUI betas - what changed before 1.0](https://mackuba.eu/2020/08/17/swiftui-beta/) + +[@Damien](https://github.com/ZengyiMa):SwiftUI 在 2019 年 WWDC 一经推出就收获了很多开发者的目光,经过一年的演变,在 2020 年的 WWDC 中 SWiftUI 得到了极大的增强。从去年到今年 SWiftUI 都有哪些变化呢?本文总结了从 SwiftUI 1.0 到现在的变化之处。对 SwiftUI 感兴趣的同学不妨一读。 + +### 🐎 [Sharing layout information in SwiftUI](https://fivestars.blog/swiftui/swiftui-share-layout-information.html) + +[@xiaofei86](https://weibo.com/xuyafei86):SwiftUI 的视图布局取决于每个视图的状态。此状态由内部属性或外部上下文中的值等混合而成。在高级的自定义布局中,有时父视图也需要来自其子视图的直接或间接的信息。一个常见的例子是,父视图需要知道子视图的大小。在本文中,我们将探讨如何通过 PreferenceKey 做到这一点。 + +## 代码 + +### 🐎 [Codable + PropertyWrapper = ☕](https://github.com/winddpan/CodableWrapper) + +[@zvving](https://github.com/zvving):Codable 作为 Swift 官方推荐的序列化方案,使用时有不少痛点: + +- 自定义映射复杂 +- 不支持 DefaultValue +- 类型严格,不支持降级策略:如 Int/Double 降级转换为 String +- 同一属性不支持映射多个 CodingKey + +CodableWrapper 尝试解决这些问题,同时通过 PropertyWrapper 提供简洁的实现。库刚刚推出,欢迎交流反馈。 + +> 来自作者 [winddpan](https://github.com/winddpan) 自荐 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#127-2020.09.07.md b/Reports/2020/#127-2020.09.07.md new file mode 100644 index 000000000..52331ff74 --- /dev/null +++ b/Reports/2020/#127-2020.09.07.md @@ -0,0 +1,133 @@ +# 老司机 iOS 周报 #127 | 2020-09-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [Swift 的不安全](https://mp.weixin.qq.com/s/C8IczQKMHS0KWqWw6bsMNQ) +- [在 Swift 里安全管理指针](https://mp.weixin.qq.com/s/eOYMO12ZImplehBdnr8ZEw) +- [探索现代的移动网络](https://mp.weixin.qq.com/s/ds6QkVrBwcurxp3RkvZe8Q) + +## 新闻 + +### [App Review process updates](https://developer.apple.com/news/?id=84w3e5bm) + +[@anotheren](https://github.com/anotheren):苹果正式上线了其在 WWDC20 上公布的应用审核流程优化。对于已经在 App Store 上发布的应用,除了与法律问题有关的应用外,将不再因违反准则而延迟错误修复。现在,除了对应用程序是否违反指南的决定提出上诉外,你还可以对指南提出修改建议。苹果鼓励你提交对于 App Store 和苹果开发平台的建议。 + +### [Details for app privacy questions now available](https://developer.apple.com/news/?id=hx9s63c5) + +[@EyreFree](https://github.com/EyreFree):正如苹果在 WWDC20 上宣称的,App Store 产品页面将提供一个新的隐私信息部分,以帮助用户了解应用对隐私的处理。此外,从 iOS 14、iPadOS 14 和 tvOS 14 开始,当应用程序需要在其他公司拥有的应用程序或网站上跟踪用户或访问设备的广告标识符时,将需要通过权限询问弹窗来获得用户许可。 + +## 文章 + +### 🌟 🐕 [云音乐 React Native 体系建设与发展](https://juejin.im/post/6867722436369416206) + +[@looping](https://github.com/looping):本文介绍了网易云音乐团队在优化会员收银台到达率时,选择了重建整个 RN 技术体系作为长期技术演进的方案。他们从自动部署、离线预加载、RN 框架升级等几个方向进行重构,最终取得了重大突破,到达率提升到 99%。他们未来还会围绕性能、效率、监控这三大方向进行基础建设。对构建跨端开发体系感兴趣的同学,或是在维护年久失修的基础项目,在仔细阅读文章后,相信都能找到一些可供参考的思路。 + +### 🌟 🐕 [3. CocoaPods 命令解析 - CLAide](https://mp.weixin.qq.com/s/JMG04U-7737GGlnoOKg1Fw) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍了 CocoaPods 提供的命令行解析器 CLAide,它负责解析我们使用到的 Pods 命令,如 `pod update Alamofire --no-repo-update --exclude-pods=SwiftyJSON` 命令执行时 CLAide 在其中起到的解析作用。作者主要描述的几个点: + +- 简介 Ruby 中的 Open Classes 特性,其中需要留意的是 Open Class 可以跨文件、跨模块进行访问。 +- 概述 CLAide 功能及其目录结构 +- 介绍用于构建命令行界面的基础抽象类 Command。我们添加的命令都需要继承自 Command,不同的配置得到 `abstract command` 和 `normal command`。pod 命令正是由多个 `Pod::Command < CLAide::Command` 的子类组成了 `abstract command`,通过这种方式可以达到多级嵌套命令的效果。 +- 接着以 `pod update Alamofire --no-repo-update --exclude-pods=SwiftyJSON` 为例介绍 CLAide 中 ARGV 是如何解析命令行传入的参数的。 +- 之后介绍 Command 的管理类 PluginManager 的执行流程。它会在第一次运行命令 `self.run` 时进行加载,且仅加载命令类中指定前缀标识的文件下的命令。 +- 最后,结合前面介绍的类职责及执行流程,通过创建一个 CLAide 命令来自己实现一款 🥤 贩卖机。(作者提供的 [Demo 源码](https://github.com/looseyi/BeverageMaker)) + +### 🐕 [Abusing iOS’ Screenshot Cropping Mechanism](https://bryce.co/screenshot-cropping/) + +[@老驴](https://www.weibo.com/6090610445):iOS 14 系统中自带的截图工具新增了一个非常好用的小功能:工具在选择截取范围时会自动吸附屏幕上元素的边缘,方便做出更加精准的截取。这个功能之前网上有很多的猜测是怎么实现的,本文的作者就做了深入的研究,并且得出了结论。对实现原理好奇的同学们不妨来了解一下。 + +### 🐕 [Handling view controllers that have custom initializers](https://www.swiftbysundell.com/tips/handling-view-controllers-that-have-custom-initializers/) + +[@张嘉夫](https://github.com/josephchang10):如果我们在开发中使用[依赖注入(dependency injection)模式](https://www.swiftbysundell.com/articles/different-flavors-of-dependency-injection-in-swift)为对象在初始化时提供外部依赖,我们通常会希望替换 `UIViewController` 等 UIKit 类自带的初始化方法,这篇文章为你介绍如何处理使用自定义初始化方法的 view controller。包括如何实现 `init(coder:)` 方法,在 iOS 13 中使用 `UIStoryboard` 的 `instantiateViewController` 方法,以及通过 `@IBSegueAction` 方法来使用 `storyboard segue` 从而避免手动创建 view controller 等以便兼容 storyboard。 + +### 🐕 [学 AR 到底学什么?我的 AR 之路反思与展望](https://juejin.im/post/6865650326390145031/) + +[@莲叔](http://aaaron7.github.io/):从近年历届 WWDC 中不难发现,AR 和 ML 一直是苹果坚持的下一代的技术方向,从观感来看的话,AR 可能更加富含科技感。炫酷的效果背后,是 AR 技术包含了非常宽的技术栈。本篇文章可以说是一个不错的扫盲贴,介绍了 AR 技术体系的几个主要组成:SLAM、场景感知、3D 渲染、协作共享,并推荐了一系列学习的教材,不过文章内容停留在一个比较浅的层面,比较适合对 AR 感兴趣不知道从何开始的小白阅读,找找初步感觉。 + +### 🐎 [多级 MVC 和项目最佳实践](https://github.com/zzyptr/App/blob/master/README.md) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):为了解决在 UIViewController 之间存在依赖的问题,作者介绍了一种新的 MVC 方案:在 UIViewController 之上引入了一组新的 MVC 关系:将 Presenter 作为容器来整合 Controller,View;View 通过 Coordinator 来向 Presenter 通信;而高一级的 Presenter 持有低级 Presenter,低级的 Presenter 通过 Coordinator 向高一级通信。结构如下: + +``` +RootPresenter: UITabBarController + ├─ HomePresenter + ├─ MarketsPresenter + ├─ TradeNavigationPresenter: UINavigationController + └─ WalletsPresenter +``` + +采用该方案的优点是可以随着业务增长不断调整的能力,感兴趣的读者朋友可以原文链接阅读。 + +### 🐎 [Turning the ChibiStudio canvas into an App Clip for iOS 14](https://rambo.codes/posts/2020-08-29-turning-the-chibistudio-canvas-into-an-app-clip) + +[@Damien](https://github.com/ZengyiMa):Apple 在 WWDC20 上发布的 AppClips 在具有更小的体积的同时也有着和原生一样的用户体验,吸引了众多开发者的目光。本文的作者也将他的一款名叫 ChibiStudio 的 App 在 AppClips 上做了尝试,本文将会深入介绍 App 往 AppClips 上迁移的步骤和注意事项。正在适配 AppClips 的同学不妨一读。 + +### 🐢 [让 Objective-C 库支持 Swift Package Manager](https://mp.weixin.qq.com/s/pU5d8j4R-4MRokbZIF9MLQ) + +[@老峰](https://github.com/gesantung):Swift Package Manager 已经发布四年,但目前较 CocoaPods 普及率很低,不过今年 WWDC 迎来了最要更新支持二进制分发以及资源文件。本文作者 @[君赏](https://github.com/josercc) 结合自己实际项目经验分享了 Objective-C 源码库支持 SwiftPM 以及 打包二进制闭源 XCFramework 支持 SwiftPM 的经验,对 SwiftPM 感兴趣的读者不妨阅读。 + +### 🐢 [SF Symbols Changes in iOS 14](https://medium.com/@hacknicity/sf-symbols-changes-in-ios-14-4731937c5dc7) + +SF Symbols 是苹果在 WWDC 2019 介绍的一套矢量图形,iOS 14 中,苹果对 SF Symbols 进行了大量更新: + +- 新增近 900 个新符号(有些符号的使用受到限制)。 +- iOS 13 中的 60 个符号已被重新命名。 +- 158 个符号有多色支持。 +- 本地化支持:新增许多右到左的符号。 +- 错误修复:修复了一些与名称不匹配的图片。 + +## 工具 + +### [YYDebugDatabase](https://github.com/y500/iOSDebugDatabase) + +[@红纸](https://github.com/nianran):YYDebugDatabase 来自 [y500](https://github.com/y500) 的远端调试数据库工具,其可以通过阅览器远程调试应用内的数据库。其允许我们直接在浏览器中查看和编辑数据库,包括直接查询,更新,插入和删除数据。我们也可以下载完整的数据库,在 Mac 上进行调试。由于其基于 FMDB 进行开发,支持的数据库格式有限,只能调试 SQLite 格式的数据库。 + +> 推荐人:[y500](https://github.com/y500) + +## 代码 + +### [FlutterUnit](https://github.com/toly1994328/FlutterUnit) + +[@极速男孩](https://github.com/ztlyyznf001):FlutterUnit 是一个 flutter 的开源项目,集成了 flutter 中 260 个左右的组件,适合新手来学习 flutter 的时候来熟悉 flutter 中各种组件的使用。 + +### 🐎 [Pigeon](https://github.com/fmo91/Pigeon) + +[@zvving](https://github.com/zvving):为 SwiftUI 提供服务端数据异步加载能力,支持可定制的缓存、序列化、分页等。 + +整体设计借鉴 [React Query](https://react-query.tanstack.com/docs/overview):声明式语法,实现较简洁,有相关使用经验的同学推荐选用。 + +### 🐎 [Parma](https://github.com/dasautoooo/Parma) + +[@EyreFree](https://github.com/EyreFree):一个可以用来在 SwiftUI 构建的应用中展示 Markdown 的组件,支持大部分常用的 Markdown 样式,可通过 SPM 集成,有需要可以试用。持续开发中,感兴趣的同学也可以尝试贡献代码。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#128-2020.09.14.md b/Reports/2020/#128-2020.09.14.md new file mode 100644 index 000000000..a306fb33c --- /dev/null +++ b/Reports/2020/#128-2020.09.14.md @@ -0,0 +1,161 @@ +# 老司机 iOS 周报 #128 | 2020-09-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [活用 Swift 类型推断](https://mp.weixin.qq.com/s/-kwz3m8SXOtSj36kZq3tlg) +- [Swift Package Manager 的里程碑](https://mp.weixin.qq.com/s/fLYOky-g6k0ridGEKwsU1A) + +## 新闻 + +### 🌟 [Apple 特别活动 - 秋季发布会将于本周三凌晨举行](https://www.apple.com.cn/apple-events/) + +[@Parsifal](https://github.com/ParsifalC):苹果今年的秋季新品发布会将于本周三(北京时间 9 月 16 日)凌晨 1 点在 Apple Park 举行,与今年的 WWDC 20 一样,此次发布会依然采用了线上视频形式,国内用户可以在爱奇艺、哔哩哔哩、腾讯视频和新浪微博观看本次直播。根据一些媒体消息,本次发布会可能不会发布 iPhone 12,不知苹果是否能带来惊喜。 + +## 文章 + +### 🌟🐕 [如何提高代码质量](https://mp.weixin.qq.com/s/Dl7umd-Z3QuvOwzjmy3Z4w) + +[@享耳先森](https://github.com/iblacksun):高质量代码简单来说就是「好看和好用」,好看是指代码可读性好,容易理解、容易维护,别人接手了不骂你;好用则指代码健壮,不容易出错,机器跑着不骂你。即使出错,也容易定位,容易止损和恢复。 + +如何才能拥有高质量的代码,有两种途径: + +- 第一种途径:先有好的设计--->然后用优秀的编码去实现--->再把优秀的编码风格延续下去 +- 第二种途径:从糟糕的代码开始--->不断去重构,向优秀的设计方案和代码风格不断逼近--->再延续下去 + +本文重点从「途径一」的角度介绍如何能产生好代码,分别从规范、实践、度量及改进几个角度深入阐述,建议阅读。 + +### 🐕 [App Clip 离落地有多远?](https://gcsnnb.github.io/2020/09/10/App-Clip%E7%A6%BB%E8%90%BD%E5%9C%B0%E6%9C%89%E5%A4%9A%E8%BF%9C/) + +[@JonyFang](https://github.com/JonyFang):WWDC2020 引出了 App Clips,之前的《WWDC20 内参》已经介绍过[《App Clips 的配置及链接处理》](https://xiaozhuanlan.com/topic/5820361974)。截止这里,我们已经知道了 App Clips 所带来的利,如及时可用等。本篇从业务和技术两个角度,列出了 App Clips 真正落地可能会遇到的问题,度量的角度可以作为我们实际业务落地过程中的参考。 + +这里列出 App Clips 落地过程中值得思考的几点: + +- 业务角度 + - 国内市场线下支付的支持 + - 国内小程序的竞争 + - 仅支持 iOS 14+ 用户 + - 虽然提供了多种唤起 App Clips 的方式,但触发的条件比较严苛。如 Clip Code 只能 + 通过`系统相机`才能够唤起 + - 对于纯线上 App 最有利的唤起方式是通过 Safari,但操作路径步骤比较多 +- 技术角度 + - 需要针对业务做代码拆分或做足够彻底的组件化 + - 10M App Clips 包大小的限制 + - App Clips 不支持后台处理活动。如`后台不支持网络请求`等 + - App Clips 的用户怎么和对应的 App 用户一样做到唯一标识和绑定 + - App Clips 支持唤起三方 App,但三方 App 不支持唤起 App Clips。所以会影响到三 + 方登录、三方分享、三方支付的场景 + - 不支持企业包 + - CocoaPods 对 App Clips 的支持还不完善 + +### 🐕 [iOS 性能优化 - Allocations 分析内存分配](https://mp.weixin.qq.com/s/WqVZ1rFpYrvE8X-J0f35mw) + +[@JonyFang](https://github.com/JonyFang):开发过程中,我们有时会遇到内存分析相关的问题,本篇介绍了 Allocations 工具。Allocations 工具提供了几种内存分析的方式: + +- Statistics +- Call Tree +- Allocations List +- Generation + +通过上述几种分析方式,我们可以定位找出需要进行内存优化的代码块。阅读过程中可以配合作者提供的 Demo 进行手动分析操作。Demo 地址:[https://github.com/LeoMobileDeveloper/Blogs/tree/master/DemoProjects/iOS/AllocationsDemo](https://github.com/LeoMobileDeveloper/Blogs/tree/master/DemoProjects/iOS/AllocationsDemo) + +### 🐎 [LeetCode Cookbook](https://mp.weixin.qq.com/s/qu_drrtR-dFtYk1xiiZ7UA) + +[@Damien](https://github.com/ZengyiMa):还在为如何提高算法能力苦恼吗?来看看霜神(一缕殇流化隐半边冰霜)的 LeetCode Cookbook 吧,精美的排版和简单易懂的题解帮助你的算法道路上披荆斩棘。 + +### 🐎 [Interviewing for an iOS Design System Engineer role at Spotify](https://dev.to/funmia/interviewing-for-an-ios-design-system-engineer-role-at-spotify-485l) + +[@老驴](https://www.weibo.com/6090610445):你是不是还在疑惑国内外互联网公司面试的区别?你是不是还在好奇海外互联网公司面试需要哪些技能?来,这篇来自一位 Spotify 工程师的经验总结文章可以让你一探究竟。 + +### 🐢 [Agora Talk 回顾 | 深入聊聊不一样的 Flutter](https://mp.weixin.qq.com/s/lo-jrMRKpfEr2s80BW61VQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Flutter 自出道以来可以说是突飞猛进,因为它独特的底层设计和开发语言,但是作为一个跨平台框架它也是备受追捧和争议。 + +目前 Flutter 被吐槽最多的有以下几点: + +- Flutter 嵌套恶心 +- 使用 dart 不使用 js +- 混合开发比 RN 更麻烦 +- 不支持热更新 + +但是 Flutter 也有自己独有的一些优势: + +- Flutter 普及迅速 +- 对 Web、Linux、Win 等平台也在快速推进 +- 在 UI 兼容性和代码复用上表现优秀 +- 对比其他跨平台框架性能更好 + +文中不仅详细介绍了 Flutter 的槽点和优势,还分析了 Flutter 世界中一些有意思的设定,比如 Widget 和 Element 的关系,组成 Dart 层渲染闭环的其他元素等。 + +### 🐢 [Flutter 1.20 下的 Hybrid Composition 深度解析](https://mp.weixin.qq.com/s/e4Eh3DLacBJv36bNIKIokg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 在很早期的版本中就提供了 PlatformView 来解决 View 级别的 NativeVivew 和 Flutter 混合,但 PlatformView 不管从开发体验还是性能表现都有点儿差强人意。 + +在官方和社区不懈的努力下, 1.20 版本开始在 Android 上新增了 Hybrid Composition 的 PlatformView 实现,该实现将解决以前存在于 Android 上的大部分和 PlatformView 相关的问题,比如华为手机上键盘弹出后 Web 界面离奇消失等玄学异常。 + +[本文](https://mp.weixin.qq.com/s/e4Eh3DLacBJv36bNIKIokg)详细的讲解了 Hybrid Composition 接入和底层原理实现。 + +### 🐕 [Private APIs, Objective-C runtime, and Swift](https://medium.com/@victor.pavlychko/private-apis-objective-c-runtime-and-swift-ceaeefbb6e48) + +[@四娘](https://kemchenj.github.io):Foundation 里有一些 API 被标记为 `NS_SWIFT_UNAVAILABLE`,例如 `NSInvocation` / `NSMethodSignature`,由于它们不安全或者没办法很好地融入到 Swift 的体系里所以被标记为不可用。 + +但有时候我们面对平台 SDK 的问题,又不得不跟这些 API 打交道,那么此时在 Swift 里如何调用并且封装这些 API 就成了一个问题,这篇文章的作者就详细地介绍了他的解决方案: + +```swift +let object = NSDate() +let objectPrivate = object as! NSObjectPrivate +let selector = Selector("description") +let signature = objectPrivate.methodSignature(for: selector)! +let invocation = NSInvocationClass.invocation(methodSignature: signature) +invocation.selector = selector +invocation.invoke(target: object) +var unmanagedResult: Unmanaged? = nil +invocation.getReturnValue(&unmanagedResult) +let result = unmanagedResult?.takeRetainedValue() +print(result ?? "") +``` + +### 🐕 [iPhone 屏幕尺寸进化历程背后的 App 设计哲学](https://mp.weixin.qq.com/s/fRXCTfl_Ewt-XuOk0lSz9g) + +[@张嘉夫](https://github.com/josephchang10):从 2007 年发布的第一代 iPhone 到2019 年发布的 iPhone 11 系列,iPhone 的屏幕尺寸已涵盖 3.5 寸、4 寸、4.7 寸、5.5 寸、5.8 寸、6.1 寸、6.5 寸七种,传闻将于今年秋季发布的 iPhone 12 还会增加 5.4 寸、6.7 寸两种尺寸。随着时间轴的推移,iPhone 的屏幕尺寸已经变得越来越多,越来越复杂,一个 app 要适配所有的这些屏幕尺寸,在从设计、开发到推广的整个过程中都需要考虑诸多因素。在这 13 年间 iPhone 的屏幕尺寸是怎样一步步进化到此的?基于软硬一体的设计,屏幕物理尺寸的变化背后包含着怎样的进化规律?这些变化对我们朝夕相处的手机 app 又产生了什么影响?根据已有的进化规律,我们是否可以展望未来的 iPhone 还会走向何方?基于 iOS 14 Beta 中发现的新线索,我们又可以推断出 iPhone 12 的哪些更多信息呢?作者 Allen Chu 在这篇文章里对这些问题进行了探讨。 + +## 代码 + +### 🐎 [VAP](https://github.com/Tencent/vap) + +[@EyreFree](https://github.com/EyreFree):VAP(Video Animation Player)是企鹅电竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点,且同时支持 iOS、Android、Web 平台。 + +- 相比 WebP、APNG 动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点 +- 相比 Lottie,能实现更复杂的动画效果(比如粒子特效) + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里: + +如果你想**招人**,点这里: + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅 +: 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢 +(20+ mins) diff --git a/Reports/2020/#129-2020.09.21.md b/Reports/2020/#129-2020.09.21.md new file mode 100644 index 000000000..ad37be679 --- /dev/null +++ b/Reports/2020/#129-2020.09.21.md @@ -0,0 +1,173 @@ +# 老司机 iOS 周报 #129 | 2020-09-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [UICollectionView 进阶使用](https://mp.weixin.qq.com/s/TOlv7eUv-cF1PL3vXX0L6A) +- [探索 Swift 中的日志系统](https://mp.weixin.qq.com/s/D2T9seR6LDniND5GaVrxMg) + +## 新闻 + +### [Swift 5.3 正式发布](https://swift.org/blog/swift-5-3-released) + +[@Parsifal](https://github.com/ParsifalC):继 3 月底发布 Swift 5.2 后,Swift 5.3 终于也官宣发布了~苹果继续围绕编码体验、Swift 运行时性能和更多平台支持进行改善和优化。小集团队也为我们翻译了官方的更新概要 - [一图读懂 Swift 5.3](https://mp.weixin.qq.com/s/2BrbN-eibfsu_g2D2EN6nw),下载更新 Xcode 12 即可体验 Swift 5.3。 + +### [苹果更新 App Store 审核指南](https://developer.apple.com/news/?id=xqk627qu) + +[@Parsifal](https://github.com/ParsifalC):随着 iOS 14 的发布,以及正在路上的 macOS Big Sur,苹果对 App Store 审核指南也进行了一波更新。Apple Hub 做了中文翻译,不过建议大家还是以官方为主,译文为辅 - [苹果更新 App Store 审核指南,可以给苹果爸爸的审核条款提建议了](https://mp.weixin.qq.com/s/wRvaerDQgOdkfX9c1-Vbpg)。 + +## 文章 + +### 🌟 🐢 [系列文章:用 Swift 实现一个 Swift Runtime](https://belkadan.com/blog/2020/08/Swift-Runtime-Heap-Objects/) + +[@享耳先森](https://github.com/iblacksun):这个系列的文章来自于今年愚人节的一个项目,作者让 [Mac OS 9 支持运行 Swift 程序](https://belkadan.com/blog/2020/04/Swift-on-Mac-OS-9/),其中 Swift Runtime 没有将 C++ 的实现迁移过来,而是使用 Swift 实现了一套,文章里就分享了具体的实现细节,包含了大量的 Swift 指针操作技巧。 + +通过阅读系列文章,你应该对 Swift Runtime 会有更深的理解,推荐阅读。 +https://belkadan.com/blog/2020/08/Swift-Runtime-Heap-Objects/ +https://belkadan.com/blog/2020/09/Swift-Runtime-Type-Layout/ +https://belkadan.com/blog/2020/09/Swift-Runtime-Type-Metadata/ + +> 作者 Jordan Rose 之前是 Swift 团队的一员,负责 bugs.swift.org 相关的工作,在去年离职。 + +### 🌟 🐕 [分析可执行文件 Mach-O](https://juejin.im/post/6870034249026633742) + +[@Damien](https://github.com/ZengyiMa):本文从 Mach-O 的概念出发,深度解析了 Mach-O 的内部结构以及加载 Mach-O 的步骤,最后作者也给出了通过分析 Mach-O 之后可以应用的使用场景,对于想理解 iOS 系统底层实现原理的同学是个很好的文章。 + +### 🌟 🐢 [Flutter 包大小治理上的探索与实践](https://mp.weixin.qq.com/s/adC-YUWd-xuUlzeAPHzJoQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 作为一种全新的响应式、跨平台、高性能的移动开发框架,在性能、稳定性和多端体验一致上都有着较好的表现。引入 Flutter 带来的包体积问题,一直以来都是个热门话题,[本文](https://mp.weixin.qq.com/s/adC-YUWd-xuUlzeAPHzJoQ)详细 +讲述了美团在处理 Flutter 包体积问题上的思考及相关的建设。 + + +### 🌟 🐕 [今日头条品质优化 - 图文详情页秒开实践](https://mp.weixin.qq.com/s/Xqr6rQBbx7XPoBESEFuXJw) + +[@JonyFang](https://github.com/JonyFang):本篇总结了头条详情页(WebView)加载优化的思路和实践。内容总结如下: + +- 数据建立 + - 确定优化效果的度量为:页面加载时间 + - 白屏检测方案:WebView 快照 -> 缩放 -> 非白色像素点检测 + - 确定用户刷头条时真实体验的指标:95 分位值 +- 模板优化 + - 模板拆分 + - 公共样式 CSS 和逻辑 JS 抽离为独立模板,内置到客户端中 + - 客户端请求接口拿到正文数据,并通过 JS 脚本注入页面完成展示 + - 用户进入详情页加载本地模板,并行请求详情页数据并注入模板 + - 通过一定策略预加载数据并暂存 + - 模板预热 + - 全流程离线化后,进行本地模板加载优化 + - 模板合并。将 JS、CSS、图片内联到一个文件以减少加载模板时的 IO 操作 + - 模板简化。非必要样式和 JS 异步拉取 + - 在合适的时机在后台创建 WebView 并预加载模板,用户进入详情页时使用加载好模板的 WebView 并将内容数据通过 JS 注入页面,收到数据后前端渲染 + - 模板复用 + - 详情页使用同一个模板,当用户退出页面时把正文数据清空,在进入喜爱个页面时复用这个 WebView 重新注入对应正文数据 +- 网络优化 + - CDN 加速 + - 详情页请求特点:流量大、数据属性基本不变、用户分布广、接口数据大 + - 将正文、标题、作者栏等主要又基本不变的内容托管到 CND + - 容灾 + - 多域名备份。服务端下发多个 CDN 链接,某个访问异常时可以快速切换 + - 快速访问。设计了详情页请求的快速动态超时策略(因子 1.5,min = 1s,max = 4s),保证在网络或服务异常时,用户快速感知到自身网络问题。 +- 渲染优化 + - 服务端预渲染 + - 详情页首屏内容在服务端就把所有正文的 HTML 数据组装好,服务端直出内容给客户端 WebView 渲染。 + - 客户端渲染 + - WebView 中非文字内容(图片、视频)通过原生组件渲染 + - Feed 页智能加载详情页需要的多图 +- 白屏优化 + - 网络导致的页面白屏问题,通过前面的优化策略已解决 + - 非网络原因的白屏(WebView 占用内存过大发生的白屏),先判断是否存在数据注入,若没有进行请求重试,接着重新加载模板并注入数据。 + +### 🐕 [一位 iOS 开发者的进阶之旅](https://mp.weixin.qq.com/s/cKuVFRPUnnScLM3y26mgIQ) + +iOS 开发早已经过了会写两个页面就可以拿到高薪的时代了,于是,出于兴趣也好,出于生计也罢,越来越多的 iOSer 该意识到,需要提高自己的技术能力了,毕竟面试也越来越难了不是。 那如何提高呢?本文其实是 v2ex 上面的一个帖子: "iOS 开发有什么国人写的比较好的书籍推荐?"。里面的内容大多来源于 `lujie2012` 以及其他人的一些回答,回答的内容已经不仅仅是推介书了,还包含了很多关于 iOS 学习上的问题。虽然里面个别回答或观点笔者并不是完全认同,但还是希望对这方面有困扰的同学有一点点帮助。 + +### 🐕 [闲鱼对 Flutter-Native 混合工程解耦的探索](https://mp.weixin.qq.com/s/4Z3Bqz9sUW1Lwofx--vCjA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):闲鱼是国内第一个使用 Flutter 混合开发的大型应用,但是目前面临如下几个痛点: + +- Flutter 侧混合编译速度慢,Android 首次编译 10min+,iOS 首次编译 20min+ +- 混合栈编程中历史包袱导致 iOS/Android 双端返回给 Flutter 侧的数据可能存在不一致性 +- 集成模块开发效率相比模块开发较低,单模块页面测试性能数据无法展开 + +面对这些痛点,闲鱼技术团队做了如下尝试: + +- 模块化开发 +- 跨进程开发 + +尽管两个方案都可以解决编译运行时间长的问题,但通过对比分析,方案一拆分模块和维护模块时都有很高的成本,方案二拆分成本和维护成本都相对较低,但对运行环境要求苛刻。综合来看,方案二虽然有一定缺陷,却可以解决很多问题。 + +### 🐕 [4. Podfile 的解析逻辑](https://mp.weixin.qq.com/s/f9YcS9eYS_RShLsTXS-SvA) + +[@JonyFang](https://github.com/JonyFang):内容主要分三部分。第一部分,简介 Podfile 配置所围绕的 Xcode 工程结构(Workspace、Project、Target 及 Build Setting)。第二部分,介绍 CocoaPods 中 CocoaPods-Core 对配置文件的解析,配置文件包括 Podfile、Podspec 及解析后的依赖锁存文件(如 Podfile.lock)。第三部分,演示在 Podfile 中对 Target 进行的嵌套使用。 + +文章目录结构如下: + +- Xcode 工程结构 + - Target + - Project + - Workspace + - Scheme +- CocoaPods-Core + - CocoaPods-Core 的文件结构 + - Podfile 的主要数据结构 + - Specification + - TargetDefinition + - Podfile + - Lockfile + - Podfile 内容加载 + - Podfile 文件类型 + - Podfile 文件读取 + - Ruby 格式的 Podfile 加载 + - YAML 格式的 Podfile 加载 + - Podfile 内容解析 +- Podfile targets 配置 + - Target 的嵌套使用 + - Abstract Target 的应用演示 + +### 🐎 [The State of SwiftUI](https://steipete.com/posts/state-of-swiftui/) + +[@zvving](https://github.com/zvving):SwiftUI 被寄予一统 iOS macOS iPadOS tvOS 全平台界面实现的厚望。然愿望美好,现实骨感:笔者使用 SwiftUI 过程中就碰到一系列状态同步 + Crash + 卡顿问题。 + +如果要上线 SwiftUI,可以从 iOS 平台 Widget 等较稳定的场景入手,而 macOS tvOS 跨平台场景问题多多,建议先谨慎观望。 + +## 工具 + +### 🐎 [GitHub CLI 1.0 is now available](https://github.blog/2020-09-17-github-cli-1-0-is-now-available/) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):GitHub CLI 1.0 版本已发布。使用 GitHub CLI 可以: +- 从终端运行你的整个 GitHub 工作流 +- 调用 GitHub API 来编写几乎所有操作的脚本,也可以为所有命令设置一个自定义别名 +- 连接 GitHub Enterprise Server 而不只是 GitHub.com + +本文结合实例介绍了从 issue 到 release 工作流的使用方法,也讲解了如何使用 gh alias set 为命令创建别名;而且这些自定义的命令也可以自由组合。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#130-2020.09.28.md b/Reports/2020/#130-2020.09.28.md new file mode 100644 index 000000000..de10c49ee --- /dev/null +++ b/Reports/2020/#130-2020.09.28.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #130 | 2020-09-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +国庆大长假这就来了,周报也将停更两期,下一次更新会在 **10 月 12 日**,复工的首个星期一。望周知!祝大家长假愉快~ + +## WWDC20 + +本周在周报公众号上我们推送了 4 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 14 相册适配指南](https://mp.weixin.qq.com/s/eGHi17N-XOsZB2Bh-tZZXA) +- [如何使用原生 Diff 能力优化 UICollectionView 性能](https://mp.weixin.qq.com/s/I-leJV9W2s2ntb1Lf4DGVA) +- [UIKit 新进展:现代 Cell 配置](https://mp.weixin.qq.com/s/GSvenyTmmeI7O4XFLoUMlA) +- [PhotoKit 新变化:认识新的照片选择器](https://mp.weixin.qq.com/s/YsfG8-eKwQHRlLdg41w7rQ) + +## 新手推荐 + +### 🐕 [3 lesser-known ways of using Swift enums](https://sarunw.com/posts/lesser-known-ways-of-using-swift-enums/) + +[@EyreFree](https://github.com/EyreFree):本文介绍了 Swift 中使用枚举的 3 种鲜为人知的方法,建议有在使用 Swift 的同学都看一下,相信会有所收获。 + +## 文章 + +### 🌟 🐢 [Flutter 渲染引擎详解 - iOS Metal 篇](https://zhuanlan.zhihu.com/p/214099612) + +[@极速男孩](https://github.com/ztlyyznf001): 因为苹果即将停用 OpenGL, 所以在 flutter 1.17 版本中支持了 metal 渲染。本文主要介绍了在 flutter 中,如何完成上下文初始化,然后如何将 view 输出到 surface 中。并在最后介绍了 flutter 光栅化的过程。 + +### 🐕 [搭建 iOS-Crash 平台实践总结](https://www.xuyanlan.com/2020/01/20/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAcrash%E5%B9%B3%E5%8F%B0/#more) + +[@水水](https://www.xuyanlan.com):我之前写过一个 [如何自建 Crash 平台](https://www.xuyanlan.com/2019/02/20/iOS-crash-report/),里面提供了一个大致的思路,这篇文章是对具体实践的一个过程记录。Crash 收集使用的是 PlCrashReporter,解析是基于 llvm8.0,已成功搭建运行近一年,还指导了另外的部门进行快速搭建。想要自己搭建 Crash 平台和自定义 Crash 信息的,可以参考本文的思路。也欢迎在老司机技术群一起进行探讨和交流。 + +### 🐢 [The state of Swift for WebAssembly in 2020 (and earlier)](https://desiatov.com/swift-webassembly-2020) + +[@老峰](https://github.com/Gesantung):[SwiftWasm](https://swiftwasm.org/) 是一个开源项目旨在将 WebAssembly 后端集成到官方 Swift 编译器中,该项目仍处于最早阶段,将允许开发人员使用 Swift 编程语言来构建可在 Web 浏览器中运行的应用程序。本文作者介绍了将 Swift 代码编译为 WebAssembly 的 SwiftWasm 工具集发展历程和期间遇到的问题,以及 2020 年所做更新、未来规划和目标,对 swift-webassembly 感兴趣的读者建议阅读。 + +### 🐎 [Windows 上也能用 Swift 编程了,官方编译工具安装包现已上线](https://mp.weixin.qq.com/s/088RdJNxa79t1Y9Q04A3Xw) + +[@zvving](https://github.com/zvving):Swift 支持 Windows 平台,编译器的支持只是一部分工作,更需要对基础库、调试器、测试工具等开发生态提供全面支持。 + +至少现在,能用简短 Swift 代码编写 Windows 原生计算器程序:这是马拉松般漫长的平台支持旅程中,一个不错的开始。 + +> 参考:[Porting by a 1000 Patches: Bringing Swift to Windows](https://www.youtube.com/watch?v=Zjlxa1NIfJc) + +### 🐎 [来来来,Flutter Widget 体系架构与 UI 渲染流程](https://juejin.im/post/6874737011325059086#heading-0) + +[@Damien](https://github.com/ZengyiMa):本文是 Flutter Widget 以及 UI 渲染的底层技术讲解文章,从 Widget 的分类不断深入到底层 UI 渲染的整套流程,有助于想了解 Flutter 底层渲染机制的同学学习理解。同时在了解了底层原理后,也可以更好的展开诸如状态管理、渲染优化,卡顿 FPS 优化等技术领域的工作。 + +### 🐕 [探秘 App Clips](https://mp.weixin.qq.com/s/HtWQONDrOqPMR-MSqn2-eg) + +[@JonyFang](https://github.com/JonyFang):本文主要是对 App Clips 功能支持及开发配置的介绍。先介绍了唤起条件及用户可操作的权限开关;随后介绍 App Clips 二进制的下载和清理;接着介绍 Apple Connect、客户端、服务端需要做的相关配置;之后介绍了下 App Clips 和主 App 的数据共享及互斥关系;最后介绍了本地测试和审核相关的内容。整篇文章,精简地把 App Clips 从开发、测试、提审到用户体验完整的过程介绍了一篇。对于有 App Clips 业务开发需求的同学会有一定的参考帮助。 + +### 🐎 [深夜暗坑 - iOS 启动图异常修复方案](https://mp.weixin.qq.com/s/giXmBAC0ft-kRB3BloawzA) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文分享了如何定位启动图渲染失败和未能更新的问题的过程以及排查的结果,并提供了替换系统缓存启动图的方案,提供了相关流程图;最后提供了该方案对缓存启动图在不同系统版本上的表现差异。 + +### 🐕 [Memory Safety - The Swift Programming Language](https://docs.swift.org/swift-book/LanguageGuide/MemorySafety.html) + +[@四娘](https://kemchenj.github.io):这是 Swift 官方文档的其中一节,默认情况下,Swift 会阻止你代码里不安全的行为。例如,Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。 + +Swift 也保证同时访问同一块内存时不会冲突,通过约束代码里对于存储地址的写操作,去获取那一块内存的访问独占权。因为 Swift 自动管理内存,所以大部分时候你完全不需要考虑内存访问的事情。然而,理解潜在的冲突也是很重要的,可以避免你写出访问冲突的代码。 + +### 🐕 [Swift 的 MemoryLayout 是如何工作的](https://ai-chan.top/hexo/2020/09/13/Swift-MemoryLayout/) + +[@四娘](https://kemchenj.github.io):`MemoryLayout` 是标准库里一个很神奇的类型,通过它我们可以在运行时获取到特定类型的内存布局信息,之前我们介绍过的 `HandyJSON` 和 `Runtime` 库都有使用到它,但对于它的原理的介绍文章却不是很多。 + +这篇文章就从 Swift 编译器的视角出发,介绍了 `MemoryLayout` 的工作原理,例如从源码到 IR 的过程中如何确定类型的内存布局,如何把这些编译期的元信息变成可调用的语言接口,希望读者读完之后也可以对此有所了解。 + +### 🐎 [JS-Native 通信的 6 种方式](https://mp.weixin.qq.com/s/_Xo6O3NoE1z9AIMJm_uSsA) + +[@享耳先森](https://github.com/iblacksun):本文列出了 Hybrid 架构中,JS 与 Native 通信的几种技术方案,这些方案你都了解吗? + +> 题外话:Hybrid 通信大多是异步方式的,不妨深入研究下,是否可以实现同步呢? + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#131-2020.10.12.md b/Reports/2020/#131-2020.10.12.md new file mode 100644 index 000000000..211d5c5c2 --- /dev/null +++ b/Reports/2020/#131-2020.10.12.md @@ -0,0 +1,143 @@ +# 老司机 iOS 周报 #131 | 2020-10-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [还没全面替换 UIWebView?苹果又给我们续了一命!](https://developer.apple.com/news/?id=edwud51q) + +[@Parsifal](https://github.com/ParsifalC):早在 2014 年苹果就发布了 WKWebView 来替代 UIWebView,并且一直鼓励开发者早日完成迁移。去年苹果直接宣布将停止接受使用 UIWebView 的 新 App,同时表示在 2020 年 12 月份起老 App 如果仍使用 UIWebView 则也无法提交。**但日前苹果表示 2020 年 12 月份这个 Deadline 被延长了**,具体日期待定,对于还没切换 WKWebView 的开发者们,时间上会更充裕一些。 + +如果你的 App 仍然未完成迁移,以下 2 篇周报收录过的文章,会有所帮助: + +- [mattt 关于 WKWebView 特性及如何升级 UIWebView 至 WKWebView 的建议](https://nshipster.com/wkwebview/) +- [如何检测 App 内是否还有 UIWebView 相关内容](https://blog.kulman.sk/determining-which-frameworks-use-uiwebview) + +### [苹果推迟 APNs 提供商 API 适配的截止时间](https://developer.apple.com/news/?id=c88acm2b) + +[@Parsifal](https://github.com/ParsifalC):去年 11 月苹果开始要求开发者适配基于 HTTP/2 的 APNs 提供商 API,并且给定了一年的过渡期。这次苹果宣布这个截止时间从 2020.10.30 推迟至 2021.03.31,延长了整整 4 个月。有必要提一下,这个主要是后端推送服务的适配,主流第三方推送服务应该都已经适配了,若你们是使用的自建推送服务,那还是有必要和后端确认一下是否完成适配。 + +### [Apple 特别在线活动 - iPhone 12 真的来了](https://mp.weixin.qq.com/s/QhoHQNfaMkKNXBD0oKRTAg) + +[@Parsifal](https://github.com/ParsifalC):前不久的秋季发布会,苹果让 iPhone 12 缺席了,但好饭不怕晚!这周(北京时间 10 月 14 日周三凌晨 1 点)苹果将再次举办特别在线活动,据报道此次发布会的主角便是 iPhone 12 系列产品。 + +### [Flutter 1.22 正式发布](https://juejin.im/post/6879048672597213198?utm_source=gold_browser_extension) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 又又又发布新版本了,估计很多同学 1.20 来没捂热呢,1.22 版本发布。本次版本的升级又带来了新一轮的功能发布,性能改进和问题修复。恰逢移动平台新版本(iOS 14/Android 11)的发布季,此次的版本更新保证了 Flutter 应用在 Android 11 和 iOS 14 上的兼容性,面向 iOS 14,本次更新包括了对 Xcode 12,新 Icon 的更新以及 App Clips 功能的预览。对于Android 11,此次更新包括了多种屏幕适配以及软键盘动画的流畅性优化。 + +## 文章 + +### 🌟 🐕 [Flutter 性能优化的利器 —— Tracing](https://mp.weixin.qq.com/s/qlCSF7tCPbERiTm7chXNMA) + +[@邦Ben](https://weibo.com/linwenbang):工欲善其事,必先利其器。如果你需要分析某项功能耗时,那首先你需要解决的,如何去计算耗时,最简单的就是打 log,前后节点时间戳相减得到耗时。对付简单逻辑是没问题的,但是如果遇到像 `Flutter Engine` 这类超长流程的耗时分析,那么你不可能一点点加 log 来处理,费力不讨好。因此该文讲述了 Tracing 的使用,也就是分析耗时常用的"火焰图"。 + +`Tracing` 是 `Chrome` 开发者工具中强大的性能分析工具之一。 + +大致流程,通过 `Tracing` 的 API 去埋入各个点,然后生成一份复杂格式 json,最后拖进 `Chrome` 中 `chrome://tracing` 进行解析这份 json 生成一个很直观的火焰图。(一图胜千言,这句话是真的。) + +该文会专注在 `Flutter Engine` 中 Tracing 原理与实践,会分为原理篇与实践篇,原理篇会涉及到具体实现,实践篇主要包括如何使用、分析、定制。具体代码分析较多,直接打开看文章吧。 + +### 🌟 🐕 [Introducing Swift Atomics](https://swift.org/blog/swift-atomics/) + +[@EyreFree](https://github.com/EyreFree):Apple 官方发布了一个新的可以在 Swift 代码中直接使用低级原子操作的开源软件包 `Swift Atomics`,该库为以下 Swift 类型实现了原子操作,所有这些类型均符合 `AtomicValue` 协议: + +- 标准符号整型(Int、Int64、Int32、Int16、Int8) +- 标准的无符号整数类型(UInt、UInt64、UInt32、UInt16、UInt8) +- 布尔值(Bool) +- 标准指针类型(UnsafeRawPointer、UnsafeMutableRawPointer、UnsafePointer、UnsafeMutablePointer),以及它们的可选包裹的形式(如 Optional>) +- 非托管引用(Unmanaged、Optional>) +- 一种特殊双字(DoubleWord)类型,由两个 UInt 值 low 和 high 组成,提供双倍宽度的原子基元 +- 任何 RawValue 是原子类型的 RawRepresentable 类型(例如简单的自定义枚举类型) +- 对选择原子使用的类实例的强引用(通过遵守 AtomicReference 协议) + +### 🌟 🐢 [【译】SE-0282 Low-Level Atomic Operations ⚛︎](https://kemchenj.github.io/2020-10-02/) + +[@四娘](https://kemchenj.github.io/):前一段时间 Apple 团队发布了 [swift-atomics](https://github.com/apple/swift-atomics),让我们可以通过这个 package 用纯 Swift 代码实现高性能的**无锁并发数据结构**,这里我就把它的前身 [SE-0282 Low-Level Atomic Operations](https://kemchenj.github.io/2020-10-02/) 翻译出来,希望可以帮助大家更好地理解 swift-atomics。 + +### 🐕 [官方推荐 | 在 Flutter 中使用 TensorFlow Lite 插件实现文字分类](https://mp.weixin.qq.com/s/cdcirQCKMS3fkSnz4tL5ig) + +[@莲叔](http://aaaron7.github.io/):Flutter 技术目前已经逐渐被主流的移动开发者接受,几乎绝大多数大 App 都已经或多或少的拥抱了 Flutter 技术。这个趋势带来的额外收益就是插件生态越来越繁荣,甚至开发者已经把目光投向了端智能领域。本篇文章介绍了基于 tflite_flutter 插件在 flutter 侧实现一个简单的文本情绪分类器,场景还算比较有趣,但整体比较简单,偏教程。想试水端智能的小白可以看看。 + +### 🐕 [Dark side of extensions in Swift](https://dmtopolog.com/dark-side-of-extensions/) + +[@极速男孩](https://github.com/ztlyyznf001):Extensions 在 Swift 中类似于 Objective-C 中的 category,但是比 category 更加灵活和强大。Extensions 可以在一些现有的类中添加一些功能,甚至包括一些没有源码的系统的类,甚至你可以对一个协议进行扩展。本文主要介绍了如何在 Swift 去使用 Extensions, 并讨论如何处理对象和他的扩展之间的边界的问题。 + +### 🐎 [iOS 后台锁屏也能监听摇一摇?](https://juejin.im/post/6881420727371694093) + +[@享耳先森](https://github.com/iblacksun):直觉来说,iOS App 如果进入后台了能做的东西就非常少了,碰到「后台检测手机摇一摇」类需求时如何实现呢?作者给出了完整的研究和实现过程。 + +### 🐎 [iOS 是如何获取夜间模式启动图缓存路径?](https://ai-chan.top/hexo/2020/09/27/iOS-Snapshots/) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文作者首先验证了通过启动图文件名是无法获取夜间模式启动图的。然后介绍了通过分析系统文件来获取夜间模式启动图的过程。具体方案是通过解析``applicationState.db``文件并通过测试找出了夜间模式启动图缓存路径。另外作者也给出了 dump ``applicationState.db`` 文件后得出的信息,有兴趣的读者可以阅读原文查看。 + +### 🐕 [How Swift API Availability Works Internally](https://swiftrocks.com/how-availability-works-internally-in-swift) + +[@老峰](https://github.com/Gesantung):Swift 2.0 中引入了可用性的概念, 对于函数、类、协议等,可以使用 #available 声明这些类型依赖于特定的平台或操作系统版本。本文作者 Bruno Rocha 结合撰写 swift #unavailable evolution 的过程深入研究分享了 #available 的工作原理及实现细节。 + +### 🐎 [Binary Frameworks as Swift Packages](https://pspdfkit.com/blog/2020/binary-frameworks-as-swift-packages/) + +[@四娘](https://kemchenj.github.io/):今年 Swift Package Manager 最重要的更新之一就是支持了二进制分发,PSPDFKit 第一时间就做了 SPM 的支持,也给 Swift 团队提了一些反馈意见(Bug),并且赞助 CocoaPods 团队去开发 xcframework 相关的功能,文章里简短地介绍了 SPM 的接入流程和遇到的问题,感兴趣的朋友可以看一下,在这里也感谢他们对开源社区的回馈。 + +### [UC 内核团队再出发,打造全新 Flutter 渲染引擎 —— Hummer](https://juejin.im/post/6877716124117663757) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 可以说是近两年来最火爆的移动跨平台方案,无论是创新型应用还是老牌旗舰型应用,都在或多或少地尝试 Flutter 技术。虽然 Flutter 看起来非常美好,但是它毕竟只是一个有潜力的新生儿,有待完善的地方还很多,UC 团队对此做了大量的工作,对 Flutter 引擎的性能和相关配置工具等做了大量优化,就有了定制化 Flutter 引擎 [Hummer](https://juejin.im/post/6877716124117663757), 目前 Hummer 已经取得了不少喜人的成绩: + +- 混合栈开发方案优化 +- 启动及首帧性能优化 +- 自适应的 DarkMode +- 网络库增强 + +## 工具 + +### [XcodeGen — Collaboration Made Easy](https://medium.com/dev-jam/xcodegen-collaboration-made-easy-9d1fdef548de?source=friends_link&sk=e13d571c9544f878a3c1510778a988c9) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):相信每一位开发者在合并代码的时候都会遇到与 .xcodeproj 文件相关的冲突,解决这种冲突并不容易。有没有比较好的方式或工具可以解决这种问题?没错,XcodeGen 可以提供很大帮助,XcodeGen 是用 Swift 编写的命令行工具。它使用文件夹结构和项目规范来生成 Xcode 项目,其中包含生成项目所需的所有信息,例如目标,方案,设置等, 同时允许我们将配置拆分为多个文件,更易于管理。尽管 XcodeGen 会改变配置项目的方式,但在大型团队工作时使用 XcodeGen 会受益良多。 + +## 代码 + +### 🐎 [Announcing Swift Algorithms](https://swift.org/blog/swift-algorithms/) + +[@zvving](https://github.com/zvving):Swift 官方新开源 Swift Algorithms 项目,旨在为 Swift 算法代码提供通用基础能力。目前包含集合 Chunked, Sampling,Rotate 等辅助方法。 + +项目尚在早期阶段,以独立库的方式存在,初步对纳入算法标准提出建议,经过社区长期论证的算法,最终会纳入标准库。 + +官方出品,品质保证。日常写算法比较多的同学可以先用起来。 + +### [Swift System](https://github.com/apple/swift-system) + +[@xiaofei86](https://weibo.com/xuyafei86):苹果在 WWDC20 "What's New in Swift" 公布 Swift Archive 框架时,提到其文件流构造函数用到了今年引入的另一个新框架 Swift System。之后简单介绍了 Swift System 为 Apple Archive 的系统底层 API,提供更加现代、易用的系统接口,以及更加底层、通用的类型。除此之外,没有公布更多的信息。 + +最近,苹果开源了 Swift System,并引入了对 Linux 的支持。旨在提供多平台的系统接口封装,让 Swift System 充当所有受 Swift 支持平台的系统底层接口的唯一宿主。 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): 是一款 iOS 开发调试辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在实际工作中能极大提升开发效率和幸福感! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#132-2020.10.19.md b/Reports/2020/#132-2020.10.19.md new file mode 100644 index 000000000..7526058df --- /dev/null +++ b/Reports/2020/#132-2020.10.19.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #132 | 2020-10-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 5 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 性能优化:使用 MetricKit 2.0 收集数据](https://mp.weixin.qq.com/s/cbP0QlxVlr5oeTrf6yYfFw) +- [iOS 持续集成:更完备的 App Store Connect API](https://mp.weixin.qq.com/s/KnryMnySoOXvf8K7kQVwmA) +- [iOS 性能优化:优化 App 启动速度](https://mp.weixin.qq.com/s/h3vB_zEJBAHCfGmD5EkMcw) +- [Universal Links 新变化:让触达更广更快](https://mp.weixin.qq.com/s/mnZDKVk_0B60PnX_nSzFpA) +- [HealthKit 的新增功能](https://mp.weixin.qq.com/s/sa0yWgawgfHco9_7dQ5wyg) + +## 新手推荐 + +### 🐕 [Overriding UserDefaults for improved productivity](https://www.avanderlee.com/xcode/overriding-userdefaults-launch-arguments/) + +[@AidenRao](https://weibo.com/AidenRao):应用内的 UserDefaults 是一个易于访问的数据存储,用于保存状态,统计信息和其他与应用程序相关的数据。我们可以通过配置启动参数覆盖 UserDefaults,无需修改代码,更改 UserDefaults 默认值,提高开发效率。 + +### 🐕 🚧 [Setting default values for NSUserDefaults](https://sarunw.com/posts/setting-default-value-for-nsuserdefaults/) + +[@红纸](https://github.com/nianran):接上篇 UserDefaults 描述,我们可以通过 `register(defaults:)` 函数进行设置相关 key 的初始值,register 的设置仅会在 key 对应的 value 为 nil 的情况下才会进行设置,值得注意的是 register 并不会写入磁盘,仅仅只是运行时赋予了初始值。 + +### 🐎 [UIButton 状态新解](https://mp.weixin.qq.com/s/nD-HV-gkKJr1MWU_agwkyg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):UIButton 作为日常开发的常用控件,系统为我们提供了相当丰富的功能以及可定制性。本文从单一状态,到组合状态,到自定义状态层层深入了介绍了 UIButton 的状态在日常开发中的应用。只用状态来驱动 UI 一直是程序员开发中的美好设想,本文算是从一个基本控件上给出了实现参考。 + +### 🐎 [Flutter 组件的事件传递与数据控制 | 开发者说·DTalk](https://mp.weixin.qq.com/s/mO2lT_s1s5a94KeirPpeVg) + +[@邦Ben](https://weibo.com/linwenbang/):Flutter 开发始终绕不过状态管理,这篇文章使用最基础的代码讲解了一下如何合理的进行传递数据和事件。非常适合入手的时候看下。 + +文章也简单总结了: + +- 改变自己 state 的数据,setState 向 child 传递新数据 +- 接受 child 的事件回调 +- 向 child 更新目标数据,child 监听数据的变化,更加细节的改变自己的 state +- 向 child 传递 controller,全面控制 child 的 state + + +### 🐕 [Debugging on iOS 14 with Xcode 11](https://hybridcattt.com/blog/debugging-on-ios14-with-xcode-11/) + +[@J_Knight_](https://github.com/knightsj):文章分享了能让 iOS 14 在旧版本的 Xcode 上运行的方法,以及将调试器附加到正在运行的应用程序的方法。另外也结合了代码和截图分享了在没有添加调试器的情况下查看变量的方法。 + +## 文章 + +### 🌟 🐕 [iOS main in Assembly](https://suelan.github.io/2020/08/18/20200817-ios-main-in-assembly/) + +[@五子棋](https://satanwoo.github.io):首先这是一篇全英文的博客,这就很棒啦。其次作者通过分析 iOS 中的 main 函数,来逐步深入其本质是如何实现的。在剖析过程中穿插了一些基本的汇编知识,是一篇比较好的入门实践文章。 + +### 🌟 🐕 [Crash Reporting with MetricKit](https://www.chimehq.com/blog/metrickit-crash-reporting), [Crash Reporting with MetricKit, Part 2](https://www.chimehq.com/blog/metrickit-crash-reporting-part-2), [iOS 性能优化:使用 MetricKit 2.0 收集数据](https://mp.weixin.qq.com/s/cbP0QlxVlr5oeTrf6yYfFw) + +[@老驴](https://www.weibo.com/6090610445):三篇关于 MetricKit 的文章,让你一次读懂 MetricKit。今年 WWDC 上,苹果把去年引入的 MetricKit 升级到了 2.0,主要新增了三种指标:CPU 指令、滚动卡顿和应用程序退出。MetricKit 作为苹果官方支持的 Metrics 工具链,也在不断的迭代完善中,相信未来,一定会在 iOS 中,有更重要的地位。 + +### 🌟 🐕 [初探 Objective-C/C++ 异常处理实现机制](https://mp.weixin.qq.com/s/4Rcaee6kwWmrS3v_M9y0KQ) + +[@Leo](https://github.com/leomobiledeveloper):异常处理是语言的重要特性,Objective C 和 C++ 也不例外。日常开发中我们更多的会关注如何捕获和处理异常,很少会关注异常底层的实现原理。本文从 C++ 异常出发,从汇编和 llvm 源码的角度进行了探索和思考,介绍了 Objective C 和 C++ 的异常实现机制,除了内容上干货很多,分析的思路也值得借鉴。 + +### 🐕 [Podspec 文件分析](https://mp.weixin.qq.com/s/CBkO-UfiPTMY5drIX_ZhKQ) + +[@JonyFang](https://github.com/JonyFang):在前面期的 [Podfile 的解析逻辑](https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng==&mid=2458324199&idx=1&sn=3886bbbcef3640bf97e16fcec34b451f&chksm=870e03feb0798ae84ab4b5dab26dfbe8ebbac0bca8491493fa4919f6069bfef58cd04df5ab34&scene=21#wechat_redirect)中,作者以 Xcode 工程结构作为切入点介绍了 Podfile 背后对应的数据结构,剖析了 Podfile 文件是如何解析与加载,及最终如何进行工程构建。本篇介绍了 CocoaPods-Core 中的另一个重要文件 Podspec。 + +内容结构: + +- PodSpec 配置及CoC规则 +- 介绍 spec 核心数据结构 +- spec from json +- spec from ruby +- 实践创建一个 pod + +### 🐎 [Apple’s use of Swift and SwiftUI in iOS 14](https://blog.timac.org/2020/0927-state-of-swift-ios14/) + +[@邦Ben](https://weibo.com/linwenbang/):这篇文章主要是分析了 iOS 14.0 系统中使用有多少内置程序在使用 `Swift`(注意:只要用到一行 Swift 也会被计算)。 + +iOS 13.1: `Swift` 141 个, `SwiftUI` 5 个。 +iOS 14.0: `Swift` 291 个, `SwiftUI` 43 个。 + +由此可见,Apple 内部推进 Swift 逐年增大,期望 Swift 的进一步发展。 + +### 🐕 [从渲染原理出发探究 Flutter 内存泄漏](https://mp.weixin.qq.com/s/wPxXUv58sM9Fu3WOmP4JPA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 内存的高低是评判一款app的性能优劣的重要的指标之一。如何更简单的帮助开发者分析、暴露且解决内存泄漏问题,几乎是每一个平台或框架、开发者亟需的一个的"标配"的feature。本文由闲鱼团队分享,从渲染树的角度去探寻flutter内存泄漏的方法。 + +### 🚧 🐕 [How iOS Apps Adapt to the various iPhone 12 Screen Sizes](https://hacknicity.medium.com/how-ios-apps-adapt-to-the-various-iphone-12-screen-sizes-e45c021e1b8b) + +[@水水](https://www.xuyanlan.com): 在 2020 年 10 月的发布会上,苹果发布了四款 iPhone 12 机型:iPhone 12 mini、iPhone 12、iPhone 12 pro 和 iPhone 12 pro max。iPhone 12 和 12 pro 的屏幕分辨率完全相同,行为也完全相同。所以只有三个屏幕分辨率要考虑,作者列举了这几个机型以及之前的一些机型的标准缩放和显示缩放, 希望对你的机型适配有所帮助。 + +### 🐕 [Swift deinit is (sometimes) not called for throwing or failable initializers](https://www.jessesquires.com/blog/2020/10/08/swift-deinit-is-not-called-for-failable-initializers/) + +[@EyreFree](https://github.com/EyreFree):当 `init?()` 失败返回 `nil` 或抛出异常时,`deinit` 并不会被调用。本文对 Swift 中这一关于 `init` 与 `deinit` 的边缘情况进行了介绍,并对这一设计的历史原因和设计初衷进行了讨论。 + +## 音视频 + +### 🐕 [“A huge year for SwiftUI” a WWDC20 special with Josh Shaffer and Eliza Block](https://www.swiftbysundell.com/podcast/76/) + +[@老驴](https://www.weibo.com/6090610445):今年苹果在 SwiftUI 上发力不少,iOS 14 当中像 Widget 这样的新功能只能用 SwiftUI 来实现,苹果想要通过这样的方式来推广 SwiftUI。这期,就有来自苹果的 Josh Shaffer 和 Eliza Block 来参与讨论 SwiftUI 今年的改动和 SwiftUI 的未来。 + +> @[alfredcc](https://github.com/alfredcc) 推荐 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): 是一款 iOS 开发调试辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在实际工作中能极大提升开发效率和幸福感! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 阿里巴巴淘系端智能团队招人,主要的工作是 MNN 业界知名推理引擎 / AR 美妆、渲染系统及框架设计 / AI 配套软件设施 / 服务端推荐系统。 +> Android / 渲染 / CV 算法 / 服务端 都缺人。 +> 坐标杭州北京,不 PUA,机会大,多劳多得,来就一起干,有意者加 V 号:satanwoo。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#133-2020.10.26.md b/Reports/2020/#133-2020.10.26.md new file mode 100644 index 000000000..bbd1c86c0 --- /dev/null +++ b/Reports/2020/#133-2020.10.26.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #133 | 2020-10-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**热烈欢迎社区老朋友 [Leo](https://github.com/LeoMobileDeveloper) 加入周报编辑组![Leo](https://github.com/LeoMobileDeveloper) 目前就职于字节跳动,负责抖音 和 TikTok 基础体验优化。** + +## WWDC20 + +本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 性能优化:用电池和性能 API 识别性能趋势](https://mp.weixin.qq.com/s/mX4PXtIG7eQGD1tDNKNNFw) +- [iOS 稳定性:App 被终止的原因](https://mp.weixin.qq.com/s/l8KjyTxCJis-tFUitAj-0g) +- [iOS 性能优化:用 Xcode Organizer 诊断性能问题](https://mp.weixin.qq.com/s/XiiQpzY7mJqdD96Lpja_4Q) + +## 新闻 + +### [周报 1024 活动 & 书单推荐](https://mp.weixin.qq.com/s/h1jGebb-t4EYo8ENv2Kdhw) + +[@Parsifal](https://github.com/ParsifalC):上周六是 1024 程序员节,周报也给大家发了一波福利,截止现在所有抽奖活动均已结束,如果你中奖了但未收到周报微信联系,请添加「iTDriverr」私聊~另外未中奖的朋友,依然可以使用当当网优惠码自行购买,书单真的很不错! + +## 新手推荐 + +### 🐎 [The Ultimate Guide to the SwiftUI 2 Application Life Cycle](https://peterfriese.dev/ultimate-guide-to-swiftui2-application-lifecycle/) + +[@Parsifal](https://github.com/ParsifalC):自去年 Xcode 11 与 iOS 13 发布时,苹果就引入了 `SceneDelegate` 来替代 `AppDelegate` 接管了 App 生命周期的管理。今年 WWDC SwiftUI 2.0 亮相,同时苹果也介绍了其全新的 App 生命周期管理方式。这篇文章很细致地介绍了如何使用新的 API 来进行 App 生命周期管理。 + +## 文章 + +### 🌟 🐢 [iOS 性能优化实践:头条抖音如何实现 OOM 崩溃率下降 50%+](https://mp.weixin.qq.com/s/4-4M9E8NziAgshlwB7Sc6g) + +[@Leo](https://github.com/leomobiledeveloper): OOM 率是衡量 App 整体质量的重要指标之一。目前大家普遍采用排除法来判断 OOM ,能够较为准确的判断出线上用户发生了 OOM ,但归因分析手段却比较欠缺,导致定位修复问题困难。字节跳动技术团队提出了一种基于内存快照技术的方案 - Memory Graph,其原理是在快发生 OOM 的时候 dump 内存快照,建立内存节点的引用关系,能够大幅度提高排查线上 OOM 问题的效率,在头条抖音落地后 OOM 率下降50%+。本文结构清晰,内存相关研究非常深入,是一篇值得花时间仔细阅读的好文。 + +### 🌟 🐢 [深入理解 Dart 空安全](https://mp.weixin.qq.com/s/MEL5kokoyb0CJcjrPpo12w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 空安全已经成为现代编程语言的一个标配,比如 Swift 中的 Optional。 空安全机制,使得我们可以更加优雅的编写判空代码,同时代码健壮性也得到了极大提升。 Dart 自然也不例外,自 Dart 2.0 以后引入了空安全机制,但少有人能完整理解,甚至于现在可以在很多 Flutter 项目中看不到相应的代码,本文由 Google Dart 团队工程师 Bob Nystrom 分享,为你详细讲解 Dart 空安全机制,强烈推荐。 + +### 🐎 [@warn_unqualified_access](https://fivestars.blog/swift/warn_unqualified_access.html) + +[@xiaofei86](https://weibo.com/xuyafei86):在最近的 Swift 版本中,我们已经看到了一系列新的 attributes,如 @unknown,@propertyWrapper,@main 等。在这篇文章中,作者将带领我们了解一个少为人知的,但同样有用的旧有属性 @warn_unqualified_access。其在 Swift 2 中悄悄引入,用来帮助我们消除调用顶级函数、静态方法、实例方法时的歧义。感兴趣的同学可以详细阅读。 + +### 🐕 [自研 iOS 热更新机制——OCPack 技术方案总结](https://mp.weixin.qq.com/s/x7c5mHJINcWpGCuHPDNNPw) + +[@J_Knight_](https://github.com/knightsj):本文分享了一种在 iOS 平台上的 App 动态化技术方案:OCPack。OCPack 提供的工具链可以将 .m 文件生成 .bin 格式的 patch 文件,该文件可以在一个基于 Native 环境的虚拟栈机加载并执行,从而达到动态化更新的效果。作者从编译模块、汇编模块、加载模块和执行模块来分别讲解了 OCPack 方案的实现方式,同时也介绍了该方案的优势和未来的迭代计划。 + +### 🐎 [App 崩溃现场取变量名和其实际值对应关系(不只是寄存器)](https://juejin.im/post/6883160410736820231) + +`.DYSM` 是编译过程中产生的符号文件,一般用于崩溃日志的解析。许多同学已经知道在拿到 `.DYSM` 文件后如何将崩溃栈中的指令地址转换为实际代码文件及其对应行号,可是如何得到崩溃现场当前方法中各个变量名和其当前值(而不是只有寄存器)呢?因为这样也更有助于我们更快更准确地去定位问题。本文通过实践解答了这个问题,感兴趣的同学可以了解一下。 + +> 由 [jzhang46](https://github.com/jzhang46) 自荐。 + +### 🐕 [Evolution of the programming languages from iPhone OS 1.0 to iOS 14](https://blog.timac.org/2020/1019-evolution-of-the-programming-languages-from-iphone-os-to-ios-14/) + +[@Parsifal](https://github.com/ParsifalC):从最早的 iPhone OS 到现如今的 iOS,苹果在移动端的系统已经迭代了 14 个版本。作者写了个脚本,分别统计了 C/C++/Objective-C/Swift 以及 SwiftUI 在 iPhone OS 1.0 - iOS 14 间的使用比例,最终通过柱状图非常直观地展示了这个变迁史。以 iOS 14 为例,作者的统计结果是: +- Objective-C:88% +- C++:17% +- Swift:8% +- C:8% +- SwiftUI:1% + +除了整个统计数据比较有意思,作者还很详细地整理了他是如何写这个脚本的,对于想要做类似统计的朋友来说还是很有参考意义。 + +## 工具 + +### [GoSwifty](https://github.com/rsrbk/GoSwifty) + +[@Parsifal](https://github.com/ParsifalC):一个统计项目中 Swift 和 OC 代码比例的小工具,由 Swift 编写,正在做 OC 老项目迁移的朋友可以用起来跟进重构进度。 + +## 代码 + +### [SYWebViewBridge](https://mp.weixin.qq.com/s/JDCyWg1AYemxbnFbvY5E9w) + +[@享耳先森](https://github.com/iblacksun):SYWebViewBridge 是一个 Hybrid 与 Native 通信的开源库,基于自定义 scheme 实现,目前还处于 Beta 阶段,大家可以看下具体实现思路。 + +### [YYJSON](https://github.com/ibireme/yyjson) + +[@Parsifal](https://github.com/ParsifalC):由 [YYKit](https://github.com/ibireme/YYKit) 的作者 [ibireme](https://github.com/ibireme) 基于 ANSI C 编写的高性能的 JSON 库。作者对性能优化一直有比较深刻的研究,YYJSON 依然沿袭了这一特点,与主流框架对比在性能上有较明显提升。 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS开发辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在工作中能极大提升开发效率,Mac App Store免费下载! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#134-2020.11.02.md b/Reports/2020/#134-2020.11.02.md new file mode 100644 index 000000000..221f53f15 --- /dev/null +++ b/Reports/2020/#134-2020.11.02.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #134 | 2020-11-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [苹果全新订阅服务通知现已在分发环境中使用](https://developer.apple.com/news/?id=an960mux) + +[@Parsifal](https://github.com/ParsifalC):苹果向开发者宣布,现已可在分发环境中使用新的订阅服务通知。苹果提供了用户订阅状态的实时更新通知,方便开发者更快了解自己服务的订阅情况。 + +## 新手推荐 + +### 🐎 [Deep Dive Into The Pubspec.yaml File](https://medium.com/flutter-community/deep-dive-into-the-pubspec-yaml-file-fb56ac8683b9) + +[@邦Ben](https://weibo.com/linwenbang):该文是 flutter pubspec.yaml 文件配置的详细介绍,如果刚接触的同学,可以进行了解一下各个配置项的作用。 + +## 文章 + +### 🌟 🐢 [Swift 发布并发功能的开发路线图](https://forums.swift.org/t/swift-concurrency-roadmap/41611) + +[@四娘](https://kemchenj.github.io/):并发功能在 Swift 社区一直呼声很高。终于,上周五开发组在论坛发布了开发路线图,其中的内容包括: + +- [async/await](https://forums.swift.org/t/concurrency-asynchronous-functions/41619) +- [Task API 和 Structured Concurrency](https://forums.swift.org/t/concurrency-structured-concurrency/41622) +- [Actor & Actor Isolation](https://forums.swift.org/t/concurrency-actors-actor-isolation/41613) +- [Concurrency Interoperability with Objective-C](https://forums.swift.org/t/concurrency-interoperability-with-objective-c/41616) +- Async handlers + +目前这些功能已经完成了初步设计,正在紧锣密鼓地进行实现,并且也在论坛里将草案发了出来,感兴趣的同学可以点击上面的链接查看并参与讨论。 + +另外值得一提的是开发组打算为此优化 Objective-C 的桥接,**OC 里基于回调的 API 在导入到 Swift 时会自动合成 async 版本,并且 async/await 支持向后部署**,开发组也在 GitHub 上[提供了 API 预览](https://github.com/DougGregor/swift-concurrency-objc/pull/1/files)。 + +### 🌟 🐢 [抖音品质建设 - iOS启动优化《原理篇》](https://mp.weixin.qq.com/s/3-Sbqe9gxdV6eI1f435BDg) + +[@Leo](https://github.com/leomobiledeveloper):抖音品质建设系列文章,不仅详细介绍了 iOS 13后的 dyld3 启动流程,还从编译期到运行时深度解读了影响启动速度的每一步,包含了很多抖音基础体验团队的深入研究沉淀,是一篇值得仔细阅读的文章。 + +### 🌟 🐎 [网易云音乐 iOS 14 小组件实战手册](https://mp.weixin.qq.com/s/gFd8fkJBkQd5RpFSD0P8Ig) + +[@Damien](https://github.com/ZengyiMa):苹果在今年的 WWDC20 上发布了小组件(WidgetKit),支持在 iOS、iPadOS 主屏幕展示动态信息和个性化内容,这极大增强了主屏幕上的交户内容,对 App 而言也带来了新的流量入口,本文展示了网易云音乐团队在开发适配 iOS 14 小组件上的工作细节,内容包括和主 App 数据通信、SwiftUI 页面编写、网络数据请求、Widget 数据刷新、点击跳转等等,对于正在开发和适配 Widget 的同学有很大的学习价值。 + +### 🌟 🐢 [他把闲鱼APP长列表流畅度翻了倍](https://mp.weixin.qq.com/s/dlOQ3Hw_U3CFQM91vcTGWQ) + +[@JonyFang](https://github.com/JonyFang):业务快速迭代过程中,App 长列表滑动流程度逐渐恶化,对用户浏览内容体验产生伤害。闲鱼 App 以 Flutter 和原生 Native 的混合工程存在,本篇分享了 Android 原生、Flutter 页面和优化思路。基于主流优化方案之上,闲鱼也做了一些不一样的优化。如基于用户体验为导向构建了流畅度指标;针对指标,自建流畅度检测工具,支持无侵入、跨平台、自动化;Android 显示 ViewDataUnbinder 组件在复杂业务逻辑中快速抽离 UI 操作;Flutter 修改 Flutter Engine 源码以支持列表 Element 的复用;Flutter 实现大 Widget 分帧上屏组件;Flutter 差值器算法优化。在我们自己项目的优化过程中,思路可以拿来作为参考。 + +### 🐎 [如何知道一个锁到底被哪个线程占用?](https://mp.weixin.qq.com/s/EUxx23NBsaPX2KG6HVG-cQ) + +[@AidenRao](https://weibo.com/AidenRao):在多线程环境下调试或定位问题时,有时我们会发现某重要线程被卡住在等待某个锁上,但具体是哪个线程或哪段代码拿了锁又无法一下看出来。几种常用的锁,其实都记录了 owner 信息,例如 pthread_mutex_t 结构体里有一个 \__data.\__owner 字段,通过简单的取偏移办法,就能在运行时定位到锁当前的 owner 线程。 + +### 🐎 [arm64e 架构简介——指针验签 ](https://mp.weixin.qq.com/s/a5e0T51kH9NIVKJpRyg4hQ) + +[@SatanWoo](https://satanwoo.github.io):arm64e 中一个很重要的特性就是 Pointer Authentication。通过对一些涉及指令跳转相关地址进行加签校验,可以有效的避免常见的返回值攻击等。不过本文的写的不是非常的具体,建议读者朋友自行搜索相关的资料进行深入了解。 + +### 🐕 [Useful (and Obscure) Foundation Types in Swift](https://medium.com/better-programming/useful-and-obscure-foundation-types-in-swift-4f2b2c42354e) + +[@EyreFree](https://github.com/EyreFree):苹果的 Foundation 库为开发者提供了很多 iOS 日常开发必需的东西,其中有一些数据类型大家平时用的比较少,但是了解它们可以帮助我们编写很多不必要的代码,比如本文介绍的 NSScanner、NSCountedSet、NSCache、NSOrderedSet、NSByteCountFormatter、NSDataDetector、CFBinaryHeap。 + +### 🐎 [客户端开发基础知识——写文件避“坑”指南](https://juejin.im/post/6885630755805626375) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):尽管写文件在客户端开发过程中是非常常见的操作,但是依然会时不时的遇到一些奇怪的问题。诸如读写文件不一致、写入过程内容丢失等。本文会对文件读写相关的几个 API 和其内部机制进行详细讲解,并对常见的几个问题一一解答。 + +### 🐕 [Keeping expansion state of OutlineDisclosures using NSDiffableDataSource SectionSnapshot on UICollectionView DiffableDatasource](https://crsantos.info/uicollectionviewdiffabledatasource-outline/) + +[@老峰](https://github.com/Gesantung):去年 Apple 给 UICollectionView 引入 Diffable Data source API,通过 Snapshots 可以高效更新 UI。 本文作者分享了在使用 UICollectionViewDiffableDatasource 实现展开收起效果过程中遇到刷新数据自动收起的问题,以及通过使用 SectionSnapshotHandler(available since iOS 14) 来处理的方案,有类似需求的同学可以参考。 + +## 工具 + +### [7 Essential iOS Developer Tools](https://medium.com/better-programming/7-essential-ios-developer-tools-6bbc8ce53675) + +[@Parsifal](https://github.com/ParsifalC):无论你是刚入门的小萌新还是有经验的老司机,这 7 款工具都能够帮助你提效。 + +- Swift Package Index:Swift 库的检索网站,已收录超过 3000 多个库,其对库的版本兼容等信息展示形式很清晰直观。 +- Image Optim:图片压缩工具,可以有效帮助你进行 App 图片资源瘦身,另外周报曾经推荐过的 [Crunch](https://github.com/chrissimpkins/Crunch) 也很不错。 +- SF Symbols:苹果官方维护的 SF Symbols 集 +- Dribbble:在设计师群体中很受欢迎的一个展示自己作品的网站,如果想找一些非常酷炫的交互效果,这里是一个不错的选择 +- Make App Icon:为你自动生成所有尺寸大小的 App Icon,如果你还没有 App Icon 又想自己设计一个,这里十分推荐周报编辑 [Joseph](https://github.com/josephchang10) 开发的 [图标设计器](https://apps.apple.com/cn/app/%E5%9B%BE%E6%A0%87%E8%AE%BE%E8%AE%A1%E5%99%A8-app-icon-maker/id1391581924)。 +- ShotBot 3.0:App 市场图生成工具,拥有许多免费的模板和设备比例支持 +- TermsFeed:各类协议生成器,App 审核必备。不过看情况很多项是需要付费的。 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在工作中能极大提升开发效率,Mac App Store免费下载! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 飞书业务的团队成员来自全球互联网顶尖企业,目前在北京、武汉、上海、杭州、深圳、广州和美国旧金山等均设有团队分支。高于行业平均水平的薪金待遇,六险一金、弹性工作、租 房补贴、免费三餐,你值得拥有! +> 简历发送至 hi@inico.me + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#135-2020.11.09.md b/Reports/2020/#135-2020.11.09.md new file mode 100644 index 000000000..6fd51dcdb --- /dev/null +++ b/Reports/2020/#135-2020.11.09.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #135 | 2020-11-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect 已包含 app 隐私相关问题](https://developer.apple.com/cn/news/?id=vlj9jty9) + +[@Parsifal](https://github.com/ParsifalC):苹果对用户隐私数据保护的又一措施。在用户下载 App 之前,开发者必须让用户知晓可能被收集的信息以及该信息是否会用于跟踪他们的行为。从 2020 年 12 月 8 日起,提交至 App Store 的新 app 和 app 更新都将需要包含此信息。 + +## 文章 + +### 🌟 🐢 [Flutter 中的 Tree Shaking 机制初探](https://mp.weixin.qq.com/s/Uv6vKiESZVplTYQV9T07Yg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Tree Shaking 是一种死代码消除(Dead Code Elimination)技术,这一想法起源于 20 世纪 90 年代的 LISP。其思想是:一个程序所有可能的执行流程都可以用函数调用的树来表示,这样就可以消除那些从未被调用的函数。本文是闲鱼技术探究工程一体化的过程中对 Flutter 的 Tree Shaking 机制探究的科普文,强烈推荐. + +### 🐕 [Swift KeyPaths under a different optic](https://www.47deg.com/blog/keypaths-optics/) + +[@极速男孩](https://github.com/ztlyyznf001):Optics 可以给一个语言提供了简单地访问或修改整个数据结构各个部分的方法。这篇文章主要介绍了如何利用 key paths 来实现 Optics 的模型,来实现深度嵌套的不可变数据结构的 get 和 set 方法。更多关于 Optics 的内容可以参考[这篇文章](https://www.47deg.com/blog/optics/)。 + +### 🐕 [Swift 编译慢?请看这里,全套开源](https://juejin.im/post/6890419459639476237) + +[@JonyFang](https://github.com/JonyFang):主要介绍 [cocoapods-imy-bin](https://github.com/MeetYouDevs/cocoapods-imy-bin) 项目对 Swift 二进制化的支持。分享了 Swift 二进制化过程中遇到的一些问题及对应的解决方案。 + +cocoapods-imy-bin 特征: + +- 无入侵 +- 轻量。不受耦合或组件化的影响 +- 支持自动化使用 +- 支持 `use_frameworks!` +- 支持 Swift 项目二进制化编译 + +> 由 [Mr.Coder](https://github.com/su350380433) 自荐 + +### 🐕 [Bridging Native UI Components in the React Native](https://www.netguru.com/codestories/bridging-native-ui-components-in-the-react-native) + +[@J_Knight_](https://github.com/knightsj):本文作者通过一个简单的 Demo 和 iOS、Android 以及 JS 三端的代码,分享了如何桥接原生的 UI 组件到 React Native 显示,以及原生和 React Native 的数据通信的方法。 + +### 🐎 [Swift 中使用 Option Pattern 改善可选项的 API 设计](https://onevcat.com/2020/10/use-options-pattern/) + +[@zvving](https://github.com/zvving):线上项目应用 SwiftUI,除了 Widget 目前可落地的场景还不够多。业务场景或许有些限制,学习探索的思路则不应该局限。就像[喵神](https://onevcat.com/tabs/about/)所说:『SwiftUI 中提供了很多“新颖”的 API 设计思路和 Swift 的使用方式,我们可以进行借鉴,并反过来使用到普通的 Swift 代码中。』 + +这篇文章中,作者从交通灯实际例子出发,探讨可配置交通灯不同实现的优劣。通过 Option Pattern,可以帮助我们在不增加存储属性的情况下,提供简洁、高效、类型安全的配置方案。试试借鉴思路,相信你也可以用到自己的项目中。 + +### 🐎 [Formatting numbers in Swift](https://www.swiftbysundell.com/articles/formatting-numbers-in-swift/) + +[@Damien](https://github.com/ZengyiMa): 在 Swift 中我们应该如何去格式化我们的数字格式呢?你可以使用 NumberFormatter 类来实现你的需求,NumberFormatter 可以处理多国家/地区的数字分隔符、货币数字符号、度量衡符号以及和 Codable 结合去用,如果你的 App 的面向国际化的用户,使用 NumberFormatter 绝对会让你提高数字格式化的效率。 + +### 🐕 [围观 Github 上 Flutter 评论最多的 Issue](https://juejin.im/post/6888884127634817038) + +[@Parsifal](https://github.com/ParsifalC):Flutter 虽然是近年来最火爆的跨端方案,但它的 Bug 之多也是一直被社区开发者所诟病的。Flutter 体系中万物皆 widget,而负责管理 widget 状态 的是 State,目前 Flutter Repo 上被最多关注评论的 issue 也是围绕着 `State` 这一概念。这个 issue 由 [provider](https://github.com/rrousselGit/provider) 和 [flutter_hooks](https://github.com/rrousselGit/flutter_hooks) 的作者 [@rrousselGit](https://github.com/rrousselGit) 提出,他表示 [Flutter 的复用状态逻辑要么太麻烦要么太难](https://github.com/flutter/flutter/issues/51752),用 Hooks 的话就能彻底解决这个问题,但 Flutter 团队似乎并不认可这一做法。整个 issue 一共有 30 多位开发者参与讨论,从 3 月份提出至今已累计了 400 多条评论。本篇文章带着大家强势围观了这次激辩,吃完瓜感觉不够过瘾,可以自己再爬爬楼~ + +## 工具 + +### [ImportSanitizer](https://github.com/SketchK/ImportSanitizer) + +在 iOS 开发中,我们常常会看到各种引入头文件的方式,往往这些方式都可以正常编译和运行。但其实一些非标准的写法可能会导致项目的 `search path` 变得冗长,也有可能导致编译不过。ImportSanitizer 是一款能够帮助开发者自动修复工程头文件引用方式的 CLI 工具,它非常简单易用,想排查下工程头文件引入问题的同学可以使用试试。 + +### [Arena](https://github.com/finestructure/Arena) + +[@Parsifal](https://github.com/ParsifalC):macOS 端的 CLI 工具,可以让我们快速创建一个使用指定 SPM 包的 Swift Playground 工程,并且同时支持 GitHub 仓库引入和本地引入。 + +## 音视频 + +### 🐢 🚧 [Chris Lattner: The Future of Computing and Programming Languages | Lex Fridman Podcast #131](https://www.youtube.com/watch?v=nWTvXbQHwWs) + +[@老驴](https://www.weibo.com/6090610445):Chris Lattner 和 Lex Fridman 一对一详细聊语言和未来计算的发展,其中有谈到很多关于 Swift 以及其他基础计算相关的话题。Chris 现在就职于 SiFive,是一家设计 RISC-V 芯片的公司。值得一提的是,作为开源指令集的代表,RISC-V 未来也很有可能是 ARM 构架的有力挑战者。 +本视频可以作为通勤路上的一个不错的收听选项。 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在工作中能极大提升开发效率,Mac App Store免费下载! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#136-2020.11.16.md b/Reports/2020/#136-2020.11.16.md new file mode 100644 index 000000000..92c573099 --- /dev/null +++ b/Reports/2020/#136-2020.11.16.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #136 | 2020-11-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [使你的 Metal 应用程序更好地运行在 Apple Silicon 架构上](https://mp.weixin.qq.com/s/sQKC4Bf_NLYK6ZuMYOUmuw) +- [在 Apple Silicon 上优化你的 Metal 应用程序](https://mp.weixin.qq.com/s/QQ2cPufxwZoWCCB3-1MxfA) + +## 新闻 + +### [TestFlight 3](https://developer.apple.com/news/releases/?id=11112020) + +[@Parsifal](https://github.com/ParsifalC):TestFlight 是苹果官方推荐的内测分发渠道,但一直以来都不能像 App Store 一样支持自动更新,这对于参与内测的用户十分不友好,也同样让开发者增加每次邀请内测的成本。TestFlight 3 终于带来了自动更新这一功能,目前还不是默认开启,升级 TestFlight 3 后首次进入 App,苹果会提示你是否开启,之后就需要到内测 App 详情页中开启手动开启。 + +## 新手推荐 + +### 🐎 🚧 [10 Tips & Shortcuts You Should Be Using Right Now On Xcode](https://medium.com/@mpesate/10-tips-shortcuts-you-should-be-using-right-now-on-xcode-2e9e1b01511e) + +[@Parsifal](https://github.com/ParsifalC):非常实用的提高你编码效率的 10 个快捷键,图文并茂,一看就会用,老少咸宜~ + +## 文章 + +### 🌟 🐢 [The Missing Guide for Mac Catalyst Apps](https://www.craft.do/maccatalyst-guide) + +[@Parsifal](https://github.com/ParsifalC):本周双十一,苹果在本年度最后一次 Apple Events 上发布了全新的 ARM 芯片 M1、以及三款搭载了 M1 的 Mac:MacBook Air、MacBook Pro 13‘ 和 Mac Mini。Mac Catalyst 赋予了 iOS/iPad OS App 能够直接运行在 macOS 上的能力。但实际上,这些原移动端的 App 直接移植到 macOS 上运行,仍然不能尽如人意。Craft 团队早在一年前就开始 Catalyst app 的研究,这次他们将自己的经验整理成一份非常详尽的引导,弥补了苹果官方并不完善的 Catalyst app 文档。引导分为设计、研发和发布测试三大部分,对于想尝试 Catalyst app 的开发者和团队非常有借鉴意义。 + +### 🐎 🚧 [XCFrameworks — New Format for Packaging Frameworks in iOS](https://medium.com/dev-jam/xcframeworks-new-format-of-packaging-frameworks-in-ios-306cda40b24f) + +[@Leo](https://github.com/LeoMobileDeveloper):随着 Apple 逐步切换到 Apple Silicon 和 Xcode 12 的发布,传统的使用 lipo 创建 Fat Frameworks 的方式不再生效,因为模拟器和 iOS 都使用 arm64 的架构,可以通过 WWDC 2019 推出的 XCFrameworks 来解决这个问题,后者可以把多平台的 Framework 打包成一个 Bundle 。 + +### 🐕 [PodSpec 管理策略](https://mp.weixin.qq.com/s/Kb2IxY2E3soxSlGykNZTuQ) + +[@JonyFang](https://github.com/JonyFang):本文介绍了 PodSpec 仓库是如何被管理及 PodSpec 文件的更新和查找是如何进行的。 + +Spec Repo 作为 PodSpec 的聚合仓库,记录着所有 pod 所发布的不同版本的 PodSpec 文件。Spec Repo 对应到 Core 的数据结构即为 Source,文中介绍了 Source 的依赖关系及版本迭代的一些优化改进。 + +接着引出 Metadata,Metadata 的作用是用于记录 Source 所支持的 Cocoapods 的版本及仓库分片规则(文中以 AFNetworking 为例展开说明)。 + +最后介绍了如何找到 Podfile 中限定版本号范围的 PodSpec。通过 Metadata 和 pod_name 得出 pod 所在目录,找到 pod 目录下的 Versions 列表,比较 Version 得出最终需要的 PodSpec 文件。同时引出 Semantic Versioning(语义化版本号)的作用及规则。 + +### 🐕 [React Native 优化实践之拆包与预热](https://mp.weixin.qq.com/s/vh2TaGcGFXCz24nqRYbbLQ) + +[@looping](https://github.com/looping):我们在周报 [#127](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%23127) 期推荐过 [云音乐 React Native 体系建设与发展](https://juejin.im/post/6867722436369416206),这次网易云音乐团队又给我们带来了优化 React Native 打开速度的实践分享。他们通过业界通用的预热 + 拆分基础包方案进行改造,分散了容器初始化和基础库加载时间,最终达到双端非常明显的优化效果。虽然使用的是通用解决方案,但具体实践的思路细节也有值得参考学习的,有在做这块优化的同学可以相互对比一下,在优化策略上或许会有一些启发。 + +### 🐎 [使用 Property Wrapper 为 Codable 解码设定默认值](https://mp.weixin.qq.com/s/jOyHRS2Wx6MJpuYuENhVgg) + +[@Damien](https://github.com/ZengyiMa):本篇是喵神(onevcat)的一篇精彩好文,本文介绍了一个使用 Swift Codable 解码时难以设置默认值问题,由此引出利用 Property Wrapper 给出了一种相对优雅的解决方式,来在 key 不存在时或者解码失败时,为某个属性设置默认值。这为编解码系统提供了更好的稳定性和可扩展性。 + +### 🐎 [Debugging JSON Data in LLDB](https://soffes.blog/debugging-json-data-in-lldb) + +[@Parsifal](https://github.com/ParsifalC):LLDB 上直接打印 JSON String 的话,是不能清晰地看到 Key-Value 的。作者自己动手扩展了 LLDB 能力,使用新增的 JSON 命令就可以格式化输出 JSON String。 +如果你也有扩展 LLDB 的需求,不妨也像作者一样,自己动手试试~ + +## 工具 + +### [Periphery 2.0](https://github.com/peripheryapp/periphery/wiki/What%27s-new-in-Periphery-2.0) + +[@zvving](https://github.com/zvving):Periphery 是用于扫描 Swift 项目无用代码的工具。2.0 除提供 Comment Commands,SPM 支持等特性外,从根本上调整了对源码建立索引的方式:从 [老出问题的 SourceKit](https://github.com/peripheryapp/periphery/issues/49) 调整到 [Index-While-Building](https://docs.google.com/document/d/1cH2sTpgSnJZCkZtJl1aY-rzy4uGPcrI-6RrUpdATO2Q/edit),分析过程更快,结果更准确,值得及时跟进。 + +## 赞助者 + +[Woodpecker](https://apps.apple.com/cn/app/woodpecker/id1333548463?mt=12): iOS 开发辅助工具,提供沙盒文件、UserDefaults、视图层级在线查看和编辑等功能,在工作中能极大提升开发效率,Mac App Store免费下载! + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#137-2020.11.23.md b/Reports/2020/#137-2020.11.23.md new file mode 100644 index 000000000..fa1d63f8d --- /dev/null +++ b/Reports/2020/#137-2020.11.23.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #137 | 2020-11-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 4 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [使用 Metal 技术驾驭 Apple 图形处理器](https://mp.weixin.qq.com/s/k-4xTRtKAjHuiRiTPiN0rw) +- [在 Apple Silicon 上优化你的 Metal 应用程序](https://mp.weixin.qq.com/s/rT8XcPUAvVdfXTleGw--jA) +- [iOS 性能优化: 如何让使用 XCode Debugger 优化 Metal App](https://mp.weixin.qq.com/s/HU7F6o-ratWC8ehfDIrORg) +- [国际化适配:使用 Xcode 构建助于本地化的布局](https://mp.weixin.qq.com/s/9iUNek72jZoqNJVLbPViVw) + +## 新闻 + +### [Apple 宣布推出 App Store 小型企业计划](https://www.apple.com.cn/newsroom/2020/11/apple-announces-app-store-small-business-program/) + +[@JonyFang](https://github.com/JonyFang):苹果宣布推出 App Store 小型企业计划,新计划针对每年营收 100 万美元以下的小型企业,将 App Store 佣金降至 15%,该计划将于 2021 年 1 月 1 日正式启动。 + +### [订阅优惠代码现已推出](https://developer.apple.com/cn/news/?id=g20wyc9c) + +[@Parsifal](https://github.com/ParsifalC):苹果对于自己的订阅服务新增的一项服务。优惠代码是一组独特的、由数字和字母构成的编码,用于为自动续期订阅提供折扣价格或免费优惠。使用 iOS 14 和 iPadOS 14 + 的用户可以在 App Store 或 App 内使用优惠代码兑换功能。 + +## 文章 + +### 🌟 🐕 [淘宝直播“一猜到底”——移动端实时语音识别技术方案及应用](https://mp.weixin.qq.com/s/jX7utUnk0BOnu7cVnjNe1w) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):淘宝直播 App 在今年双十一推出了「一猜到底」的直播答题新玩法,这个游戏的核心是用户的报价能否快速且正确的被识别。庞大数量的用户同时进行语音请求对服务压力和服务质量都是非常大的挑战。本文详细讲述了阿里内部多个团队,是如何在通力协作下,利用端智能 [MNN](https://github.com/alibaba/MNN) 深度学习框架实现工业界首个用于直播的移动端语音识别的。 + +### 🐎 [新版 Mac 终于到货了!anandtech 最新 M1 芯片评测出炉](https://mp.weixin.qq.com/s/6RmvttZasIBDSki-ieENeg) + +[@Parsifal](https://github.com/ParsifalC):过去一周关于苹果最火的话题无疑是围绕着搭载 M1 芯片的 MacBook 和 Mac Mini 系列。这是一篇很硬核和专业的评测文,测评结果显示,M1 的内存带宽优于苹果此前的 A14 芯片,CPU 单线程、多线程性能都非常优秀,GPU 足以称霸集显,甚至可以媲美独显。有媒体表示苹果自己都未曾想到 M1 会强悍至此,更有朋友调侃到有生之年也能见到 MacBook 开始讲性价比了,库克此时若喊出“还有谁!”想必也是底气十足~ + +### 🐕 [手淘双11最新实践:PopLayer 弹层领域研发模式升级](https://mp.weixin.qq.com/s/yYsWHv0kq7HK54e1kPBprw) + +[@老峰](https://www.github.com/gesantung):在精细化流量运营的今天,弹层作为一个可以带来高流量的强运营手段,已经从低频需求,变成了面向各类人群投放的高频需求,尤其在 2C 的研发需求中,我们经常会有各种活动弹窗紧急需求,但业务往往会遇到开发弹层难、慢,时间又很急的情况。 + +手淘技术团队在本文中分享了一套快速搭建+可视化+多端多场景通用的 PopLayer 解决方案,具体介绍了搭投模式业务背景,架构,整体设计,包括可视化 IDE、运行时解析引擎 、ServerLess 等相关建设,感兴趣的同学不容错过。 + +### 🐕 [UIView 动画降帧探究](https://juejin.cn/post/6896372391388119053) + +[@EyreFree](https://www.github.com/EyreFree):众所周知,iOS App 的刷新频率越接近越 60 FPS 越好。但是另一方面,我们也知道动画渲染的过程中需要消耗大量的 GPU 资源,所以给动画降帧则可以给 GPU 减负,降低 GPU 使用率峰值。在动画不复杂但是数量很多的情况下,给动画降帧并不会影响动画效果,此时降帧就能累计节约大量的 GPU 性能。本文介绍了作者基于 UIView animation block + UIViewAnimationOptionPreferredFramesPerSecond30 属性进行动画降帧的方案,可以较少改动代码而实现降帧的目的,有相应需求的同学不要错过。 + +### 🐕 [实现 Native 异步回调 Flutter](http://yulingtianxia.com/blog/2020/10/25/Asynchronous-Callback-for-Flutter/) + +[@极速男孩](https://github.com/ztlyyznf001):Dart 和原生交互有多重选择,包括 channel ,阿里的 FlutterBoost,本文主要介绍了杨萧玉的 DartNative 是如何首先通过 DartFFI 和 libFFI 来实现 Native 和 dart 之间函数的绑定,然后通过 Port 相关的 API 来实现 OC 和 Dart 之间方法的相互调用,这样可以实现一些通过 channel 无法实现的,如 block, NSNotification 这类的方法。 + +## 代码 + +### [doesitarm](https://github.com/ThatGuySam/doesitarm) + +[@红纸](http://github.com/nianran):伴随着 M1 芯片的发布,Mac 软件适配也在同步进行,不少开发者协同整理了一份支持 ARM 架构的 APP 列表供大家参考。 + +## 音视频 + +### 🌟 🐕 [Discover Metal enhancements for A14 Bionic - Tech Talks - Videos - Apple Developer](https://developer.apple.com/videos/play/tech-talks/10858) + +[@莲叔](http://aaaron7.github.io/):近期随着苹果新 air 的评测陆续放出来,M1 芯片可谓赚足的眼球。看回移动端,iPhone 12 系列的 A14 仿生芯片也有了非常强劲的升级。这个视频是苹果工程师分享的 A14 芯片中的 GPU 能力升级,非常值得一看。因为其中的技术不仅仅只是苹果一些新特性,更是代表了未来图形渲染技术的发展方向。 + +视频主要包含了四个部分:新的 shader 结构:重心坐标(barycentric coordinate)和形状 Id(primitive id), 新的纹理贴图模式,以及新的 SIMD batch 操作指令,新的 SIMD 矩阵乘法指令等。其中最有趣的是第一部分,我们都知道 Metal 相较于 OpenGL 最大的升级就是实现里的延迟渲染,让光照可以在 Fragment Shader 阶段之后来进行,以支撑更复杂的光线跟踪。通过 A14 新的 barycentric coordinate 和 primitive id 技术,可以让 Fragment Shader 产生 的 G-Buffer 进一步缩小为 Visibility Buffer,之后在光线跟踪的阶段重建出 Draw State 进行材质贴图和光照跟踪。相比之前的流程,大幅减少了复杂场景下的计算量。看下来感觉还是很激动人心的,喜欢渲染技术的同学不容错过。 + +### 🐢 [Explore Live GPU Profiling with Metal Counters](https://developer.apple.com/videos/play/tech-talks/10001) + +[@老驴](https://www.weibo.com/6090610445):在 macOS Big Sur 和 iOS 14 中,苹果新引入了 Metal Counters API 让开发者对 GPU 性能进行实时在线性能分析。此 API 提供了非常底层的运行时 GPU 性能信息,而这些数据在之前的版本中,都只能从 Xcode 或者 Instruments 中做离线分析。这对于开发者来说无疑是个非常大的改进,而善用这个 API 也可以更好的为你的 App 性能优化,给出更加精准的思路。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#138-2020.11.30.md b/Reports/2020/#138-2020.11.30.md new file mode 100644 index 000000000..dd5c1e503 --- /dev/null +++ b/Reports/2020/#138-2020.11.30.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #138| 2020-11-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [端智能:使用 Create ML 打造图片和视频的风格转化模型](https://mp.weixin.qq.com/s/oIVvGleWyHi7X38uFULRjA) +- [端智能:用 Create ML 打造智能运动 App](https://mp.weixin.qq.com/s/pzbxLL03Sq3IXKQRCQohKg) + +## 新闻 + +### [App Store Connect 放假安排:12月23日-27日 ](https://developer.apple.com/cn/news/?id=83m4plrb) + +[@Parsifal](https://github.com/ParsifalC):请确保您的 App 为最新版本,以准备迎接假期。App Store Connect 在12月23日至27日(太平洋时间)期间不接受新 App 和 App 更新,因此请提前处理任何与发布相关的计划、提交和审批事宜。其他 App Store Connect 功能将不受影响。 + +## 文章 + +### 🌟 🐕 [iOS AOP 方案的对比与思考](https://mp.weixin.qq.com/s/5JhbX4McMifFpZ7NyztIQw) + +[@Damien](https://github.com/ZengyiMa):AOP 意为面向切面的编程方式,在不修改源代码的情况下,给程序动态统一添加功能的技术。本文详细的介绍了目前 iOS 的各项 AOP 方案(Method Swizzle, Aspects, MPSwizzler, ISA-swizzle KVO, Fishhook, Thunk, Clang 插桩)的原理实现、使用场景以及问题缺陷。让我们的工具箱又多出了一些可供选择,同时进一步加深对静态和动态语言的理解,也对程序从静态到动态整个过程理解更加深入。 + +### 🐕 [UME - 丰富的 Flutter 调试工具](https://mp.weixin.qq.com/s/9GjXB9Eu-OP3fIjdQWKklg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):鉴于在开发 Flutter 过程中遇到的一些问题,西瓜视频 Flutter 基础团队开发了一款调试工具包 UME,内部集成了丰富的调试工具, 包括但不限于如下功能: + +- Widget 信息:查看当前选中 widget 的大小、名称,文件路径以及代码所在行数 +- Widget层级:查看当前选中 widget 的树层级,以及它 renderObject 的详细 build 链 +- ShowCode: 查看到当前页面的页面代码 +- 内存泄露:检测 flutter 内存泄漏 +- 内存查看:查看当前 Dart VM 对象所占用情况 +- 对齐标尺:测量当前 widget 所在屏幕的一个坐标位置,开启吸附开关后可以自动吸附最近 widget +- 颜色吸管:查看到当前页面任何像素的颜色,方便调试 UI +- 网络调试:支持所有网络请求抓取,mock 响应内容等 +- Logger:展示使用 debugprint 函数打印的日志 +- Channel Monitor:查看所有的 channel 调用,包括方法名,时间,参数,返回结果 + +### 🐕 [What went wrong with the libdispatch. A tale of caution for the future of concurrency](https://tclementdev.com/posts/what_went_wrong_with_the_libdispatch.html) + +[@Leo](https://github.com/leomobiledeveloper):libdispatch 是 Apple 推出的帮助开发者利用好多核性能的底层框架,简洁的 block 相关的 API 让并发编程变得前所未有的容易。但很多情况下 libdispatch 被滥用,导致引起线程爆炸,代码调试困难等问题。本文作者讲述了自己使用 libdispatch 的痛点,分析了 swift 即将引入的并发相关特性的,文章条理清晰,能看出作者对并发编程有着独到的见解。 + +### 🐕 [MongoDB Realm 使用初体验 | 奇谈](https://mp.weixin.qq.com/s/HhhqkHtu9P1hib9L2Miyhg) + +Realm 是一个专门为移动端设计的数据库。主要特点是性能好,易使用。MongoDB 是一个流行的 NoSQL 数据库,主要是在服务器端使用。MongoDB 收购 Realm 半年后推出全新的 MongoDB Realm。移动端的数据库还是 Realm,本地的数据存取接口几乎保持一致。通过 Realm sync 这个程序把数据同步到 MongoDB Atlas 中。本文介绍了 MongoDB Realm 的基本功能和使用方法。 + +### 🐎 [DispatchSource: Detecting changes in files and folders in Swift](https://swiftrocks.com/dispatchsource-detecting-changes-in-files-and-folders-in-swift.html) + +[@四娘](https://kemchej.github.io/):GCD 里的 DispatchSource 家族包含了一系列监听系统事件的 API,例如 Mach 事件通知,文件变更通知等等。在这篇文章里,作者以实时日志浏览为例展示了这一套 API 的使用方式。 + +### 🐢 [端智能:理解 Vision 框架中的图片技术](https://mp.weixin.qq.com/s/L4VHrw0Hvu_ALlTRY7rBBA) 和 [How to display Vision bounding boxes](https://machinethink.net/blog/bounding-boxes/) + +[@EyreFree](https://github.com/EyreFree):Vision 是 Apple 2017 年和 Core ML 一起推出的、基于 Core ML 封装的图像识别库,它包含有人脸识别、机器学习图片分析、条形码识别、文字识别等基础功能。本次推荐的两篇文章对 Vision 的图片重点区域、图片分类、图片相似度、人脸识别技术等主要应用进行了介绍和演示,推荐大家都来看一下,说不定下次遇到的图形相关的业务就可以用它来实现了。 + +### 🐢 [一篇吃透 Dark Mode ,搞定“暗黑/深色”适配](https://mp.weixin.qq.com/s/02QmgMkmVcB8x7xVZJT_Bg) + +[@AidenRao](https://weibo.com/AidenRao):本文讲述 APP 中各组件适配 Dark Mode(暗黑模式 或 深色模式)的方式和注意事项,以及一些细节的处理建议。 +但更重要的,是让大家掌握适配暗黑模式的工作量。避免轻易开工,导致进退两难。 + +- 从“层级”、“颜色”两方面讲述 iOS 安卓适配方法。 +- 讲述 Dark 适配需要关注的细节:字色、图标、插图等 +- Dark 适配的难点:适配场景多,Dark 模式下无障碍阅读的适配,以及容易出现遗漏。 + +### 🐢 [移动端 UI 一致性解决方案](https://mp.weixin.qq.com/s/oq7ylltdRIdJuSlL7EIiNA) + +[@Parsifal](https://github.com/ParsifalC):大型 App 往往承接着来自不同团队的业务,可能各个业务组都有着自己的产品、设计和研发团队。随着版本的不断迭代,大型 App 在设计层面、研发层面、测试层面和产品层面均会面临着效率低、UI 体验不一致等问题。美团外卖团队分享了他们在移动端 UI 一致性解决方案上的探索。这是一套需要各个团队达成共识共同去维护的标准化组件,相比于完成这一套方案的建设,或许去推进各个业务团队接受并使用也是不小的挑战。 + +### 🐎 [Comparing iPhone OS 1.0 with iOS 14 using tree maps](https://blog.timac.org/2020/1122-comparing-iphone-os-with-ios-14-using-tree-maps/) + +[@Parsifal](https://github.com/ParsifalC):2007 年第一款 iPhone 发布至今,iPhone 的硬件在不断更新,软件也从 iPhone OS 1.0 到了 iOS 14。本文通过 tree map 带我们一览其中的结构变化过程。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#139-2020.12.07.md b/Reports/2020/#139-2020.12.07.md new file mode 100644 index 000000000..e6bd479f3 --- /dev/null +++ b/Reports/2020/#139-2020.12.07.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #139 | 2020-12-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [用 Web 技术为 Safari 编写扩展](https://mp.weixin.qq.com/s/ZVqCmWUGsUIYLXmpgBTZMA) +- [通过更好的隐私保护与用户建立信任](https://mp.weixin.qq.com/s/rIULHMRCmhdwuI_p1TIukw) + +## 新手推荐 + +### 🐎 [UIStackView padding](https://sarunw.com/posts/uistackview-padding/) + +[@Damien](https://github.com/ZengyiMa): UIStackView 是 Apple 在 iOS9 推出流式布局容器库,它可以让我们高效的管理一行或一列视图的布局,在日常开发中往往有需要对 View 设置 Padding 的场景,相对比直接设置元素约束的方式,我们还可以使用 isLayoutMarginsRelativeArrangement 属性来提高我们布局效率,本文将会详细介绍 isLayoutMarginsRelativeArrangement 的妙用。 + +## 文章 + +### 🐎 [Swift protocols in SwiftUI](https://fivestars.blog/swiftui/swift-protocols.html) +[@zvving](https://github.com/zvving):协议(Protocols)是 Swift 语言的重要组成部分,在 SwiftUI 中亦有广泛应用,比如新增的协议 [View](https://developer.apple.com/documentation/swiftui/view)、[Shape](https://developer.apple.com/documentation/swiftui/shape) 等。 + +除此之外,标准库中基础协议 Equatable,Identifiable,Hashable 从最小化重绘、定位元素、尝试兼顾代码复用与传值等不同角度为 SwiftUI 带来高效布局能力。本文带你快速了解这部分内容。 + +### 🐕 [MacBook 升级 SSD 硬盘指北](https://juejin.cn/post/6901549087221514247) + +[@Parsifal](https://github.com/ParsifalC):用低磁盘容量的 MacBook 做 iOS 开发,最头疼的无疑是 Xcode 那膨胀地异常迅速的空间使用率。无论是 Xcode 自身大小,还是编译项目的缓存,又或是 device support 的 SDK,都会夸张地将你磁盘空间填满。这篇文章非常详细地总结了自己是如何动手升级老 MacBook SSD 的,是一篇手把手的教程帖。 + +### 🐎 [一种更优雅的 Flutter Dialog 解决方案](https://juejin.cn/post/6902331428072390663) + +[@Parsifal](https://github.com/ParsifalC):Flutter 提供的 dialog 存在必须传 BuildContext、无法透传事件和某些场景下的路由混乱等问题,为解决这些问题作者自定义了一个 Dialog Widget - [flutter_smart_dialog](https://github.com/CNAD666/flutter_smart_dialog),几个问题的解决方式值得参考借鉴。 + +## 工具 + +### [Xcode Releases](https://xcodereleases.com/) + +[@Parsifal](https://github.com/ParsifalC):一个汇总了所有 Xcode 版本信息的工具网站,比官网更加清晰,查询也更加方便快速。下载资源仍然是使用的苹果官方渠道,不必担心安全问题。 + +### [Swift Version](https://swiftversion.net/) + +[@Parsifal](https://github.com/ParsifalC):Swift 作为一款仍在持续进化中的语言,版本迭代也很频繁。这个网站汇总了所有 Swift 版本和 Xcode 版本的关联关系,有想了解相关版本历史需求的可以关注一下。 + +## 代码 + +### [ColorKit](https://github.com/Boris-Em/ColorKit) + +[@水水](https://www.xuyanlan.com): 这是一个关于 ‘Color’ 的库,它有一些非常实用的 Features : +- Dominant Colors : 获取一张图片的主色 +- Color Palette :调色板 +- Average Color : 获取一张图片的平均色 +- Color Difference (DeltaE):色差,颜色比较 +- Contrast Ratio:对比度 +- Color Space Conversions: 颜色空间转换 +还有更多很实用的特性,读者们可以尝试使用哦~ + +### [DiDiPrism](https://github.com/didi/DiDiPrism) + +[@老峰](https://github.com/GesanTung): DiDiPrism 是滴滴团队开源的一套专注于移动端操作行为的技术方案。具有零入侵,各端统一的操作行为指令,丰富灵活操作行为策略等特点,主要具有如下功能: +- 操作回放(视频回放 / 文字回放) +- 实时操作行为检测 +- 移动端埋点全流程,数据可视化(开源筹备中..) +还有更多功能,有类似需求的读者们可以借鉴参考使用 + +### [tumblr/kanvas-ios](https://github.com/tumblr/kanvas-ios) + +[@JonyFang](https://github.com/JonyFang):Kanvas 是 Tumblr 近期开源的一款工具库,主要用于添加特效、图形、文本、贴纸以及使用现有媒体或相机制作 GIF。在 Tumblr iOS 应用中,它被用作相机、媒体编辑器、GIF 制作器和媒体发布工具。 + +有类似需求的读者,可以借鉴参考使用哦~ + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#140-2020.12.14.md b/Reports/2020/#140-2020.12.14.md new file mode 100644 index 000000000..f7e26f5d7 --- /dev/null +++ b/Reports/2020/#140-2020.12.14.md @@ -0,0 +1,83 @@ +# 老司机 iOS 周报 #140 | 2020-12-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 稳定性:如何在开发中规避安全风险](https://mp.weixin.qq.com/s/Khmpba8XBxbcf6Cq7zc5ZQ) +- [WKWebView 新变化:发掘 WKWebView 的神奇妙用](https://mp.weixin.qq.com/s/NcMo6uStNrdLJvVGfL1TNw) + +### [App 内购买项目现已支持「家人共享」功能](https://developer.apple.com/cn/news/?id=4zbvn7u9) + + [@享耳先森](https://github.com/iblacksun):现在,开发者可以为自动续期订阅和非消耗型内购买项目启用「家庭共享」功能,从而允许用户与最多 5 位其他家庭成员共享购买内容。 + +## 文章 + +### 🌟🚧🐕 [Uber 工程师亲述使用 Swift 重写 App 的(惨痛)经历](https://threadreaderapp.com/thread/1336890442768547845.html) + +[@四娘](https://kemchenj.github.io/):事情起源于 2016 年,那年 Trump 还不是总统,TK 还没有爆出丑闻,Uber 还在飞速增长,App 的架构也逐渐变得复杂和脆弱,由此产生的 Bug 让工程师团队疲于奔命,最终他们决定重写 App 的架构。 + +在 iOS 端,他们做了一个最“灾难性”的决定:**全面使用 Swift 进行重写**。当时的 Swift 还是 2.x 版本,Uber 的项目在那时敲下一段语句需要等 45 秒才会出现代码补齐,除此之外还有编译速度,启动速度和二进制大小的问题,过程中他们用了非常多的 hacky 的手段去处理,例如 struct 全部改成 class,编译产物重链接,编译 pass 重排等等。 + +希望大家看完这段经历之后可以对技术选型有更深刻的理解。 + +> 中文译版:[我在Uber亲历的最严重的工程灾难](https://mp.weixin.qq.com/s/T1RqYrCTOpQvkWdunoxqww) + +### 🌟🐕 [杀不掉的 App——CVE-2018-4340](https://mp.weixin.qq.com/s/tnupXwfR5EDhZif7t9vR1w) + + [@Leo](https://github.com/leomobiledeveloper):作者在 2018 年给 iOS 和 macOS 报了一个 WebKit 沙箱逃逸漏洞 CVE-2018-4310,苹果先后在 macOS 和 iOS13上修复了这个漏洞。本文详细讲述了这个漏洞的原理,以及如何在 iOS 上做一个杀不掉的 App,是一篇 iOS/macOS 上安全相关的高质量文章。 + +### 🌟🐕 [iOS Synchronized 底层分析](https://juejin.cn/post/6903421773232996365) + + [@Damien](https://github.com/ZengyiMa):Synchronized 是 iOS 开发中最常用的几种锁之一,想知道 Synchronize 的底层实现吗?本文会从 4 个具体问题出发,结合底层源码一步步为你揭开 Synchronize 的面纱,对想深挖的 iOS 底层开发者值得一读。 + +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 + +### 🐕 [My SwiftUI Pain: Creating Tappable Links in Text](https://medium.com/better-programming/swiftui-pain-links-in-text-b31319783c9e) + + [@EyreFree](https://github.com/EyreFree):SwiftUI 是苹果最新推出的声明式 UI 开发框架,借助它你可以在所有 Apple 平台上构建用户界面,很多开发者已经开始在个人项目甚至企业项目中使用这一技术。它很酷,但毕竟刚刚起步,很快一些开发者便会碰到一些坑或者问题,比如本文作者遇到的:如何优雅地在一段文本中给某些词语添加点击事件。作者分享了自己如何通过一步步的尝试最终得到了自己想要的效果,虽然最终效果看起来还不错,但他直言使用传统的 UIKit 与 AppKit 也许更方便,对 SwiftUI 感兴趣的朋友推荐一读。 + +### 🐎 [Xcode 12.3 盘点](https://mp.weixin.qq.com/s/F_47HZZn74Jjd1q99WDCHA) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Xcode 12.3 RC 版本解决的关于 xcodebuild,macOS 上的键鼠响应速度,文档查看器,Interface Builder,模拟器和 Swift 的几个问题。 + +## 工具 + +### [lowmad](https://github.com/bangerang/lowmad) + +[@老峰](https://github.com/GesanTung): 在开发调试中我们经常会使用 LLDB 命令 Debug,有时也有自定义 LLDB 命令的需求。lowmad 就是用于管理和生成 LLDB 脚本的命令行工具,它提供了简洁易用的命令来生成或安装脚本命令,另外作者开源了 [lldb_commands](https://github.com/bangerang/lldb_commands) 自定义 LLDB 命令,如 find_label、color、nudge 等,感兴趣的读者不妨来研究一哈。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#141-2020.12.21.md b/Reports/2020/#141-2020.12.21.md new file mode 100644 index 000000000..87065fdad --- /dev/null +++ b/Reports/2020/#141-2020.12.21.md @@ -0,0 +1,149 @@ +# 老司机 iOS 周报 #141 | 2020-12-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [iOS 稳定性:编写会“失败”的测试](https://mp.weixin.qq.com/s/J2bZNxe5Xf9xL85ftIjG3g) +- [iOS 稳定性:更快地获得测试结果](https://mp.weixin.qq.com/s/iLmpcuFadWEekRqE3SM15w) + +## 新闻 + +### [苹果现已推出轻 App 码](https://developer.apple.com/cn/news/?id=4c7j45dp) + +[@Parsifal](https://github.com/ParsifalC):AppClip 是今年 WWDC 的一大亮点,现在苹果已经正式推出 AppClip 码,只需将 iPhone 靠近轻 App 码或用摄像头扫描该代码,即可打开您的轻 App 并快速完成需要的任务。 + +### [App Store 现已提供 App 的隐私标签](https://developer.apple.com/cn/news/?id=3wann9gh) + +[@Parsifal](https://github.com/ParsifalC):上个月苹果已经要求开发者必须在 12 月 8 号之前必须完善 App Store Connect 上的新隐私信息,而现在开发者所填写的隐私信息已经能够被 App Store 上浏览,帮助其了解该 app 的隐私保护做法。 + +## 新手推荐 + +### 🌟 🐎 [iOS | 事件传递及响应链](https://juejin.cn/post/6894518925514997767) + +[@J_Knight_](https://github.com/knightsj):本文图文并茂并结合代码介绍了 iOS 中的事件传递及响应链机制:确定第一响应者以及如何通过响应链来传递事件的过程。同时也推荐本文作者的另外一篇文章:[iOS | 响应链及手势识别](https://juejin.cn/post/6905914367171100680) :讲解了手势识别是如何通过响应链来传递事件的。 + +### 🐢 [iOS App Dev with SwiftUI Tutorials](https://developer.apple.com/tutorials/app-dev-training) + +[@Parsifal](https://github.com/ParsifalC):苹果官方推出的 iOS App 入门级教程,大约 4 个小时时间,让你体会如何用 SwiftUI 构建一个简单的 App。整个教程还是采用类似逐步闯关的形式进行,十分友好。 + +## 文章 + +### 🌟 🐕 [200 weeks of Swift](https://www.swiftbysundell.com/articles/200-weeks-of-swift/) + +[@zvving](https://github.com/zvving):[John Sundell](https://twitter.com/johnsundell) 是 Swift 开发者社区的知名创作者,他创建的 [Swift by Sundell](https://www.swiftbysundell.com/about/) 网站每周发布 Swift API 设计、访谈、最佳实践等优秀文章、播客。 + +不知不觉网站已经迎来第 200 期更新:作者在 Swift 学习过程中,常见问题的三处思考: + +- 更多使用值类型,除非需要共享可变状态 +- 用语义清晰的类型加强代码自注释 +- 面向协议编程也有代价,建议在不同方案中寻求平衡 + +[Swift by Sundell](https://www.swiftbysundell.com/about/) 网站有大量精彩内容,推荐 Swift 开发者订阅。 + +### 🌟 🐕 [都 2021 年了,你的动画还在用 setState ?](https://juejin.cn/post/6906670385941446670) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 中想要实现一个动画效果也是极其简单的,通过动画控制器,然后修改 State 即可。但这并非正确的姿势,本文通过 AnimatedBuilder 来实现动画,并解析其源码来分析为何如此,强烈推荐. + +### 🌟 🐢 [App 启动提速实践和一些想法](https://mp.weixin.qq.com/s/v2Ym9GPU4J8xCFFNYcpJhg) + +[@Leo](https://github.com/leomobiledeveloper):启动是门面,好的印象也有助于留存率提高。本文包含了 iOS 和 Android 的一些通用启动优化实践,作者从 H5 启动页、下载速度、线程调度、多线程模型等多个维度展开讲解,最后介绍了分析工具和自动化管控。一篇文章包含了 App 启动速度的方方面面,建议仔细阅读。 + +### 🐎 [No more [weak self], or the weird new future of delegation](https://olegdreyman.medium.com/no-more-weak-self-or-the-weird-new-future-of-delegation-f2a2745cd73) + +[@xiaofei86](https://weibo.com/xuyafei86):当我们使用闭包时总是要为了避免循环引用而使用 weak self。本文通过属性包装器将回调用带有泛型的类进行封装,使避免循环引用的职责由 API 的使用者转换到 API 的设计者身上。我们只需要将回调闭包用 @Delegate 标记就可让使用者避免使用 weak self,例如: +```swift +@Delegated var didUpdate: (String) -> Void + +textField.$didUpdate.delegate(to: self) { (self, text) in + self.label.text = text +} +``` +但由于 Swift 泛型的限制 1 个属性包装器只能处理固定数量的返回参数,所以作者同时编写了开源库 [Delegated](https://github.com/dreymonde/Delegated) 提供 @Delegate0、@Delegate1、@Delegate2 等多个属性包装器来支持不同参数数量的闭包。有兴趣的同学可以阅读原文了解。 + +### 🐕 [The future of SwiftUI navigation (?)](https://fivestars.blog/swiftui/programmatic-navigation.html) + +[@极速男孩](https://github.com/ztlyyznf001):SwiftUI 中没有了 ViewController 中 present 的方法,而是用了 NavigationLink 来替代。但是 NavigationLink 也存在着一些限制,比如在导航是向目标 view 传一个 dynamic 的值比较麻烦,然后 NavigationLink 声明的时候需要有一个 view 。这篇文章主要介绍了如何避免这些 NavigationLink 的限制。首先我们可以通过绑定一个状态或者一个 EmptyView 来解决 NavigationLink 需要一个 view 的问题。然后我们可以通过绑定一个对象的标识而不是 Bool 或者 Hashable 的值来解决向目标 view 中传值的问题。 + +### 🐕 [iOS 编译速度如何稳定提高 10 倍以上之一](https://juejin.cn/post/6903407900006449160) + +[@红纸](https://github.com/nianran):本文主要阐述了美柚团队在编译包上二进制化跟编译文件缓存上的探索。主要阐述了如下几种尝试方向: + +1. 利用 CCache 缓存优化编译产物,但是命中率低。 +2. cocoapods-binary 插件,在 pod install 的 pre_install hook 中拦截并在当前的 Pods 目录下打包二进制文件,本质上只是编译前移,还是会拖慢 pod install 速度。 +3. cocoapods-bin 双私有源,定制化两份源文件,一份源管理源代码、一份源管理静态库。具有原生 Cocoapods 的交互体验。 + +美柚团队在 cocoapods-bin 的基础上客制化 [cocoapods-imy-bin](https://github.com/MeetYouDevs/cocoapods-imy-bin) 插件。其插件具有以下特征点: + +1. 无入侵、无感知、不影响现有业务 +2. 支持 Swift 二进制化 +3. 支持 use_frameworks! +4. 轻量,不受耦合或组件化的影响 +5. 完全自动化,一键使用、无需手动操作,包含完整的 server 体系一条龙服务 +6. 含有二进制源码调试功能 + +> 由 [HapyCoder](https://github.com/HapyCoder) 推荐 + +### 🐎 [How expensive is DateFormatter](https://sarunw.com/posts/how-expensive-is-dateformatter/) + +[@水水](https://www.xuyanlan.com):相信大部分读者都知道创建 DateFormatter 的操作有非常昂贵的代价,但是大部分读者可能并不清楚到底它有多慢,哪个部分"贵",我们将在本文中一起找出答案。 + +### 🐕 [Apple Silicon(苹果芯片)从 DTK 到 M1 Mac 的入门总结](https://juejin.cn/post/6903091283204833287) + +[@老驴](https://www.weibo.com/6090610445):Apple 在今年 6 月的 WWDC 上正式宣告了从 Intel 到 Apple Silicon 为期两年的转变,这不仅仅是苹果产品的转变,更是整个行业从 x86 转向 ARM 的序章。本文的作者就帮你梳理了一下从开发者套件到 M1 芯片的最终产品的种种。 + +### 🐕 [M1 芯片有何不同?](https://mp.weixin.qq.com/s/Krmx_mYpDdRGKzN3zs3mYw) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍了 M1 芯片与其他芯片的不同之处、优秀的点及存在的问题。分别从如下几个方面进行了分析: + +- M1 芯片与 CPU 的关系 +- 苹果如何做到的统一内存架构(UMA) +- M1 用到了先进的 5 纳米制程&惊人的 160 亿个晶体管 +- M1 存在哪些问题 + +对于苹果来说,未来无疑将会长期进行大量的投入来对 M 系列芯片进行迭代,且其自有生态也保证了能够反哺 M 系列芯片的研发。也期待未来更为完善的 M 系列芯片。 + +### 🚧🐕 [Binary Size Woes](https://medium.com/nerd-for-tech/binary-size-woes-acb5d96f058a) + +[@四娘](https://kemchenj.github.io/):作为上一期 [Uber 工程师亲述使用 Swift 重写 App 的经历](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2020/%23140-2020.12.14.md#-uber-工程师亲述使用-swift-重写-app-的惨痛经历)的后续,有另外一位工程师出来介绍他们在缩减 Binary Size 方面做的努力,从与苹果的沟通,到工程方面的努力,包括编译参数的调优,追踪每一个 Pull Request 对于 Binary Size 的影响等等。 + +## 代码 + +### [Motion](https://github.com/b3ll/Motion) + +[@Damien](https://github.com/ZengyiMa):Motion 是一个完全用 Swift 编写的动画引擎,用于在 iOS,macOS 和 tvOS 进行动画和交互,并且完全支持 Apple 的 SIMD 特性。 Motion 可以轻松的创建动画(如弹簧,衰减等特性动画),也可以与手势识别相关的功能一起合作,以实现尽可能流畅和令人愉悦的交互。需要的做出精美的交互动画的同学值得尝试一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#142-2020.12.28.md b/Reports/2020/#142-2020.12.28.md new file mode 100644 index 000000000..a25c4476e --- /dev/null +++ b/Reports/2020/#142-2020.12.28.md @@ -0,0 +1,120 @@ +# 老司机 iOS 周报 #142 | 2020-12-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [SiriKit 新变化:让 Intent 更强大](https://mp.weixin.qq.com/s/1CxDs8qHLzEHky6yWjdseQ) +- [iOS 稳定性:使用 XCTIssue 分析诊断测试失败问题](https://mp.weixin.qq.com/s/O-awF7t4jqJVPNdL-4jidA) + +## 文章 + +### 🌟 🐕 [2020 腾讯 Techo Park - Flutter 与大前端的革命](https://mp.weixin.qq.com/s/oflhVGs6lZBb--sOllMi8g) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 自发布到目前的 1.22 版本,已经走过了两年多的时间,这段时间以来,Flutter 一直都是跨端开发的风口浪尖,这个时候很多人不禁要问:那么未来还是么 ? 又该如何抉择 ?本文将给你这些问题的答案。 + +### 🌟 🐕 [arm64 objc_msgSend 源码解读](https://www.jianshu.com/p/1972010b88d7) + +[@Damien](https://github.com/ZengyiMa):objc_msgSend 方法是 Objective-C 的 Runtime 最核心的部分,你是否好奇底层的具体实现呢?本文的作者将会从汇编的角度把 objc_msgSend 的流程梳理一遍,包括 class 查找、缓存查找、缓存未命中的处理、taggedPointer 和 nil 处理。通过本文你会加深对象结构的布局认识以及对 arm64 汇编基础指令的学习也是一个很好的入门方式。 + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +### 🌟 🐕 [自定义 LLVM PASS 实现 函数耗时插桩统计](https://blog.0x1306a94.com/docs/llvm/ch01/01/) + +[@Leo](https://github.com/leomobiledeveloper):函数耗时分析对性能优化非常有用。目前常用的方法有两种:类似 Time Profiler 的堆栈采样分析和 hook objc_msgSend 的 OC 方法级别耗时分析。 + +耗时统计的本质是在函数头尾插入统计代码,能在运行时做当然也可以在编译期,这篇文章非常详细地讲解了如何在编译期间通过 LLVM PASS 实现函数耗时统计,不仅能覆盖 OC ,还能覆盖 C、C++ 等其他语言。 + +### 🐕 [HTTP/2 做错了什么?刚刚辉煌2年就要被弃用了!?](https://mp.weixin.qq.com/s/DLmg_SGGx0iyXepuhQB8pg) + +[@AidenRao](https://weibo.com/AidenRao):HTTP/2 的诞生,主要是通过多路复用技术,解决 HTTP/1.1 中的效率问题。但依旧存在很多不足,因为 HTTP/2 底层是采用 TCP 协议实现的,存在 TCP 队头阻塞,三次握手耗时过长问题。 + +所以,HTTP/2 推出没多久,业内就开始大力投入 HTTP/3 的研发与推广,HTTP/3 选择了一种新的技术方案,基于 UDP 协议改造的 QUIC (Quick UDP Internet Connections),作者会在后续的文章对 HTTP/3 进行详细介绍。 + +### 🐢 [What Every Computer Scientist Should Know About Floating-Point Arithmetic](https://floating-point-gui.de/) + +[@JonyFang](https://github.com/JonyFang):我们应该都写过类似这样的简单代码: +``` +0.1+0.2 +``` +与我们预期不同的是,它实际得到的结果是: +``` +0.30000000000000004 +``` +那么我们为什么会得到这个结果?如何处理这类问题?关于这类常见浮点数问题的解答,我们可以通过这个网站来找到答案。如果读者有兴趣,也可以提供更深入的解释,说明为什么浮点数必须如此工作以及可能还会出现其它哪些问题。 + +## 工具 + +### [Stringz iOS Apps Localization Editor](https://github.com/mohakapt/Stringz) + +[@Parsifal](https://github.com/ParsifalC):一款很好用的做 App 本地化的工具,UI 简明清晰,并且能自动识别工程内的所有本地化文件。 + +## 代码 + +### [CalendarKit](https://github.com/richardtop/CalendarKit) + +[@老驴](https://www.weibo.com/6090610445):日历,尤其是复杂的日历 UI 都是产品开发中费时费力的部分,很多时候,因为缩减开发周期,设计师也会选择跳过这部分转而使用原生的日历 App 来设计功能。这个 CalendarKit 就是由一位外国朋友开发维护的开源日历 UI 库,可以很方便的进行日历相关功能的集成。 + +> 由 [理查德·托普奇( Richard Topchii )](https://github.com/richardtop) 推荐 + +### [RealityUI](https://github.com/maxxfrazer/RealityUI) + +[@Parsifal](https://github.com/ParsifalC):如果你正在做 AR/VR 相关的开发,那么这个库一定对你很有帮助。RealityUI 提供了一系列的控件,让你可以像做 2D 应用一样开发 AR/VR 应用。 + +> 由 [XanderXu](https://github.com/XanderXu) 推荐,他长期研究 ARKit 相关技术,编写有 [ARKit Tips](https://xiaozhuanlan.com/u/xanderxu) 等多个专栏 + +## 音视频 + +### 🌟 🐕 [Apple tech-talks 10855 10856 10857](https://developer.apple.com/videos/play/tech-talks/10855) + +[@莲叔](https://github.com/aaaron7):Apple Developer 上推出的三个新的 Tech Talk,链接地址分别是: + +* [10855 Explore UI animation hitches and the render loop](https://developer.apple.com/videos/play/tech-talks/10855) +* [10856 Find and fix hitches in the commit phase](https://developer.apple.com/videos/play/tech-talks/10856) +* [10857 Demystify and eliminate hitches in the render phase](https://developer.apple.com/videos/play/tech-talks/10857) + +首先是第一讲,10855 介绍了在 iOS UI 开发中的 hitch(故障,卡顿) 的定义。 之后介绍了 iOS 渲染的 3-阶段模型。进一步阐述了 hitch 出现的原因和类型,最后还给出了衡量 hitch 对于用户体验影响的指标。 + +接下来的两讲分别讨论了如何解决 commit 阶段和渲染阶段的耗时: + +* 10856 首先介绍了 commit 阶段的定义, commit 阶段指的是当事件发生时, App 进程处理相关的 UI 更新到更新完成,提交到 Render 进程的时间。主要分为四个阶段: Layout、Display、Prepare、Commit。 Layout 和 Display 阶段往往就对应我们 View 的 layoutSubview 和 drawrect, 是最容易导致卡顿的点。之后,视频结合一个具体的案例来介绍了如何使用新的 instruments 来定位 commit 阶段的 hitch, 最后给出了一些最佳实践来避免耗时。 +* 10857 首先介绍了 render 阶段做的事情,然后引出了导致 render 阶段耗时的核心原因:离屏渲染。即 GPU 无法串行的执行所有绘制任务,而是需要中断主 pipeline 去先做一部分离屏渲染之后才能完成当前任务。之后介绍了如何使用 Xcode 的 View Hierarchy Debug 面板配合 Instrument 去找到当前介绍触发离屏渲染的元凶。最后,类似 10856, 本视频后续也给出了一些平时开发的最佳实践的建议。 + +这三讲的内容非常富有启发性,讲解 hitch 是一方面,更有价值的是借这个过程阐述了 iOS 的 UI 机制,让我们能够在做优化时候不仅能知其然,更能知其所以然。比如圆角、阴影到底为什么会影响帧率,Flutter 在 iOS 上对比原生的性能为什么相比 Android 差这么多这些问题,相信你看完都能有答案。 + +> 由 F010BE 推荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#98-2020.01.06.md b/Reports/2020/#98-2020.01.06.md new file mode 100644 index 000000000..d79547eca --- /dev/null +++ b/Reports/2020/#98-2020.01.06.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #98 | 2020-01-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [RN 转小程序引擎 Alita 2.0 正式发布:基于 webpack 进行重构](https://mp.weixin.qq.com/s/ndr0rGmy456wUEaoOBR0_g) + +[@looping](https://github.com/looping):近期 Alita 发布了基于 webpack 进行重构后的 2.0 版本,带来了诸多新特性,包括完善 npm 支持、包大小分析、一键小程序分包等等。Alita 本身侵入性很低,并不会对原有 ReactNative 开发方式造成太大影响。同时本文也从基本原理、2.0 版本新特性、性能优化这三个方面介绍了下 Alita。感兴趣的同学可以进一步关注学习下。 + +## 新手推荐 + +### 🐕 [How to use scroll view in Interface Builder / Storyboard (Xcode 11)](https://fluffy.es/scrollview-storyboard-xcode-11/) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了如何在 Xcode 11 的 Interface Builder 或者 Storyboard 中使用 scroll view。主要介绍了如何在 view controller 中使用 scroll view 并且设置它的约束和如何设置 scroll view 元素的约束并且如何通过设置当中元素的约束来自动控制 scroll view 的 Content view 的大小。 + +### 🐢 [SwiftUI learning curve in 2019](https://swiftwithmajid.com/2019/12/31/swiftui-learning-curve-in-2019/) + +[xiaofei86](https://weibo.com/xuyafei86):今年 iOS 开发领域发生了巨大变化,我们拥有了 SwiftUI 框架。SwiftUI 是苹果生态系统中用声明式框架构建 App 的新方式。作者总结了学习 SwiftUI 需要的所有文章列表,包括基础知识、布局系统、架构、声明式特性、动画和交互、辅助功能、绘制自定义视图总 28 篇文章,推荐给对 SwiftUI 感兴趣的同学。 + +## 文章 + +### 🌟 🐕 [手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化](https://mp.weixin.qq.com/s/YDO0ALPQWujuLvuRWdX7dQ) + +[@satanwoo](https://satanwoo.github.io):启动优化是个老生常谈的问题了,但相关优化涉及的技术却总是停滞不前。而 2019 年下半年抖音提出的二进制重排方案给业界带来了一股新的风潮来一些新鲜感。本文是来自手淘架构组的谢俊逸同学在二进制重排方案的基础上,针对原有方案的一些实践限制,提出了一种基于静态库二进制插桩的重排方案,对于大量应用组件化构建应用的团队来说,是一个值得学习借鉴的好文章。对了,本文配合原有的[抖音研发实践:基于二进制文件重排的解决方案 APP 启动速度提升超 15%](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247485101&idx=1&sn=abbbb6da1aba37a04047fc210363bcc9&scene=21#wechat_redirect)更佳~ + +### 🌟 🐕 [APP 网络优化之 DNS 优化实践](https://juejin.im/post/5e0d580b5188253a5c7d12fc) + +[@Parsifal](https://github.com/ParsifalC):网络优化一直是 App 性能优化中比较重要的一部分,而在网络优化中 DNS 优化又是相对重要的一块。通常我们做 DNS 优化想要达到的目的有以下 3 个: + +- 降低 DNS 解析带来的延迟 +- 预防 DNS 劫持 +- IP 做到服务器动态部署 + +其中,“降低 DNS 解析带来的延迟” 在 HTTP 2.0(从 1.1 开始 keep-alive 默认开启,2.0 支持多路复用,大大提高了链接的可重用性和传输效率)时代影响已经比之前小很多,但 “预防 DNS 劫持” 和 “IP 做到服务器动态部署” 这两点问题依然可以用 IP 直连来解决。目前市面提供的类似服务主要有:[阿里云 HTTPDNS](https://help.aliyun.com/product/30100.html?spm=a2c4g.11186623.6.540.152a7797Bj2wEU) 和 [腾讯云 HTTPDNS](https://cloud.tencent.com/product/hd),其中需要解决的问题大同小异,两家都在开发文档中有提及。本文则在这些问题的基础上,补充了两个实践过程中遇到的问题。如果你之前从未了解过客户端 DNS 优化相关内容,这篇文章可以较完善地为你释疑;如果你之前已经有尝试过,那么也能通过这篇文章,看看他们实践中遇到的问题。 + +### 🐕 [立志欲坚不欲锐 - 2019 年小结](https://mp.weixin.qq.com/s/1OeqJ-JSLtIRWqP8wOZRjg) + +[@J_Knight_](https://weibo.com/1929625262/profile?rightmod=1&wvr=6&mod=personinfo&is_all=1):本文是冬瓜的 2019 年总结。本篇总结分别从社区贡献(GitHub,博客,公众号,DissCode 算法平台),读书,在线课程,算法题几个方面展开;在文章结尾处还分享了他的年度 OKR 并简单介绍了他在抖音的工作。可以说这一年他在技术上的学习以及输出都是非常高的,很值得同行学习。关于他的公众号,有兴趣的朋友可以从[ 2019 年文章汇总](https://mp.weixin.qq.com/s/v-yB2_ArfeQAhveHXfiIYA)这篇文章中详细了解。 + +### 🐎 [MANAGE YOUR IOS RESOURCES TYPE-SAFELY WITH R.SWIFT](https://andreaslydemann.com/manage-your-ios-resources-type-safely-with-r-swift/) + +[@Damonwong](https://github.com/Damonvvong):在开发 iOS 项目的时候,如果你想要用代码访问一些资源文件,通常情况下,你需要使用 **magic strings** 在运行时动态的查找,这并不是一个十分安全的方式。 + +在这方面,Android 的设计就比 iOS 好很多,每个 Android 项目都有一个 R.java 文件来解决 **magic strings** 的问题。也正是因为这个设计,iOS 这边衍生出了 [R.swift](https://github.com/mac-cain13/R.swift) 这个库,借助 Swift 的特性,在编译的时候就能及时的发现类似于资源文件丢失的问题。 + +与 [R.swift](https://github.com/mac-cain13/R.swift) 类似还有一个库叫 [SwiftGen](https://github.com/SwiftGen/SwiftGen)。这两个库大同小异,大家可以根据自己的项目实际情况来选择。 + +### 🐎 [CocoaPods 1.9 新特性](https://mp.weixin.qq.com/s/QJfLha9GmubfHjhnzQm9Fg) + +[@EyreFree](https://github.com/EyreFree):CocoaPods 是使用最广泛的 iOS 项目依赖管理工具,相信大家都有使用过,在此不多做赘述。目前 CocoaPods 已经发布了 1.9.0.beta.2 版本,按照以往的节奏,相信很快就会发布正式版。本次的 1.9 版本除修复了大量 Bug 外,还添加了 XCFramework 支持、Podspec 的基于配置的依赖关系以及 Swift 版本变体等一系列新特性,快来点开文章提前预习一波吧。 + +### 🐎 [9to5mac 年度回顾:Apple 在 2019 年全年发布的所有产品](https://mp.weixin.qq.com/s/ShqUgoMpfoS9BFwBeDO2VQ) + +[@张嘉夫](https://github.com/josephchang10):对于苹果公司而言,2019 年是繁忙的一年,全年分发了无数的硬件和软件版本。从 Mac 系列和 iPhone 11 Pro 的多个更新到 Apple Watch Series 5 和 AirPods Pro,Apple 在 2019 年对其所有产品系列进行了更新和发布。本文是 9to5mac 对苹果在 2019 年发布的所有内容(包括软件和硬件)的一个回顾。 + +### 🐎 [Debugging with Swift Combine Framework](https://www.vadimbulavin.com/debugging-with-combine-swift-framework/) + +[@zvving](https://github.com/zvving):响应式编程一贯有调试不便的问题,本文介绍基本的日志打印、断点调试和图表分析方法,帮助你更好的上手 Combine 开发。 + +### 🐎 [向现有应用添加 Flutter](https://mp.weixin.qq.com/s/DckZviEm6P1cNC1oZBvXKw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):随着 Flutter 1.12的发布,官方带来了一项新功能 - [Add-to-app](https://flutter.dev/docs/development/add-to-app), 通过创建 Flutter module 的方式,可以快速的给现有应用添加 Flutter 能力,全程体验顺滑如丝。自此,还有什么理由说 Flutter 集成体验差😄。 + +## 工具 + +### [Publish](https://github.com/johnsundell/publish) + +[@四娘](https://kemchenj.github.io):Publish 是一个使用 Swift 编写的静态网站生成器,支持主题和插件等自定义功能,前身是 [SwiftBySundell](https://swiftbysundell.com) 这个网站的生成工具,现在作者整理后将它开源了出来。 + +### [AppHost](https://github.com/pluosi/app-host) + +[@JimQ](https://github.com/waz0820):一个轻量级的包托管网站,主要用于 iOS 和 Android 的包管理,作用类似于 fir.im,不同之处是可以自由部署在内网,方便了公司项目保密,并且代码开源,方便根据各自需求进行定制化开发。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2020/#99-2020.01.13.md b/Reports/2020/#99-2020.01.13.md new file mode 100644 index 000000000..bbaa4adbd --- /dev/null +++ b/Reports/2020/#99-2020.01.13.md @@ -0,0 +1,137 @@ +# 老司机 iOS 周报 #99 | 2020-01-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +本期周报也是年前最后一期周报了,提前祝大家春节愉快~ + +## 新手推荐 + +### 🌟 🐕 [Flutter 如何高效的 JSON 转 Model](https://juejin.im/post/5e12eb566fb9a0480b415de2) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):由于 Flutter 禁用运行时反射,所以在 Flutter 中是没有 Mantle 等这类解析 JSON 的库。本文介绍了三种方式在 Flutter 中进行 JSON to Model : + +- 手动序列化 JSON +- 使用 json_serializable +- [使用工具网站](https://app.quicktype.io/) + +## 文章 + +### 🌟 🐢 [Using Type Erasure to Build a Dependency Injecting Routing Framework in Swift](https://swiftrocks.com/using-type-erasure-to-build-a-dependency-injector-in-swift.html) + +[@Damonwong](https://github.com/Damonvvong):Swift 编译器的类型检查为 Swift 项目减少了很多错误的产生,但是过于严苛的校验机制,使得很多功能实现起来较为复杂。 +比如,作者在做模块拆分的时候,遇到了模块之间相互依赖的问题,最后他采用了**类型擦除**的办法,构建了一套依赖注入的路由框架思路,实现了模块之间的依赖的解耦,是一个不错的思路,做组件化的同学可以看一下具体的实现细节。 +同时,由于 Swift 复杂的类型系统,**类型擦除**的使用范围还是蛮广泛的。比如 Codable 的实现、RxSwift 中的 Signal、SwiftUI 中的 View 等,如果不了解**类型擦除**也可以看一下文章,了解一下**类型擦除**的概念。 + +### 🌟 🐕 [静态拦截 iOS 对象方法调用的简易实现](https://juejin.im/post/5e1280fae51d4540e47ca450) + +[@Parsifal](https://github.com/ParsifalC):过去的 2019 年,在启动优化这一专项上,社区有了一个新的研究方向 -- 二进制重排。早之前的周报推荐过的两篇文章,「[手淘架构组最新实践 | iOS 基于静态库插桩的⼆进制重排启动优化](https://mp.weixin.qq.com/s/YDO0ALPQWujuLvuRWdX7dQ)」 和 「[抖音研发实践:基于二进制文件重排的解决方案 APP 启动速度提升超 15%](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247485101&idx=1&sn=abbbb6da1aba37a04047fc210363bcc9&scene=21#wechat_redirect)」,详细介绍了这种方案的两种实现方式。 + +做二进制重排中,必不可少的一步便是统计所有函数的调用频次。欧阳大哥针对这一步,提出了自己的一个新的思路 -- “利用静态库会将自己引用的外部符号单独保存在一张表中” 这一切入点从而替换 `objc_msgSend` 方法。 + +> 目前社区内常用的统计函数使用频次的方案,值得一提的是,这些方案并不局限于统计函数使用频次这一场景: + +> - 基于运行时的 hook 方案:fishhook 等能提供动态修改 `objc_msgSend` 实现 +> - 静态插桩 +> - 借助于 LLVM 语法树分析来实现代码插桩 +> - 将源码编译为静态库,并通过修改静态库中 .o 目标文件的代码段来实现代码插桩 +> - 将所有静态库字符串表中的 objc_msgSend 统一替换为另外一个长度相同的字符串:hook_msgSend(名字任意只要长度一致并唯一)即可 + +### 🐕 [移动开发者的必知音视频基础知识](https://juejin.im/post/5e12fe306fb9a0481467d399) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):作为移动开发者,有些时候会需要接触到音视频相关的开发。作者通过从基本概念、常见问题、应用场景等不同方面来科普音视频开发的基础知识,有助于帮助我们了解音视频开发中的一些常识性问题。 + +### 🐕 [Web 离线技术原理](https://juejin.im/post/5cd4fda8f265da03a00febe1) + +[@looping](https://github.com/looping):本文列举了业界比较常见的四种离线方案,介绍的很全面,并且还从公共资源包、预加载 webview、预加载数据等问题展开进行了探讨分析,是一份很好的离线技术选型参考和方案原理学习的资料。不过正如作者所说,“对于一个优秀的 Hybrid 框架,这些还是远远不够的, ...还有很多东西需要我们探讨学习”。同样,作为一项技术,我们得清楚地认识到它的局限性和使用场景,才能用对、用好并改进它,这也是我们学习技术原理的目的之一。 + +### 🐕 [Turning Property Wrappers into Function Wrappers](https://medium.com/flawless-app-stories/turning-property-wrappers-into-function-wrappers-2be3a49229f5) + +[@老峰](https://github.com/GesanTung):周报之前推荐过 Swift 5.1 中新特性 Property Wrappers 的[相关文章](https://www.vadimbulavin.com/advanced-guide-to-userdefaults-in-swift/), 本篇文章作者分享了属性包装器在 function 下的应用,如 @Delayed(delay: 0.3) 、 @Debounced(delay: 0.3) 等,思路比较新颖,感兴趣的读者可以尝试。 + +### 🐕 [CONTINUOUS INTEGRATION USING GITHUB ACTIONS FOR IOS PROJECTS](https://andreaslydemann.com/continuous-integration-using-github-actions-for-ios-projects/) + +[@老驴](https://www.weibo.com/6090610445):Github Actions 是 Github 2019 年的重磅功能,上线之后也得到了很多开发者的响应,开发了很多针对不同框架,不同语言的各种 actions。 + +网上在 iOS 项目中使用 Github Actions 的内容相对还是比较少的,目前大家主要还是依赖以前几个比较常用的持续集成平台对项目做持续集成。本文就介绍了如何使用 Github Actions 来做 iOS 项目的持续集成。步骤虽然不算太多,但是也不算特别简单,有兴趣的读者朋友们可以在自己的项目中尝试一下。 + + +### 🐕 [从客户端角度窥探小程序架构](https://juejin.im/post/5e0dfb8cf265da5d2076ef69) +[@莲叔](https://weibo.com/aaaron7): 微信小程序并不是新鲜事物,但是近年来小程序 SDK 的概念越来越流行,接入 SDK 就能直接直接接入一整个生态,确实非常有吸引力。本文比较完整的分析了小程序的发展历程,以及简单剖析了小程序的实现方式。探讨了小程序基于 H5 的技术栈是如何实现展现与逻辑的解耦,也 cover 了小程序相关领域的常用技术方案,比如离线包和预加载等。最后简单介绍了支付宝小程序的架构。整篇文章内容相对全面,适合入门的同学阅读。 + +### 🐕 [为什么 TCP 协议有性能问题 · Why's THE Design?](https://draven.co/whys-the-design-tcp-performance) +[@水水](https://www.xuyanlan.com):TCP 协议可以说是今天互联网的基石,作为可靠的传输协议,在今天几乎所有的数据都会通过 TCP 协议传输,然而 TCP 在设计之初没有考虑到现今复杂的网络环境,本文会分析 TCP 协议为什么在弱网环境下有严重的性能问题。 +在弱网环境下(丢包率高)影响 TCP 性能的三个原因: +- TCP 的拥塞控制算法会在丢包时主动降低吞吐量; +- TCP 的三次握手增加了数据传输的延迟和额外开销; +- TCP 的累计应答机制导致了数据段的传输; + +### 🐕 [UINavigationBar 在 iOS 13 中的变动](https://sarunw.com/posts/uinavigationbar-changes-in-ios13/) + +[@AidenRao](https://weibo.com/AidenRao):苹果在 iOS13 中带来了很多外观更改,这篇文章主要讲导航栏的变动,大标题样式导航栏的默认外观已从半透明更改为透明。这个变动不大,可以添加部分代码恢复半透明。iOS13 下添加了 UINavigationBarAppearance 类,可以对导航栏外观进行自定义,去设置样式,阴影,背景,标题位置,按钮样式等。现在你可以删除你的自定义导航栏的代码,前提是 APP 的最低支持版本升到 13 (微笑)。 + +### 🐕 [How to make an augmented reality decorating experience app with AR Quick Look](https://engineering.nodesagency.com/categories/ios/2019/12/31/How-to-make-an-Augmented-Reality-decorating-experience-app-with-AR-Quick-Look) + + [@张嘉夫](https://github.com/josephchang10):[AR Quick Look](https://developer.apple.com/augmented-reality/quick-look/) 能够为用户提供强大的增强现实体验,包括移动、缩放物体等交互方式,以及 people occlusion 功能,此外还可以分享“开箱即用”的模型。因此现在 AR 项目的大部分工作都来自于准备模型。这篇文章会为你介绍如何寻找合适的模型、对模型的尺寸进行适当的调整、生成并测试 USDZ 模型文件,并最终通过 Quick Look 功能制作为一款 AR app。 + +## 工具 + +### [为 iOS 审核操碎了心!用岩鼠提升 iOS 审核通过率吧](https://mp.weixin.qq.com/s/Mgywz7KO1tDh8POS2Agnsw) + +[@JimQ](https://github.com/waz0820):UC 研发效能团队建立的这套 iOS 预审工具可以有效地排除 iOS 审核上可能遇到的诸多坑点,尤其是针对不小心误用私有 API 库的痛点,团队收集了所有已知的私有 API 库,且在不断地完善与更新。开发者可以免费试用。 + +## 代码 + +### [BetterCodable](https://github.com/marksands/BetterCodable) + +[@享耳先森](https://github.com/iblacksun):Swift 4.0 开始引入 `Codable` 解决数据到模型转换的问题,但实际使用过程中经常需要自定义 `init(from decoder: Decoder) throws` 方法,`BetterCodable` 结合 Swift 5.1 引入的 `Property Wrappers` 来解决这个问题。 + +## 书 + +### [《谷歌方法》](https://book.douban.com/subject/33430445/) + +不要被书名骗了,这不是一本严肃的谈论“方法”的书,相反,读起来像一个冒险故事一样吸引人。 + +这本书介绍了一家地图软件公司(KeyHole)被谷歌收购后,一路成长最后成为一个超 10 亿用户的明星产品的故事。和其他创业故事的区别在于,谷歌地图的核心壁垒是技术门槛。很少看到一个技术驱动型产品,从早期到最后大获成功的完整记录。在这个过程中,你也可以一窥谷歌如何打造一款成功的产品。 + +## 音视频 + +### 🌟 🐎 [推荐订阅播客节目:`[weak self]`](https://weakself.dev/) +[@zvving](https://github.com/zvving):三名台湾 iOS 工程师带来的高质量播客节目《弱弱的我》第一季正式完结!🎊🎉 + +虽常被垃(le)圾(se)车打断,也总是录音设备故障,内容却欢乐且丰富:语言交流、Test CI 踩坑、管理心得、职场烦恼,鸡汤大饼,尽情畅聊。老司机团队倾情推荐! + +`weak self, strong together!` 快乐的时光总是短暂的,期待第二季带来更多欢乐~ + +## 内推 + +> **字节跳动抖音商业化团队急招客户端工程师,速上车:** +> - 字节跳动旗下抖音和TikTok的商业化研发工程师,负责抖音内所有赚钱的需求!不管是广告、dou+、企业号、抖音电商还是抖音小游戏,都有我们的身影! +> - 团队base 北京、上海、杭州、深圳,我们不局限技术栈,对于新技术保持开放的态度。 +> - 简历以【姓名+投递岗位+手机号】格式发送至 fulei.bill@bytedance.com 或者直接加微信 `fuleiac` + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(OldDriverWeekly)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需翻墙,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#143-2021.01.04.md b/Reports/2021/#143-2021.01.04.md new file mode 100644 index 000000000..50e53b48d --- /dev/null +++ b/Reports/2021/#143-2021.01.04.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #143 | 2021-01-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 2021 + +[@Parsifal](https://github.com/ParsifalC):先说句迟到的新年快乐!2020 年终于过去了,崭新的一年也已经到来。在所有编辑的努力以及广大读者的支持下,很感恩周报又和大家一起度过一年。这是周报第 143 期,也是 2021 年的第 1 期,愿我们还能一起成长~ + +> 在朋友圈刷屏年终总结的时候,我们也做了个小活动 - [【请查收】你的 2020 年度 Github 报告](https://mp.weixin.qq.com/s/eBw4gS6-Y8ZYNReF3pbHng),感兴趣的读者可以参与下~另外,想加入周报读者群的朋友可以添加 iTDriverr 为好友。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [Sirikit 和 Shortcuts 的新特性](https://mp.weixin.qq.com/s/gw35JpL_JhGXIjVybxNM3Q) +- [SiriKit 新变化:评估优化 App 的语音交互](https://mp.weixin.qq.com/s/U9dgIg-cJn0kAWI4Uj7V7A) + +## 文章 + +### 🐕 [Flutter 中一行文字到屏幕上,渲染全过程!](https://mp.weixin.qq.com/s/RAM3GbJ_vjnC_JcgNrFKtg) + +[@极速男孩](https://github.com/ztlyyznf001):flutter 中除了我们熟悉的 StatelessWidget 和 StatefluWidget 两个 Widget 以外,还有InheritedWidget、 RenderObjectWidget 这种 Widget。 这篇文章主要通过一步步的解析源码中如何使用 RenderObjectWidget 中的 RenderParagraph 来将 RichText 渲染到屏幕中的。然后通过去自定义一个文本的组件来进一步了解如何使用 RenderObject 来渲染文字的。 + +### 🐢 [今日头条优化实践: iOS 包大小二进制优化](https://mp.weixin.qq.com/s/TnqAqpmuXsGFfpcSUqZ9GQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):苹果对 iOS App 大小有严格的限制,包括下载大小和可执行文件的大小。本文从背景知识和面临的实际问题出发,介绍了 `__TEXT` 段迁移技术及减少下载大小的原理,描述了我们在实践过程中遇到的问题,并从源码的角度详细分析了问题产生的根本原因以及解决方式,解答了相关疑问和上线后遇到的问题。需要注意的是,由于苹果在 iOS 13 已经对下载大小做了优化,所以本文方案无法再对 iOS 13 及更高系统的设备的下载大小进一步优化。 + +### 🐕 [百度App Objective-C/Swift 组件化混编之路(二)](https://mp.weixin.qq.com/s/xA3g0GdNvfKNgfvG6imEvw) + +[@JonyFang](https://github.com/JonyFang):本文主要以依赖管理工具 EasyBox 工具链为支撑,介绍百度 App 如何实现组件内的 Objective-C/Swift 混编、单侧、二进制发布和集成,以及组件间的依赖和引用。 + +对于开发者来说,不用去关心混编是如何实现的,只需要和正常开发一样,组件内引用所需的头文件(#import )或 module(@import ModuleXX),组件间在声明依赖后亦可直接引用头文件或 module ,EasyBox 工具链会根据源码文件或配置进行 module 化和 Xcode Build setting 相关的处理。 + +对于混编组件的二进制打包,开发者们也不用去关心如何处理编译产物,诸如 `*-Swift.h`、二进制架构、`*.swiftmodule`、`*.interface` 等,EasyBox 工具链打包命令 box package 会全权处理,降低开发者们的配置难度和协同成本。 + +### 🐎 [2020 年文章总汇](https://mp.weixin.qq.com/s/71z6vbkxjzk8SzJCmZeFlw) + +[@J_Knight_](https://github.com/knightsj):本文是一瓜技术公众号在2020年的文章汇总,同时也介绍了其他原创作者的信息以及分享的专题文章列表。而且在文章底部有一个关于读者喜爱的专题的投票,感兴趣的读者可以参与一下。 + +### 🐎 [使用 Swift 编写 CLI 工具的入门教程](https://mp.weixin.qq.com/s/V4IdsYUouKGr68ULyb88Qw) + +[@Damien](https://github.com/ZengyiMa):Swift 的推出提高了 iOS 的开发效率和体验,本文会介绍 Swift 在编写 CLI(command line tool) 方面的用途,文章会详细介绍开发 CLI 的方方面面,如 SPM 搭建开发框架、参数解析、单测的编写、工具安装等等。希望通过本文,读者们可以将 Swift 应用到更多方面。 + +### 🐕 [图解 Mach-O 中的 got](https://www.jianshu.com/p/55d82172a9f8) + +[@Leo](https://github.com/leomobiledeveloper):本文介绍了什么是 got、got 在 mach-o 中的位置、函数符号如何与 dyld_stub_binder 进行关联,以及如何一步步查找动态库符号的值。图文并茂,可让读者了解动态库符号的绑定原理。 + +> 推荐人:[silan-liu](https://github.com/silan-liu) + +### 🐕 [Thresh 今天正式开源,有望成为替代 RN 的一种长期方案](https://mp.weixin.qq.com/s/E2lhodazRZRVPUGafY92xA) + +[@Parsifal](https://github.com/ParsifalC):有点标题党的意思,不过文章还是值得一看。[Thresh](https://github.com/ymm-tech/thresh) 其实只是本篇文章的一部分,整篇文章内容围绕在「满帮团队在大前端效率提升实践的诸多尝试」上,包括基于 RN 封装的 MBRN,基于 Flutter 渲染的 Thresh 框架,本地 H5 方案,Android 端插件化方案,基于自定义 DSL 的搭建化框架 DaVinci,随着业务场景的多样化和业务需求迭代的高频性,这些方案可能是各个技术团队都会去摸索的。其中,Thresh 是利用 JSC + Flutter Engine 完成的动态化能力,这样也算曲线弥补了 Flutter 关闭 AOT 下的动态能力缺陷,而 Flutter 独立的渲染引擎也保持了多平台一致性的优势。至于值不值得,个人觉得还是见仁见智,结合团队实际情况来看。 + +## 工具 + +### [Downloader-for-Apple-Developers](https://github.com/vineetchoudhary/Downloader-for-Apple-Developers) + +现在 Xcode 已经达到 10+ GB ,这个软件利用 aria2 可以多线程下载高速 Xcode,对于经常下载 Xcode 失败的同学可以试试~ + +> 由 [iHTCboy](https://github.com/iHTCboy) 推荐 + +### [DevUtils-app](https://github.com/DevUtilsApp/DevUtils-app) + +[@Parsifal](https://github.com/ParsifalC):由 Swift 编写的一个聚合了许多开发过程中会用到的小工具的 Mac App,比如各种编码解码、JSON 格式化、时间戳转换等等。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#144-2021.01.11.md b/Reports/2021/#144-2021.01.11.md new file mode 100644 index 000000000..960c8a04e --- /dev/null +++ b/Reports/2021/#144-2021.01.11.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #144 | 2021-01-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 2 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [WWDC20 CoreImage 专题](https://mp.weixin.qq.com/s/azSk79UwWQaXY6vnZyifkA) +- [Mac Catalyst 的新功能](https://mp.weixin.qq.com/s/zlmsfTgUtJNKbBZxOgn8KQ) + +## 新闻 + +### [The 2020 State of the OCTO—VERSE](https://octoverse.github.com/) + +[@Parsifal](https://github.com/ParsifalC):GitHub 官方的 2020 年度报告,作为聚集了最多全球开发者的开源平台,GitHub 这次从社区、生产率以及安全三个方面,展示不同的数据来总结过去的 2020 年。 + +## 新手推荐 + +### 🐎 [the different types of self in Swift](https://www.jessesquires.com/blog/2020/12/28/the-different-types-of-self-in-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章简单的介绍了在 Swift 三种 self 的不同用法,包括 self. 前缀,.self 后缀和 self 类型。 + +## 文章 + +### 🌟 🐎 [从 Weex 到Web,性能逆势如何破局?](https://mp.weixin.qq.com/s/0EluripD7qNZtx7-aCstkw) + +[@Damien](https://github.com/ZengyiMa):今年双十一飞猪会场从前端渲染引擎从 Weex 回归到 WebView,在迁移变化的同时,同时性能指标上的优化也不能落下,飞猪团队为了极致的性能体验,使用了端侧预渲染、服务端渲染、页面快照、SPA 单页应用模式以及资源&数据预缓存等方案来进行极致的优化,同时取得的效果也是很惊艳的:日常会场首屏耗时环比降低 25%,较 618 以及国庆会场首屏耗时环比降低 20%。对 WebView 优化相关的同学推荐阅读此文,或许可以找到灵感。 + +### 🌟 🐎 [如何持续的自我提升](https://mp.weixin.qq.com/s/ibezFl5p62yDlb8HS6NyJw) + +[@J_Knight_](https://github.com/knightsj):本文作者结合自己的实际学习案例分享了 “如何自我学习/提升”的问题,整体的学习思路如下: +- 初识:被灌输知识的过程。 +- 思考:主动消化知识的过程。 +- 探索:手动进行研究的过程 +- 总结和超越:完成自我提升的过程 + +而且文章还提到了费曼学习法,感兴趣的读者可以阅读一下本文。 + +### 🌟 🐢 [Preventing Data Races in the Swift Concurrency Model](https://gist.github.com/DougGregor/10db898093ce33694139d1dcd7da3397) + +[@享耳先森](https://github.com/iblacksun):并发一直是现代语言的重要部分,根据 Swift Roadmap,预计 Swift 6.0 将推出基于协程的 async/await 模型及新的 Actor Isolation 并发模型,Swift 核心成员 Doug 写了一篇文章,介绍 Swift 加入了新的并发模型之后,有哪些方式可以避免数据竞争。 +> 参考: +- [Swift Concurrency Roadmap](https://forums.swift.org/t/swift-concurrency-roadmap/41611) +- [Protocol-based Actor Isolation: Draft #2](https://docs.google.com/document/d/1BEO6QwzcYCUhaGyA-WRoM_phRa7O7mGPNIMdSV4StEE/edit) + +### 🐕 [8 Common SwiftUI Mistakes - and how to fix them](https://www.hackingwithswift.com/articles/224/common-swiftui-mistakes-and-how-to-fix-them) + +[@zvving](https://github.com/zvving):SwiftUI 之于 UIKit,就像 objc 之于 swift:二者在设计思想、具体实现方面有诸多关联,却又是底层逻辑完全不同、『推倒重建』的两类事物。 + +带着 UIKit 已有经验去学习 SwiftUI,能快速上手的同时也会掉一些不易察觉的坑:细节不符合预期、实现冗余、写法错误而不自知……本文作者总结了 SwiftUI 新手常犯的 8 类错误,解决问题的同时,帮助你更好的理解 SwiftUI 的独特之处。 + +### 🐕 [更现代的 Swift API 设计](https://mp.weixin.qq.com/s/DhtYVLNq5IRu2eUEktXgJg) + +[@EyreFree](https://github.com/EyreFree):Swift 是一门简洁同时富有表现力的语言,这其中隐藏着众多的设计细节。本文通过提出一个 Struct 的语义问题,在寻找答案的过程中逐步引出 DynamicMemberLookup 应用、PropertyWrapper(WWDC19 的 PropertyDelegate) 的实现原理以及 SwiftUI DSL 中 PropertyWrapper 的应用,来一起看看更现代的 API 背后的设计过程。希望这些理念能帮助你用 Swift 在项目中设计出更现代、清晰度更高的 API。 + +### 🐕 [一文了解 Xcode 生成「静态库」和「动态库」 的流程](https://mp.weixin.qq.com/s/WH8emrMpLeVW-LfGwN09cw) + +[@JonyFang](https://github.com/JonyFang):本篇主要解答了 iOS App 的链接是由谁完成的。作者通过创建 Demo 来实践 Xcode 生成`静态库`和`动态库`的流程,过程中分析 [Report navigator](https://help.apple.com/xcode/mac/11.4/#/dev21d56ecd4) 页面中详细的 Build(构建)日志,得到的结论是: +- 只有在 `动态库` 的链接过程会依赖 `clang Driver`; +- 真正执行生成 `静态库` 与 `动态库` 的任务的是 `libtool` 和 `ld64`。 + +## 工具 + +### [iSimulator](https://github.com/wigl/iSimulator) + +[@红纸](https://github.com/nianran):iSimulator 是一款用于操控 Xcode 模拟器的 GUI 工具,其包含基础增删模拟器、展示应用安装列表、快捷导航应用的 Sandbox/Bundle 文件夹、APP 多模拟器同步装载等多种功能。还在烦恼找不到模拟器安装、文件夹路径的小伙伴可以尝试一下此工具。 + +## 代码 + + +### [滴滴DoKit For Flutter正式开源,功能及核心实现解读](https://mp.weixin.qq.com/s/QLwE-ehvp9dHW4QJmAWI9g) + +[@邦Ben](https://weibo.com/linwenbang):本文介绍了滴滴开源的 DoKit,DoKit 是一个针对 Flutter 的产研工具包,集成了各种丰富的小工具,UI、网络、内存、监控等等。本文也简单介绍了一下原理,但是实际实现方式还是仔细看代码更为确切。作为辅助类的工具,可以在调试方面提供到比较实时的反馈(例如测试找你反馈bug的时候,不用连个线去 debug 或者传日志一点点看),有需要可以一用。 + +- Github 地址: +https://github.com/didi/DoraemonKit/tree/master/Flutter + +- Pub 仓库地址: +https://pub.dev/packages/dokit + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#145-2021.01.18.md b/Reports/2021/#145-2021.01.18.md new file mode 100644 index 000000000..0ad6225aa --- /dev/null +++ b/Reports/2021/#145-2021.01.18.md @@ -0,0 +1,122 @@ +# 老司机 iOS 周报 #145 | 2021-01-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC20 + +本周在周报公众号上我们推送了 3 篇 WWDC20 内参专栏内的文章,每篇都很精彩! + +- [RealityKit 的新变化:让构建的场景更逼真、趣味](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247488833&idx=1&sn=0ac21f58f9a4138df4f7b18b205880d9) +- [探索 ARKit 4](https://mp.weixin.qq.com/s/5fKY9q071JcBWK4GVwH0Vg) +- [美化 Mac Catalyst App](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247488690&idx=1&sn=e3a5a68b7782592583144fb8f3afb6e9&chksm=eaa28bb9ddd502afeb72166541a8975f6dc651e186ba8b6d6fee7ae60680e884617b58f11a89&scene=178&cur_album_id=1499758126315683840#rd) + +## 新闻 + +### 🌟 🐕 [Flutter 2021 RoadMap](https://github.com/flutter/flutter/wiki/Roadmap) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):按照国际惯例,最近 Flutter 官方放出了 2021 年的 Flutter RoadMap,透过这份 RoadMap 我们可以清晰的了解官方团队今年的工作,2021 年 Flutter 官方主要发力在以下几点: + +- 空安全 +- Android & iOS 资源下载优化,新特性支持,降低混合开发复杂度等 +- Web & Desktop +- 开发体验提升 +- 生态建设 +- 质量提升 +- 新功能开发 +- 版本发布节奏,全年 4 个稳定版本,每月一个 beta 版本 + +## 文章 + +### 🌟 🐕 [抖音品质建设 - iOS 安装包大小优化实践篇](https://mp.weixin.qq.com/s/LSP8kC09zjb-sDjgZaikbg) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):包大小是 App 重要的基础体验指标之一,本文为大家介绍了抖音在优化安装包大小方向做的一些探索和尝试,包括: + +- AppStore 对安装包的限制沿革以及 App 花费精力优化 iOS 安装包将获得什么收益 +- 如何去分析一个安装包 +- 如何在线下准确把控安装包大小对 AppStore 上影响 +- 常见的一些包大小优化方式 +- 一些影响包大小的编码习惯 + +### 🐕 [Qcon 演讲实录 | XQUIC 与多路径传输技术 Multipath QUIC](https://mp.weixin.qq.com/s/3dnidnhCW-61PS5Stlb0Iw) + +[@老驴](https://www.weibo.com/6090610445):随着移动互联网的发展,传统 TCP 越来越难以满足新的移动互联网需求,于是增强型 UDP 越来越受到大家的注意,获得了高速发展。阿里团队的这篇文章介绍了基于 QUIC 标准的阿里自研版本 XQUIC 以及在此基础上的 Multipathh QUIC。虽然截止到发稿时,阿里尚未开源 XQUIC,但是其中的一些设计思路也值得借鉴。 + +### 🐕 [手机阿里端智能方案演进](https://mp.weixin.qq.com/s/oT5jQYQkQd-09ktFXS_OYg) + +[@莲叔](https://github.com/aaaron7):端智能可以说是最近两年移动端最具有未来感的技术方向。从苹果倾力打造的 CoreML 日趋成熟,到 Google 针对 TFLite 的持续优化以及推出类似 MediaPipe 这样的端侧 AI 框架,都代表这个方向并不是空穴来风的, 而是实打实的场景和业务赋能。端智能从场景上维度,一般分为两大类,首先是视觉图像类,主要通过人脸、手势、前后景分割等模型服务于拍摄、互动、相册等应用,已经日趋成熟,能力也越来越强。而另一类则是策略类,即是通过算法对端上的用户行为数据进行实时的挖掘和计算,来预测用户对于内容、功能的喜好或者耐受度,进而匹配相应的措施来引导用户。后一种还不算成熟,但阿里整体在后一种场景上已经有了比较多的探索与收获。 + +本篇文章围绕 1688 团队决策类场景的探索,介绍了决策类端智能工程化的核心组成部分,虽然没有讲太多技术细节,但对于端智能而言,方案和场景其实才是最核心也是最有价值的。强烈建议对于希望在业务中应用和落地端智能的团队参考。 + +### 🐕 [iOS 性能监控:Runloop 卡顿监控的坑](https://mp.weixin.qq.com/s/vMRQ0VuHLxpaY9oCNd5G8w) + +[@Leo](https://github.com/leomobiledeveloper):本文通过分析 __CFRunLoopDoObservers 函数 和 CFRunLoopAddObserver 函数的内部逻辑,分析了网络上广泛流传的 Runloop 卡顿监测方案 存在低可用性问题的原因,并给出了一份高可用的 Runloop 卡顿监测方案。 + +### 🐕 [Building On-Call Culture at GitHub](https://github.blog/2021-01-06-building-on-call-culture-at-github/) + +[@AidenRao](https://weibo.com/AidenRao):如何建立高效的 on-call 机制,GitHub 在 blog 分享了他们在这方面的经验。 + +- 推出新系统,将文件和服务进行关联,服务分配到团队。团队发生变化,文件所有权也更容易跟着变化。 +- 将所有警报进行拆分, 分配到各团队,清理不再需要的警报。 +- 做好生活与工作的平衡,不同时区的团队成员,一起进行 24 小时轮值。on-call 顾不过来时,团队成员也需要相互支持。 +- 没有 on-call 任务的时候,更新运行手册,调整嘈杂的警报,持续改善 on-call 体验。 + +### 🐕 [从 Mach-O 角度谈谈 Swift 和 OC 的存储差异](https://www.jianshu.com/p/ef0ff6ee6bc6) + +[@Damien](https://github.com/ZengyiMa):本文从二进制的角度初步介绍了 Swift 与 OC 的差异性,包括 Swift 在可执行文件中函数表的存储结构、函数的存储结构等,作者从动态调用开始引入思考,逐渐探索 Swift 的二进制存储。以及从最终的结论来证明 Swift 动态调用的局限性。对于 Swift 初学者有很强的学习价值。 + +### 🐎 [Keep private information out of your logs with Swift](https://olegdreyman.medium.com/keep-private-information-out-of-your-logs-with-swift-bbd2fbcd9a40) + +[@EyreFree](https://github.com/EyreFree):在实际的 App 开发 & 维护过程中,我们经常会遇到将用户的错误日志等数据上传到服务端来进行排查的场景,但在这些日志中可能会包含一些用户的敏感信息,绝大部分情况下我们排查软件错误不需要了解这些具体的用户隐私数据,本文介绍了在 Swift 中如何利用 `Property Wrapper` 将敏感数据从日志中排除,快来了解一下吧。 + +### 🐕 [ARM64 撬开逆向大门](https://mp.weixin.qq.com/s/8HQd6st7ZvUC5f4TZ1cBWg) + +ARM64 相比我们都不陌生,苹果较新的机型基本都是基于 ARM64 架构的。掌握一些 ARM64 的汇编只是对我们日常开发很有帮助,例如一些 crash 在系统库里面的,利用汇编调试会很有帮助。本文虽然开篇是针对安卓来说的,但文中关于 ARM64 汇编的介绍,以及一些指令的用法等其实也是通用的。 + +### 🐕 [Flutter 的性能分析、工程架构与细节处理](https://mp.weixin.qq.com/s/0R5UnVFlVbLKoV__s66HnA) + +[@邦Ben](https://weibo.com/linwenbang):有道智云技术团队将从性能、架构、适配等多个方面进行讲解实践过程中的一些实际问题,值得一看。其中还包括了 Flutter Web 的 Demo,Flutter Web Google 还在持续优化,这部分可以拭目以待。文章中也提及到了 `Flare` (动画制作工具)制作 Flutter 动画,如果对动画方面有需求的,也可以单独进行了解。 + +- Flare 网址:https://www.2dimensions.com + +### 🐎 [如何排查无法复现的系统内部 Crash?](https://juejin.cn/post/6916048281113985032) + +[@水水](https://www.xuyanlan.com): 作者从自身遇到的一个 Crash 出发,记录了从分析、假设、模拟复现、运行分析、修复 Crash 的一个过程。是非常好的一个 Crash 解决方法。希望能够给读者有所启发。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> **百度网盘 - 北京 - iOS/Android/Flutter/音视频 研发工程师** +> +> 百度网盘是行业 Top1 的云存储产品,已经为超过 7 亿用户提供云服务。一刻相册是「百度网盘」团队出品的云相册 App,经过一年多的发展,已经跃居相册行业 Top2。部门有完善的分享培训体系,有业务和技术挑战。目前,> 部门业务处在新的高速发展时期,长期大量招人,实习、应届、社招经验不限,职级不限,欢迎投递简历。 +> +> 简历发送至 xuyafei01@baidu.com,或者添加微信 xyf65803387 了解细节。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#146-2021.01.25.md b/Reports/2021/#146-2021.01.25.md new file mode 100644 index 000000000..e489816e5 --- /dev/null +++ b/Reports/2021/#146-2021.01.25.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #146 | 2020-01-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🌟 🐕 [离线 Hybrid 容器如何做到接近 100% 秒开?](https://mp.weixin.qq.com/s/inAFLg85TfmXOWXS50pEfg) + +[@JonyFang](https://github.com/JonyFang):普惠四轮出行业务技术团队针对 Hybrid 容器进行的技术升级,本篇主要的脉络如下: + +- 目前 Hybrid 容器遇到的问题 +- 问题分析及解决方案 +- 每个点的详细方案和线上效果 +- 整体优化后的线上效果 +- 后续规划和进一步探索 + +从发现问题、针对问题提出解决方案、到上线效果分析,整个实践的过程和思考,值得一看。 + +### 🌟 🐕 [非礼勿视!Objective-C 里的 eval](https://mp.weixin.qq.com/s/6dwi96sQ222KVsgbt4FW5A) + +[@AidenRao](https://weibo.com/AidenRao):本文从一个 CTF 题目展开,从官方文档结合反汇编分析,挖掘出语言和运行时鲜为人知却可能被滥用的机制。谁曾想到编译型的语言竟然也内置支持 eval(允许将输入的字符串变量当作代码动态执行)? + +### 🐎 [First stable release of SwiftWasm 5.3 is now available](https://forums.swift.org/t/first-stable-release-of-swiftwasm-5-3-is-now-available/41868/7) + +[@xiaofei86](https://weibo.com/xuyafei86):[WebAssembly](https://developer.mozilla.org/zh-CN/docs/WebAssembly) 是一种新的[低级语言](https://zh.wikipedia.org/zh-hans/低级语言)(机器代码或汇编语言),旨在让开发者能运用自己熟悉的编程语言编译,再藉虚拟机引擎在浏览器内运行。其开发团队来自 Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器 Firefox、Chrome、Microsoft Edge、Safari。 + +2019 年 WebAssembly 被 W3C 推荐为 Web 的第四种语言,目前支持 C、C++、Rust、Go、Java、C#。现在,随着 SwiftWasm 5.3 第一个稳定版本现的发布,Swift 也被纳入 WebAssembly 的支持范围,这意味着您可以构建完全用 Swift 编写的浏览器应用程序。有兴趣在更多平台应用 Swift 的读者可以阅读原文详细了解。 + +### 🐕 [Flutter 高性能、多功能的全场景滚动容器,一定要看!](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247486656&idx=1&sn=81e14ac99be2d75b5842529b8c694244&chksm=fd54d8d1ca2351c7ffe5e981aba49443b6aae2642bda6ac7a8951eabddd8a4307adcb98f6991&scene=0&xtrack=1#rd) + +[@邦Ben](https://weibo.com/linwenbang):闲鱼技术设计了一套流式场景下通用的页面布局解决方案 PowerScrollView。主要为解决性能以及曝光等基础需求。性能优化方面从局部刷新,分帧渲染优化。从文章实践结果来说:有不错的优化,但是在低端机上上表现依旧需要继续优化。可惜方案还没有开源,这里大家做优化的话可以进行思路上的参考。 + +### 🐕 [HTTPS 温故知新](https://mp.weixin.qq.com/s?__biz=MzkzMjExMTAwMQ==&mid=2247488855&idx=1&sn=ad55f4338dd53b9f92ac0fa53b7df6f2&chksm=c261e2a1f5166bb79f77fa14b9cf987c9a7c5f3ec7b4bddf75807f06cf6bdda8d7ada71307a3&scene=178&cur_album_id=1501778677406203906#rd) + +[@水水](https://www.xuyanlan.com): 一缕殇流化隐半边冰霜的 HTTPS 温故知新系列文章,相信读者们肯定能感受到『温故』亦或 『知新』。 HTTPS 温故知新系列篇合集入口: https://halfrost.com/tag/https/ + +### 🐕 [让 Flutter 在鸿蒙系统上跑起来](https://mp.weixin.qq.com/s/vTWZRaxvsOS_VRjfh6l4FQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):鸿蒙系统 (HarmonyOS)是华为推出的一款分布式操作系统,那么如何在保证开发迭代效率的前提下,以相对低的成本将移动应用快速移植到鸿蒙平台上呢?美团外卖 MTFlutter 团队近期做了一次技术探索,成功地实现了 Flutter 对于鸿蒙系统的原生支持。 + +### 🐢 [百度App Objective-C/Swift 组件化混编之路(三)- 实践篇](https://mp.weixin.qq.com/s/-rBtXtkelcPQBMjQhwu07w) +本文是『百度App Objective-C/Swift 组件化混编之路』系列文章的第三篇,本文重点介绍了百度App 组件化 Objective-C/Swift 组件化混编改造实践,感兴趣的同学可以看下,建议先看阅读完前两篇文章: +[百度App Objective-C/Swift 组件化混编之路(一)](https://mp.weixin.qq.com/s?__biz=MzUxMzk2ODI1NQ==&mid=2247484177&idx=1&sn=df772d2134ad814bf0f8fafb883d8f77&chksm=f94c5201ce3bdb1787ea4f310de02b0a967983a8de3647034a2dc3c26c520fe493632aeb8be3&scene=21#wechat_redirect) +[百度App Objective-C/Swift 组件化混编之路(二)- 工程化](https://mp.weixin.qq.com/s?__biz=MzUxMzk2ODI1NQ==&mid=2247484191&idx=1&sn=b78cab8a22733e61e4a8b92e36f43ea5&scene=21#wechat_redirect) + +## 工具 + +### [swift-create-xcframework](https://github.com/unsignedapps/swift-create-xcframework) + +[@四娘](https://kemchenj.github.io/):基于 xcodebuild 封装的一个 CLI 工具,可以将 Swift Package 打包成 XCFramework: + +```shell +swift create-xcframework +``` + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#147-2021.02.01.md b/Reports/2021/#147-2021.02.01.md new file mode 100644 index 000000000..821e24c6e --- /dev/null +++ b/Reports/2021/#147-2021.02.01.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #147 | 2021-02-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 +## 新闻 + +### 🌟 🐕 [AppTrackingTransparency 的要求即将生效](https://developer.apple.com/cn/news/?id=8rm6injj) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在初春发布的 iOS 14、iPadOS 14 和 Apple tvOS 14 更新版本中要求 APP 通过 AppTrackingTransparency 证的用户同意来获取广告标识符,在未征得同意的情况下,设备的广告标识符都为零。同时增加 app 的“私人点击测量”支持,来让用户可以测量网站的广告活动。 + + +## 文章 + + +### 🐢 🌟 [抖音品质建设 - iOS启动优化《实战篇》](https://mp.weixin.qq.com/s/ekXfFu4-rmZpHwzFuKiLXw) + +[@Leo](https://github.com/leomobiledeveloper):文章从启动监控,分析工具以及最佳实践三个角度详细介绍了抖音 iOS 客户端是如何做启动优化的。即包括了启动任务管控,预加载等常规方案,又介绍了动态库懒加载,background fetch 等非常规方案,推荐阅读。 + +### 🐕 🌟 [基于 Flutter 的移动中间件体系和音视频技术](https://mp.weixin.qq.com/s/9b4T9dU5PUaUSzwi32GSGQ) + +[@zvving](https://github.com/zvving):由 UC 团队为大家带来的 Flutter 引擎技术沙龙分享第三篇,从播放器视角分析如何拆分、共建 Flutter 业务,并总结在业务定制、播放性能、高效视频编辑部分的实践经验。有相关领域探索诉求的小伙伴不容错过。 + +### 🐕 [谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色(上)](https://mp.weixin.qq.com/s/PgdH8x8nrC9SRU6nMErH8Q) + +[@老驴](https://www.weibo.com/6090610445):iOS 开发者不可避免的就是写各色各样的 UI 了,而写 UI 又不能避免用到 UIKit 和 CoreAnimation 这两个 framework 了。只是平时大家也只是用 UIKit 和 CoreAnimation,很少会去深究背后是怎么工作的。这篇文章就很好的介绍了 iOS 渲染是怎么工作的。文章还有下部分,见参考链接。 + +参考链接: +[谈 UIKit 和 CoreAnimation 在 iOS 渲染中的角色(下)](https://mp.weixin.qq.com/s?__biz=MzA5MTM1NTc2Ng==&mid=2458325030&idx=2&sn=473e586bfde4b73d70fe0a57d66dfe28&chksm=870e1f3fb07996296305bafcc8a0801b0c57619635a3bc7a8e4b836e7fc6553e8b92879d3b78&cur_album_id=1700205981982343172&scene=189#rd) + +### 🐕 [WKWebView 请求拦截探索与实践](https://mp.weixin.qq.com/s/u1fzioTZFLUpDEhSzUMRug) + +[@JonyFang](https://github.com/JonyFang):想要达到 WebView 加载速度提升的技术方案之一是离线包技术,离线包技术中最关键的环节是拦截 WebView 发出的请求将资源映射到本地离线包。而对于 WKWebView 的请求拦截,iOS 原生并没有提供直接的请求拦截能力,本篇主要是围绕 WKWebView 的请求拦截进行展开。 + +网易云音乐大前端团队通过将 iOS 原生 `WKURLSchemeHandler` 与 `JavaScript` 脚本注入结合的方式,实现了 WKWebView 在离线加载、免流等业务中需要的请求拦截能力,解决了拦截过程中可能存在的重定向、请求体丢失、Cookie 不同步等问题,并能以页面为维度进行拦截隔离。 + + +对于体积较大的网页,离线包技术能够一定程度上明显的降低网络加载耗时的问题。 + +### 🐕 [听说你想写个虚拟机(一)?](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247484228&idx=1&sn=704addfc6b1e50c7dedf1ad61787358d&chksm=cf558c8cf822059a11e9062f73266ebc32562f2437a29c9a06ce4ff9d298b637b6b699edd20d&token=1309308849&lang=zh_CN#rd) + +[@老驴](https://www.weibo.com/6090610445):大部分开发者应该都或多或少用过虚拟机,但是也很少有人去深究过虚拟机是怎么工作的。这篇文章就带你从零开始写虚拟机,看懂这篇文章所需要的,只是一点基础的 C 语言知识。作者在文章最后也把代码放到了 Github 上,有兴趣的话可以来学习一下。 + +### 🐕 [关于 SwiftUI State 的一些细节](https://onevcat.com/2021/01/swiftui-state/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了作者在 State 的使用上发现的一个问题,并通过研究 State 的实现机制来给出了相应的解决方案。也同时类比了 StateObject、Binding 和 ObservedObject 在使用上的相同点和不同点。 + +### 🐢 [Core Animation 动画全析](https://juejin.cn/post/6920908515758309383#heading-41) + +[@AidenRao](https://weibo.com/AidenRao):《[iOS 核心动画高级技巧](https://zsisme.gitbooks.io/ios-/content/index.html)》是一本不错的书,文章作者对其总结的很精髓,并附上了很多自己的 demo,很适合做学习动画的阅读资料。 + +## 工具 + +### [Sloc Cloc and Code](https://github.com/boyter/scc) + +[@EyreFree](https://github.com/EyreFree):SCC 是一个非常快速精确的代码计数器,一个用 Go 开发的类似于 cloc、sloccount 和 tokei 的工具。用于计算许多编程语言中源代码的物理行、空行、注释行和物理行。 + +## 代码 + +### [SwiftUIKitView](https://github.com/AvdLee/SwiftUIKitView) + +[@四娘](https://kemchenj.github.io/):这个库让我们可以在 SwiftUI 很方便地直接使用 UIKit 的 View: + +```swift +import SwiftUI +import SwiftUIKitView + +struct SwiftUIwithUIKitView: View { + var body: some View { + NavigationView { + UILabel() // <- 这里可以使用任何 `UIKit` 的 view. + .swiftUIView(layout: .intrinsic) // <- 这个函数会返回一个 SwiftUI 的 `View`. + .set(\.text, to: "Hello, UIKit!") // <- 使用 KeyPath 来更新数据 + .set(\.backgroundColor, to: UIColor(named: "swiftlee_orange")) + .fixedSize() + .navigationTitle("Use UIKit in SwiftUI") + } + } +} +``` + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#148-2021.02.08.md b/Reports/2021/#148-2021.02.08.md new file mode 100644 index 000000000..b07ec1034 --- /dev/null +++ b/Reports/2021/#148-2021.02.08.md @@ -0,0 +1,156 @@ +# 老司机 iOS 周报 #148 | 2020-02-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +[@Parsifal](https://github.com/ParsifalC):这是春节前最后一期周报了,给大家拜个早年,我们节后再见! + +## 文章 + +### 🌟 🐕 [今日头条 iOS 安装包大小优化 - 新阶段、新实践](https://mp.weixin.qq.com/s/oyqAa8wKdioI5ZDG5LjkfA) + +[@Damien](https://github.com/ZengyiMa): 随着业务的发展,App 包大小也会水涨船高,为了更好的用户体验,减少用户等待时间,如何减少包大小是 App 各项优化指标中重要的一环。经过三年的发展,今日头条平台架构为我们带来更多的优化包大小手段: + +- 使用合适的资源压缩配置 +- 使用 RGB with palette 压缩图片 +- Assets.car 合并 +- 文本文件压缩 +- 使用 -Oz 编译参数 +- 使用链接时优化 LTO +- 修正 Exported Symbols 配置 +- 属性动态化 +- __TEXT 段迁移 +- 二进制段压缩 + +并且每项优化的收益也做了详尽的统计和分析。我们做 App 优化,需要静下心来做技术攻坚而且还需要具有数据意识,用数据来说话! + +### 🌟 🐕 [图解 fishhook 原理](https://mp.weixin.qq.com/s/dcQrR4knN0aGDPy2hsrgmg) + +[@老驴](https://www.weibo.com/6090610445):这是一篇目前非常不错的详解 fishhook 的文章,通过图文配合的方式来详细解释 fishhook 的原理。本文讲述 fishhook 所涉及到的最小知识点,完全抛开源码,旨在简单清晰,直击要害。以图代码,带你彻底弄清 fishhook 的原理。 + +### 🐕 [iOS 证书幕后原理](http://chuquan.me/2020/03/22/ios-certificate-principle/) + +[@AidenRao](https://weibo.com/AidenRao):非对称加密贯穿于 iOS 开发之中,在日常的 iOS 开发中,无论是新手还是老鸟,总是会遇到各种与证书、签名有关的问题。作者理清其中的原理,研究并整理出这篇文章。方便读者结合原理,更快的找到证书、签名有关问题的解决方案。 + +### 🐕 [听说你想写个虚拟机(二)?](https://mp.weixin.qq.com/s/m-gimtsk-cYQz-kQS-W26w) + +[@Leo](https://github.com/leomobiledeveloper):虚拟机的概念大家或多或少都听说过,但你是否想过如何实现一个虚拟机呢?“写个虚拟机的文章”是一个系列,这次推荐的是第二/三章节,第二章介绍了寄存器的定义、几个新指令的实现,第三章则从多个角度讲解了如何实现一个更贴近真实定义的虚拟机。第三章链接: + +- [听说你想写个虚拟机(三)?](https://mp.weixin.qq.com/s/GKYEGkDmTxxBmpd4cton5g) + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +### 🐕 [AVPlayer 實踐本地 Cache 功能大全](https://medium.com/zrealm-ios-dev/avplayer-%E5%AF%A6%E8%B8%90%E6%9C%AC%E5%9C%B0-cache-%E5%8A%9F%E8%83%BD%E5%A4%A7%E5%85%A8-6ce488898003) + +[@J_Knight_](https://github.com/knightsj):本文结合实际代码介绍了 AVPlayer 的缓存实现方案,该缓存方案能够实现的目标是: + +1. 本地缓存播放过的音乐,且在播放音乐前先尝试读取缓存 +2. 可以设置缓存上限,超过后该上限后则删除最旧的缓存 +3. 缓存处理不影响播放机制 + +而且在具体介绍方案之前也介绍了所需要的背景知识,如 HTTP Range,AVPlayer 处理 AVURLAsset 的方式等等。 + +### 🐕 [What’s new in Swift 5.4?](https://www.hackingwithswift.com/articles/228/whats-new-in-swift-5-4) + +[@老峰](https://github.com/gesantung): Swift 5.4,带来了一些巨大的编译改进,并大大提高了增量编译的速度,同时也包含不少新特性: + +- 改进的隐式成员语法 +- 函数中支持多个可变参数 +- Result builders +- 局部函数支持重载 +- Property wrappers 支持局部变量 + +Swift 5.4 已经在 Xcode 12.5 beta 版中发布,感兴趣的读者快来升级体验吧。 + +### 🐢 [Aion - 拥抱 Flutter 生态的动态化方案](https://mp.weixin.qq.com/s/mPkx9b07xCkokxxbGc7grA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 又一个 Flutter 动态化方案,目前业内对于 Flutter 动态化的探索可谓百花齐放了,大体上都是以下两种: + +- Web 跟 Flutter 的一个结合,就是前面说的利用 Web 生态 js 的高动态性跟 Flutter 本身的渲染流程去做结合,达到一个既能够满足高动态性 +- Simple VM,用 Dart 代码实现 Widget 视图界面,经过前端的编译生成 AST 产物,然后在编译阶段将 AST 产物转化成 JSON 的数据描述,JSON 文件下发到客户端,在 Dart 层对它做一次解析,来完成动态化 + +以上两种方案在对比原生 AOT 时,多多少少差了那么一点儿,UC 的同学对他们 Flutter 动态化的要求是:无限于接近于现有的 AOT 模式。所以有了这个新的方案:基于 Kernel ByteCode 解析。本文详细的分析和对比了多种方案的优缺点,来表明为何选择 KBC,文章也详细描述了该技术方案落地的过程中遇到的问题以及是如何解决的。 + +## 工具 + +### [tidevice](https://github.com/alibaba/taobao-iphone-device) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个支持运行在 Mac,Linux,Windows 上,能够用于与 iOS 设备进行通信,提供诸多功能的一个工具,包括: +- 截图 +- 获取手机信息 +- ipa 包的安装和卸载 +- 根据 bundleID 启动和停止应用 +- 列出安装应用信息 +- 模拟Xcode运行XCTest +- 获取指定应用性能(CPU,MEM,FPS) +- ... + +## 代码 + +### [Pulse: Structured Logging System](https://github.com/kean/Pulse) + +[@zvving](https://github.com/zvving):基于 [SwiftLog](https://github.com/apple/swift-log) 和 CoreData 实现的日志框架,使用 SwiftUI 为 iOS/macOS 双平台提供日志浏览功能,同时对网络日志提供更清晰的展示视图。 +库还在早期阶段,对日志及 SwiftUI 实现感兴趣的同学欢迎参考。 + +### [Twitter Text Editor](https://github.com/twitter/TwitterTextEditor) + +[@xiaofei86](https://weibo.com/xuyafei86/):Twitter 开源了一个独立的、灵活的、功能齐全的富文本编辑器。提供了一个健壮的文本属性更新逻辑、扩展的文本编辑事件,使用基于委托的便捷 API 安全的处理文本输入事件。 + +```swift +import TwitterTextEditor + +final class MyViewController: UIViewController { + override func viewDidLoad() { + super.viewDidLoad() + let textEditorView = TextEditorView() + textEditorView.text = "Meow" + textEditorView.textAttributesDelegate = self + } +} + +extension MyViewController: TextEditorViewTextAttributesDelegate { + func textEditorView(_ textEditorView: TextEditorView, + updateAttributedString attributedString: NSAttributedString, + completion: @escaping (NSAttributedString?) -> Void) { + + } +} +``` + +### [awesome-function-builders](https://github.com/carson-katri/awesome-function-builders) + +[@JonyFang](https://github.com/JonyFang):Swift 5.1 引入的特性 @functionBuilder,大大增强了 Swift 语言构建内置 DSL 的能力,`awesome-function-builders` 可以作为使用参考。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#149-2021.03.01.md b/Reports/2021/#149-2021.03.01.md new file mode 100644 index 000000000..69963f580 --- /dev/null +++ b/Reports/2021/#149-2021.03.01.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #149 | 2021-03-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [一款可让大型 iOS 工程编译速度提升 50% 的工具](https://mp.weixin.qq.com/s/uBpkelG8q_xmskWPYyWONA) + +[@JonyFang](https://github.com/JonyFang):本文介绍了美团平台自研的一款 cocoapods 插件 `cocoapods-hmap-prebuilt`,该插件以 Header Map 技术为基础,进一步提升代码的编译速度,完善头文件的搜索机制,通过该插件可以大幅提升 iOS 工程代码的编译速度。文章前半部分主要介绍相关的原理,后面主要阐述在工程层面的实践,希望能给从事相关开发的同学带来一些帮助或者启发。 + +### 🐢 [Flutter 路由我定](https://juejin.cn/post/6932115520405635079) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 1.22 的版本更新了路由库, 目前最新的是 Navigator 2.0, 本文算是一个比较完整的 Flutter 路由科普文,对于 Flutter 路由不熟悉的同学,推荐仔细阅读. + +### 🐕 [Is Apple Banning Free Analytics SDKs?](https://steamclock.com/blog/2021/02/apple-tracking-analytics-sdks/) + +[@享耳先森](https://github.com/iblacksun):iOS 14.5 发布时间临近,新版系统中,如果 App 使用了 IDFA,系统将请求用户授权,本文探讨了新的隐私机制对 App 开发者及统计 SDK 开发者有哪些影响、以及该如何应对。 + +### 🚧 🐕 [Universal Links 新鮮事](https://medium.com/zrealm-ios-dev/universal-links-%E6%96%B0%E9%AE%AE%E4%BA%8B-12c5026da33d) + +[@红纸](https://github.com/nianran):Universal Links 在 iOS 14 开始使用 CDN 来更新配置文件,并且加入了新的调试模式(在 applinks:domain.com 中加入 ?mode=developer)来解决 CDN 带来的更新延迟问题。本文的后半文,详细的介绍了如何搭建一个简易的本地测试环境来调试配置文件。 + +### 🐕 [飞猪 Flutter 技术演进及业务改造实践](https://mp.weixin.qq.com/s/08EK76jn-zkqS9flbrAbRA) + +[@邦Ben](https://weibo.com/linwenbang):该文介绍了飞猪团队在 Flutter 上的探索以及落地实践效果。其中重点提及了 Web on Flutter 的尝试,大致流程为:h5 js 代码解析后运行对接 Flutter Render 机制,为了提高 web 显示效果。同时也介绍了 XRay 自动化测试,一套截图识别的自动化测试方案,最大的好处是和具体平台代码无关,跨端效果很好。这也是大部分业务自动化方案采用的方案,有兴趣的童鞋也可以多看下。 + +### 🐕 [听说你想写个虚拟机(四)?](https://mp.weixin.qq.com/s/LHHDlhbuAMe8J6T3SPSaVg) + +[@Leo](https://github.com/leomobiledeveloper):虚拟机的概念大家或多或少都听说过,但你是否想过如何实现一个虚拟机呢?“写个虚拟机”文章是一个系列,这次推荐的是第四五六章节,作者从一个最小虚拟机开始介绍,到完成 LC-3 这个更加贴近真实意义的虚拟机。一步步从简单,到复杂,由浅入深,慢慢掀开了虚拟机的神秘面纱。 + +- [听说你想写个虚拟机(五)?](https://mp.weixin.qq.com/s/wTrLJNFlCZOuuPfIOJV_tA) +- [听说你想写个虚拟机(六)?](https://mp.weixin.qq.com/s/ecBgY_fiGVVs5zOD7Z1vtQ) + +> 由 [silan-liu](https://github.com/silan-liu) 推荐 + +## 代码 + +### [gRPC Swift 1.0.0](https://github.com/grpc/grpc-swift/releases/tag/1.0.0) + +[@EyreFree](https://github.com/EyreFree):gRPC 是一个高性能、开源和通用的 RPC 框架,它基于 HTTP/2 标准设计,带来了双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性,使得其在移动设备上表现更好、更省电和节省空间占用。本项目 grpc-swift 是它的 Swift 实现,在 4 天前发布了 1.0.0 正式版,可用于配合 Apple 官方的 [Swift Protobuf](https://github.com/apple/swift-protobuf) 一起使用。 + +### [stream-chat-swift](https://github.com/getstream/stream-chat-swift/) + +[@AidenRao](https://weibo.com/AidenRao):StreamChat SDK 附带有全部 UI(用户界面)组件,可在几分钟内实现 IM 应用程序的构建。这些组件可以在 iOS 和 macOS 之间无缝转换,只需在其行为上做出一些细微改变,就能实现每个平台所期待的用户体验,目前 SDK 已完全开源,非常适合学习 & 使用。 + +### 🐕 [EasySwiftHook](https://github.com/623637646/SwiftHook) +[@zvving](https://github.com/zvving):Swift 中 hook 手段有限,对于 Dynamic Dispatch Function 还是有一些『可乘之机』。EasySwiftHook 基于 libffi 以及 objc runtime,hook 代码相对易读,支持 NSObject、Pure Swift Class,兼容 KVO、deinit 等。虽然应用受限于动态分发场景,依旧是不错的学习材料。 + +> 来自 [Yanni Wang](https://github.com/623637646) 自荐 + +### [ScheduledNotificationsViewController](https://github.com/nicephoton/ScheduledNotificationsViewController) + +[@老峰](https://github.com/gesantung):ScheduledNotificationsViewController 是一个本地通知调试工具,接入简单,可以方便的调试本地通知。支持查看待发送,已发送通知列表;支持点击直接发送;支持深色模式。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#150-2021.03.08.md b/Reports/2021/#150-2021.03.08.md new file mode 100644 index 000000000..39ea002e6 --- /dev/null +++ b/Reports/2021/#150-2021.03.08.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #150 | 2021-03-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐢 [Flutter 2 正式发布](https://mp.weixin.qq.com/s/tJe2ScLgKWFTybpBtDl2TA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 2 发布了,这次 Flutter 团队为大家带来了成吨的新功能以及更稳定的性能。通过 Flutter 2,你可以使用相同的代码库为五种操作系统构建原生应用: iOS、Android、Windows、macOS 和 Linux;以及为 Chrome、Firefox、Safari 和 Edge 等浏览器打造 web 体验。Flutter 甚至可以嵌入到汽车、电视和智能家电,为环境计算提供最普适、可移植的体验。小编汇总一些重大的功能,供大家速览: + +- Flutter web 支持,且达到了稳定版 +- Flutter 2 对于桌面、可折叠和嵌入式设备上的支持 +- Dart 健全的空安全稳定版 +- Flutter 多实例支持 +- 新工具: Flutter Fix +- 新 Widget: Autocomplete、ScaffoldMessenger 等 + +这波 Flutter 官方团队简直输出爆炸有木有, 所以小编另推荐几篇 Flutter 2 相关的文章辅助阅读: + +- [无限可能 | Flutter 2 重点更新一览](https://mp.weixin.qq.com/s/EzS3dtpZB_i9p358qqlBpg) +- [Flutter2.0重磅发布!带你一文打尽Flutter Engage](https://mp.weixin.qq.com/s/qy6ZdZmULOgwBEiqT4yGew) +- [What’s New in Flutter 2](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65) +- [【译】Flutter 2.0 正式版发布,全平台 Stable](https://mp.weixin.qq.com/s/rqf4tJR23Yzf3L3J5JY3Qw) + +## 文章 + +### 🌟 🐢 [从预编译的角度理解 Swift 与 Objective-C 及混编机制](https://mp.weixin.qq.com/s/gI9vL1KlHuMzMoWWf2tnIw) + +[@享耳先森](https://github.com/iblacksun):相信不少 iOSer 对于编译器如何将你的源码编译成可执行文件一直都是一知半解,本文从编译器预编译阶段的如何查找头文件开始,深入剖析项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。 + +### 🌟 🐢 [深入剖析 JavaScript 编译器/解释器引擎 QuickJS - 多了解些 JavaScript 语言](https://mp.weixin.qq.com/s/sKP1Svn8r8z_VEIlbUcxTg) + +[@JonyFang](https://github.com/JonyFang):本文着重介绍了 QuickJS。为了更有助于读者理解 QuickJS,作者在详细介绍和剖析 QuickJS 之前,先引入聊了聊 JavaScript 的背景及 QuickJS 作者的背景;在这之后,会针对 js 语言的一些特性来看这些特性在 QuickJS 是如何解释执行和优化的。相信本篇技术文能够帮助读者加深对 js 语言的理解。 + +### 🐕 [Hacking native ARM64 binaries to run on the iOS Simulator](https://bogo.wtf/arm64-to-sim.html) + +[@老驴](https://www.weibo.com/6090610445):现在有很多同学已经用上了 M1 的开发机了,但是在实际开发中会发现依赖的 SDK 并没有更新对 ARM Mac 原生支持,这会导致在模拟器里编译运行 App 的时候,会继续用 Rosetta 2 的方式来运行。本来就介绍了如何在不改动依赖 SDK 的情况下,在 M1 Mac 上以原生模式来跑。 + +### 🐢 [How Apple’s Upcoming Two-Step/Two-Factor Enforcement Could Affect Your fastlane Experience](https://www.joshholtz.com/blog/2021/02/17/apples-2fa-with-fastlane.html) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2021 年二月强制要求所有登录 App Store Connect 开通两步验证或者或者双重认证,这对我们常用的 CI 工具 fastlane 产生了一定的影响,本文主要讲述了这个新规定是如何对 fastlane 产生影响,并给出了一些解决方案和工具。 + +### 🐎 [XCFrameworks caveats](https://kean.blog/post/xcframeworks-caveats) + +[@Damien](https://github.com/ZengyiMa):XCFramework 是 Xcode11 中提出的一个新特性,是由 Xcode 创建的一个可分发的二进制包,它包含了 framework 或 library 的一个或多个变体,因此可以在多个平台上使用。本文作者通过为自己的项目制作 XCFrameworks 过程中所遇到的问题,并且给出对应的解决方案,通过文章,可以让大家在打包 XCFrameworks 少走很多弯路。 + +### 🐕 [在线教室 iOS 端声音问题综合解决方案](https://mp.weixin.qq.com/s/yFNb0zvPtEjHAtED7-jT0w) + +[@AidenRao](https://weibo.com/AidenRao):在线教室场景下,很多功能都需要播放声音,包括课中音视频直播、课后回放、webview 内嵌课件声音(包括音频、视频、音效)、课堂音频、课堂视频、课堂游戏声音、音效声音等。除此之外,教室内还包括很多需要声音录制的功能,包括连麦、跟读、集体发言、聊天语音输入、语音识别等。 + +教室内这些功能存在各种组合,且对 AVAudioSession 的设置要求存在差异,而 AVAudioSession 又是一个单例,如果没有一个统一管理的逻辑,很容易就出现设置混乱的问题。 + +文章通过底层原理的分析与实际项目经验,从代码规范、问题兜底、问题报警梳理出一套可行的解决方案。 + +### 🐕 [函数节流(Throttle)和防抖(Debounce)解析及其iOS实现](https://juejin.cn/post/6933952291142074376) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):对于部分 iOS 开发人员来说,函数节流(Throttle)和防抖((Debounce)这两个专业名词可能会比较陌生。对于连续调用的函数,尤其是触发频率密集、目标函数涉及大量计算时,恰当使用 Throttle 和 Debounce 可以有效提升性能及系统稳定性。作者详细阐述了 Throttle 和 Debounce 的概念及二者间的区别,同时封装开源库 [HWThrottle](https://github.com/HighwayLaw/HWThrottle),该库有以下特点: + +- 未使用任何 runtime API,全部由顶层 API 实现 +- 每个业务场景需要使用者自己定义一个实例对象,自行管理生命周期,旨在把对项目的影响控制在最小范围 +- 区分 Throttle 和 Debounce,提供 Leading 和 Trailing 选项 + +### [Apple M1X benchmark leak](https://www.cpu-monkey.com/en/compare_cpu-apple_m1x-1898-vs-apple_m1-1804) + +[@老驴](https://www.weibo.com/6090610445):在苹果发布 M1 之后,也有很多人在期待 M1X 和 M2。现在 M1X 的跑分已经出现在跑分网站上了,有一部分参数也已经泄露。目前看起来 M1X 是一颗 8 大核心 4 小核心的 12 核心处理器,单核性能和 M1 几乎一致,多核性能因为大核心数量翻番得到翻倍,TDP 保持在 35W。在这样的功耗表现下能和 Intel 11700K 多核性能几乎一致,算是非常夸张的了,要知道就算是 PL1,11700K 也要 125W,PL2 更是高达 251W。所以,M1X 的能耗比可以说是非常夸张了。 + +## 代码 + +### [AR_100Days](https://github.com/satoshi0212/AR_100Days) + +[@老峰](https://github.com/gesantung):WWDC2017 苹果发布了ARKit,基于它就可以实现 AR 比较强大的虚拟增强功能。作者 [Satoshi](https://github.com/satoshi0212) 以 Demo 的形式每天分享一种 AR 效果,目前已经更新 45 个,对 ARKit 感兴趣的读者可以参考学习。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#151-2021.03.15.md b/Reports/2021/#151-2021.03.15.md new file mode 100644 index 000000000..63d6f67e9 --- /dev/null +++ b/Reports/2021/#151-2021.03.15.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #151 | 2021-03-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [内存管理设计精要](https://draveness.me//system-design-memory-management) + +在早些年的 iOS 开发中,当一个 App 的内存使用大于 20m 的时候,就会收到系统的 Memory Warning,所以过去开发应用时候,也会基于此做一些优化。虽然近几年随着新机型性能的不断提升,内存越来越大,早已不再受 20m 的限制, 但是,相比于磁盘,内存依然可以算相对稀缺的资源,如果 APP 对内存使用不当,哪怕运行在最新的机型也有可能瞬间 crash 掉。本文是深入研究系统设计方法的系列文章中的一篇,主要讲内存系统的设计精要,对于想要深入了解内存的概念,并更好地使用或者优化内存的管理,本文值得各位读者花时间详细阅读! + +### 🌟 🐕 [How Uber Deals with Large iOS App Size](https://eng.uber.com/how-uber-deals-with-large-ios-app-size/) + +[@xiaofei86](https://weibo.com/xuyafei86):根据 Uber 的统计,当 App 大小超过 AppStore 流量下载限制时,会导致应用程序安装减少 10%,注册减少 12%,首次预订减少 20%,从而导致收入损失。本文讲述 Uber 如何使用编译优化技术解决此问题,将 Uber App 的代码大小减少 23%,并使代码大小的增长率降低了 2 倍。 + +使用编译选项 [-Osize](https://swift.org/blog/osize/) 可以在模块内执行优化,编译器会通过 Function Outlining 来将重复代码片段重定向到单个实例实现压缩。但此优化对跨模块的代码则无能为力,这也将是本文的重点。 + +Uber 开发了自己的 iOS 构建流水线,新的流水线为每个模块生成 LLVM IR,而不是直接生成机器码。然后将所有 LLVM-IR 文件组合成一个大型 IR 文件并进行优化,再输入 [llc](https://llvm.org/docs/CommandGuide/llc.html) 生成机器码。这确保了在识别候选重复片段时,会利用最大相似性,从而实现跨模块的优化。在模块内部,LLVM 在识别时采用的贪心思想也不能实现最优解,Uber 也通过多轮识别的方式进行了优化。 + +本文的很多方案已经提交到 LLVM。另外,一篇描述 [论文](https://1fykyq3mdn5r21tpna3wkdyi-wpengine.netdna-ssl.com/wp-content/uploads/2021/02/cgo21main-p112-p-dbdebd6-49049-preprint.pdf) 细节的论文也发表在了 "International Symposium on Code Generation and Optimization",感兴趣的同学可以阅读了解。 + +### 🌟 🐢 [【译】SE-0296 Async/await](https://kemchenj.github.io/2021-03-06/) + +[@zvving](https://github.com/zvving):大家翘首以盼的 async/await 特性,终于要在 Swift 5.5 中落地。协程的引入,让我们可以使用同步风格的代码编写异步逻辑,告别回调地狱。 + +[Kemchenj](https://kemchenj.github.io/about) 为我们带来 [SE-0296](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md) 的译文:完整介绍引入 async/await 的动机、设计细节和权衡过程,推荐阅读。 + +### 🐎 [Crash 堆栈竟然无法解析?](https://mp.weixin.qq.com/s/tOdu6GJW-jdWcce1xYgcww) + +[@水水](https://www.xuyanlan.com):本文记录了一个由于对 pod 编译参数调整导致的 Crash 无法解析问题的解决和究因过程。到底是什么原因会导致 Crash 无法解析呢?感兴趣的读者可以一探究竟~ + +### 🐕 [闲鱼 UI 快速变形利器--擎天柱](https://mp.weixin.qq.com/s/QnUVFX6dJzDRac1SsjhSmA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):擎天柱系统是闲鱼的标签运营平台,以此实现闲鱼 UI 样式的快速配置和实验效果的快速验证。解决了各场景标签 UI 的管理分散、需求排期难、缺乏 AB 实验等一系列问题。目前,擎天柱系统已经在闲鱼首页、搜索页的 feeds 场景落地,取得了阶段性效果: + +- 推广场景覆盖和运营使用度,创建更多的个性化实验 +- 增加客户端卡片模版配置模块,完善 UI 体系 +- 打通算法平台,使得优质标签透出的更加智能化、个性化 + +### 🐢 [Molinillo 依赖校验](https://mp.weixin.qq.com/s/Kux4B4piqR43RLwiHRcHUQ) + +[@红纸](https://github.com/nianran):Molinillo 作为 CocoaPods 中核心的依赖解析工具。作者从解决依赖的入口函数 **Resolution::resolve** 入手,剖析了模块依赖 **state** 的变化、有向图的存储、依赖循环和冲突处理。文末,作者还介绍了 Molinillo 利用抽象类来解决不同平台接入的问题。 + +本文为[「CocoaPods 历险记」](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzA5MTM1NTc2Ng==&action=getalbum&album_id=1477103239887142918&scene=173&from_msgid=2458325057&from_itemidx=1&count=3#wechat_redirect)的系列文章的第 7 篇,非常推荐想要了解 CocoaPods 的同学阅读~ + +### 🐕 [如何监控 iOS 的启动耗时](https://mp.weixin.qq.com/s/mxQpsenciOu9Qw9q-VTNyg) + +[@JonyFang](https://github.com/JonyFang):APP 启动耗时的监控和优化一直是我们比较关注的问题,本文通过介绍 Render Loop 和 commit phase 的流程,分享了通过监控 ipc 通信机制监控启动耗时的解决方案。 + +## 代码 + +### [HotReloading](https://github.com/johnno1962/HotReloading) + +[@EyreFree](https://github.com/EyreFree):[InjectionIII](https://github.com/johnno1962/InjectionIII) 允许您在 iOS 模拟器中增量更新函数的实现以及类、结构或枚举的任何方法,而无需重新生成或重新启动应用程序。HotReloading 项目使 InjectionIII 的功能现在可以通过 SPM 直接引入到您的工程当中。无需下载应用程序,只需将此项目添加到您的项目中,并添加一个 `Run Script` 即可。 + +### [Swift for Tensorflow](https://github.com/tensorflow/swift) + +[@莲叔](https://github.com/aaaron7):Google 近期正式宣布 Swift for Tensorflow 项目将会被 archieve,也就是说暂停投入,基本上宣告了该项目的社会性死亡。虽然从项目主推者 chris lattner 在一年前离开 google 的时候就已经注定,当时[这篇帖子](https://news.ycombinator.com/item?id=22195335) 也预言了这一刻。但一年之后的现在,该来的来了后,仍然会让人唏嘘。虽然 S4TF 从诞生之日起就有了一定的关注,同时其背后的 idea 也非常创新地解决了当下以 Python 为主导的 AI 领域的一些痛点问题,虽然这两年从 Github 的 commit 记录上也能看出 S4TF 的团队一直在密集的迭代与优化,甚至从去年开始, GPUImage 的作者 Brad Larson 也加入了该团队并持续的投入到 high level api 以及 showcase model 的优化中,最终也没能改变这项技术没有被 AI 社区所接受。深究其背后的原因,其实太阳底下并无新事。社区对于技术语言、框架的接受度考量的核心指标或许并不是先进性,还包括历史包袱、程序员的偏好习惯、生态等等因素。这也就是 Python2 到 3 为什么这么难,JS 问题很多但依然是全球最流行的编程语言。这些现象背后多多少少都可以窥见端倪。 + +虽然最后生命力只有短短 2 年,但我仍然相信 S4TF 是非常具有冒险精神,非常大胆的一次尝试,其中众多的 compiler-oriented machine learning 技术不会死,会沉淀下来,或许在未来 5-10 年后,能够再次改变世界。 + +### [swift-benchmark](https://github.com/google/swift-benchmark) + +[@老峰](https://github.com/gesantung):[swift-benchmark](https://github.com/google/swift-benchmark) 是一个对代码段进行基准测试的库,有丰富的命令,可以方便的做单元测试性能测试等,类似于 [benchmark](https://github.com/google/benchmark)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#152-2021.03.22.md b/Reports/2021/#152-2021.03.22.md new file mode 100644 index 000000000..c7257ae9a --- /dev/null +++ b/Reports/2021/#152-2021.03.22.md @@ -0,0 +1,122 @@ +# 老司机 iOS 周报 #152 | 2021-03-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 5.5 Release Process](https://forums.swift.org/t/swift-5-5-release-process/45644) + +[@享耳先森](https://github.com/iblacksun):Swift 社区释出了 Swift 5.5 的发布计划,这意味着随 WWDC21 发布的将是 5.5 而不是 6.0,不过好消息是大家期待已久的 [async/await](https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md) 将随 5.5 一起发布。 + +## 新手推荐 + +### [Swift LibHunt - Discover popular and related Swift open-source projects](https://www.libhunt.com/l/swift) + +[@EyreFree](https://github.com/EyreFree):LibHunt 是一个跟踪开源项目和软件库的网站,在这里你可以找到最受欢迎的开源库和他们的同类型工具,提供了多种统计口径和筛选方式,除了 Swift 外也支持其他大部分主流编程语言。 + +> [@Parsifal](https://github.com/ParsifalC):前阵子不时地看到读者群或者公众号后台都有朋友在问想看一些优秀的开源库,希望这个网站能帮你筛选到合适的。 + +## 文章 + +### 🐕 [Swift 5.4 新特性](https://mp.weixin.qq.com/s/p6oeWwcgJJFqP2NgYaJXYw) + +[@四娘](https://kemchenj.github.io):之前我们介绍过 Hacking Swift 写的 [What's New in Swift 5.4](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2021/%23148-2021.02.08.md#-whats-new-in-swift-54),最近知识小集翻译了中文版。 + +按照往年的时间安排,包含 Swift 5.4 的 Xcode 12.5 大概会在这个月的月底发布,之前还没看过的朋友可以趁这个机会提前了解一下 Swift 5.4 的新特性。 + +### 🐎 [从底层分析一下存在跨进程通信问题的 NSUserDefaults 还能用吗](https://mp.weixin.qq.com/s/Y1AHFN1kJ9kCjXdFOnUviA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):NSUserDefaults 是 iOS 开发者常用的持久化工具,通常用于存储少量的数据。经过文中的测试,发现 NSUserDefaults 有以下 3 个特性: +- 多线程安全 +- 内存级别缓存 +- 写操作会触发 xpc 通信 + +根据这三个特性,得出适合选择 NSUserDefaults 作为数据持久化的场景如下: +- 少量数据存储 +- 偶尔修改 +- 多线程安全 + +### 🌟 🐢 [clang 源码导读系列 6 篇](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzAxMzk0OTg5MQ==&action=getalbum&album_id=1773549418412064769&scene=173&from_msgid=2247485042&from_itemidx=2&count=3#wechat_redirect) + +[@JonyFang](https://github.com/JonyFang):clang 源码导读系列,共分为 6 篇。依次简介下每篇的概要内容: + +1. clang 源码导读(1)- clang 入门 + - 梳理了不同场景下 clang 的含义; + - 引出三个基础知识点:诊断、`llvm:Triple`、`ToolChain`; +2. clang 源码导读(2): clang driver 流程简介 + - 结合实例,介绍 `clang driver` 流程; +3. clang 源码导读(3): clang driver 参数解析 + - 通过分析 `DriverOptTable` 的生成机制分析 `Driver::ParseArgStrings` 内部流程; + - 对 `clang driver` 的参数解析流程做了简析; +4. clang 源码导读(4): clang driver 构建 Actions + - 通过对 `BuildUniversalActions` 方法的源码分析,介绍了 clang driver 构建 Actions 的流程; +5. clang 源码导读(5): clang driver 构建 Jobs + - 对 `clang driver` 的构建 Jobs 流程进行详细的讲解,如介绍了 `clang drive` 是如何通过合并多个 JobAction 来避免反复的硬盘读写操作和文件生成/解析操作; +6. clang 源码导读(6): clang driver 执行命令 + - 本篇通过分析源码的方式,对 `clang driver` 的执行命令涉及的流程进行完整的分析; + +`clang driver` 这一层虽未涉及到真正的编译,但作为整个编译过程的驱动,以 pipline 形式抽象了各个环节的输入输出,解决了参数解析翻译、任务封装及执行等过程,满足了我们各种各样的使用需求。**clang 源码导读系列** 会带着读者了解 `clang driver`,对后续了解编译的全过程会有所帮助。 + +### 🐢 [Flutter 正在被悄悄放弃吗?](https://mp.weixin.qq.com/s/hDjbMSPNz_D5JeEBMEJZCA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 自诞生之日起,从来都稳坐风口浪尖,关注与争议一直伴随其身。近几年,诸多互联网大厂投入实践,尝到了 Flutter 带来的甜头,但随着深入落地,Flutter 的性能问题为人诟病。这是一篇访谈文,一起来听听咸鱼负责人宗心和百度贴吧端负责人的看法,我想读者会有新的见解. + + +### 🐕 [iOS 稳定性问题治理:卡死崩溃监控原理及最佳实践](https://mp.weixin.qq.com/s/cEfIZGtUojKKbhIfUyhTMw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了字节跳动 APM 中台团队自研的一套专门用于定位生产环境中的卡死崩溃的解决方案。文章首先介绍了当前 iOS 卡死崩溃监控的痛点,然后图文并茂地介绍该方案的思路和具体实现: + +- 卡顿监控原理 +- 如何判定卡顿为一次卡死 +- 如何确定卡死时间的阈值 +- 如何检测到用户一次卡死的时间 +- 如何解决主线程调用栈可能有误报的问题 + +最后还提供了通过本方案上线后总结出来的一些典型问题和最佳实践。 + +### 🐎 [Be careful with Obj-C bridging in Swift?](https://swiftrocks.com/be-careful-with-objc-bridging-in-swift) + +[@Damien](https://github.com/ZengyiMa):由于 Apple 平台历史问题的存在,Swift 与 Objective-C 进行桥接一直是 Swift 开发的重要组成部分,今天要说的是我们常用的 as 转换符在 Swift 使用中需要注意的地方,也许在不经意中会造成一些隐藏的异常崩溃,来一起探索 Swift 于 Objective-C 转换中发生的事情吧。 + +## 工具 + +### 🌟 [github1s](https://github.com/conwnet/github1s) + +[@Parsifal](https://github.com/ParsifalC):这个工具基于 VSCode 的浏览器版本,使得我们可以只用一个浏览器便可以方便地浏览和编码任意 GitHub Repo,你只需要将仓库链接的 `GitHub` 域名改为 `GitHub1s` 即可立即体验。比如 `https://github.com/microsoft/vscode` 变为 `https://github1s.com/microsoft/vscode`。 + +### [FVM 愉快的切换 Flutter 版本,强烈推荐!](https://juejin.cn/post/6919469825547272205) + +[@邦Ben](https://weibo.com/linwenbang):Flutter SDK 的安装很简单,下载下来解压就基本可用了。但是当你想进行一些不同版本的调研,或者 beta 版本的尝鲜,或者多个项目之间来回切换,那你就需要一个 SDK 管理工具了,FVM 则满足这个需求。和 NVM, RVM 一样的作用,切换 Flutter SDK。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#153-2021.03.29.md b/Reports/2021/#153-2021.03.29.md new file mode 100644 index 000000000..e38ddf075 --- /dev/null +++ b/Reports/2021/#153-2021.03.29.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #153 | 2021-03-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [IGListKit 源码解析系列 5 篇](https://dirtmelon.github.io/posts/iglistkit-first/) + +[@JonyFang](https://github.com/JonyFang):IGListKit 源码解析系列,共分为 5 篇。依次简介下每篇的概要内容: + +1. IGListKit - 开篇 + - 对比简介 UICollectionView/UITableView; + - 引出 IGListKit 的主要特征; +2. IGListKit 的基石 - IGListSectionController + - 介绍 `IGListSectionController` 是如何和数据层进行绑定的; + - 介绍 IGListKit 是如何通过 `IGListSectionController` 来进行扩展以支持多种特性; +3. IGListKit 的管理者 - IGListAdapter + - `IGListAdapter` 作为 IGListKit 的适配器,对外提供相关的刷新接口及一些通用方法,对内负责管理 `IGListSectionController` 和 `UICollectionView`; +4. IGListKit 的数据处理 - Updater & Diff + - 介绍 `IGListAdapterUpdater` 提供的批量&全部刷新机制的原理; + - 描述 `IGListDiff` 的核心实现; +5. IGListKit - 完结篇 + - 介绍 `IGListCollectionViewLayout` 的实现; + - 总结了 IGListKit 的开发历程,及库作者的一些经验总结; + +### 🌟 🐕 [Flutter 2.0 下混合开发浅析](https://mp.weixin.qq.com/s/cX-PZZ1FqQm582JwVNm8Zg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 的混合开发大多借助 flutter_boost 等三方库来完成, Flutter 2.0 给了我们更多的选择: FlutterEngineGroup。本文详细讲解了 FlutterEngineGroup 下的混合开发,强烈推荐。 + +### 🐕 [Flutter Web 在美团外卖的实践](https://mp.weixin.qq.com/s/GjFC5_85pIk9EbKPJXZsXg) + +[@极速男孩](https://github.com/ztlyyznf001):Google 现在已经将 Flutter Web 合入了 master 和 stable 分支,并在 Flutter 2.0 做了进一步优化。本文主要介绍了美团外卖在 Flutter Web 的探索,在 Flutter Web 基建和 Flutter Web 中的性能优化 , CI/CD 的方面的尝试。 + +### 🐎 [全局开启 iOS / mac 的 WebView 调试](https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w) + +[@AidenRao](https://weibo.com/AidenRao):Safari 有一个内置的前端调试器,可以调试 MobileSafari 和 Xcode 编译运行的 APP。通过 hook webinspectord 服务的 SecTaskCopyValueForEntitlement 函数,使我们可以在 mac 和 iOS 上,调试系统内置的 App 或者 App Store 下载的应用里的 WebView。对于分析客户端的 XSS、JavaScript bridge 相关的安全漏洞非常实用。 + +### 🐢 [如何编写高性能的 Swift 代码](https://github.com/apple/swift/blob/main/docs/OptimizationTips.rst) + +[@四娘](https://kemchenj.github.io):Swift 官方仓库里的一份性能优化指南,从编译器层面讲述如何编写高性能的代码,让我们了解什么样的代码可以让编译器更好地进行优化,什么样的代码会在 Swift 里产生额外的性能消耗,在哪些情况下我们可以通过改写这些代码来减少这些消耗。 + +### 🚧 🐕 [Frameworks: embed or not embed that's the question](https://holyswift.app/frameworks-embed-or-not-embed-thats-the-question) + +[@红纸](https://github.com/nianran):在工程中配置 Framework 时,经常能够看到一个选项 Embed or not。本文作者将静态库和动态库配合这两种选项,4 种实验结果分别做了对比如下。 + +- 动态库 + Embed:动态库将在运行时链接,并且会有独立的 Framework 文件夹,独立于 App 的二进制文件 +- 动态库 + Not Embed:App 会崩溃 +- 静态库 + Embed:代码将在编译时进行链接,会有独立的 Framework 文件夹 +- 静态库 + Not Embed:代码将在编译时进行链接,所有代码将会包含在 App 的二进制文件当中 + +此外,文末有一个 4 种集成方式包大小差异的简单对比,感兴趣的读者可以阅读一番。 + +### 🐎 [对于移动开发,人工智能的到来意味着什么?](https://mp.weixin.qq.com/s/Nt16lD-0KCpeC5ZEwxziQw) + +[@莲叔](https://github.com/aaaron7):端智能或许已经并不是移动开发领域的一个新鲜话题,各个公司和业务都开始逐步尝试并取得了一定的效果。如果你是一位对人工智能有兴趣但之前完全没有了解的移动开发,这篇文章可以指引你快速了解一个大概的全貌。文章首先从比较符合直觉的视角介绍了人工智能是什么,解决了什么问题,另外还给出了在移动开发目前的主流应用,是一份不错的入门介绍。 + +### 🐎 [iOS 基于 PGO 优化启动时间](https://juejin.cn/post/6942365945990447111) + +[@Leo](https://github.com/leomobiledeveloper):冷启动时候 Page In 会占据相当一部分耗时,Profile Guided Optimization (PGO)是一种简单易用的可以优化 Page In 数量,进而提高启动速度的技术,本文介绍了如何使用 PGO ,推荐阅读。 + +### 🐕 [SwiftUI 中的 Text 插值和本地化](https://onevcat.com/2021/03/swiftui-text-1/) +[@zvving](https://github.com/zvving):SwiftUI 致力于提供简洁灵活的视图描述方式。拿最『简单』的例子`Text("I am \(someUser.name)")` 来说,你是否好奇:为 Text 设定内容的同时,如何支持本地化,以及各种更复杂的业务场景? +喵神也有同样的疑问,并带来抽丝剥茧两篇文章:详细拆解 SwiftUI 中本地化&文本差值的实现方式。不妨细读,帮助你写出知其所以然的 Swift 代码。 +## 代码 + +### [isowords](https://github.com/pointfreeco/isowords) + +[@老峰](https://github.com/gesantung):isowords 是一款英语单词字谜游戏,作者客户端采用 SwiftUI、SceneKit 实现了模块化架构,服务端也以 SwiftNIO 实现,并且全部开源。对 SwiftUI、SceneKit、Swift for Server 感兴趣的同学欢迎学习参考。 + +## 书 + +### 🌟 [iOS Crash Dump Analysis, Second Edition](https://github.com/faisalmemon/ios-crash-dump-analysis-book) + +[@Parsifal](https://github.com/ParsifalC):这是一本对于理解 iOS Crash 机制非常有帮助的书,中英文版本均有。从什么是崩溃、崩溃如何发生、各种崩溃类型、可采用的工具、崩溃日志解读等等非常系统地为我们阐述了崩溃分析,填补了当崩溃发生时应用程序开发人员与开发平台之间出现的空白。本书讨论了涵盖 iOS、macOS、watchOS 以及 tvOS 等苹果主流软件系统,也包括了 OC 和 Swift 等主流开发语言。非常推荐反复阅读。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#154-2021.04.06.md b/Reports/2021/#154-2021.04.06.md new file mode 100644 index 000000000..545a7eed4 --- /dev/null +++ b/Reports/2021/#154-2021.04.06.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #154 | 2021-04-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [WWDC21 再度采用完全在线形式](https://developer.apple.com/wwdc21/) + +[@Parsifal](https://github.com/ParsifalC):第三十二届全球开发者大会 WWDC 将于 6 月 7 日至 11 日举行,并再度采用完全在线形式。届时将有 iOS 15、iPadOS 15、watchOS 8、macOS 11、tvOS 15 等系统将正式推出。 + +## 文章 + +### 🌟 🐕 [Flutter Boost3.0 初探](https://mp.weixin.qq.com/s/49h8FVPhnJSHo2brR0K9zw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):flutter_boost 几乎已经成为混合开发下的标配三方组件,由闲鱼出品,本次 flutter_boost 进行了 3.0 版本的升级更新,解决了很多诟病已久的问题,比如:需要频繁更新跟进官方版本,AndroidX 和 Support 在不同分支,iOS 和 Android 接口不对齐等问题. + +### 🌟 🐕 [Concurrency Done Right](https://kean.blog/post/concurrency) + +[@四娘](https://kemchenj.github.io):Concurrency 相关的功能提上日程之后,社区里关于如何编写并发代码的讨论也开始变多,在这篇文章里 [Nuke](https://github.com/kean/Nuke) 的作者 Kean 就介绍了他在 Nuke 里做的优化,他分析了不同场景下最佳的方案,包括 lock,atomic,actor 等等,推荐阅读。 + +另外 [NetNewWire](https://netnewswire.com) 的作者也写了一篇 [How NetNewsWire Handles Threading](https://inessential.com/2021/03/20/how_netnewswire_handles_threading)。 + +### 🐕 [SwiftUI 中的 Text 插值和本地化](https://onevcat.com/2021/03/swiftui-text-1/) + +[@zvving](https://github.com/zvving):SwiftUI 致力于提供简洁灵活的视图描述方式。拿最『简单』的例子`Text("I am \(someUser.name)")` 来说,你是否好奇:为 Text 设定内容的同时,如何支持本地化,以及各种更复杂的业务场景? +喵神也有同样的疑问,并带来抽丝剥茧两篇文章:详细拆解 SwiftUI 中本地化&文本差值的实现方式。不妨细读,帮助你写出知其所以然的 Swift 代码。 + +### 🐕 [听说你想写个渲染引擎](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,使用 Swift 实现引擎。根据渲染引擎的工作流程,分为 “HTML 解析”、“CSS 解析”、“生成样式树”、“生成布局树”、“绘制” 5 篇内容。目前已更新“[前言](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd)”和“[HTML 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=2&sn=986f6eb0a7bece1d4e70253c3c9b7020&chksm=cf558945f8220053a6f15f658bcc2e442ee238c5639837076a85b2ceb6f7f6d104e4fbebc464&cur_album_id=1717440219009892354&scene=189#rd)” 2 篇,感兴趣的读者可以持续关注。 + +### 🐕 [How I Created a DSL for Diffable Section Snapshot using Result Builders](https://swiftsenpai.com/swift/section-snapshot-builder/) + +[@Damien](https://github.com/ZengyiMa):在日常开发中,我们在使用 UITableView 和 UICollectionView 的时候会写很多的模版代码,能否提高我们的开发效率呢?本文提供了一个新的思路,通过自定义 DSL 的方式来构建我们的 UITableView 和 UICollectionView 的页面结构,使得我们的开发效率可以得到大幅的提高,想了解实现思路?一起来看文章内容吧! + +### 🐕 [Xcode-Tips](https://github.com/Xcode-Tips/xcode-tips.github.io) + +[@老峰](https://github.com/gesantung):Apple 开发者通常通过 Twitter 或微博等在社区中分享 Xcode 使用技巧,该项目的目标是将所有这些 Xcode 技巧放在一个地方,并使任何人都可以轻松获取或做出贡献。这些使用技巧包括如下几个方面: +- Breakpoints:使用断点作为书签、快速切换断点、断点播放声音、使用 LLDB 表达式自动执行用户操作 +- Build Times:签名提速、复制 framework headers +- Code:生成类初始化、选中整个代码块 +- Crashes:查看 .crash 文件 +- Interface Builder:Xcode Interface 技巧 +- Keyboard Shortcuts:跳到指定一行、格式化代码、增加注释等 + +还有更多内容可以阅读原文,本项目持续更新,感兴趣的读者可以持续关注。 + +### 🐕 [Unsafe memory pointers in Swift](https://theswiftdev.com/unsafe-memory-pointers-in-swift/) + +[@zvving](https://github.com/zvving):内存安全是 Swift 的特性之一,它意味着开发者只需关注内存所有者关系而不必在意具体的内存地址和存储细节。 + +在另一些场景,比如 Swift 与 C 互操作,则可以通过一系列 Unsafe API,达成对特定内存的操作能力。就像其名称一样,它不安全,稍有不慎就会崩溃,但也带来更多的底层能力:读写类型化指针内容,借助 Memory Layout 操作原始指针,以及绕过 ARC 手动管理内存等。通过这篇文章,你可以对 Unsafe API 有整体的认知。 + +## 代码 + +### [swiftui-animation-library](https://github.com/amosgyamfi/swiftui-animation-library) + +[@Damien](https://github.com/ZengyiMa):swiftui-animation-library 是一款 SwiftUI 动画库,包括加载/进度,循环,开关,退出,淡入淡出,旋转和背景动画,可以让你可以在下一个 iOS 应用程序或项目中直接实现这些动画。该库还包含大量弹性动画示例,例如惯性弹跳,摇动,旋转,果冻,橡皮筋等。 + +### [FuzzyFind](https://github.com/truizlop/FuzzyFind) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):FuzzyFind 是一个 Swift 软件包,它使用 Smith-Waterman 算法的修改版来执行模糊搜索。该软件包包括两个核心功能:bestMatch 和 fuzzyFind,使用 bestMatch,您可以在单个字符串中找到查询的最佳对齐方式,使用 fuzzyFind,您可以对多个输入运行多个查询,并获得与所有提供的查询匹配的输入的所有对齐方式。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#155-2021.04.12.md b/Reports/2021/#155-2021.04.12.md new file mode 100644 index 000000000..9758e206e --- /dev/null +++ b/Reports/2021/#155-2021.04.12.md @@ -0,0 +1,80 @@ +# 老司机 iOS 周报 #155 | 2021-04-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [Introducing Swift Collections](https://swift.org/blog/swift-collections/) + +[@EyreFree](https://github.com/EyreFree):上周,Swift 官方发布了一个新的开源库 [Swift Collections](https://github.com/apple/swift-collections),它专注于扩展可用的 Swift 数据结构集。我们都知道目前 Swift 标准库实现了三种最基本的通用数据结构:数组、集合和字典,但很多时候为了更高效地解决问题,开发者们往往需要借助一些其他的数据结构。现在官方已经注意到了这一点,通过提供 `Collections` 库来让开发者们能够花费尽可能少的精力来编写更快、更可靠的程序,它的初始版本包含了三种最常见的数据结构:双端队列 Deque、有序集合 OrderedSet 和有序字典 OrderedDictionary。同时官方也给出了贡献代码的标准,感兴趣的同学赶紧来看看。 + +### 🌟 🐕 [iOS 恢复调用栈(适配 iOS 14)](https://iosre.com/t/ios-ios14/19332) + +[@Leo](https://github.com/leomobiledeveloper):逆向的时候,如果调用栈是符号化的能大幅提高效率。作者详细的介绍了在 iOS 14 上如何一步步获取符号信息,最后对 Mach-O Patch 来恢复符号。除了对逆向很有用,文章里涉及到的底层知识也非常推荐阅读。 + +### 🌟 🐕 [clang 源码导读(8):词法分析和预处理指令](https://mp.weixin.qq.com/s/zzDS0mnNSyuRwpdcUR6obg) + +[@JonyFang](https://github.com/JonyFang):我们知道 `clangLex` 主要负责**词法分析**和**预处理**,用于处理宏、令牌和 pragma 构造。在本文中,作者通过实际的例子对 `clangLex` 的**词法分析**和**预处理指令**相关的流程进行了梳理和总结。为了帮助读者更直观的理解 `clangLex`,作者一并提供了一份对应的预处理流程图。 + +### 🌟 🐢 [看不懂学不会没有用的计算几何](https://juejin.cn/collection/6913090306690777102) + +[@Parsifal](https://github.com/ParsifalC):做图形视觉相关开发的朋友一定离不开计算几何,这个系列是用 Swift 为我们讲解常用的计算几何场景,图文并茂,对初涉视觉方向的同学会有很大帮助。 + +> 由 [XanderXu](https://github.com/XanderXu) 自荐,另外他编写着同名的小专栏 [ARKit 与计算几何](https://xiaozhuanlan.com/computationalgeometry),所有内容均会在小专栏上首发。 + +### 🐕 [从 Objective-C 和 Swift 看字典的性能优化(1)](https://mp.weixin.qq.com/s?__biz=MzAxMzk0OTg5MQ==&mid=2247485326&idx=1&sn=5b4dc0528da22b90a701fb249c2b4f44&chksm=9b9b8922acec00341388a8a686c3bb83475f1de338925b8c35957b7fc45ba38a3d32051d2dd1&scene=178&cur_album_id=1742555951460597762#rd) + +[@AidenRao](https://weibo.com/AidenRao):本系列文章会通过分析系统库汇编的方式,研究 Dictionary 底层相关的知识。 + +本文主要分享了 NSDictionary 的两个子类:__NSPlaceholderDictionary(占位的类型,通常只出现在崩溃日志中) 和 __NSDictionaryI (存有多个键值对的不可变字典) 的详细构造过程。 + +### 🐎 [Exploring some of the lesser-known, built-in Formatter types](https://www.swiftbysundell.com/articles/exploring-some-of-the-lesser-known-formatter-types/) + +[@享耳先森](https://github.com/iblacksun):开发者们对常用的 `NumberFormatter` 和 `DateFormatter` 可能比较熟悉,本文介绍了 Foundation 库里其他好用的 Formatter,如 `PersonNameComponentsFormatter` `CNPostalAddressFormatter` `RelativeDateTimeFormatter` 等。 + +### 🐎 [DWARF文件初探——提取轻量符号表](https://mp.weixin.qq.com/s/s8iwQLNtla5nxF_Tmj2wJg) + +[@红纸](https://github.com/nianran):本文作者从实践出发,简单剖析了 **DWARF** 文件的文件组成。通过 **dwarfdump --debug-info** 命令可以获取到函数的文件名、函数名、函数起始地址、函数终止地址,再利用 **dwarfdump --debug-line** 获取到行信息后,可以查看当前这个行的起始地址位于同文件下那个函数的指令区间内,即可得知函数名。 + +> 推荐人:[pilaf-king](https://github.com/pilaf-king) + +## 代码 + +### [EmbeddedScrollView](https://github.com/623637646/EmbeddedScrollView) + +[@老峰](https://github.com/gesantung):开发中会有多 ScrollView 嵌套滚动这样的需求,作者将这一实现进行了封装,提供了简单易用的 API, 一行代码解决竖直嵌套滚动问题,手势无冲突,动画完美衔接,有类似需求的同学可以借鉴参考。 + +> 推荐人:[623637646](https://github.com/623637646) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#156-2021.04.19.md b/Reports/2021/#156-2021.04.19.md new file mode 100644 index 000000000..12aa60433 --- /dev/null +++ b/Reports/2021/#156-2021.04.19.md @@ -0,0 +1,111 @@ +# 老司机 iOS 周报 #156 | 2021-04-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [为 AppTrackingTransparency 做好准备](https://developer.apple.com/cn/news/?id=8h0btjq7) + +[@Parsifal](https://github.com/ParsifalC):[iOS 14.5](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-14_5-beta-release-notes) 已经公开测试很长一段时间了,现在到了第八个 Beta 版本。根据目前各方面信息来看,iOS 14.5 很可能在 4 月份正式发布。iOS 14 开始苹果便在和开发者强调新的隐私跟踪策略管理方式,而这个措施即将随着 iOS 14.5 的发布正式实施。新的 ATT 以及 SKAdNetwork 2.0 推出,还将伴随着 [《App Store 审核指南》的准则 5.1.2 (i)](https://developer.apple.com/cn/app-store/review/guidelines/#5.1.2),目前已经有不少 App 被这个原因拒绝,需尽早自查和更新相关第三方 SDK 进行适配。 + +> 另推荐一篇关于 ATT 和 SDAdNetwork 的文章:[全面解读 iOS 14 ATT 和 SKAdNetwork](http://www.woshipm.com/pd/4150041.html) + +## 文章 + +### 🌟 🐕 [Wakeup in XNU](https://mp.weixin.qq.com/s/8OBAmyCLa6_eFYqIJgoCQw) + +[@Leo](https://github.com/leomobiledeveloper):APP 异常退出的原因有很多种,大家比较熟悉的是 Crash 和 OOM,事实上 CPU Wakeup 超过限制也会触发系统强杀。本文从内核源码出发,剖析了 Wakeup 背后的原理,也给出了一些典型的会触发这种强杀的场景。文章研究深入,逻辑清晰,推荐对功耗和稳定性感兴趣的同学阅读。 + +### 🌟 🐕 [哈啰出行 iOS App 首屏秒开优化](https://mp.weixin.qq.com/s/5Ez2BrsyBgQ8aHZqlYtAjg) + +[@JonyFang](https://github.com/JonyFang):产品高频迭代在快速解决业务发展的同时也带来了大量的技术债堆积,如果没有良好的规范和监控流程会使项目在稳定和体验上存在较多的隐患和挑战。正如启动阶段的启动项和业务逻辑堆积,本文介绍了哈啰出行 iOS App 首屏秒开的优化路径: + +1. 数据收集:收集启动阶段、首页加载、各业务模块加载性能数据; +2. 问题分析:确认并定位分析目前各阶段加载存在或依赖的问题; +3. 优化解决:启动项问题、首页逻辑处理问题、业务模块问题解决; +4. 持续监控:持续优化 & 监控首页的加载渲染和模块性能问题 & 可视化数据; + +### 🌟 🐕 [干货 | 减少 50% 空间,携程机票 React Native Bundle 分析与优化](https://mp.weixin.qq.com/s/aajdqmpCLKvGaokL4Qp1tg) + +[@looping](https://github.com/looping):本文记录了作者从 JavaScript 层面对 React Native 的业务包进行分析与优化的过程,对常用的解决方案和优化步骤进行了详细的总结,还夹带了携程内部的 CRN bundle 分析平台介绍,为高效且能持续性解决问题提供了借鉴思路,是一篇不可多得的工程技术实践好文。 + +### 🐕 [深度解读便利蜂 React Native 多版本共存的平滑升级实践](https://mp.weixin.qq.com/s/q296ppm6iB9cou5ZgBytrg) + +[@Damien](https://github.com/ZengyiMa):随着前端技术生态的演进,React Hook、Fast Refresh 等技术、工具不断地迭代涌现,版本升级为业务提效赋能的同时,伴随的 breaking change(重要改动)、行为变更也带来了更多的风险和成本。对于便利蜂而言,面对迭代不频繁的项目,升级的成本则远大于升级的收益。具体实现方式是通过修改包名、动态库,可以把多个版本的 React Native 放置同一个 App 中,同时为了避免代码冗余,优化包大小,精简掉了老版本大部分代码,并实现了自定义 Module、Component 的跨版本支持。在 React Native 中升级带来的破坏性问题上给了我们一个新的思路。 + +### 🐕 [极致首帧播放方案 - 零首帧解决方案](https://mp.weixin.qq.com/s/IGA3caeXMB-upTFiV8MuYg) + +[@anotheren](https://github.com/anotheren):视频播放,特别是短视频播放领域,对于首帧的展现,以及后续播放流畅度有着极高的要求。本文来自字节跳动团队,主要按照首帧的各个阶段分别介绍了对应的优化方案,也简单介绍了预加载和预渲染这两个优化首帧的利器,在文章最后针对长视频以及历史进度起播这两种场景,介绍了对应的优化手段。当然不同团队会面临不同的问题,如果你也需要特定的优化,不妨来找找思路。 + +### 🐢 [听说你想写个渲染引擎(css 解析 + 样式树)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=1&sn=693e48ede7d796e14620fbbeaee56beb&chksm=cf558945f822005377aab06e3d42ffbf7d79f6a818b319a953e7f44ed7d4d79b5dffb66c8019&token=911515468&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,使用 Swift 实现引擎,代码开源,可以在 [Github](https://github.com/silan-liu/tiny-web-render-engine-swift) 查看。在往期周报中我们推荐了 [HTML 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485069&idx=2&sn=986f6eb0a7bece1d4e70253c3c9b7020&chksm=cf558945f8220053a6f15f658bcc2e442ee238c5639837076a85b2ceb6f7f6d104e4fbebc464&cur_album_id=1717440219009892354&scene=189#rd),本期作者更新了 [CSS 解析](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485200&idx=1&sn=6f5eca77d57bac8909b0c813d1c2c414&chksm=cf5588d8f82201ce7b85fa35aea9b58dc953c8d85167fa1f589e9d7fd0e7ac1c90d1e21fd565&token=1141333798&lang=zh_CN#rd) 和 [样式树](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485200&idx=2&sn=3c7bc2b702fd01c9215bad2d26786078&chksm=cf5588d8f82201ce64e1729d490d2ef31dda69c1d23656c386184e7399941b0bc28855b9588c&token=1141333798&lang=zh_CN#rd) 2 篇新内容。感兴趣的读者可以持续关注,跟随作者一起学习。 + +### 🐢 [抖音 iOS 工程架构演进](https://mp.weixin.qq.com/s/HHH5_IEbsR8iSmXSIdeutw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):从 16 年至今,抖音实现了从零到六亿的日活增长,快速的业务发展对技术支撑提出了更高的要求。本文讲述了抖音 iOS App 工程架构在不同的阶段对组件化方案的持续改进: + +- 原始工程架构 + - 单体架构 + Cocoapods:业务代码、工程配置、资源文件全部放在一个大业务仓库,由 Podfile 文件描述第三方仓库的依赖版本 + +- 分离壳工程后架构 + - 壳工程 + 业务仓 + 依赖仓:分离壳工程,工程配置、部分系统资源、工程主入口被拆分到主宿主壳工程,Podfile 拆分出版本依赖管理文件 Podfile.seer,由依赖管理平台进行各个版本的容器化管理 + +- 单仓多组件架构 + - 壳工程 + 单仓多组件 + 依赖仓:采用单仓多组件后,每个业务线仓库支持添加 podspec 增加组件,实现更小粒度的二进制依赖。业务线仓库内划分业务实现层、业务接口层、服务层和基础层 + +- Example 子壳工程架构 + - 壳工程 + AWELaunchKit + 单仓多组件 + 依赖仓:每个业务仓从宿主同步工程配置构建子壳工程。增加 AWELaunchKit 为子壳工程提供运行时的基础能力。通过服务层提供业务间运行时共享的服务能力,满足代码复用和更小二进制依赖 + +在架构演进过程中,还会遇到二进制污染、编译优化、主干分支稳定性、业务层的依赖耦合等问题,这必然是一个长期的、需要持续探索的系统性工程。 + +### 🐎 [软件幻灭(译)](https://tonsky.me/blog/disenchantment/zh/) + +[@老驴](https://www.weibo.com/6090610445):本文是作者对现在软件行业的一篇吐槽文。作者认为软件行业和 20 年前相比,更成熟,却也更复杂,更累赘。软件体积动辄是当年的 10 倍以上,性能却没有很大的提升。各种协议也越来越复杂。大家都只在乎完成产品,越来越少的人在乎软件本身的质量了。虽然我不完全同意作者的观点,但是也不得不承认这是事实,这也是一个行业逐渐成熟以后的必然。我们有能力改变么?也许有,但成功的可能性也并不高。 + +### 🐢 [Swift 的一次函数式之旅](https://mp.weixin.qq.com/s/yiF0NwXffrkunGOieWbIRA) + +[@莲叔](https://github.com/aaaron7):Swift 语言从诞生之日起就因为从纯函数语言中吸收了非常多的函数式特性而成为函数式编程爱好者们的津津乐道的热门语言之一。自定义操作符,函数是一等公民,简洁的闭包语法以及 maybe monad 的具体实现:optional,这些特性都带来了相当多的想象空间。一度在 15-17 年掀起了一股热潮。 + +18 年之后热度逐步减少,原因很多,其中比较关键的原因就是在实践中存在的理解成本高、调用栈复杂等问题一直没有得到很好的解决,所以也就一直未成为 iOS 开发的主流模式。不流行不妨碍这是一门非常有趣的学科,毕竟函数式编程的鼻祖 Haskell 社区就有一句谚语:Avoid success at all cost,不计代价的避免成功。指的是不为了流行去做事,而是做本来就正确的事情。所以小编也推荐大家可以适当关注函数式编程,享受抽象与形式的美带来的愉悦感。 + +这篇文章介绍了函数式编程的入门知识,同时也浅显易懂的讲述了通过函数组合提升代码可读性和 callback hell 的经典案例,适合感兴趣的同学们阅读。 + +## 工具 + +### [Nuke Docs](https://kean.blog/post/nuke-docs) + +[@老驴](https://www.weibo.com/6090610445):不论是开源项目还是公司内部项目中都有很重要的一环:写一份规范易读的文档。文档不仅仅是为使用者提供方便,也为自己之后可以更好地理解,重构,改进服务。Nuke 的作者就用 Blog 讲述了对于 Nuke 文档,是怎么做的选择,最后又是怎么优化的。文章里没有什么很详细的技术细节,但是思路值得学习。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#157-2021.04.26.md b/Reports/2021/#157-2021.04.26.md new file mode 100644 index 000000000..cf867a069 --- /dev/null +++ b/Reports/2021/#157-2021.04.26.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #157 | 2021-04-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 公告 + +[@Parsifal](https://github.com/ParsifalC):本期是节前最后一期,5.1 期间周报停更,我们 5.10 再见! + +## 新闻 + +### [使用 Xcode 12 和 iOS 14 SDK 提交更新](https://developer.apple.com/cn/news/?id=ib31uj1j) + +[@Parsifal](https://github.com/ParsifalC):自 2021 年 4 月 26 日起,所有提交至 App Store 的 iPhone 和 iPad app 都必须使用 Xcode 12 和 iOS 14 SDK 或更高版本来构建。另外,这两天有部分读者表示 iTunes Connect 网站使用异常,其实苹果在 WWDC 2018 里就宣布启用 App Store Connect 服务了,**我们现在应该使用 https://appstoreconnect.apple.com/ 来进行管理。** + +### [WWDC 2021 Swift Student Challenge Submissions](https://wwdc.github.io/2021/) + +[@Damien](https://github.com/ZengyiMa):一年一度的 Swift 学生挑战赛开始啦,快来看看吧。胜者将会获得特别的 WWDC21 外套、定制别针套装和为期一年的苹果开发者计划会员资格。请踊跃参加吧。 + +## 文章 + +### 🌟 🐕 [Swift 2021 生态调研报告](https://mp.weixin.qq.com/s/5SXAozM2c6Ivyzl7B9IfQQ) + +[@JonyFang](https://github.com/JonyFang):一份 Swift 2021 生态调研的报告。虽然看起来现阶段的 Swift 还是在一个积累的过程,但随着 WidgetKit 这个标志性的 SDK 诞生,发展阶段逐渐从积累阶段转向发展期,毕竟目前 ABI 稳定了、Module 稳定了、对二进制组件的支持也有了、Swift 语言本身的版本变化也逐渐稳定,这些都给予了 Swift 很好的支持。Swift 的发展方向看上去不只是为了 Apple 生态体系内,从社区的规划及 Timac 的几篇分析文章可以看出 Swift 在多元发展上(破圈)的决心。国内的 Swift 发展被去年的 iOS 14 新特性盘活了,WidgetKit 功不可没,虽然文中未给出大部分公司都将转型的结论,但至少绝大部分互联网的头部公司已经兼容了 Swift 的开发,这是一个好的开始,相信在可见的未来,Apple 的转型决心会让国内的公司更重视这方面工作的重要性。 + +本篇主要结合下面几个纬度分析了 2021 年 Swift 在 iOS 整个生态圈的现状: + +1. Swift 语言 + - 版本变化 + - On the road to Swift 6 +2. 技术社区 + - 语言排行榜 + - 社区活跃度 + - 商用 SDK 的技术选型 +3. Apple 生态 + - SDK 能力 + - 原生 App 分析 + - iOS 中不同编程语言的发展 +4. 国内外客户端的使用现状 + - 数据样本 + - 2021 年现状 + - 数据解读 + +### 🌟 🐢 [基于 Flutter 的 Web 渲染引擎「北海」正式开源](https://mp.weixin.qq.com/s/tnHbceedNsoKgMrgoTyyuA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):单看标题想必大家已经有一个大致的猜测,不错,淘系技术团队基于 Flutter 做了一个跨端的渲染框架,你可以使用完全的前端开发方式来写 Flutter,同样的前端开发中可以用到的工具 / 框架等,都可以无缝用到该项目中,棒极了!!!并且 Kraken 完全按照 W3C 标准,同时对一些组件做了性能优化,比如滚动组件. + +### 🐕 [Why Swift closures are not Equatable](https://www.jessesquires.com/blog/2021/04/05/why-swift-closures-are-not-equatable/) + +[@极速男孩](https://github.com/ztlyyznf001):Swift 中的闭包与 C 和 Objective-C 中的代码块或者其他语言中的匿名函数类似,但是当我们用 == 或者 === 去比较两个闭包时都会报错,这篇文章解释了为什么不能比较两个闭包,以及如果可以比较两个闭包所带来的问题。 + +### 🐎 [开源神器:可快速在 iOS 设备上安装 Windows、Linux 等操作系统!](https://mp.weixin.qq.com/s/Q8CvdNBnpoLow98MM1MZ1g) + +[@老驴](https://www.weibo.com/6090610445):有没有想过在 iOS 上运行其他操作系统?按照现在 iPhone 的计算性能,性能上完全可以的。国外的一位叫 osy86 的开发者就搞出了这样的一个虚拟机,可以让你在 iPhone 上跑任意操作系统。不过因为 iOS 本身的限制,你需要自己签名或者在越狱的机器上安装。兴趣的可以试试看。 + +### 🐎 [Getting Ready for App Tracking Transparency](https://swiftsenpai.com/development/get-ready-apptrackingtransparency/) + +[@老峰](https://swiftsenpai.com/development/get-ready-apptrackingtransparency/):4 月 6 日 Apple 发布公告 [Get ready for AppTrackingTransparency](https://developer.apple.com/news/?id=8h0btjq7) 要求开发者如果应用有收集用户数据,并出于跨应用和网站跟踪的目的与第三方分享用户数据,那么从 iOS 14.5 必须通过 AppTrackingTransparency 框架获得用户授权。文章简要介绍了 IDFA 概念,以及如何接入 AppTrackingTransparency框架,有需求的同学建议阅读。 + +### 🐕 [Every SwiftUI protocol explained](https://www.fivestars.blog/articles/swiftui-protocols/) + +[@AidenRao](https://weibo.com/AidenRao):本文详细介绍了 SwiftUI 定义的 54 种协议,例如:核心协议 View 和 ViewModifier 用于定义视图和视图修饰符。APP 和 Scene 使 APP 的完整生命周期都可以基于 SwiftUI 实现。19 种 styles 协议用于修饰 label,button 等特定视图,Shape 和 InsettableShape 用于定义形状,Animatable 和 AnimatableModifier 用于实现动画。 + +## 工具 + +### [GitHub 缓存加速网站:GitClone](https://gitclone.com/) + +[@J_Knight_](https://github.com/knightsj):该网站提供了远程缓存 GitHub 库的方案:可以提高从 GitHub clone 代码的速度。具体有三种使用方法: +1. 替换 url:将 gitclone.com 嵌入到克隆地址 +2. 设置 git 参数 +3. 使用 cgit 客户端 + +详细的介绍可以进入该网站主页查看:https://gitclone.com + +## 代码 + +### [ExposureKit](https://github.com/623637646/ExposureKit) + +[@红纸](https://github.com/nianran):ExposureKit 是一款检测 View 曝光库,一行代码即可集成,让业务曝光数据统计分析变得更方便。该库同时支持 Swift/OC 的检测,其功能基于原作者 [Yanni Wang 王氩](https://github.com/623637646) 的另外一个仓库 [EasySwiftHook](https://github.com/623637646/SwiftHook/blob/master/Documents/README.zh-Hans.md) 实现函数 Hook。 + +> 自荐:[Yanni Wang 王氩](https://github.com/623637646) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#158-2021.05.10.md b/Reports/2021/#158-2021.05.10.md new file mode 100644 index 000000000..a3c4621be --- /dev/null +++ b/Reports/2021/#158-2021.05.10.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #158 | 2021-05-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 福利 + +极客时间戴铭老师的「[iOS 开发高手课](https://time.geekbang.org/column/intro/100024501?code=0eTznNzpAbVisw%2FesJ9iM9iraIX21mfPuPgxm1jY5tI%3D)」**优惠活动截止时间是 5.12**,想要购买的读者可以通过周报二维码渠道,不仅**享受半价**,而且我们会将官方返现的 **20 元全额退款**给大家。更多详细内容可以参考 - [系统构建自己的 iOS 知识体系](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&tempkey=MTExMl9EcWloZVlNQyt6MjA1NS9pUEVtQ2RIY2JwcE1nQV9HeERVVkJBZk0zTVZjb2dCLUZaZEtsT1M3aFFCcURwM3ZJLU85OWVzYm9fei1UcnJRN2tDOVNFcGdkdDVoMElpcC1sMXNkd21LeWZaSEJWalRGNkQ2d25Bb012MWYxa2dnRmxGWFNWeGd6N0lCbk9rV1AxcWJRRW42X1Y3c3hEZW40M194c05Bfn4%3D&chksm=6aa285285dd50c3ef2fed31f056abbd0e6b0b9f0512b8ff8ec2e1560716fda253d1c28ecf600#rd)。 + +## 新闻 + +### 周报开通视频号了! + +[@Parsifal](https://github.com/ParsifalC):号外号外!!周报编辑组正式开通微信视频号了!为了丰富我们的内容形式,更好地将优质知识传递给大家,我们接下来也会尝试不同的方法。WWDC 2021 临近,我们今年也在考虑更多样化的『WWDC 内参』活动,关注视频号,或许 6 月有惊喜哦(**开通直播服务需要 1000+ 粉丝,希望大家多多帮忙!**)~ + +> **iTDriverr** 视频号开通在周报微信号里,欢迎大家添加! + +### [swift-5-4-released](https://swift.org/blog/swift-5-4-released/) + +[@享耳先森](https://github.com/iblacksun):五一长假前 Apple 随 Xcode 12.5 一起发布了 Swift 5.4 版,除 `Result 生成器` 等新特性外,5.4 主要集中在编译和运行性能的提升,具体内容也可以参考「知识小集」翻译的[这篇文章](https://mp.weixin.qq.com/s/CKx-UhzBkhDMDvDbzjX09g)。 + +## 文章 + +### 🌟 🐎 [美团做 React Native 性能优化的三个关键点](https://mp.weixin.qq.com/s/2D2l7NF0kmwAkfCI_PbZug) + +[@looping](https://github.com/looping):这是一篇 InfoQ 对美团移动端的采访记录,提到了美团在 React Native 性能优化实践层面的一些经验,以及对于技术框架选型的一些建议。里面讲的有些点还是比较干的,像是预告片,期待之后能在 QCon 大会上稀释下。本文可作为大纲参考,对罗列的问题结合我们自身的实际情况来分析,再看下跟大厂的差距,找到提升空间和下一阶段的演进方向。 + +### 🌟 🐕 [解读 Flutter 中热重载原理](https://mp.weixin.qq.com/s/Rd03kZLr26AJGcW2RXZc3w) + +[@Parsifal](https://github.com/ParsifalC):相比于前端圈子,开发调试体验是客户端人员挺头疼的痛点。而近些年 React Native/Weex/Flutter 等跨端框架吸引人的一方面也是其**热重载**这一开发体验,早之前社区有利用 File Watcher 监听文件变化并通过动态库注入与 runtime 在模拟器上实现热重载的 [InjectionIII](https://github.com/johnno1962/InjectionIII) ,甚至苹果自己也在 SwiftUI 上支持了实时预览。本文则基于 Flutter 源码,解读了 Flutter 是如何用 Dart 语言特性和 DartVM 实现其热重载功能。全文思路比较清晰,如果你也对 flutter 热重载机制有很大兴趣,阅读此文,应该能解决掉不少你的疑问。 + +### 🌟 🐕 [干货 | 携程火车票 Flutter 最佳实践](https://mp.weixin.qq.com/s/VP6WEQkEel3W4tdo3ThYDw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):本文介绍了携程火车票选择 Flutter 的初衷,Provider 状态管理的实际使用,建议 Flutter 主体的构架采用 MVVM 模式,还介绍了一些 Flutter 性能检测、量化工具和一些性能优化点供大家参考。收集了 Flutter 开发过程中常见并且大量发生的问题,并提供了相应的解决方案。 + +### 🐢 [听说你想写个渲染引擎(布局树 + 绘制)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485323&idx=1&sn=af965b57deaa2aabdd990348f7aa09ce&chksm=cf558843f822015544defa0c6af508642c840fc53f418c80d37b1af9b0018144b5139d6162f5&token=1028691144&lang=zh_CN#rd) + +[@xiaofei86](https://github.com/xiaofei86):讲述浏览器渲染引擎工作原理的系列文章,代码[开源](https://github.com/silan-liu/tiny-web-render-engine-swift)。作者参考了 “动手写浏览器渲染引擎” 系列文章,原文用 rust 编写,作者使用 Swift 进行了重写。 + +根据渲染引擎的工作流程,分为 “HTML 解析”、“CSS 解析”、“生成样式树”、“生成布局树”、“绘制” 5 篇内容。在往期周报中,我们已经推荐前 3 篇,本期作者更新了最后 2 篇。至此,本系列已全部完结,感兴趣的读者可以一起动手练习,对我们理解现代浏览器渲染引擎的工作原理会有所帮助。 + +### 🐎 [How OrderedSet works](https://oleb.net/2021/ordered-set/) + +[@四娘](https://kemchenj.github.io/):新的 [Swift Collection](https://swift.org/blog/swift-collections/) 库为我们带来了一些实用的集合数据结构,在这篇文章里作者就为我们分析了其中 OrderedSet 的实现方式。 + +## 代码 + +### [GetX](https://github.com/jonataslaw/getx) + +[@Damienn](https://github.com/ZengyiMa):GetX 是 Flutter 的一个轻巧并且强大的库。它具有高性能的状态管理、智能的依赖注入和路由管理的能力。并且 GetX 围绕着研发的生产力、高性能和优秀的代码架构这 3 点设计原则去整体性的设计,对于使用 Flutter 的同学不妨一试。 + +### [ResponderChain](https://github.com/GodL/ResponderChain) + +[@红纸](https://github.com/nianran):ResponderChain 提供了一种通过响应者链传递事件/数据的新方式,有别于传统 iOS 开发中 delegate 与 block 的形式,无需找到具体实例,即可进行数据和事件的传递。 + +> 自荐:[GodL](https://github.com/GodL) + +## 音视频 + +### [GGTalk | 某 C:两年前从合肥去广州,两年后从广州回合肥,我为什么放弃一线城市和一线大厂](https://www.xiaoyuzhoufm.com/episode/6087ff41d99c5b06d55584f7?s=eyJ1IjoiNWU3ZDRiZTBhMmYyZTUwM2NlYzQzZTM3IiwiZCI6MX0%3D) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一篇值得一听的播客,请到的嘉宾是两年前从合肥去广州,两年后又从广州回合肥的 BNC。这两年在微信工作的 BNC 也谈到了大家比较感兴趣的一些问题,比如在微信的工作体验以及为什么离开微信,微信为什么总是被骂等。逃离北上广还是回到北上广这几年时常会引起社会讨论,这是一个没有标准答案的选择,不管在哪里,遵从自己的内心,我们终将都有光明的未来! + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 哈啰出行(杭州/上海)招聘 资深/专家 iOS 开发工程师,参与哈啰出行 App 的软件架构设计 / 日常迭代开发;负责客户端应用优化及相关领域的技术探索;有大中型项目的开发经验优先,有跨端 (Flutter/ReactNative) 项目开发经验优先,有安全性、性能优化经验的优先。联系方式:邮箱:shishaoyong11215@hellobike.com 微信:CrazyCoder_SY + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#159-2021.05.17.md b/Reports/2021/#159-2021.05.17.md new file mode 100644 index 000000000..1e242219a --- /dev/null +++ b/Reports/2021/#159-2021.05.17.md @@ -0,0 +1,114 @@ +# 老司机 iOS 周报 #159 | 2021-05-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Announcing the Swift Mentorship Program](https://swift.org/blog/swift-mentorship-program/) + +> [知识小集](https://mp.weixin.qq.com/s/0B7kTL3UkvA_Nfpkzy7jUw):近日,Swift 官方针对 Swift 社区的新贡献者,发布了 Swift 导师计划。这一计划旨在为成为 Swift 项目积极开源贡献者的开发人员提供帮助与支持,同时可以获得社区中经验丰富的贡献者的直接指导。 +> +> 参与计划的每位开发者都有机会与 Swift 社区中经验丰富的开发人员联系,并向他们学习。同时,根据自己的学习目标,开发者可以为 Swift 项目甚至 Swift 编译器项目贡献代码。社区会根据学习目标来匹配开发者和导师,并让他们一起在开源项目上合作 12 周时间。 +> +> 一方面,对于新贡献者而言,降低了贡献代码的准入门槛,不需要事先为项目做出贡献,同时能提升更多的技能;另一方面,对于导师来说,也是一个不错的增加领导技能的机会。对于双方而言,都是有益的。 +> +> 感兴趣的小伙伴们,特别是在校的学生朋友们,可以考虑加入这一计划,相信一定能从中受益匪浅。该计划的详情可点击原文链接查看。 + +## 文章 + +### 🌟 🐕 [LLVM Link Time Optimization](https://mp.weixin.qq.com/s/Th1C3_pVES6Km6A7isgYGw) + +[@Leo](https://github.com/leomobiledeveloper):Link Time Optimization,简称 LTO 是一种在链接期间对代码进行优化的技术,因为链接过程能看到应用程序的全貌,所以能做一些全局的优化来提高运行时的性能以及减小二进制的大小。本文是一篇 LTO 入门的佳作,作者不仅分析了实际场景下如何让 LTO 产生效果,还从原理的角度讲解了 LTO 是如何工作的,推荐阅读。 + +### 🌟 🐕 [XD to Flutter 2.0 现已发布](https://mp.weixin.qq.com/s/VWSzeQb_pV9EWXqdWuu51A) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):XD to Flutter 插件是一个功能强大、易于使用的工具,可将您的 Adobe XD 设计导出为简洁、有效的 Flutter 代码。您可以从自己的设计中复制特定视觉元素的代码,导出各种可再利用的 Widgets,甚至可以将一些视图整个导出,无论您是要使用它来复制某个构思精妙的渐变效果的代码,还是要导出完全响应式、参数化、交互式的 Widget,都非常简单。 + +### 🌟 🐕 [A站 的 Swift 实践 —— 上篇](https://mp.weixin.qq.com/s/rUZ8RwhWf4DWAa5YHHynsQ) + +[@xiaofei86](https://github.com/xiaofei86):经过不断迭代,Swift 如今已成 iOS 乃至苹果全平台首选开发语言,A 站也已经完全投入到 Swift 浪潮中,享受到 Swift 语言带来的舒适和高效开发体验。作为 A 站的 Swift 实践上篇,本文介绍了 Swift 的技术背景,A 站使用 Swift 的架构演进过程,以及对最新框架 SwiftUI 和 Combine 等技术的选型。大家可以关注“快手大前端技术”公众号,下篇内容会详细介绍混编和 Swift 动态性。 + +### 🐢 [自由、开源及其敌人 —— RMS事件簿](https://mp.weixin.qq.com/s/Q3DDYYiGbJJREii7ZPBuMg) +[@zvving](https://github.com/zvving):无论你身处大厂还是创业团队,不可避免,我们大量的工作要用到开源项目。除了不同开源协议对源码开放&商用的已有约定外,你可曾想过:基于公司或个人的道德判断,你也许不能再使用部分开源项目。 + +[『开源项目是否需要考虑使用者道德』](http://esr.ibiblio.org/?p=8106)这一争论从未停止,而今愈演愈烈。 +本文用罗列各方事件的方式,尽可能客观的描述围绕[RMS(Richard M. Stallman)](https://stallmansupport.org/who-is-richard-stallman.html)以及开源&[道德平权思潮](https://ethicalsource.dev/)讨论的纷争。 + +作为软件行业从业者,这纷争成因以及对开源社区的影响,值得我们每个人关注。 + +> 1. RMS是自由软件运动&GNU 的发起人,GCC、EMACS 作者 +> 2. 值得参考的相关评论:[围绕RMS、开源、自由软件的两场“战争”](https://mp.weixin.qq.com/s/Kr0FzkpA-EHT51F7PVX76A) + +### 🐕 [Monitoring for iOS with MetricKit: Getting Started](https://www.raywenderlich.com/20952676-monitoring-for-ios-with-metrickit-getting-started/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了苹果官方提供的用于监控 iOS 程序的 MetricKit,该组件自 iOS 13 之后提供,在 iOS 14 也提供了新的 API。本文介绍了该组件的几个关键部分: + +- MXMetricManager:核心管理类 +- MXMetricPayload:封装了每日上报的数据 +- MXDiagnosticPayload:具体的性能相关的信息 +- MXCallStackTree:调用栈相关的信息 +- MXAppExitMetric:APP 退出的相关信息(iOS 14提供) + +最后也介绍了该组件在 Organizer 上的使用方法。 + +### [Flutter 状态管理: 使用 MobX](https://mp.weixin.qq.com/s/ken-UT3cmxc5aeWKkM-Lzg) + +[@Damien](https://github.com/ZengyiMa):众所周知,状态管理是每个软件项目都需要持续迭代更新的方向。在 Flutter 项目中,你可以使用 MobX 来管理应用中的各种状态,要在 Flutter 中高效地使用 MobX,需要遵循以下原则: +* 我们能访问任意状态中的可观察对象(即在我们应用运行过程中发生变化的变量)。 +* 我们可以在 View 中展示这些状态,并响应 Action 意图。 +* 我们可以修改状态,从而更新可观察对象以及相应的 View。 + +除此之外,本文还配套了详细的使用示例,使用 Flutter 的同学不妨一试。 + +## 代码 + +### [SwiftUI-Hooks](https://github.com/ra1028/SwiftUI-Hooks) + +[@AidenRao](https://weibo.com/AidenRao):作者基于 React Hooks 的思想,开发了一套 SwiftUI Hooks。SwiftUI Hooks 将状态和生命周期引入视图,而不必依赖于类似 @State 或 @ObservedObject 这些仅允许在视图中使用的元素。它还允许我们通过构建由多个钩子组成的自定义钩子在视图之间重用状态逻辑。此外,诸如 useEffect 之类的钩子也解决了 SwiftUI 中缺乏生命周期的问题。 + +### [Animatable - 使用 PropertyWrapper 实现动画代码复用](https://github.com/GodL/Animatable) + +[@享耳先森](https://github.com/iblacksun):`PropertyWrapper` 结合 `Codable` 实现 Model 的安全解析相信大家在使用了,作者利用 `PropertyWrapper` 实现了一个 CAAnimation 复用的库,代码非常简单,可以直接跳到 Github 浏览。 + +> 自荐:[GodL](https://github.com/GodL) + +### [OverlayContainer](https://github.com/applidium/OverlayContainer) + +[@JonyFang](https://github.com/JonyFang):`OverlayContainer` 是一个 Swift 编写的 UI 库。它的作用是让一些场景下的界面开发变得更加轻便,例如在 Apple Maps、Stocks 或 Shortcuts 应用中看到的界面。 + +### [SwiftRegexDSL](https://github.com/kodlian/SwiftRegexDSL) + +[@老峰](https://github.com/GesanTung):在开发中我们经常会写正则表达式处理字符串,虽然每天都在使用和创建正则表达式,但是每次我们都必须依靠网络搜索和旧版文档。`SwiftRegexDSL` 提供了一种使用声明式结构化的 API 来使用正则表达式,它主要提供 match、range、replacingOccurrences 等字符串处理方法。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#160-2021.05.24.md b/Reports/2021/#160-2021.05.24.md new file mode 100644 index 000000000..2ee4d2479 --- /dev/null +++ b/Reports/2021/#160-2021.05.24.md @@ -0,0 +1,99 @@ +# 老司机 iOS 周报 #160 | 2021-05-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +### 🌟 周报公众号新增关键词自动回复 + +[@Parsifal](https://github.com/ParsifalC):公众号后台不时都有读者发送一些希望查询检索的词语,为此我们根据“个人经验”设置了几条较常见的内容,并配上对应的 GitHub 检索页面和可能有的专辑链接。已经设置的关键词有 **招聘**、**flutter**、**swift**、**webview**、**swiftui**、**性能优化**和 **IAP** 等。 + +当然,我们更鼓励喜欢自己动手,丰衣足食的朋友,目前检索周报内容有两种方式: + +- 到我们 [GitHub Repo 利用 “Search In Repo” 的功能](https://github.com/SwiftOldDriver/iOS-Weekly/search?q=swift) 对周报全仓库内容进行检索 +- 到我们微信公众号主页的右上角搜索功能进行公众号内检索,由于我们迁移过一次公众号,这种搜索方式只能搜索去年下半年开始的内容 + +### 🌟 周报公众号代发内推信息事宜 + +[@Parsifal](https://github.com/ParsifalC):目前客户端,尤其是 iOS 岗位,都比较缺乏高级工程师,理解各位招聘负责人的不容易。所以周报目前是友情代发招聘信息不收费,以后也不会收费。但正如大家所看到的那样,我们收到的招聘信息只会放在次条推送,而次条则依赖于我们首条的文章。所以首条如果没内容的话,自然就不会有次条了。这就导致如果招聘需求多的话,就会排队比较久。介于这种情况,我们很希望大家向我们公众号投稿,以稿发招聘信息,我们会将该招聘需求从队列里提前发送,并且从招人诚意上来看,用一篇值得大家认可的文章来切入招聘,也会更有说服力,得到曝光的机会也更多。 + +最后,所有招聘事宜和投稿事宜,可以加 V 联系 **iTDriverr**。 + +## 文章 + +### 🐢 [Flutter 2.0 iOS 包大小优化 ](https://juejin.cn/post/6959811895645700132/) + +[@邦Ben](https://weibo.com/linwenbang):该文章介绍了在 Flutter 2.0 下如何拆分 AOT 编译产物,以实现动态下发这部分产物从而达成包体积优化的目的。Flutter 2.0 对比 1.x 的版本来说调整了不少流程,因此对于做过 1.x 拆分的同学升级会有所有帮助,想了解整体加载流程的话也值得一看。不过这里值得注意,任何动态下发都会存在失败率的可能,因此如果你的 APP Flutter 作为核心部分不可缺少的话,并不太建议做拆分,也需要考虑好容错降级的处理,同时 iOS 的包体积要求一般也相对宽松。 + +### 🐕 [iOS 极致速度优化:快速打开任意 APP 的设置界面](https://mp.weixin.qq.com/s/DpLy_o3wMpZauiPnU1aSBw) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):本文通过分析 [UIApplication openURL:] 的背后逻辑,提供了一种打开任意 APP 设置页面的方法。同时也可以发现,该方案可以减少了很多检验逻辑,并减少了 xpc 调用,可以大幅度提升打开设置页面的速度。 + +### 🌟 🐕 [探索微信聊天 UI 逻辑实现](https://everettjf.github.io/2016/06/19/reverse-explore-wechat-message-design/) + +[@zvving](https://github.com/zvving):『聊天页面 cell 有两种实现方式:一种是每类消息定义不同 Cell,另一种是微信的实现方式。』是段子也是事实。本文作者 [Everettjf](https://everettjf.github.io/about/) 详细记录逆向执行及分析过程,带你一起了解微信聊天界面的实现方式,是不可多得的逆向学习案例。 + +> 文章成于 2016 年,经与微信同学确认,诸多内容已经调整,文章逆向的探索过程依旧值得学习。 + +### 🌟 🐢 [普通技术人的成长路径 - 一位客户端老兵的经验之谈](https://mp.weixin.qq.com/s/IrSQyyc0J3SXBuWs9M3SYA) + +[@折腾范儿_唯敬](https://weibo.com/agvicking/):做客户端的同学或多或少都会进入一些迷茫期,客户端这条路的发展有多深?我该如何提升自己?如何摆正自己的心态来面对现今工作上越来越多的焦虑?不妨看看牟爽的这一篇经验之谈,看看过来人这一路是如何走过来的。整篇文章更多是老兵的个人感慨分享,因为每个人的工作经历与成长历程不同,老兵在文中所讲的也许不见得能100%和每个人不同的经历产生共鸣,而且短短的文字无法深刻的表达出这些真实经历背后真实的故事所对应的思考。但相信老兵的感慨是能够让读者感受到真诚与一些作为经历过人的苦口婆心,有不解和困惑也欢迎和老兵进一步进行交流与解惑 + +### 🐢 [【译】SE-0306 Actors](https://github.com/SwiftOldDriver/iOS-Weekly/issues/2792) + +[@四娘](https://kemchenj.github.io/):Swift 在下个版本 5.5 将会带来 async/await 语法的支持,它解决的是异步编程控制流复杂的问题,让我们可以像同步代码一样去组织代码的控制流。 + +从异步迈向并发的路上,我们还需要考虑如何组织调度这些异步操作,并且避免并发数据访问带来的数据竞赛问题。Swift 选择了 Actor 作为它的并发模型,**将 actor 作为一种新的类型引入,并且为其提供了静态的 data-race 检测**。 + +这是自 1.0 版本之后首次引入的新类型,足以说明这次改动之大,与过去两年的小修小补不同,强烈推荐大家阅读这份提案,它将会在未来两三年,影响 Swift 编程模型的方方面面。 + +### 🐎 [越狱 iOS app 砸壳这件事儿](https://mp.weixin.qq.com/s/xFHA2tlc6HCLti_ihlrsZA) + +[@Damien](https://github.com/ZengyiMa):你对逆向感兴趣吗?在所有逆向教程中都会从砸壳这一步开始,那么什么是砸壳呢?以及砸壳的原理是什么呢?那就一起来深入了解一下吧,本文会详细介绍如何砸壳,以及砸壳的多种思路和手段。对想了解逆向知识的同学是个不可多得的入门教程。 + +## 摸鱼周报 + +[@摸鱼周报 #11](https://mp.weixin.qq.com/s/hE9wYlLX8F1sKjIF5eIPVQ):本期摸鱼周报带来了 **程序员必知的硬核知识大全** 的内容解读,它由 [crisxuan](https://github.com/crisxuan/bestJavaer) 整理完成,经作者授权该 PDF 已经放在了周报仓库里,有兴趣的同学可以下载阅读全文。我们以概念的形式对一些重要知识进行解释,会分三期,本期周报是第一期内容,包含有:CPU、寄存器、程序计数器、内存,IC 等内容的介绍。 + +另外我们还总结了几个实用的 Tips :如何在不继承第三方 SDK 的情况下完成对应的身份验证以及如何使用 Charles 为 Apple TV 端的网络请求进行抓包。 + +## 代码 + +### [UIImageColorRatio](https://github.com/623637646/UIImageColorRatio) + +[@水水](https://www.xuyanlan.com):使用 Swift 实现的计算 UIImage 各颜色占比的工具。 + +> 由 [Yanni Wang 王氩](https://github.com/623637646) 自荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#161-2021.05.31.md b/Reports/2021/#161-2021.05.31.md new file mode 100644 index 000000000..acf65e555 --- /dev/null +++ b/Reports/2021/#161-2021.05.31.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #161 | 2021-05-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 2.2 发布](https://mp.weixin.qq.com/s/_btkqmzWMeZLlL4UdhtUhw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Google I/O 2021 大会上, Flutter 2.2正式发布,号称是迄今为止最出色的 Flutter 版本。在稳定版和预览版均有不少新特性发布: +- 稳定版: + - Dart 2.13 + - Flutter web 更新 + - iOS 页面转场和增量式安装 + - 更多 Material 图标 + - 改进文本处理方式 + - 自动滚动行为 + - TextSpan 上的鼠标指针 +- 预览版: + - iOS 着色器编译改进 + - Android 延迟加载组件: 可下载的 AOT 代码和资源 + - Flutter Windows UWP alpha 版 + - ARM64 Linux 主机支持 + +## 文章 + +### 🌟 🐢 [A站 的 Swift 实践 —— 下篇](https://mp.weixin.qq.com/s/EIPHLdxBMb5MiRDDfxzJtA) + +[@xiaofei86](https://github.com/xiaofei86):经过不断迭代,Swift 如今已成 iOS 乃至苹果全平台首选开发语言,A 站也已经完全投入到 Swift 浪潮中,享受到 Swift 语言带来的舒适和高效开发体验。《[A 站的 Swift 实践——上篇](https://mp.weixin.qq.com/s?__biz=MzkxOTI0MTA2OA==&mid=2247485577&idx=1&sn=8afb1e639a832c10a966ff0ab7576b44&chksm=c1a4608af6d3e99ceeff729ea6736394266cbca7ac46040a1401d1dd805d4ae0950a5f1ae411&scene=21#wechat_redirect)》介绍了 Swift 的技术背景、Swift 的架构演进过程以及对最新框架 SwiftUI 和 Combine 等技术的选型。作为下篇文章,本文会继续介绍 Swift 的混编和动态性。 + +### 🌟 🐎 [SwiftUI @ Netflix:推动新技术落地是怎样一种体验?](https://mp.weixin.qq.com/s/oRPRCx78owLe3_gROYapCw) + +[@zvving](https://github.com/zvving):项目中如何推动落地新技术,是技术人持续面对的问题: + +- 选择什么新技术?可以是有业务/性能收益,也可以是降低开发/维护成本,切换/学习成本是否可控 +- 在什么场景落地?要有足够的用户量级论证收益,也要模块独立避免引入成本过高。业务简单稳定的模块是不错的选择 +- 如何在项目中发起?有充分的调研与清晰的方案(硬实力),也要与上下游团队的频繁沟通同步预期(软沟通) +- 如何落地?尤其留意通过 A/B 实验论证对产品指标及工程指标的影响,指标不负向,成功大半 +- 落地的后续?反思新技术的引入过程是否和预期一致,后续的规划是怎样 + +[故胤道长](https://www.jianshu.com/u/8d5b91490ca5)对以上问题的思考在文中均有体现,是非常不错的参考案例。你对项目中计划引入的新技术,又有怎样的规划? + +### 🚧 🐕 [源码级调试 App Store 包](https://blog.indigo.codes/2021/05/23/debug-your-app-store-app/) + +[@Smallfly](https://github.com/iostalks): 你是否曾为本地 Debug 没问题,Release 包却不能稳定复现 Bug 束手无策?本文作者 @靛青 介绍了如何从一个壳工程开始,一步步实现调试 AppStore / TestFlight 包。 + +文中提供了自动化构建调试工程的脚本,你只需要提供自己的 ipa 和 dSYM 文件,使用少量的 `lldb` 命令,即可完成源码级断点调试。 + + +### 🐕 [正经分析iOS包大小优化](https://mp.weixin.qq.com/s?__biz=MzU3NTY3MTQzMg==&mid=2247505253&idx=1&sn=7123c2548a3d8412a6e0ec6e72634664&chksm=fd1d0882ca6a81948d0125ca7d5a8d614bb2f79b8dc274a6d59205ddc74b71d3242826bc7e42&mpshare=1&scene=1&srcid=0527S6Ko4joeOz56MiT0Vzfj&sharer_sharetime=1622074623255&sharer_shareid=283ec3502fd417eeb429d443f712b520#rd) + + +[@J_Knight_](https://github.com/knightsj):本文作者笔者根据已有的文章、知识结合自己的理解和实践,梳理了一份比较全面的包大小优化的方案。本文先分析了安装包的构成,然后给出了 Xcode 编译设置优化方案和优化前后的数据对比。另外还提供了资源文件的优化方法,包括无用资源的删除(未使用的代码和图片,重复导入的资源等)以及资源(图片,网页,音频等)的压缩方案。另外在文章结尾还提供了本文的参考文献,读者也可以做延伸阅读和学习。 + + +### 🐎 [一种使用 CocoaPods 同步 Git hooks 的方案](https://dirtmelon.github.io/posts/cocoapods-sync-githooks/) + +[@四娘](https://kemchenj.github.io/):Git hooks 是一段脚本,可以在 Git 执行某些操作之前或者之后执行,比如说 commit , push 或者 receive,我们可以使用它来进行代码格式化等操作。 + +但它不会被 Git 追踪,只能通过其它手段进行同步,本文就介绍了如何使用 Cocoapods 插件进行同步。 + + +### 🐕 [iOS优雅实现Pipeline设计模式](https://github.com/ChenZeBin/blogs/blob/master/%E6%96%87%E7%AB%A0/PipelineDesign/iOS%E4%BC%98%E9%9B%85%E5%AE%9E%E7%8E%B0Pipeline%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md) + +[@JonyFang](https://github.com/JonyFang):本文主要介绍了 Pipeline 设计模式,使用场景,以及如何使用 OC 语言用链式语法优雅的将 Pipeline 串联起来。文中最后附带了示例 Demo,对于读者了解 Pipeline 设计模式的实践有一定的帮助。 + +### 🚧 🐕 [How to scan a credit card using Apple Vision and VisionKit natively in iOS Swift with SwiftUI and UIKit](https://khalidasad93.medium.com/how-to-scan-a-credit-card-using-apple-vision-and-visionkit-natively-in-ios-swift-with-swiftui-and-247fa0863141) + +[@红纸](https://github.com/nianran):iOS 13 发布的新框架 VisionKit 是关于文档识别的新框架,本文作者保姆式介绍了该框架在扫描信用卡场景下,如何配置工程、视图、逻辑,用自定义解析逻辑提高扫描精度。在文末作者还提供了完整版 Demo,有兴趣的小伙伴可以进行尝试一下~ + +## 摸鱼周报 + +[@摸鱼周报 #12](https://mp.weixin.qq.com/s/hJkXjH1OFoF1XSd1ENlpAQ):本期摸鱼周报带来了 **程序员必知的硬核知识大全** 的第二部分内容,包含对:二进制、大小端、缓存、压缩算法等内容的介绍。 + +另外我们还总结了几个 Xcode 耗时统计的 Tips;博客的筛选将更偏向于主题形式的汇总,除了近期几篇优秀文章外,本期还收录了几篇 `wakeup` 崩溃相关的文章,便于大家对这一知识有更全面的认识;资料部分收录了一个很不错的网站:swiftbysundell.com,它由 [John Sundell](https://twitter.com/johnsundell) (Publish的作者) 创建,网站包含 Swift 开发的文章、播客及新闻等内容。对 Swift 的深度使用和探索一直都是国外开发者走在前面,希望对 Swift 感兴趣的各位能在这个网站中探索更多内容。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#162-2021.06.07.md b/Reports/2021/#162-2021.06.07.md new file mode 100644 index 000000000..3d9e61c67 --- /dev/null +++ b/Reports/2021/#162-2021.06.07.md @@ -0,0 +1,158 @@ +# 老司机 iOS 周报 #162 | 2021-06-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC 2021 + +**明天,也就是 6 月 8 日凌晨 1 点,WWDC 21 正式拉开序幕,周报编辑组也将投入到 WWDC 21 的相关活动中去,所以下周周报将会停更一期,欢迎大家关注我们接下来的一系列 WWDC 专题活动!** + +### 🌟 [WWDC 21 内参作者招募 & WWDC 20 内参免费领取](https://mp.weixin.qq.com/s/_VdIsQbnnwb1MQUTpAGOyA) + +[@Parsifal](https://github.com/ParsifalC):伴随着 WWDC 即将开幕,由周报牵头举办的一年一度 WWDC 内参活动也开始了筹备工作。今年我们想尝试从广大读者中也邀请一些对 WWDC 内参编写感兴趣的人一起参与内参的编写。另外,我们**所有读者都可以免费领取** WWDC 20 的专栏。不管是想参与 WWDC 21 编辑工作,还是想免费领取 WWDC 20 内参,都可以点这里 - [我是福利](https://mp.weixin.qq.com/s/_VdIsQbnnwb1MQUTpAGOyA) + +### 🌟 [WWDC.playground by SwiftGG](https://swift.gg/wwdc/) + +[@Parsifal](https://github.com/ParsifalC):WWDC 21 将于 6 月 8 日凌晨 1 点正式在线上举行,今年国内的 iOS 社区组织了多个不同形式的活动,WWDC.playground 就是其中一项。SwiftGG 邀请了来自世界各地的设计师、产品经理以及 Swift 社区活跃开发者,站在他们各自的视角,和大家一起聊聊 WWDC21。帮助大家更好地跟上 WWDC21 的节奏,尽快把新技术集成到自己的产品中。值得一提的是,本次活动被苹果官方列入了 [Beyond WWDC](https://developer.apple.com/wwdc21/beyond-wwdc/) 的专题列表,快来关注吧~ + +### 🐎 [A Swift developer’s WWDC dreams - 2021 edition](https://www.swiftbysundell.com/articles/a-swift-developers-wwdc-dreams-2021/) + +[@四娘](https://kemchenj.github.io/):今年 SwiftBySundell 也在博客里分享了他作为 Swift 开发者的心愿单,包括: + +- SwiftUI 提供更多可以自定义的接口 +- 让所有接口都 Async/await 化 +- 可交互的 Widget +- 更加强大可靠的工具链 +- Xcode on iPad +- 使用 Swift 全栈开发 + +期望苹果今年也可以帮助所有开发者喜加一。 + +### [WWDC NOTES](https://wwdcnotes.com/) + +[@老峰](https://github.com/gesantung):WWDC NOTES 是一个持续更新 WWDC Session 的网站,包含历年新功能、新设计、新框架、新开发工具,也可以在这个网站上提交新的笔记,对 WWDC21 感兴趣的同学可以收藏此网站,接下来会同步更新 WWDC21 相关内容。 + +## 新手推荐 + +### 🐕 [Dart 里的类型系统](https://mp.weixin.qq.com/s/aBOUm6E1CXGl-GyKP94TeA) + +[@邦Ben](https://weibo.com/linwenbang):该文是翻译文,文内主要讲述了 Dart 里面的类型系统,适合新手入门的时候看看。里面也提到一些不常见用法,例如 `names.forEach(print)` 等价于 `names.forEach((name){print(name);});`;以及可调用对象 `Foo()();` 这种比较 trick 的用法,详细可以看下文章。 + +## 文章 + +### 🐕 [无埋点核心技术:iOS Hook 在字节的实践经验](https://juejin.cn/post/6968275950786215944?utm_source=gold_browser_extension#heading-0) + +[@JonyFang](https://github.com/JonyFang):常见的埋点采集方案是在响应用户行为操作的路径上进行埋点,但由于 App 通常会有比较多界面和操作路径,主动埋点的维护成本会很大。所以行业的做法是无埋点,而无埋点实现需要 AOP 编程。 + +实现方案的迭代及实践中碰到的坑: +1. 方案的迭代 + - Method Swizzle + - 代理模式 +2. 方案接入后的踩坑 + - 野指针引发的问题的分析定位及修复方案 + - RxCocoa 引发的问题的分析定位及修复方案 + +Hook 不是很优雅的方式,原因在于随着实际应用场景复杂性的变化,任何 Hook 都有可能存在兼容性的问题。文中最后也给出了相应的建议: +- 谨慎使用 Hook; +- Hook 系统接口一定要遵循一定的规范,不能假想只有你在 Hook 这个接口; +- 不要假想其他人会怎么处理,直接把多种方案集成到一起,构建多种场景,测试兼容性。 + +### 🐎 [字节小哥带你揭秘 Dart VM 魔术盒](https://juejin.cn/post/6960932663095984136) + +[@Damien](https://github.com/ZengyiMa):本篇文章是由字节移动平台团队带来的 Dart VM 文章,本文会详细介绍在 Dart VM 中的 Dart VM Isolate, Run From Source Via JIT 以及 Running from Snapshots 3个核心运行机制,文章内容层层深入带读者逐步理解其原理,对学习 Flutter 以及 Dart 底层感兴趣的同学可以好好研读一番。 + +### 🐕 [Adding Swift Code as Custom LLDB Command](https://swiftsenpai.com/testing/add-custom-lldb/) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):多数开发者工作中都会使用到 LLDB 命令,但是很多人却不知道可以使用纯 Swift 代码定义自己的 LLDB 命令。本文介绍了如何添加你的第一个 LLDB 命令、添加带参数的 LLDB 命令以及将复杂的 Swift 代码转换为 LLDB 命令。有些自定义的命令特别有用,会让我们在开发中受益。 + +### 🐎 [🐞 Insidious Bugs #3: Apple App Site Association File Identifiers](https://lickability.com/blog/insidious-bugs-number-3-apple-app-site-association-file/) + +[@Smallfly](https://github.com/iostalks):本文介绍了 Lickability 团队 App 在支持 [Associated Domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains#Overview) 能力时的踩坑经历。根据苹果文档介绍,在创建 `apple-app-site-association` 文件时,其中的 `appIds` 字段值需由 `.` 格式组成,却没有说明 Application Identifier Prefix 前缀是什么。他们经过一系列的尝试之后,在 Team Identifier 和 App Identifier 之间找到了答案。 + +> 想了解更多关于 universal link 相关的应用,建议阅读周报编辑 [@味精](https://github.com/Awhisper) 的这篇文章 - [Universal Link 前端部署采坑记](https://awhisper.github.io/2017/09/02/universallink/)。 + +### 🐢 [What's new in Swift 5.5?](https://www.hackingwithswift.com/articles/233/whats-new-in-swift-5-5) + +[@AidenRao](https://weibo.com/AidenRao):Swift 5.5 的第一个测试版本,即将在 WWDC 上放出。它将带来大量改进,async/await, actors, throwing properties 等,本文通过代码示例,逐一介绍每个改动。 + +- [async/await](https://mp.weixin.qq.com/s/ofYWD4AHm8qR65n0P2mbeA):异步函数,允许将异步代码当作线性同步代码来编写 +- actors:在并发环境中可以安全使用的类,只能由单个线程访问 actor 内的可变状态 + +### 🐎 听说你想写个 React + +* [听说你想写个 React - dom](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485430&idx=1&sn=6c7e1c1f2e54299305a314a4f79e6422&chksm=cf55883ef8220128caf3c4b07ef53d1f40ce742af40c8a2aef1f5ced37b18d1e2df6934eb80b&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - jsx](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485430&idx=2&sn=7b738f351870748af72fc7db14877082&chksm=cf55883ef8220128bc4923c1ab1c4d619bc71bcc57750ae9cc71fe56504cd04f4e3d270a8ec6&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - virtual dom](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485507&idx=1&sn=43a4f84434da7e654e8f5fccbf4d1bb2&chksm=cf55878bf8220e9db00cd7c2587c47197c3580d25fe73e4d9fcfd6c468bf4ae7ce846b9eba89&token=269095387&lang=zh_CN#rd) +* [听说你想写个 React - Component](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485599&idx=1&sn=f4665f943af6bc916b0d669e7783d2e5&chksm=cf558757f8220e4143282eb9f608e1727326ddb9b68ea0bff467ac1ed16c9e6803fc21e3d549&token=1155900023&lang=zh_CN#rd) + +[@老驴](https://www.weibo.com/6090610445):这是个手把手教你从 0 开始写一个 React 系列文章。目前包含了 4 篇,跟作者一起动手实现 dom,jsx,virtual dom,Component。相信和作者一起写一遍之后,你对 React 的理解能更深入一层。 + +### 🐢 [论证:iOS 安全性,为什么需要审核?](https://juejin.cn/post/6967199105541996575) + +[@anotheren](https://github.com/anotheren): 本文来自 Epic Games 与 Apple 诉讼中,针对 “iOS 安全性” 这个问题进行展开的辩论,即:苹果可以让 iOS 系统,在**应用分发**和**第三方访问**等方面更像 macOS,也*不会在安全性方面受到影响*。辩论中的内容,对于我们近一步了解 iOS/macOS 的安全机制十分有用,推荐阅读。 + +### 🐢 [揭秘苹果应用审核团队(史上最全版)](https://juejin.cn/post/6970363897668698148/) + +[@Parsifal](https://github.com/ParsifalC):苹果的应用审核团队一直都很神秘,这篇文章从网上可查的一些蛛丝马迹,试图揭开审核团队的神秘面纱,读读还是比较有趣的,毕竟我们长期要与审核团队打交道,多了解一些他们的事情,不是坏事儿。 + +> 本文由 [iHTCboy](https://github.com/iHTCboy) 推荐 + +### 🐎 [面试过 500+ 位候选人之后,想谈谈面试官视角的一些期待](https://mp.weixin.qq.com/s/XNv3rYRJvv4N7Xaw-c5ZsA) + +[@莲叔](http://github.com/aaaron7): 一篇不错的讲通用面试技巧的文章,内容如标题,从一个大厂面试官的角度给出了一些实用中肯的建议。大厂的面试说难也难,说不难也不难。核心原因就是虽然 bar 很高,却有一套通用的方法论。比如不管哪个公司,面试官考察的套路都差不多。这篇文章乍看上去比较虚,但仔细的一条条看下来就是把这个套路很直白的说给你听。有需要的同学可以多多研究。 + +### 🐢 [手把手教你 Debug — iOS 14 ImageIO Crash 分析](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247488918&idx=1&sn=9d3f19288191569d4cdf4a6dcef80270&chksm=e9d0de74dea75762b0b77ccd20f0f50d7b42ba9ca847490f5a22decbd950ebe79b48d8e16c8e&scene=0&xtrack=1#rd) + +[@水水](https://www.xuyanlan.com):记录了一次 iOS 14 上大量出现的 ImageIO 相关堆栈的 Crash 问题的定位、分析、反汇编、最后修复的过程。读者不仅能够参考修复类似问题,也可以学习和借鉴本文 Crash 解决的思路。 + +## 摸鱼周报 + +[@摸鱼周报 #13](https://mp.weixin.qq.com/s/qJG74OQsJ1VV1cB6fDX8TA):本期摸鱼周报讨论了一个 Swift 5 出现的 `module stability` 问题,即使用不同版本 Swift 编译器编译的 binary 如何兼容。 + +概念篇来到了**程序员必知的硬核知识大全**的最后一节,这节介绍的内容有:BIOS、汇编、虚拟机、外围中断、DMA 等。博客篇收集了一些介绍 watchdog 的文章,这些内容可以帮助你了解什么是 watchdog 以及如何定位这类问题。另外我们还收录了一个非常有意思的软件 [Whatpulse](https://whatpulse.org/),它可以为你统计你的键盘和鼠标使用情况,比如一天中你敲击了多少次按键以及各个按键的使用频率等。 + +## 工具 + +### 🐢 [XD to Flutter 2.0 现已发布!](https://mp.weixin.qq.com/s/VWSzeQb_pV9EWXqdWuu51A) + +[@极速男孩](https://github.com/ztlyyznf001): Adobe XD由 gskinner 与 Adobe 联合开发, 你可以将你的设计导出成 Flutter 代码,在 Adobe XD 2.0中,加入了 "堆栈" 和 "滚动组"的支持,可以转换成常见的 Flex Widget、Column、Row 以及 SingleChildScrollView 等Flutter Widget。 + +## 音视频 + +### [AirTag 有用,但不是完全有用](https://www.xiaoyuzhoufm.com/episode/60b419020013dcfe5cf0d581) + +[@没故事的卓同学](https://github.com/lacklock):我最近做了一个播客[卖鱼桥分桥](https://www.xiaoyuzhoufm.com/podcast/607e818b3bfd9e4d8913a87b),里面会有一些内容围绕程序员的生活方式展开,如果有感兴趣的朋友欢迎关注一下。未来也会出几期和 WWDC 有关的内容,也安排一些针对开发者的采访。欢迎大家订阅。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 微医云招聘高级 iOS 开发工程师,详细内容可参考 - [[杭州萧山] 微医 - 微医云 - 高级 iOS/Android 开发工程师](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&tempkey=MTExNl9Ga1hZTnRZL0orT0l3akY5TzhMWHk1MXNCeGQwX3pkRlB2QWFxQW1kTDJlOFRfU05NUWU5VTJ2dG1tcmRVRUUwa1E3RHRxRlNIb0tRamVzUmJ0b3JMc2ZuU1VXNWF5UF9zWGllemhBd1pzZWpFak9VQWU3dDdXMzlCeTVKYnZrb2Y1Z3RTZEcxYVpSSWtKck5ucHRsSFhaUjZTM29BYmN5d3EzWlZRfn4%3D&chksm=6aa2840b5dd50d1d947adf708480766b26d5729c6c39a24cb2cbf463af109980d5c0a37ddde3#rd),有意者简历投至邮箱:zhangmw1@wedoctor.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#163-2021.06.21.md b/Reports/2021/#163-2021.06.21.md new file mode 100644 index 000000000..9a6801d9f --- /dev/null +++ b/Reports/2021/#163-2021.06.21.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #163 | 2021-06-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又迎来了一位新人 - [@Smallfly](https://github.com/iostalks),他是来自网易云音乐的开发者,对 Native 和跨端技术栈均有涉猎,希望未来能一起给大家持续输出高质量内容~** + +## WWDC 21 + +[@Parisfal](https://github.com/ParsifalC):WWDC 21 圆满结束,但关于 WWDC 21 的学习才真正开始~苹果官方汇总了[新技术和已有框架的重点变化](https://developer.apple.com/documentation/New-Technologies-WWDC-2021),本周我们针对部分内容更新了 6 篇 WWDC 21 Session 的深度解读,每篇文章都是经过不断推敲和审核才完成。 + +### [【WWDC21 10114】 初见 StoreKit 2](https://xiaozhuanlan.com/topic/6138790425) + +[@黄骋志](https://github.com/ChengzhiHuang): 开发过 In-App Purchase 的同学应该都应该体会过被它 生涩难懂的 API、不合理的数据结构、难以处理的掉单 等问题支配过的恐惧。WWDC21 针对 StoreKit 做了一次全新的升级,同时得益于 Swift 的新特性,进一步简化了 API 调用,并带来了诸多新特性,阅读本文后相信你会惊艳于这次的升级。 + +### [【WWDC21 10101】使用 ReplayKit 记录你的高光时刻](https://xiaozhuanlan.com/topic/1068759324) + +[@七夜](https://github.com/qiyer): 主要介绍了 Apple 为 ReplayKit 新增了一个新的特色功能 Clips Recording,用于记录用户应用或游戏内不超过 15 秒长的精彩瞬间。 + +### [【WWDC21 10158】使用 VideoToolbox 探索低延迟视频编码](https://xiaozhuanlan.com/topic/2530964187) + +[@bqlin](https://github.com/bqlin): 讲述通过 VideoToolbox 最新功能实现低延迟 H.264 硬件编码,最大限度地减少端到端的延迟,并提高性能,实现最佳的实时通信和高质量的视频播放。 + +### [【WWDC21 10019】在 SwiftUI 中遇见并发编程](https://xiaozhuanlan.com/topic/2957164803) + +[@Edmond](https://github.com/looseyi): 众所周知,在计算机领域并发是很棘手的一个难题,现在您拥有了管理应用程序中这种复杂性的工具。我们希望您喜欢并了解 Swift 5.5 和 SwiftUI 中出色的新并发工具,我们期待看到您使用它们解决应用程序中棘手问题。 + +### [【WWDC21 10134】 探索 Swift 结构化并发](https://xiaozhuanlan.com/topic/3625784190) + +[@SZ](https://github.com/imagiczhang): Swift 5.5 创新性地引入了结构化并发的概念。同时,也革命性地引入了不同风格的任务、任务树的自动管理机制以及编译时的数据安全检查,极大地降低了并发程序编写难度。尽管最终正式版还是存在更改部分 API 的可能,我们仍然推荐大家先学习并熟悉一下编写 Swift 程序的新方法。 + +### [【WWDC21 10017】为 Swift 和 SwiftUI 带来 Core Data 并发](https://xiaozhuanlan.com/topic/4625791038) + +[@SZ](https://github.com/imagiczhang): 今年 Core Data 上带来了大量的功能增强,其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验,简化了异步数据操作的程序,因此我们推荐大家学习并逐渐开始使用这些新的 API。 + + +## 新闻 + +### 🌟 WWDC. 技术沙龙 - 北京地区专场圆满结束 + +[@Parsifal](https://github.com/ParsifalC):由 SwiftGG 和快手联合主办的 WWDC. 技术沙龙 - 北京专场于本周六在快手总部顺利举办,分享活动吸引了近 200 开发者朋友一起前来学习。本次分享的后续总结工作正在紧锣密鼓地进行中,同时由我们周报主办的杭州场和上海场技术沙龙也将陆续开放报名,欢迎各位同行好友来聚聚。本次活动我们不收取任何费用,除了嘉宾带来的主题分享外,现场更有主办方为每一位到场朋友悉心准备的伴手礼和茶歇,同时周报也将在现场免费赠送 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) 哦。 + +## 文章 + +### 🌟 🐕 [Concurrency in Swift 5 and 6](https://forums.swift.org/t/concurrency-in-swift-5-and-6/49337) + +[@anotheren](https://github.com/anotheren):来 Swift 官方社区的帖子,介绍了 Swift 并发控制在 Swift 5 和 6 中的展望。Apple 需要考虑将 Swift 生态系统迁移到 Swift 6 会是什么样子,并预计这个过程需要数年时间。在此过程中,Apple 需要确保: + +- Swift 5.x 和 Swift 6 代码可以在并发模型的演进中,良好地相互操作 +- 逐步采用并发模型可以使代码更好维护,也更安全 +- 每个模块、包和程序都可以以自己的速度采用并发控制,而不会不必要地破坏原来的代码 + +总的来说,Swift 5 中会更加宽松,以能够使并发控制逐步推广开,完成平稳过渡。而 Swift 6 会在需要的情况下要求异步执行的闭包满足 @Sendable (详见 [SE-0302 Sendable and @Sendable closures](https://github.com/apple/swift-evolution/blob/main/proposals/0302-concurrent-value-and-concurrent-closures.md))。 + +### 🌟 🐕 [Xcode 工程文件解析](https://mp.weixin.qq.com/s/s5BQznKjSCt84ZLUlco7Vg) + +[@老峰](https://github.com/gesantung):从我们接触 iOS 开发就与 Xcode 工程配置文件 xcodeproj 打交道,本文作者详细介绍了 xcodeproj 文件结构,以及如何 xcodeproj 开源库 解析并修改 xcodeproj 文件,文章主要包含一下内容: + +- Xcode 工程文件组成:xcworkspace、xcodeproj +- Project 解析、Object Module、Object Attributes、Xcode Object等 +- 通过代码编辑 Xcode 工程 + +### 🐕 [iOS 14.5 如何用 PAC 保护 Objective-C 对象](https://mp.weixin.qq.com/s/VsqnWo6HGQT5LXdulpcaGg) + +[@AidenRao](https://weibo.com/AidenRao):一篇非常硬核的文章,本文介绍了 iOS 14.5 针对 Objective-C 运行时进一步加强 PAC 保护的两处改动。这些保护仅针对系统自带应用和服务启用,目的是防止跨进程和远程代码执行的漏洞利用。 + +### 🐕 [Flutter IM 跨端架构设计和实现](https://mp.weixin.qq.com/s/ftZdQ-0GeMgr6kL9bZLA8w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):一个非常好的跨端 IM 设计方案,从痛点分析到实施方案,到 DB 同步设计,以及状态管理,应有尽有。有相关业务小伙伴值得仔细阅读,文中很多解决方案可以带来不少参考. + +### 🐕 [从探索到实践,iOS 动态库懒加载实录](https://mp.weixin.qq.com/s/g5FKnOcW6KonqBSW8XO9Jw) + +[@红纸](https://github.com/nianran):本文是 58 同城对于 APP 模块动态化的实践总结,对方案定制、实现流程、方案结果对比、量化收益等多个方向进行描述。由于动态库的吸附性,团队整理完依赖树,选用自下而上的方式,将模块逐一动态库。并使用懒加载的形式加载动态库,而非启动加载,降低了启动耗时。 + +### 🐕 [WWDC21 Ultimate application performance survival guide](https://gcsnnb.github.io/2021/06/09/APP%E6%80%A7%E8%83%BD%E7%BB%88%E6%9E%81%E7%94%9F%E5%AD%98%E6%8C%87%E5%8D%97/) + +[@Leo](https://github.com/leomobiledeveloper):性能是客户端永远绕不开的话题, 所以 WWDC 每年都会有很多 session 是关于性能的。这个 session 更像是一篇概述,讲解了苹果提供的性能相关监控、工具和诊断,推荐对性能感兴趣的同学阅读。 + +* 推荐人:[GCSNNB](https://github.com/GCSNNB) + +### 🐕 [Code Signing - iOS 代码段的校验机制分析](https://mp.weixin.qq.com/s/msUwo3YUcfHXkuAp5wRfyQ) + +[@Smallfly](https://github.com/iostalks):从 iOS JIT 遇到 Crash 的神仙打架,到 iOS 代码段的校验机制。本文作者高级页面仔,从内核源码着手,详细地分析了 iOS 代码段合法性校验的时机和过程。最终给出了 Crash 的原因,并介绍了连接调试器和越狱环境下 JIT 不会 Crash 的实现原理。 + +### 🐕 [听说你想写个 Lisp 解释器](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247485878&idx=1&sn=3f1b37ad693bfd2f0da24aab2616aafe&chksm=cf55867ef8220f68719be7f9666675eff677b7922d27155a079f6b15181cfa65c699cfd7e7a8&token=273579944&lang=zh_CN#rd) + +[@折腾范儿_唯敬](https://weibo.com/agvicking):我们使用的编程语言,我们写下的代码,本质上就是一行又一行的字符串,而这些字符串到底是如何工作的,这本是属于编译原理范畴。很多书或者有些文章也会介绍到“词法分析/AST/解释执行”之类的高大上的概念,稍微有些抽象也有些晦涩。但是本文作者 [silan-liu](https://github.com/silan-liu) 从一个最基础最简单的 Lisp 语言入手,从 0 开始用 swift 写了一个解释器,在这个过程中你可以看到从分词到解析,再到生成 AST 的全部代码过程,亲自感受一遍代码被理解被执行的过程,相信会比书本上抽象的概念更容易吸收和理解。注:本文是该文章的第一篇,写到了生成抽象语法树 AST,而 AST 的执行运算出最终的结果,还请继续期待作者的下一篇文章。 + +## 摸鱼周报 + +[@摸鱼周报 #14](https://mp.weixin.qq.com/s/br4DUrrtj9-VF-VXnTIcZw):本期我们整理了一些包体优化的方案,从资源到代码层面,涉及的 Tips 很多,为了便于观看和记忆,我们将其制作成一张思维导图。开发者账号的续费问题最近有好几个小伙伴都有遇到,我们将其中的注意事项做了一个整理。 + +概念篇开始整理一些 Web 前端知识,介绍了 React、Vue、React Native 这几个概念,还附带了一些代码片段,实际学习之前可以给大家带来一个初体验。 + +资料内容收录了一个 Github 仓库 [Newbie Security List](https://github.com/findneo/Newbie-Security-List),其中整理了网络安全相关的博客、工具、电子书籍资料、在线知识库、在线漏洞库等内容。 + +[@摸鱼周报 #15](https://mp.weixin.qq.com/s/6thW_YKforUy_EMkX0OVxA):本期介绍了几个去掉导航栏返回按钮文案的实现方案;还有个系统自带的命令行工具 `plutil`,通常我们将其用于打包脚本设置版本号,但它还可以用来检查多语言文件的格式问题。处理繁杂且巨大的多语言文件,自动化工具永远是最佳助手。 + +概念篇 Web 前端知识第二弹:BootStrap、Webpack、Flutter。 + +博客篇整理了一些逆向和签名相关文章,虽然不是新文章,但篇篇都是精品,值得反复阅读。 + +资料内容收录了一个国外的网站:[SwiftLee](https://www.avanderlee.com/),一个分享关于 Swift、iOS 和 Xcode 技巧和窍门的周更博客,博客的文章写得清晰易懂,排版、配图和动画质量也很高。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#164-2021.06.28.md b/Reports/2021/#164-2021.06.28.md new file mode 100644 index 000000000..4fd8e573e --- /dev/null +++ b/Reports/2021/#164-2021.06.28.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #164 | 2021-06-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC 21 + +[@Parisfal](https://github.com/ParsifalC):WWDC 21 圆满结束,但关于 WWDC 21 的学习才真正开始~苹果官方汇总了[新技术和已有框架的重点变化](https://developer.apple.com/documentation/New-Technologies-WWDC-2021),本周我们针对部分内容更新了 2 篇 WWDC 21 Session 的深度解读,每篇文章都是经过不断推敲和审核才完成。 + +### [【WWDC21 10022】SwiftUI 技术内幕](https://xiaozhuanlan.com/topic/0619782354) + +[@MetaSky](https://github.com/CreatorMetaSky):通过阅读本文,带你一起深入解读 SwiftUI,提高应用程序的性能。 + +### [【WWDC21 10267/10268/10269】窥探 Xcode Cloud](https://xiaozhuanlan.com/topic/7496513820) + +[@林永坚](https://github.com/JakeLin):CI 已经成为项目开发中必不可少的一个工程环节,同时也是推动团队工程师文化的重要手段。在 WWDC 21, 苹果公司发布了官方的 CI - Xcode Cloud。通过这篇文章,我们一起窥探一下 Xcode Cloud 到底能做什么,以及我们该如何使用它? + +## 新闻 + +### [苹果 Apple Watch 国行获国家药品监督管理局医疗器械审批!ECG 移动心电图房颤提示软件过审](https://mp.weixin.qq.com/s/NNHRz-43YCZGo4M54uA6-g) + +[@Parisfal](https://github.com/ParsifalC):终于!大陆也将支持 ECG 功能了!喜大普奔!政策上已经支持,现在就看苹果什么时候开放了。 + +## 文章 + +### 🌟 🐕 [美团民宿跨端复用框架设计与实践](https://mp.weixin.qq.com/s/902BiSBx88rUSWBX64HZqA) + +[@JonyFang](https://github.com/JonyFang):从业务角度出发,跨端技术演进更多是在不同阶段、不同时间段内业务效率上的选择,美团民宿业务在大前端融合的浪潮中也在不断探索和迭代抉择,为解决业务痛点而产出跨端框架技术。本文主要分享美团民宿在跨端复用技术探索层面以及业务实践过程中积累的经验。文章目录如下: +1. 背景 + - 美团民宿业务介绍 + - 美团民宿移动端现状 +2. 美团民宿跨端复用框架设计 + - 行业现状 + - 整体方案设计 +3. 美团民宿跨端复用实践 + - 跨端复用场景下的问题 + - 跨端复用应用架构 + - 跨端复用方式设计 + - 跨端复用流程规范 + - 跨端复用质量保障 + - 成果 + +### 🌟 🐢 [Swift 编译器 Crash—Segmentation fault 解决方案](https://mp.weixin.qq.com/s/FSlJKnC0y51nsLDp1B3tXg) + +[@zvving](https://github.com/zvving):Swift 在国内普及缓慢,自身工具链不完善是重要制约因素之一:比如不少混编项目都碰到过偶现的 `Segmentation fault: 11` 和 `Illegal instruction: 4` 编译错误,开发者对这类编译器错误大多束手无策,只能寄望于『重试一下』以及 Xcode 后续更新解决。 + +抖音基础技术团队深入编译链路定位问题:从编译基础概念,到提取编译参数、调试 SIL 异常定位问题,进而引入静态检查规避。内容表达上层层递进,对编译器产生的 Crash 如何调试解决提供了思路,为『面向编译器编程』提供难得一见的参考! + +### 🌟 🐢 [抖音研发效能建设 - CocoaPods 优化实践](https://mp.weixin.qq.com/s/Pt6pcxKCHhdnnWPYrToNvA) + +[@红纸](https://github.com/nianran):Cocoapods 是 iOS 常用的包管理工具之一,当我们工程日渐庞大,在成百上千个组件之后,pod install 的执行效率有明显的降低。本文是抖音在实践中对于 Cocoapods 的原理分析和数点优化总结。 + +这边不占用篇幅,简单描述其中几点优化,详细优化方案可以查看原文进行阅读: +1. 性能评估:利用 Ruby-perf 方法级别统计系统耗时,为量化数据指标奠定基础 +2. Source 源按需更新:解决研发同学忘记更新 source 源的烦恼 +3. 简化决议:研发流程直接使用 Podfile.lock 进行线性决议,Molinillo 的图决议占少数比例 +4. 并发下载:并发下载依赖,使用 HTTP 代替 Git 访问 +5. 沙盒软连接:使用软链接代替拷贝,减少磁盘消耗 + +### 🐕 [Tagged Pointer对象安全气垫为何会失效](https://juejin.cn/post/6975765788355461133#heading-9) +[@Smallfly](https://github.com/iostalks):Objective-C 作为一门动态语言,在运行时做安全防护非常有必要。本文记录了作者加了安全防护后,依然发生了 `Unrecognized Selector` 类型崩溃的定位过程。为什么 Tagged Pointer 类型的对象,安全防护失效了?作者从原理出发,通过分析 Tagged Pointer 在不同系统的内存结构,最终修复了这个问题。推荐对 Tagged Pointer 实现原理感兴趣的同学阅读。 + +### 🐕 [Swift Hook新思路--虚函数表](https://mp.weixin.qq.com/s/mjwOVdPZUlEMgLUNdT6o9g) + +[@四娘](https://kemchenj.github.io):这是由 58 团队带来的文章,深入分析 Swift 的类结构以及基于 vtable 的函数调用过程,并且提出了通过修改 vtable 实现 method swizzle 的方法。 + +### 🐎 [SSWG Annual Update 2020](https://forums.swift.org/t/sswg-annual-update-2020/49223) + +[@xiaofei86](https://github.com/xiaofei86):自从上次 Swift 服务端工作组(SSWG: Swift server work group)进行重大更新以来,发生了很多事情。本文对 SSWG 过去一年的工作成果进行回顾,包括 gRPC、MongoDB、AWS Lambda 的引入;对明年的目标进行展望,包括 Concurrency 的接入、文档和工具的改进,以便对非苹果平台的开发提供更好的支持。感兴趣的同学可以持续关注。 + +## 代码 + +### [Surge](https://github.com/Jounce/Surge) + +[@老峰](https://github.com/gesantung):[Accelerate](https://developer.apple.com/documentation/accelerate) 框架为 iOS 提供了大规模的数学和图像高性能计算能力, 但其 API 却不易使用, Surge 正是这样一个 Swift 库,它使用 Accelerate 框架为矩阵数学、数字信号处理和图像处理提供简单易用的高性能 API,如常用的 + ,- , * ,/ ,有需求的同学可以了解一下。 + +## 音视频 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#165-2021.07.05.md b/Reports/2021/#165-2021.07.05.md new file mode 100644 index 000000000..4fb1bb3cb --- /dev/null +++ b/Reports/2021/#165-2021.07.05.md @@ -0,0 +1,146 @@ +# 老司机 iOS 周报 #165 | 2021-07-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC 21 + +### 🌟 线下沙龙:杭州场圆满结束!上海场迎来第二波免费门票开放~ + +[@Parisfal](https://github.com/ParsifalC):WWDC 系列活动 - 淘系技术.T 沙龙杭州专场在上周六下午已经圆满结束了!杭州专场同样邀请到了 4 位国内讲师以及 2 位特邀国外讲师。他们分别是来自手淘终端平台技术的无线开发专家**倾寒**、来自有赞的移动技术负责人 **Jackie**、来自抖音创作工具基础架构团队的移动端架构师 **Crespo** 以及来自西瓜视频的移动端工程师**黄骋志**,国外的特邀嘉宾还是我们熟悉的 Hacking With Swift 系列书籍作者 **Paul Hudson** 和 objc 联合创始人 **Chris Eidhof**。沙龙现场近 160 位开发者朋友相聚一堂,技术探讨氛围十分浓烈。 + +错过杭州场的朋友不用着急,**上海场我们也将在这周六正式举办**!上海场之前在我们 **WWDC.playground by SwiftGG** 直播活动中开放了第一批超过 100 张门票,很快就售罄了,现在**第二波门票也正式开放**,数量有限,想来现场的朋友抓紧扫码报名~ + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parisfal](https://github.com/ParsifalC):除了线下沙龙在火热进行,我们内参的更新也如火如荼。已经订阅的读者有福啦,本周我们一次性更新了 29 篇 session 的解读,每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。 + +- @Style月月:【WWDC21 10032】探索 WKWebView 新增功能 +- @琦乐无穷的小蘑菇:【WWDC21 10089】探索电子病历在 HealthKit 中的使用 +- @Leppard:【WWDC21 10145】Advanced Video Quality Tool 使用指北 +- @Rec:【WWDC21 10256】初探 Swift 算法和集合 & 【WWDC 10168】开发 Mail App 扩展 +- @Watermelon:【WWDC21 10268/10269】探索 Xcode Cloud Workflows +- @Ronbin:【WWDC21 10298】在 HomeKit 中添加对 Matter 协议的支持 +- @阿尘:【WWDC21 10039】Create ML 新妙用:手势分类和手部动作分类 &【WWDC21 10040】使用 Vision 框架来检测人物、人脸和姿势 +- @atuo:【WWDC21 10057】让你的 iPad 应用更进一步 +- @ljcoder:【WWDC21 10118】CloudKit 自动化开发 +- @Ckitakishi:【WWDC21 10121】为内容丰富的应用量身打造高效 VoiceOver 体验 +- @Frank:【WWDC21 10212】强大的 Network Instruments,诊断你的 APP 网络请求及流量控管 +- @希徳:【WWDC21 10264】让你的 App 支持快速备忘录 +- @Damien:【WWDC21 10061】Meet TextKit 2 +- @Tamarous:【WWDC21 10063】更好用的 Sheet +- @鸭嘴兽:【WWDC21 10085】聚焦苹果隐私原则 +- @刘杰:【WWDC 2021 10096】 苹果为了你的隐私又做了什么 +- @happts:【WWDC21 10098】在 Spotlight 中呈现 App 的数据 +- @志远:【WWDC21 10115】依托更完善的 App 分析指标,优化 App 展示页面的新方案 +- @DengXiaoBai:【WWDC21 10158】使用 VideoToolbox 探索低延时视频编码 +- @旷明:【WWDC21 10166/10167/10235/10236】DocC: 未曾设想的苹果文档 +- @张凡:【WWDC21 10203】Xcode Organizer 功能升级 +- @Semyon:【WWDC21 10204/10261/10170】云签与 Mac App 分发流程简化探索 +- @PerTerbin:【WWDC21 10209】通过断点技巧让调试更高效 +- @jojotov:【WWDC21 10254】Swift 并发编程:原理探究 +- @小铁匠Linus:【WWDC21 10259】键盘布局指南 +- @Uyloal:【WWDC21 10023/10260】构建使用键盘导航的应用程序 +- @瓮杰:【WWDC21 10265】将你的应用沉浸在空间音频中 + +## 文章 + +### 🌟 🐕 [在 iOS 客户端上通过 bitcode 为第三方库修复 bug](https://mp.weixin.qq.com/s/BuDnfl1ZbUtiZBhy8_Z7wA) + +[@JonyFang](https://github.com/JonyFang):本文主要记录了便利蜂技术团队 iOS 移动端遇到的一个疑难 bug 的排查过程,介绍了他们是如何通过修改 bitcode,成功在没有源码的情况下为有问题的三方库修复 bug 的。 + +文中用到的知识点总结如下: +1. 崩溃现场中,在主线程发现 `exit`,多半是由于 C++ 全局变量析构 + 多线程导致的; +2. 在有源码的情况下,可以通过调整编译参数消除全局变量析构; +3. 使用 7-zip 可以无损解包静态库文件; +4. 使用 otool 可以看到目标文件是否嵌入了 bitcode; +5. 使用 llvm 提供的工具,可以对 bitcode 进行修改、重新生成机器码; +6. 通过私有 API 可以模拟出应用退出,制造复现场景。 + +### 🌟 🐕 [iOS Pod 构建缓存方案](https://mp.weixin.qq.com/s/zWhgpuhq3r799ZYQPMsdFw) + +[@红纸](https://github.com/nianran):编译加速通常有两种方案二进制化和源码编译缓存,相较于二进制化,源码编译能解决二进制化带来的问题:编译宏问题、函数不存在等一系列问题。文中,作者使用基于 MD5 和 Xcode Cache 来做缓存机制,使得每次编译都是增量编译而不是全量编译。感兴趣的同学可以看下作者的方案描述。 + +此外本文是基于 Xcode Cache 实现的编译缓存机制,在即将到来的《老司机技术沙龙-上海场》中,第二场来自 Bilibili 的同学会介绍基于 Bazel 的远端编译缓存技术实践,也欢迎大家来现场聆听~ + +> 自荐: [WeijunDeng](https://github.com/WeijunDeng) + +### 🐢 [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ) + +[@享耳先森](https://github.com/iblacksun):移动互联网时代,网页依旧是内容展示的重要媒介,开发者经常需要与 `WKWebView` 打交道,但当遇到疑难问题时官方文档不足以解惑。本系列文章介绍了如果从 WebKit 源码入手,建立可调试工程,基于此深入理解 WebKit 核心内容。 + +### 🐢 [Swift 并发初步](https://onevcat.com/2021/07/swift-concurrency/) + +[@zvving](https://github.com/zvving):今年 Swift 的最大更新无疑是对 `async/await` 的支持,作为新手的你很可能已经跃跃欲试。但并发编程向来以错综复杂著称,光是并发/并行、同步/异步、串行/并行就已经让人傻傻分不清,更不必提 `Actor`、`Structured Concurrency`、`Async Sequence` 这些翻译起来都困难的概念。如果你也有以上这些疑惑,或许可以从本文中找到答案。这篇图文并茂的博客同时也是喵神新书[《Swift 异步和并发》](https://objccn.io/products/async-swift)的开篇之作。 + +> 本文推荐语来自 [弥明-KeithBird](https://github.com/KeithBird) + +### 🐎 [How Swift runs an async executable](https://oleb.net/2021/async-program-launch-sequence/) + +[@kemchenj](https://kemchenj.github.io):Swift 5.5 最大的更新就是加入了 Concurrency,@main 也添加了对应的支持,让我们可以将 main 函数标记为 async,由编译器负责生成代码,提供一个 async context 让 async main 函数执行,这篇文章就深入了 Swift 源码来探究其中的奥秘。 + +## 摸鱼周报 + +[@摸鱼周报 #16](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w):iOS 摸鱼周报不知不觉已经发布到第 16 期了,为了了解大家对周报的想法和建议,前段时间我们做了一次问卷调查。根据问卷反馈,我们停更一期进行了格式上的调整:去掉了`那些 Bug`、`编程概念`模块,增加了`本期话题`和`面试解析`。 + +改版之后内容更讲究实用性,特别是呼声很高的`面试解析`模块,我们对众多面试题目进行筛选,选出一些高频且实用的内容,然后用更通俗易懂的话讲明白其中的知识点,首期`面试解析`带来的是网络相关的一些题目。 + +其他更多内容欢迎阅读本期[完整版](https://mp.weixin.qq.com/s/nuij8iKsARAF2rLwkVtA8w)进行探索,如果有其他建议也欢迎后台留言告诉我们。 + +## 代码 + +### [世界上第一个浏览器源码](https://github.com/cynthia/WorldWideWeb) + +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):这个 repo 其实算得上是一个考古 repo 。维基百科上记载,世界上第一个浏览器是在 NextStep 的电脑上(repo 的 readme 上有索引),用 C 和 Objective-C 语言完成的,被 repo 作者从原始 WorldWideWeb 的仓库中剥离,保存于此。虽然这个项目中的代码过于老旧,已经无法编译,但有兴趣的人还是可以前往一探究竟,看看上古时代的浏览器代码大概是什么样子。 + +### [VideoLab - 高性能且灵活的 iOS 视频剪辑与特效框架](https://mp.weixin.qq.com/s/duLk1mNLdcqRlfzpnh2LEA) + +[@anotheren](https://github.com/anotheren):这是一个为视频剪辑编辑处理的框架,使用了 AVFoundation 和 Metal 作为其处理核心,目前已有以下特性: +* 高性能实时剪辑与导出 +* 高自由度组合视频,图片,音频 +* 支持音频音高设置,音量调节 +* 支持 CALayer 矢量动画,可以支持复杂的文字动画 +* 支持关键帧动画 +* 支持类似于 AE 的预合成 +* 支持转场 +* 支持自定义各类特效,如 LUT 滤镜,Zoom Blur 等等(MSL 编写脚本) + +如果你也有视频处理的相关需求,不妨看看能否满足项目需要。 + +## 音视频 + +### 🐢 [“Structured concurrency” with special guest Doug Gregor](https://www.swiftbysundell.com/podcast/99/) + +[@老驴](https://www.weibo.com/6090610445):这期 Swift By Sundell 节目请到了 Swift 开发组的成员之一 Doug Gregor 来聊聊 Swift Concurrency 和背后的故事。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#166-2021.07.12.md b/Reports/2021/#166-2021.07.12.md new file mode 100644 index 000000000..bef732ddc --- /dev/null +++ b/Reports/2021/#166-2021.07.12.md @@ -0,0 +1,181 @@ +# 老司机 iOS 周报 #166 | 2021-07-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑阵容继续升级,本周我们迎来了 [@Barney](https://github.com/BarnyZhao) 加入团队,Barney 目前就职于 Bilibili,熟悉移动架构治理,启动优化,复杂列表流畅度优化,稳定性等方向。** + +## WWDC 21 + +### 🌟 线下沙龙:上海场和深圳场也成功举办~ + +[@Parisfal](https://github.com/ParsifalC):WWDC 系列活动 - WWDC.T 沙龙上海场和深圳场已经在这个周末圆满结束了,感谢上海场的联合主办方字节音乐以及深圳场的联合主办货拉拉技术团队!至此,今年我们与 SwiftGG 一起举办的四场沙龙活动均已拉上帷幕,每场活动都有 4 个不同的讲师分享自己对于移动技术开发的干货见解,在社区内外都引发了很大的反响。针对大家比较关注的几个问题,我们这边做下统一回复: + +> 活动的录像和 PPT 等内容是否会放出? + +活动刚结束,我们所有的收尾工作都在有序进行中,计划在本月下旬会陆续将沙龙的相关资料在**老司机技术周报**公众号上发布,大家敬请期待~ + +> 以后还会不会有类似的活动? + +线下沙龙是今年尝试的一种方式,目前得到很多正反馈,我们也从几个城市的举办中汲取了很多经验,未来如果可行的话我们还是会继续尝试的。这次得到 SwiftGG、快手、淘系技术、字节音乐和货拉拉技术等团队的支持,我们也为到场的每一位朋友都准备了精美的礼品和茶歇,同时每个讲师嘉宾的无偿倾力相助也让我们非常感激。但毕竟我们是纯公益的活动,每场沙龙都是免费门票,沙龙投入的人力物力仍然是比较大的。短期内暂时没有在计划中的沙龙活动了,我们需要好好总结,也需要休息一下。当然,一旦有了新的计划,我们也会第一时间告诉大家,感谢大家一直以来的支持。 + +> 我所在的技术团队也想合作举办一场这样的沙龙活动? + +首先感谢你的关注与认可,不过正如上个问题所述的那样,我们短期是没有计划了。如果你确实感兴趣的话,可以添加我们的周报微信 **iTDriverr** 做个简单沟通,后续我们有计划了可以再详谈。 + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parisfal](https://github.com/ParsifalC):线下活动圆满结束,我们内参的更新也已经进入高潮。已经订阅的读者有福啦,本周我们一次性更新了 32 篇 session 的解读,总的更新文章数已达 69 篇!每篇文章都是经过不断推敲和审核才完成。感谢所有作者和审核人员。如果你喜欢的话,记得给作者点个赞~ + +- [【WWDC21 10183/10184】初探 Group Activities ](https://xiaozhuanlan.com/topic/0593748621) +- [【WWDC21 10225】使用 Group Activity 共享媒体](https://xiaozhuanlan.com/topic/2560189374) +- [【WWDC21 10187】使用 Group Activity 共享定制化内容](https://xiaozhuanlan.com/topic/6205739184) +- [【WWDC21 10189】使用 Group Activity 在 Safari 中共享媒体](https://xiaozhuanlan.com/topic/7165042893) + +@Darwin-lv & @刘思源:刚刚结束的 WWDC 2021,苹果给 Facetime 带来了新功能 SharePlay。使用苹果设备的用户,无论是 iOS、iPadOS 还是 MacOS,都可以通过 FaceTime 开启 SharePlay,和其他苹果用户,无论他使用什么类型的苹果设备,都可以实时的共享内容。 + +- [【WWDC21 10132/10133/10134】认识 Swift 中的异步与并发](https://xiaozhuanlan.com/topic/8627905413) + +@nuomi1:Swift 5.5 带来了万众期待的异步与并发的原生语言级支持,async/await 简化了异步编程,结构化并发为异步任务提供并发性,而 actor 则解决了共享可变状态带来的数据一致性问题。 + +- [【WWDC21 10258】理解和消除 App 中的卡死](https://xiaozhuanlan.com/topic/9027453618) +- [【WWDC21 10211】iOS 符号化:基础与进阶](https://xiaozhuanlan.com/topic/8652104379) +- [【WWC21 10216】Swift 中的 ARC 机制: 从基础到进阶](https://xiaozhuanlan.com/topic/1569740283) +- [【WWDC21 10180】检测和诊断 App 内存问题](https://xiaozhuanlan.com/topic/2079653148) + +@Rickey 王小吉 & @米广 & @刘夏 & @薛云强:WWDC 2021 继续在 App 性能上带来了很多 session,这几篇文章能够帮你深度理解性能问题的源头。 + +受限于周报篇幅,其他文章也同样精彩,但不便详述,欢迎大家自行订阅阅读~ + +- @saitjr:【WWDC21 10232/10283】Shortcuts 的新功能 +- @lmh:【WWDC21 10239】为你的 App 减少网络延迟 +- @牟爽:【WWDC21 10146】AVFoundation 的新变化 & 【WWDC21 10290】AVKit 的新变化 +- @展菲:【WWDC21 10092】了解并使用 Wallet 和 Apple Pay +- @师大小海腾:【WWDC21 10052】Mac Catalyst 的新功能 +- @Jimbaby:【WWDC21 10079】使用 PHASE 探索几何感知的音频 +- @大灰灰:【WWDC21 10048】构建优雅小组件的准则 +- @Kam:【WWDC21 10252】打造拥有流畅体验的列表和集合视图 +- @DylanYang:【WWDC21 10291/10294/10295】MusicKit 概述 +- @Hummer:【WWDC21 10033】基于隐私保护的广告归因 +- @East:【WWDC21 10041】使用 Vision 提取文档里的数据 +- @郑一一:【WWDC21 10102】遇见 Location Button +- @刘杰:【WWDC21 10123】初见 Screen Time API +- @kukushi:【WWDC21 10045】用 ShazamKit 创造自定义音频体验 +- @Chars:【WWDC21 10003】再谈 Apple Watch 的数据传输 +- @素燕(Lefex):【WWDC21 10104】在 iOS 中给 Safari 开发插件 +- @Chafferer:【WWDC21 10205】在 Xcode 中 Review Code 以及多人合作 +- @夏天:【WWDC21 10068/10069/10282】从 0 开始构建用户健康的研究和护理 APP +- @Nemo:【WWDC21 10160】ProRAW 的拍摄与处理 +- @wiilen:【WWDC21 10181】APP 性能优化终极求生指南 +- @SeaHub:【WWDC21 10175】IAP 用户退款与客诉处理优化 & 【WWDC21 10174】 IAP 后台通信优化与实践 + +## 文章 + +### 🌟 🐕 [Klee:用 C++ 实现数据驱动开发](https://mp.weixin.qq.com/s/y2700SOPIvETJ-x2BC5q5w) + +[@Barney](https://github.com/BarnyZhao):本文主要介绍了企业微信客户端团队对 C++ 实现数据驱动开发的探索,为读者介绍了暂时内部开源的 Klee 框架,,通过几个简单易懂的小例子,一步步讲述了 Klee 的强大特性, 并且未来有开源的打算,十分令人期待。 + +文中的关键点总结如下: +1. 数据驱动的核心思想,程序的状态由数据确定,通过接口操作数据来控制程序逻辑。 +2. 通过企业微信消息泡的例子,表达了 响应式数据的优雅。 +3. `Klee` 的声明式开发能力,组件化开发,混合开发。 +4. `Klee` 三大组件生态, 布局组件、视图组件、逻辑组件,并且可组合嵌套为复合组件。 +5. `Klee` 与 `RxSwift` 的对比,从数据源、流程可控性、多输入源、生命周期管理四个维度阐述了 Klee 的优势。 +6. 对未来的展望,代码开源、跨平台能力、可视化界面搭建。 + +### 🐕 [听说你想写个 Lisp 解释器(下篇)](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486230&idx=1&sn=b11b86685064968edd023851c47a981a&chksm=cf5584def8220dc83ff16b3c2216f555d481735b51c2687c433243953b1515b4cf1a7ab1c806&token=232571047&lang=zh_CN#rd) + +[@折腾范儿_唯敬](https://weibo.com/agvicking):在之前的周报中,我们介绍了“听说你想写个 Lisp 解释器(上篇)”,作者[silan-liu](https://github.com/silan-liu) 带着我们从0深入到了一个语言编译解析的过程,学习了从分词到解析,再到生成 AST 的过程。这次给大家带来了下篇,本文作者继续从 AST 入手,分析运算符,分析表达式,分析方法调用,最终给我们讲解了一个语法树最终执行出结果的全部过程。自此一个语言的完整编译过程,简单明了的呈现在了读者面前。 + +### 🐎 [淘系工程师亲述经历:如何避免成为“技术工具人”?](https://mp.weixin.qq.com/s/qBgEjtcTTVuZsAK6j0SEMw) + +[@Smallfly](https://github.com/iostalks):本文从不同角度讲述了作者加入阿里一年收获的成长。 + +- **关于思考:** 按照主管分配机制做事,只会让自己成为工具人,要思考如何「让事情因为自己而与众不同」。 +- **技术与业务两条腿走路:** 身为技术同学,很容易陷入技术自嗨,却没有多大贡献。建议用技术去赋能业务,让技术和业务相互成就彼此,共同成长。 +- **稳定发挥:** 稳定发挥、线性成长的选手比波峰波谷选手更受青睐。 +- **求同尊异:** 在团队引入一种新的机制,不被认可,应该如何思考与推进。 +- **身为 PM 如何做事:** 项目安全永远是第一位,有风险要及时同步;遇到线上问题立即向上反馈,并注意反馈的方式;让合适的人做合适的事情;如果不确定一件事情能否按时完成,就给悲观的答复;技术判断是核心竞争力。 + +### 🐎 [Swift5.5、DocC、Notifications,苹果 WWDC21 带来的最大技术变化](https://mp.weixin.qq.com/s/jw0R-83z9oCnVoffwy-ykg) + +[@Damien](https://github.com/ZengyiMa):苹果在 WWDC21 中给我们带来了许多的新的技术和解决方案,让我们来看看今年 Swift 的 async/await 特性、DocC(文档编译器)、以及系统中的 Notifications 通知中的的一些详细变化的内容吧。 + +### 🐕 [How iOS 15 makes your app launch faster](https://medium.com/geekculture/how-ios-15-makes-your-app-launch-faster-51cf0aa6c520) + +[@Leo](https://github.com/leomobiledeveloper):对于 deployment target 是 iOS 15 或者 macOS 12 的应用来说,苹果采用了一种新的格式来存储启动时候需要 fixup 的信息。目前像 bind/rebase 这种 fixup 信息是存储在二进制不同的表中的,修改后使用 chained fixups 格式,这种格式能带来包体积和启动时间的提升。 + +### 🐢 [深入理解 WKWebView(基础篇)—— WKWebView 加载生命周期与代理方法剖析](https://mp.weixin.qq.com/s/ZFui9IiMTWyLXGKZlbnzwQ) + +[@享耳先森](https://github.com/iblacksun):本篇是系列第二篇,第一篇见 [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ),本篇在上一篇的基础上介绍了 `WebKit` 内部的三个进程是如何协作及通信的。 + +### 🐕 [Diffable data source behavior changes and reconfiguring cells in iOS 15](https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/) + +[@老峰](https://github.com/gesantung):从 iOS 13 开始 Apple 为 TableView&CollectionView 引入 Diffable Data Source 特性实现局部刷新,iOS 15 提供了新 API 带来了更流畅的滚动体验,主要包含如下内容: + +- applySnapshotUsingReloadData(_:completion:):提供简洁的 API 处理非动画 diff reload +- reconfigureItems(_:):提供更高效的 cell 刷新,避免 dequeuing + +另外 [【WWDC21 10252】打造拥有流畅体验的列表和集合视图](https://xiaozhuanlan.com/topic/6813072594) 也有相关阅读,感兴趣对的读者建议阅读。 + +## 摸鱼周报 + +[@摸鱼周报 #17](https://mp.weixin.qq.com/s/3vukUOskJzoPyES2R7rJNg):第十七期摸鱼周报来了~这期概要如下: + +本期话题从一个同学的问题入手,谈了些关于习惯的理解。 + +Tips 部分围绕一个问题展开:“String.count 和 NSString.length 结果是一样的吗?他们之间有什么差别?”。 + +面试专题带来网络部分的第二弹,关于 TCP 连接,关于三次握手,四次挥手。 + +博客部分整理了一些网络优化的文章,网络请求分为:请求前阶段,连接阶段,数据处理阶段,各个阶段都是可以进行优化的。 + +如何用 Swift 实现常用的数据结构?来看 Swift Algorithm Club 吧。 + +两个实用工具推荐,桌面版 Homebrew:Cakebrew,一个好用的剪切板工具:Paste - Clipboard Manager。 + +## 工具 + +### [GitHub Copilot](https://copilot.github.com/) + +GitHub Copilot 是一个可以与你结对编程的 AI 程序员,它可以帮助你以更少的工作量更快地编写代码。它能够从注释和代码中提取上下文,并实时补完单个行或整个函数代码。GitHub Copilot 技术预览版目前以 Visual Studio Code 插件的方式提供,你需要在官网申请加入测试等待名单之后才有机会体验使用。虽然 AI 自动生成代码的话题经久不衰,各种工具也层出不穷,但 GitHub Copilot 的出现可能是距离该类工具真正落地使用最近的一次,感兴趣的朋友快点击官网申请试用吧。 + +* 推荐人:[Zero.D.Saber](https://github.com/faimin) + +## 代码 + +### [Pulse](https://github.com/kean/Pulse) + +[@AidenRao](https://weibo.com/AidenRao):Pulse 是适用于 Apple 平台的强大日志记录系统,基于 SwiftUI 构建。使用 Pulse Console 直接从你的 iOS 应用程序中检查网络请求和日志,并通过 PulseUI 展示出来。你的 QA 团队在问题反馈时可以轻松共享它们,附带在错误报告中。你可以在 Pulse macOS 应用程序中查看共享日志。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#167-2021.07.19.md b/Reports/2021/#167-2021.07.19.md new file mode 100644 index 000000000..620662158 --- /dev/null +++ b/Reports/2021/#167-2021.07.19.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #167 | 2021-07-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🌟 🐢 [Develop Apps for iOS](https://developer.apple.com/tutorials/app-dev-training/) + +[@EyreFree](https://github.com/EyreFree):苹果官方 iOS 开发教程终于来了,原来苹果没有忘记!此教程预计需阅读 12 小时左右,介绍 Xcode 的基础用法以及如何利用 SwiftUI 和 UIKit 两个框架来开发 iOS 原生 App,渐进式的代码演示,通俗易懂,非常适合初学者。 + +* 推荐人:[Keith](https://twitter.com/KeithBirdKTH) + +### 🐕 [使用 Swift 提高代码质量](https://juejin.cn/post/6984768684250120222) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):文章首先简单介绍了 Swift 的类型安全等特性,接着列举了一些容易忽略却较为有效的代码实践以及性能优化方案,例如 `` 减少方法动态派发 ``、`` 避免随意给予可选值默认值 ``、``protocol 添加 AnyObject`` 等等。如果团队计划投入 Swift,不失为一份大家可以参考的编码规范的最佳实践。 + +## WWDC 21 内参本周更新 + +### [【WWDC21 10030】高级 Web 内容开发](https://xiaozhuanlan.com/topic/5637428091) + +[@LittleSmart](https://github.com/LittleSmart): Web 应用作为互联网内容的重要组成部分,近些年随着 Web2.0 概念的蓬勃发展和包括 WebAssembly、WebGL2.0 等技术的演进,Web 应用在很多场景下已经具备和原生相媲美的性能,Apple 在过去的一年中为 Web应用带来了哪些改进,Safari 和 Webkit 又新添了一些怎样有趣又好玩的功能呢,让我们跟随 WWDC21 一起来探索一下吧~ + +### [【WWDC21 10053】优秀 Mac Catalyst App 的品质](https://xiaozhuanlan.com/topic/9324781605) + +[@OneeMe](https://github.com/OneeMe): Catalyst 这项技术是苹果于 2019 年的 WWDC 上推出的新技术,其目的在于让开发者能够很快的将一个 iPad App 转换成一个能够跑在 Mac 上的 App。三年来的积累也给这项技术带来了足够丰富的特性。那么,面对 Catalyst 中丰富的各种能力,如何才能让我们所创建的 App 在 Catalyst 下有更好的体验呢?让我们来逐一看看苹果工程师给我们的建议吧! + +### [【WWDC21 10122】图表的无障碍支持进阶](https://xiaozhuanlan.com/topic/7904561328) + +[@Ckitakishi](https://github.com/Ckitakishi): 今年,Apple 带来了全新的音频图表(Audio Graphs),以此为契机,本文将围绕图表无障碍化的基础知识,现状和新特性展开讨论,旨在为正在探索图表无障碍访问的你点亮一盏明灯。 + +### [【WWDC21 10276】使用相机进行键盘输入](https://xiaozhuanlan.com/topic/0281395647) + +[@LinusLing](https://github.com/LinusLing): 我们在日常生活中使用 iOS 应用程序时,常常对那些非数字文本的输入感到很头疼,比如发票,活动传单,还有酒店房间的大活页等。幸运的是,iOS 15 出了一个新功能,可以让你使用相机从周围的世界直接捕获文本,不再需要自己在键盘打字输入了。本文将探讨使用相机进行键盘输入的内容过滤方式以及原理,从而帮助开发者开发相应场景的功能,从而让用户在使用应用程序时获得更流畅、更愉快的体验。 + +## 播客 + +### [WWDC21 瞎谈:Swift 支棱起来了吗?](https://www.xiaoyuzhoufm.com/episode/60ef7aababf61dc037c4a96a) + +[@没故事的卓同学](https://github.com/lacklock):我们终于录上了一期技术播客,本期播客中我、四娘、老驴三人谈了谈对 Xcode cloud 的看法,也谈了 Swift 的异步和并发的新特性。欢迎大家收听、评论、订阅。本期节目在苹果播客、网易云音乐、QQ 音乐、汽水儿、喜马拉雅中也有上线。 + +## 文章 + +### 🌟 🐕 [西瓜客户端埋点实践:基于责任链的埋点框架](https://mp.weixin.qq.com/s/iMn--4FNugtH26G90N1MaQ) + +[@Barney](https://github.com/BarnyZhao):本文深入浅出,从一个基本的收藏点击埋点切入,对比分析了常见的透传埋点,全埋点的优劣,最后引出基于责任链的埋点介绍。 + +文中的关键信息总结如下: +1. 埋点的背景介绍,经典消费场景分析。 +2. 以收藏场景为例,通过伪代码分析对比透传和全埋点的优劣。 +3. 基于责任链的埋点框架介绍 + - 优点:侵入性小、关注点分离 + - 缺点:理解成本、无强制约束 + +### 🐎 [Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271) + +[@Keith](https://github.com/KeithBird):上周我们介绍了码农批量下岗项目 Copilot,该项目还在测试阶段就已经让无数程序员大呼 woc。解放全 GitHub 的项目自然少不了 Swift 代码的投喂,虽然 Copilot 目前只可在宇宙 IDE - VS Code 中使用,但支持多平台一直是 Swift 服务端团队 [SSWG](https://swift.org/sswg/) 的目标之一。[Experience of using VSCode as a Swift IDE](https://forums.swift.org/t/experience-of-using-vscode-as-a-swift-ide/50271) 一文介绍了目前在 VS Code 写 Swift 的优缺点和对未来的展望。至于如何进行部署,可以参考官方的 [IDEs/Editors with Swift Support](https://github.com/swift-server/guides/blob/main/docs/setup-and-ide-alternatives.md),和非官方但更加通俗详细的 [iOS Development on VSCode](https://medium.com/swlh/ios-development-on-vscode-27be37293fe1)。值得一提的是,尽管目前 Copilot 只对 Python、JS、Go、Ruby 等网红语言才有最完美的支持,但在少有人用 VS Code 开发 iOS 的情况下,其对 Swift 的支持依然十分惊艳。最后,因此对人类失去信心的同学可以复习王垠的「[人工智能的局限性](https://www.yinwang.org/blog-cn/2017/04/23/ai)」,重拾改一辈子 bug 的无产阶级觉悟。 + +> 由 [@Keith](https://github.com/KeithBird) 推荐并完成简评 + +### 🐕 [听说你想写个 DNS 服务器 - 数据包](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486555&idx=1&sn=a1e7e018a549ad155cfad6eb4b135e3e&chksm=cf558393f8220a852fdd90d0919981239d2bbe0266f511ffd27ecbde6e972399b24fdeaec9b8&token=1949232915&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文作者开始了一个新的系列来讲解如何用 Swift 语言来实现 DNS 服务器。作为本系列的开篇,本文主要介绍了 DNS 数据包的结构(包头和包体数据),各个部分的字段定义,布局信息以及介绍了如何通过抓 DNS 数据包来解析 DNS 相关数据的方法。 + +扩展阅读: + +- [听说你想写个 DNS 服务器 - 数据写入](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486681&idx=1&sn=daebc908f4fe22c6d773f1e4e38fa350&chksm=cf558311f8220a07af12fe2a0956fd76ddff0006162ebb983b1795eb201bbe11c3a8456ebced&token=540344501&lang=zh_CN#rd) + +### 🐕 [Improving Platform Channel Performance in Flutter](https://medium.com/flutter/improving-platform-channel-performance-in-flutter-e5b4e5df04af) + +[@Damien](https://github.com/ZengyiMa):本文是 pigeon 的作者 Aaron Clarke 带来的精彩好文,Aaron Clarke 通过减少在 Dart、C++、ObjC、JVM 之间信息传递中发生的多余 copy 优化,来提升 Native 与 Flutter 通信的性能。最终取得的效果在老设备上 15% 的提升,新设备上获得了 42% 的性能提升。并在文章最后给出了一些优化建议,如果对性能要求高场景,可以使用 BasicMessageChannel 和 FlutterBinaryCodec 并且配合自己实现 encode & decode,通过这个组合来提高 Flutter 和 Native 之间的性能。 + +## 摸鱼周报 + +[@摸鱼周报 #18](https://mp.weixin.qq.com/s/JsGmu7pzYLI3Svrmk5i2cA):第十八期摸鱼周报来啦,一起看看本期概要: + +本期话题:什么是暗时间,来源于刘未鹏的《暗时间》。 + +Tips 内容用一张详细的思维导图总结了 Fastlane 几乎所有的常见方法。 + +面试解析围绕 block 的变量捕获机制展开说明了 block 的一些用法和面试高频考察点。 + +优秀博客带来了几篇编译优化相关的文章。 + +学习资料带来了一个从 0 设计计算机的视频教程,偏电路一些;还有 Git 和正则表达式的文字教程。 + +开发工具介绍了两个代码片段整理应用:SnippetsLab 和 CodeExpander。 + + +## 代码 + +### [Hammer](https://github.com/lyft/Hammer) + +[@Smallfly](https://github.com/iostalks):[Hammer](https://github.com/lyft/Hammer) 是一款模拟交互事件的 Swift 开源库,支持模拟触摸,iPad 手写笔,键盘输入。它能很好地用于 UI 自动化测试,尽可能替代一系列的人工操作。有兴趣的同学可以了解一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 杭州网易云音乐社区团队招聘高级/资深 iOS 开发工程师,包含云音乐动态,MLog 视频,评论,播客,云圈,音视频编辑等多条核心业务。负责音视频社区生产分发建设,打造良好的社区互动氛围。我们保持将最新技术引入,提升开发效率,带给用户更好的体验。联系方式:简历发送至 iostalkboy@gmail.com。 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#168-2021.07.26.md b/Reports/2021/#168-2021.07.26.md new file mode 100644 index 000000000..3e178db8d --- /dev/null +++ b/Reports/2021/#168-2021.07.26.md @@ -0,0 +1,148 @@ +# 老司机 iOS 周报 #168 | 2021-07-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC + +### WWDC 21 内参 + +老王身体抱恙,停更一周~ + +## 新手推荐 + +### 🌟 🐢 [干货 | Flutter 控件 CustomScrollView 原理解析及应用实践](https://mp.weixin.qq.com/s/dF5Id3w_To4aXeXDbUnUjQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):CustomScrollView 可以说是 Flutter 开发中一定会用到的一个控件,List,Grid,Sliver 等都是基于 CustomScrollView 实现的,那么如何用好 CustomScrollView 是一个技术活,本文由携程技术产出,从原理上讲解如何更好的使用 CustomScrollView,文中涉及诸多开箱即用的知识点,小编强烈推荐各位仔细学习一遍。 + +## 文章 + +### 🌟 🐢 [深入理解 WKWebView(基础篇)—— 聊聊 Cookie 管理那些事](https://mp.weixin.qq.com/s/jZP2DsAa5OV91wdNMw39cA) +[@享耳先森](https://github.com/iblacksun):本篇是系列第三篇,文章首先介绍了 Cookie 相关 API,然后深入介绍 WebKit 内部 Cookie 管理方式及技术原理。前两篇见: + +- [深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析](https://mp.weixin.qq.com/s/VdkVBIQwj7WkAk8-5wppmQ) +- [深入理解 WKWebView(基础篇)—— WKWebView 加载生命周期与代理方法剖析](https://mp.weixin.qq.com/s/ZFui9IiMTWyLXGKZlbnzwQ) + + +### 🐕 [详解:mach-o 文件如何分析多余的类和方法](https://mp.weixin.qq.com/s/z0eK4cOfvYWFhHl16rGnEg) + +Mach-O 是 Mach Object 的缩写,是 Mac 上的可执行文件的格式。本文通过对 Mach-O 的介绍,让我们了解到如何通过 Mach-O 来分析无用类,从而减少包体积的大小。作者还基于此封装了一个分析工具,有兴趣的读者可以了解一下。 + +### 🐕 [iOS 优化 - 瘦身](https://mp.weixin.qq.com/s/wDcYvea5dTq0dh0PBwRu4A) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了 iOS 的经典问题,瘦身优化,从最基础的概念讲起,新人友好,同时也适合大家温故而知新。这是一个优化的专题系列,可以持续关注。 + +关键点脉络梳理如下: +- APP 的**下载大小**简单介绍 +- 瘦身方向 +- App Thinning +- 资源文件瘦身 +- 编译选项优化 +- Mach-O 可执行文件瘦身 + +### 🐎 [Mutating and non-mutating Swift contexts](https://www.swiftbysundell.com/articles/mutating-and-nonmutating-swift-contexts/) + +[@xiaofei86](https://github.com/xiaofei86):Swift 帮助我们编写更健壮代码的方法之一是通过其广泛使用的值类型。在使用值类型时,所有更改默认情况下仅对我们正在使用的副本执行,并且实际执行更改的 API 必须清楚地标记为 mutating。本文将探讨 mutating 及其不太常用的对应项 nonmutating 的能力和使用场景,感兴趣的同学可以阅读原文了解。 + +### 🐎 [Fixing a hard-to-find bug in Dark Mode](https://www.jessesquires.com/blog/2021/07/15/fixing-a-hard-to-find-bug-in-dark-mode/) + +[@Smallfly](https://github.com/iostalks):市面上主流 iOS App 基本都支持了系统的深色模式。本文作者在支持深色模式时,遇到 UIButton 在系统主题切换后,部分颜色没有被正常更新。经过一系列的分析,最终定位到问题出在 [Dynamic System Colors](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/) 上。这个坑在支持换肤时还是比较容易踩到的,有需求的同学可以关注一下。 + +### 🐎 [重磅开源|AOP for Flutter 开发利器——AspectD](https://mp.weixin.qq.com/s/lvP2UFHOG0HrtqMMf7na0g) + +[@Damien](https://github.com/ZengyiMa):面向切面的编程意为:通过预编译方式和动态代理技术在不侵入代码的前提下在指定位置插入功能代码,由于在 Flutter 中禁止了反射的功能,所以在 Flutter 实现 AOP 框架只能另辟蹊径。本文是咸鱼团队在实现 FLutter 的 AOP 框架带来的新的思路,通过对 FLutter 的 dill(Dart Intermediate Language)文件的修改来实现了 AOP 的功能,在 Flutter 中有 AOP 需求的同学不妨可以仔细阅读。 + +### 🐎 [听说你想写个 DNS 服务器 - 记录类型扩展](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486727&idx=1&sn=a71ed08275433e15593069e010c31c02&chksm=cf5582cff8220bd96ce28f0dd8874f27064e3999792e6ad25d90a0cf2f56651278495a6927de&token=87205550&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文是《听说你想写个 DNS 服务器》系列的第三篇,介绍了记录结构以及除 ipv4 映射记录之外的其他四种记录类型: + +- AAAA:域名与 ip 映射记录,ipv6 地址 +- NS:DNS 域名服务器记录 +- CNAME:域名对应的另一个域名,表示真正查找的域名 +- MX:邮件服务器域名记录 + +并结合代码展示了如何处理记录读取扩展和记录展示扩展。 + +## 摸鱼周报 + +[@摸鱼周报 #19](https://mp.weixin.qq.com/s/dtyozlqCO7PcpyGhx2qB5g):第十九期摸鱼周报来了,一起来看下本期概要: + +- 本期话题通过对《暗时间》里内容的总结,分享了一些学习和记忆的方法。 +- 开发 Tips 讲了如何区分 `minimumLineSpacing `和 `minimumInteritemSpacing` 这两个属性及本地化关于日期的注意事项。 +- 面试解析讲解了属性及属性关键字的几个知识点,由@师大小海腾和@反向抽烟整理,内容非常之详细。 +- 优秀博客整理了几篇卡顿优化的优质文章。 +- 学习资料有两个内容,Combine Operators:帮助理解 Combine 操作符的手机端 App;还有 Stanford 最新的 SwiftUI 2.0 双语教程。 +- 开发工具带来了一个基于 linkmap 分析执行文件大小的工具:LinkMap。 + +## 工具 + +### [Xcodes.app](https://github.com/RobotsAndPencils/XcodesApp) + +[@AidenRao](https://weibo.com/AidenRao):一个可以安装多个 Xcode 版本,并在它们之间快速切换的应用。 + +- 可安装所有可用的 Xcode 版本 +- 自动化安装,并使用多达 16 个链接,下载速度比直接通过 URLSession 快 3-5 倍 +- 一键安装对应版本的 xcode-select +- 可查看发布说明,操作系统兼容性。 + + +### [Flutter 应用内调试工具 UME 开源啦](https://github.com/bytedance/flutter_ume) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang): 由字节跳动开源。UME 当前内置了如 性能浮层、日志展示、颜色吸管、代码查看 等 10 个插件,可以按需注册插件。已满足大部分日常开发所需。[pub 地址 >>>](https://pub.dev/packages/flutter_ume) +- 优点: + - 插件可以按需注册,且支持开发者自己定制件,UME 欢迎大家共建 + - 对 ``1.12.13``,``2.0.1`` 等几个较为稳定的版本都有兼容 + - 有单测保证工具稳定性 +- 不足: + - 有一定侵入性。由于 UME 内部管理路由,因此 APP 内其余 showDialog 等方法需要传入参数 ``useRootNavigator: false`` + - 部分功能依赖 ``VM Service``,本地运行需对脚本进行修改(添加 ``--no-dds`` 参数) + - 插件内部实现还未兼容 ``nullsafety``,当前只能通过 ``dependency_overrides`` 覆盖版本在 ``no-sound-null-safety`` 模式下使用的,期待适配 + +## 代码 + +### [GodL/Binder](https://github.com/GodL/Binder) + +[@JonyFang](https://github.com/JonyFang):Binder 是一个由 `PropertyWrapper` 驱动的数据绑定库,实现了一些类似 RxSwift 的变换操作函数,函数之间支持相互组合。 + +### [CalendarApp](https://github.com/richardtop/CalendarApp) + +[@Parsifal](https://github.com/ParsifalC):[@Richard][https://github.com/richardtop] 录制了一期关于使用 [CalendarKit](https://github.com/richardtop/CalendarKit) 打造一个简单仿原生日历 App 的视频教程 - [Create iOS Calendar App in Swift with CalendarKit](https://www.youtube.com/watch?v=iC4XxmExqFA),这是他最后完成的一个 Demo 代码。Calendar 相关的教程不多,[CalendarKit](https://github.com/richardtop/CalendarKit) 可以迅速帮你在 App 内创建类似系统日历 UI 的功能。 + +> 由 [@Richard][https://github.com/richardtop] 自荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> bilibili 主站技术中心招聘 高级/资深 移动开发工程师 (包含 iOS Android C++ 等方向) +本团队为核心团队,包含基础架构,播放业务,流量业务,创新业务,通用业务等等众多选择,是内部最大的移动端团队。 +负责横向支撑整个平台,追求极致的用户体验,对新技术保持敏感,是国内少数使用 bazel 的团队。 +联系方式:简历发送至 zhaohan01@bilibili.com。(注明岗位) + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#169-2021.08.02.md b/Reports/2021/#169-2021.08.02.md new file mode 100644 index 000000000..9e48ad315 --- /dev/null +++ b/Reports/2021/#169-2021.08.02.md @@ -0,0 +1,182 @@ +# 老司机 iOS 周报 #169 | 2021-08-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC 21 + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):上周四开始,我们已经在周报公众号上开始陆续发布今年杭州场沙龙的分享文章、PPT 和视频等内容了,本周也会继续发布杭州场和上海场的相关内容信息,欢迎大家继续关注~ + +- [淘宝工程渐进式拥抱 Swift - 倾寒](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491478&idx=1&sn=8dc4a6a6062056b9bed801ea043f7919&chksm=eaa2809dddd5098b4e8ecc06ba6d0649321f75981f56517ed25577e12de183e392577aba9267&token=1581804799&lang=zh_CN#rd) +- [西瓜视频的 IAP 支付实践与 StoreKit 新特性 - 黄骋志](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491481&idx=1&sn=652c93ef30634f979008387cc029ec68&chksm=eaa28092ddd509848862d136c906a913bdb40a41f2220245393ed0498b4669671c0e4b41247e&token=1581804799&lang=zh_CN#rd) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参恢复更新,8 篇高质量内容已经发布~ + +- @VincentMing:[【WWDC21 10132】 认识 Swift 的 Async/Await](https://xiaozhuanlan.com/topic/9307851264) +- @fakeGourmet:[【WWDC21 10143】- 探索 AVFoundation 中的 HLS 变体](https://xiaozhuanlan.com/topic/8432795016) & [【WWDC21 10142】 - 使用 HLS 让媒体无缝切换](https://xiaozhuanlan.com/topic/7392854016) & [【 WWDC21 10141】 - 使用 HLS Content Steering 提升全球范围流媒体的可用性](https://xiaozhuanlan.com/topic/2956103478) +- @Mim0sa:[【WWDC21 10097 10251 10349】- SF Symbols 使用指南](https://xiaozhuanlan.com/topic/9214865730) +- @MarryNerV:[【WWDC21 10220 10221】 - 本地化功能上新](https://xiaozhuanlan.com/topic/6278501394) +- @Nemo:[【WWDC21 10047】 - 相机拍摄新变化](https://xiaozhuanlan.com/topic/0729458136) +- @kk:[【WWDC21 10002 10009】- watchOS 8 中的新特性](https://xiaozhuanlan.com/topic/0142735986) + +### WWDC 21 播客 + +#### [WWDC21 瞎谈:Catalyst、SwiftUI、Flutter 谁是 UI 的未来?](https://www.xiaoyuzhoufm.com/episode/61009e2083c3728d82be24c4) + +[@没故事的卓同学](https://github.com/lacklock):这是我们第二期 WWDC 相关的播客,本期我和老驴、四娘、少庸一起聊了一下对 Catalyst、SwiftUI、Flutter 的看法。本期节目在苹果播客、网易云音乐、QQ 音乐、汽水儿、喜马拉雅中也有上线。 + +## 文章 + +### 🌟 🐢 [我写技术文章的一点心得](https://ming1016.github.io/2021/07/24/my-little-idea-about-writing-technical-article/) + +[@Barney](https://github.com/BarnyZhao):本文是戴铭老师对自己过往写作经验的深度总结,从四个写作要点开篇,分析了自己过往的经典文章以及当时的想法和灵感。紧接着结合本次 WWDC 举例,传授新手如何开始写作的经验。可谓是干货满满,适合反复阅读。 + +关键点脉络: +- 四个点 +- 过往经验 +- 我是新手怎么办 +- WWDC 和 经验总结 + +### 🌟 🐕 [基于 Swift 编写严肃脚本工具](https://github.com/100mango/zen/blob/master/%E5%9F%BA%E4%BA%8E%20Swift%20%E7%BC%96%E5%86%99%E4%B8%A5%E8%82%83%E8%84%9A%E6%9C%AC%E5%B7%A5%E5%85%B7/%E5%9F%BA%E4%BA%8E%20Swift%20%E7%BC%96%E5%86%99%E4%B8%A5%E8%82%83%E8%84%9A%E6%9C%AC%E5%B7%A5%E5%85%B7.md) + +[@EyreFree](https://github.com/EyreFree):本文作者是目前就职于微信的 100mango 老师,开篇通过分析 Swift 在国内外的使用现状以及在微信的一些应用场景表现了 Swift 的光明前途,并且借由「微信支付跨平台代码生成器是由 Swift 编写的」这一事例引出了文章主题:如何通过 Swift 来编写脚本 / 自动化工具。主要分为以下四步: + +- 创建工程:通过 Swift Package Manger 创建了工程,并调整了工程结构,依赖管理; +- 编写代码:通过编写一个简单生成随机数的工具感受 Swift 编写脚本工具,并给我们的工程引入了苹果开源的 Argument Parser 库。用于简化命令行参数解析,优化工具说明; +- 测试:分别对逻辑代码和命令行 API 进行了测试; +- 发布:通过一行简单的代码,就能生成可执行文件进行分发; +- 进阶操作:最后介绍了几个进阶操作,我们还发现通过 Swift 编写脚本工具,还能直接和 AppKit / SwiftUI 进行交互,非常的具备扩展性。 + +这篇文章并没有展示特别复杂的代码,但是根据上面展示的步骤、原则,就能编写出能够支撑像微信支付跨平台代码生成器这样的命令行工具。Swift 是一门优雅的编程语言,以后大家不管是遇到编写一些小脚本还是开发大型严肃工具的场景,都可以尝试用 Swift 实现了呢! + +### 🌟 🐕 [Calling Hidden/Private API from Swift in Style](https://medium.com/swlh/calling-ios-and-macos-hidden-api-in-style-1a924f244ad1) + +[@JonyFang](https://github.com/JonyFang):在 Swift 中使用 Objective-C 私有 API 一般有两种方式,自己创建头文件或消息的方式,但不管哪一种使用起来都会比较繁琐。本文中,作者基于 Swift 的 `@dynamicMemberLookup` 和 `@dynamicCallable` 特性封装了围绕 Objective-C 类和对象的库 -- [mhdhejazi/Dynamic](https://github.com/mhdhejazi/Dynamic)。`mhdhejazi/Dynamic` 满足了 Swift 可以以更简单和直观的方式来调用私有 API。 + +### 🌟 🐕 [大家来找茬:记一起 clang 开启 -Oz 选项引发的血案](https://mp.weixin.qq.com/s/1RNsrmUKuxmQa0jPZozE9A) + +[@Leo](https://github.com/leomobiledeveloper):我们可以通过 -Oz 的编译选项来优化包体积,但是在某些极端情况下 -Oz 会导致编译器的某些优化失效,引起一些非预期的问题。本文就是关于一个开启了 -Oz 导致 autorelease 优化失效,对象误被放入 autoreleasepool 中,进而引起大量内存堆积的问题。文章干货颇多,推荐阅读。 + +### 🐎 [技术债治理的四条原则](https://insights.thoughtworks.cn/managing-technical-debt/) + +[@莲叔](http://github.com/aaaron7):在我们的工作中,重构是一个经常提及的话题,毕竟现在都是业务优先,几乎没有一个业务的技术架构是一步一步稳扎稳打的建立起来的, 普遍都是上线要紧,随着而来的就是各种各样的技术债。对于技术债,重构还是不重构,这也是一个问题。不重构吧,做新需求很蛋疼,容易踩雷,稍不留神就线上故障。重构吧,投入很多人力物力,但其结果很难产生真正的业务收益,业务方不买单也就算了,还可能导致目前线上已经在跑的模块出现问题。不管从哪个方面来看,这都是一个很两难的问题。这篇文章针对这个两难问题进行了非常深入的分析与讨论,并且旗帜鲜明的给出了自己的态度:要解决,但是需要遵循几个基本的原则。感兴趣的同学可以阅读一下,或许可以找到符合你们团队实际情况的答案。 + +### 🐕 [The flutter “const” Keyword demystified.](https://medium.com/flutter-community/the-flutter-const-keyword-demystified-c8d2a2609a80) + +[@邦Ben](https://weibo.com/linwenbang):这篇文章简单介绍了 const 的使用会对某些频繁创建的场景的性能有所优化,例如在构造方法中加入 const 声明,可以提高复用 widget,节省内存。总体而言,在频繁复用场景中(例如做动画),建议加上 const ,其他基本不复用的场景则作用不大。 + +可以配合下方链接阅读,参考文章作者也对 const 的使用进行了简单的测试以证明效果。 + +参考: +[Flutter 的 Widget,刻意加上 const,真的值得吗?](https://juejin.cn/post/6977212326394986510) + +### 🐕 [网易新闻 iOS 工程组件化实践](https://mp.weixin.qq.com/s/mfvbRXEhJBqzhwQbjnuZgw) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):网易新闻也是迭代了 10 年的 APP 了,最终实现了主工程里只有一个 main 文件,组件数量达到了 268 个。 + +每个 APP 会由于项目特点以及团队组织结构的区别,在实践中细节会有些许不同,但目的都是明确的:提高可维护性、开发效率。网易新闻业务之间耦合较多,业务之间频繁相互调用接口也有成本;团队没有按业务进行拆分,同时业务之间也不需要隔离。因此网易新闻没有选择通过路由将业务完全隔离,而是将业务拆为两层,顶部的展现层利用路由隔离,下方的业务层可以单项依赖。 + +同时网易新闻还对工具链进行了改造: +- 在组件配置信息中增加 level、binary 等参数,在 ``pod install`` 时前置报出 warning ,防止组件之间的错误依赖关系 +- 推行严格的代码责任制以及 Merge Request 规范化 +- 未选择版本号,而是采用通过 Xcode 缓存,MD5 区分版本的本地二进制方案,减少额外的人力成本 + +> 自荐: [lixf](https://https://github.com/lixinfei) + +### 🐕 [美团 App 页面视图可测性改造实践](https://mp.weixin.qq.com/s/YcvFSs-97SpMKjlpj9Dzqg) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):本文围绕动态化容器中的动态布局技术,阐述了如何通过可测性改造来帮助达成提升测试效率的目标。本文目录: + +* 美团App的页面特点 + +* 自动化测试实施中的技术挑战 + * 页面元素无法定位 + * Appium元素定位的原理 + * AccessibilityNodeInfo和Drawable + +* 页面视图可测性改造-XraySDK + * 定位方案对比 + * 视图信息的获取和存储-XrayDumper + * 视图信息的输出-XrayServer + * SDK整体功能结构 + * 视图信息的增强 + * 动态布局自动化的收益 + +* 未来展望 + * 使用视图解析原理解决WebView元素定位 + * 视图可测性改造更多的应用场景 + +### 🐕 [面试中 LRU / LFU 的青铜与王者](https://github.com/halfrost/Halfrost-Field/blob/master/contents/Go/LRU:LFU_interview.md) + +[@J_Knight_](https://github.com/knightsj):本文作者介绍了 LRU 和 LFU 算法的原理和 Go 语言的实现。也分享了 LRU 和 LFU 的优化方案和“如何实现一个高并发且线程安全的 LRU” 这个问题的实现思路。 + +### 🐕 [从 WebKit 源码中学习手势处理的高级用法——WKWebView中的手势识别](https://mp.weixin.qq.com/s/pt1nk5z5nK-fPCKqQlP-sg) + +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):本文的作者从对 iOS 事件响应与手势的基础原理入手,深挖到 WebKit 源码中对于手势的处理策略,针对 Web 界面中更复杂更多样的手势处理进行分析与总结,非常有助于我们加深对 iOS 手势的深入理解与运用。 + +### 🐎 [Xcode 13 Missing Info.plist](https://useyourloaf.com/blog/xcode-13-missing-info.plist/) + +[@AidenRao](https://weibo.com/AidenRao):文中主要介绍了 2 点: + +1、Xcode 13 新起的 SwiftUI 项目,Info.plist 文件已经不存在,文中介绍了如何找回 Info.plist。 + +2、Xcode 13 新建的项目无法用 Xcode 12 打开,文中介绍了如何更改设置来向前兼容 Xcode 12。 + +> 感谢 [faimin](https://github.com/faimin) 的推荐 + +## 摸鱼周报 + +[@摸鱼周报 #20](https://mp.weixin.qq.com/s/PjiZzx3VSAfAGHRJs160aQ):第二十期摸鱼周报来了,一起来看下本期概要: + +* 小编整理了一些洪灾应对的指南,希望对大家有所帮助。 +* Tips 部分介绍了如何绘制一个高颜值的统计图。 +* 面试解析模块本期讲解深拷贝浅拷贝的知识点。 +* 优秀博客汇总了不少包体积优化的优秀文章。 +* 学习资料推荐了 [Better Explaine](https://betterexplained.com/) 这个网站,其用于帮助大家理解那些复杂的数学概念。 +* 截图工具 Snipaste,无用图片搜索工具 LSUnusedResources。 + +## 代码 + +### 🐕 [OpenCombine](https://github.com/OpenCombine/OpenCombine) + +[@zvving](https://github.com/zvving):与 SwiftUI 一起推出的 [Combine](https://developer.apple.com/documentation/combine) 本可以作为响应式框架独立使用,但最低系统 iOS13 的限制极大制约其应用。 + +类似 [CombineX](https://github.com/cx-org/CombineX),[OpenCombine](https://github.com/OpenCombine/OpenCombine) 旨在为 iOS/macOS 低版本(>= iOS 8.0)及跨平台场景提供 API 一致的开源实现,为后续向官方 Combine 过渡提供『无缝切换体验』。项目依旧在早期阶段,感兴趣的朋友们可以提前了解,生产环境应用需谨慎。 + +> 感谢 [XanderXu](https://github.com/XanderXu) 的推荐 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#170-2021.08.09.md b/Reports/2021/#170-2021.08.09.md new file mode 100644 index 000000000..481240b04 --- /dev/null +++ b/Reports/2021/#170-2021.08.09.md @@ -0,0 +1,144 @@ +# 老司机 iOS 周报 #170 | 2021-08-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~欢迎黄骋志加入周报组织。骋志是我们这次杭州场线下沙龙的分享嘉宾,完成了 IAP 在西瓜视频上的落地,同时对跨端技术(Flutter & RN)均比较熟悉。希望骋志的加入也能为大家带来更多元化的内容输出!** + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):我们正在周报公众号上陆续发布今年杭州场和上海场沙龙的分享文章、PPT 和视频等内容,欢迎大家继续关注(公众号回复**杭州**即可获取杭州场文章和视频)~ + +- [Flutter 混编工程的模块化架构设计实践 - Jackie](https://mp.weixin.qq.com/s/A2gYRPJ0u8TVXZyMtEArlA) +- [抖音创作工具防劣化实践 - Crespo](https://mp.weixin.qq.com/s/_c3y9KnbKS6VnqTb0AKRWg) +- [Async and Await in Swift 5.5 - 彭玉堂](https://mp.weixin.qq.com/s/DopuYyy479eSjgns3iaWaw) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,6 篇高质量内容已经发布~ + +- @Sinno:[【WWDC21 10278】Core Haptics 初体验](https://xiaozhuanlan.com/topic/0382695741) +- @sunset:[【WWDC21 10267】一窥 Xcode Cloud](https://xiaozhuanlan.com/topic/2946158037) +- @土土Edmond木:[【WWDC21 10056】让您的 iPad 与 iPhone 应用程序在 M1 的 Mac 上大放异彩](https://xiaozhuanlan.com/topic/4392718605) & [【WWDC21 10210】探索 Xcode 项目中构建配置的高级技巧](https://xiaozhuanlan.com/topic/3518046279) +- @Sean:[【WWDC21 10202】Detect bug early using static analyzer](https://xiaozhuanlan.com/topic/7125309684) +- @冬瓜:[【WWDC21 10253】使用 Swift 特性 Result Builder 定制 DSL](https://xiaozhuanlan.com/topic/9042736581) + +## 新闻 + +### 🌟 [重要!与苹果工程师一对一咨询的机会~](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491606&idx=1&sn=15026f240a4597922aff0e2786473dfd&chksm=eaa17f1dddd6f60b43344e46cbc04cc8bc1d9c9c7f6c6e924abf5519b0670cee345367132f57&token=2123226571&lang=zh_CN#rd) + +[@Parsifal](https://github.com/ParsifalC):苹果官方的一对一咨询活动来啦!2021 年 8 月 17 日(周二)举办主题为 “Core ML 和 Create ML 的最新进展及更多”的在线研讨会。本次面向周报读者免费公开报名,扫码即可参与。苹果工程师一对一 30 分钟的咨询介绍,名额有限,报满即止。 + +![](https://user-images.githubusercontent.com/7930911/128632650-6ff4f45d-ae6f-405a-b361-aa1928c833a5.png) + +## 新手推荐 + +### 🐎 [Flutter (able) 的单例模式 | Flutter 设计模式](https://mp.weixin.qq.com/s/hRvmbRcJlOj5iB1HqvUkog) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):单例模式,可以被称得上是诟病最多的设计模式了,objccn 中也有一篇[避免滥用单例](https://objccn.io/issue-13-2/)。但这并不是单例模式的错,而是使用单例的方式错误导致的。 + +本文给大家展示了利用 工厂构造函数 + 空安全语法 + 箭头函数 写出符合 Dart 特性的单例代码,可以做个参考。**真的还是少用**。然后引出了 InheritedWidget,相对于一般的单例,这是前端中比较通用的状态同步方案,如果衡量下需要一个全局统一的数据仓库,那就在 InheritedWidget / Redux / Angular 中挑一个吧。若不清楚 InheritedWidget 可以配合下方链接了解。 + +> [《Flutter 实战》 数据共享(InheritedWidget)](https://book.flutterchina.club/chapter7/inherited_widget.html) + +## 文章 + +### 🌟 🐕 [脉脉 iOS 如何启动秒开 - 知乎](https://zhuanlan.zhihu.com/p/396550853) + +[@Barney](https://github.com/BarneyZhaoooo):本文是脉脉技术团队对启动优化的实践总结,从理论到实践相结合,适合从零了解启动优化。 + +关键点: +- App 是如何启动的 +- 衡量 App 启动时间 +- 核心方法分析 +- 制定 App 启动优化方案 +- 验证 脉脉 App 启动优化效果 + +### 🌟 🐕 [拿去吧你!Flutter 仿自如 App 裸眼 3D 效果](https://juejin.cn/post/6991409083765129229) + +[@邦Ben](https://weibo.com/linwenbang):该文模仿自如团队在 Flutter 上利用 Accelerometer (加速度传感器)、Gyroscope (陀螺仪)实现了视差形成的裸眼 3D 效果,看演示 Demo 效果不错,文章写的原理分析不错,也可以看一下自如团队 Android 端实现。 + +> [自如客 APP 裸眼 3D 效果的实现](https://juejin.cn/post/6989227733410644005) + +### 🌟 🐕 [快手海外 Swift/ObjC 混编与二进制化工程实践](https://mp.weixin.qq.com/s/d-atu1J_gqd3-rM0UXAqbA) + +[@JonyFang](https://github.com/JonyFang):本篇主要记录了快手团队在 Swift/OC 二进制化混编实践过程中碰到的诸多问题及解决方法,最终的结果是:有效提高了编译效率。 + +整体的目录结构如下: + +1. Swift/ObjC 混编背景介绍 +2. 单 Target 混编 + - bridging header +3. 多 Target 混编 + - OC 组件 Clang module 化 + - 处理难以 Module 化的 Pod 组件 + - Swift 组件的二进制兼容 + - 二进制化混编 +4. 实践中遇到的问题 + - Framework search path 与 Header search path 的冲突问题 + - Module 中使用宏的问题 + - FakeFramework 解决依赖关系与编译顺序的问题 +5. 展望未来 + - 基础库规范适配处理 + - 规范公开头文件 + - 提高 Module 化组件占比 + +### 🌟 🐕 [浅析快手 iOS 启动优化方式——动态库懒加载](https://mp.weixin.qq.com/s/gNc3uK5ILbXsO8jB1O-jnQ) + +[@Leo](https://github.com/leomobiledeveloper):App 的启动速度与用户体验息息相关,启动速度越快,用户的留存率往往也会越高。对于 iOS 应用来说,其启动主要分为 main() 方法之前 (也称为 premain ) 和 main() 方法之后两个阶段。本文将要介绍的优化方式是动态库懒加载,即主要针对 premain 阶段进行优化。文中会重点介绍在动态库懒加载和启动代码动改静的实践过程中遇到的一些问题及处理方式。 + +### 🐎 [StaticString, and how it works internally in Swift](https://swiftrocks.com/staticstring-in-swift) + +[@Smallfly](https://github.com/iostalks):字符串是开发中比较常用的类型,Swift `String` 作为结构体,运行时在栈内创建字符串实例。对于不可变的字符串,频繁使用 `String` 类型,对栈内存和 CPU 来说是一种浪费。Swift `StaticString` 类型在 `String` 的基础上进行了优化,实现了字符串引用,本文简单的介绍了它在编译器层的实现原理。 + +## 摸鱼周报 + +[@摸鱼周报 #21](https://mp.weixin.qq.com/s/Hcd8CtkyqD8IXM0SbVJo-A):第二十一期摸鱼周报来了,一起来看下本期概要: + +* 本期话题源于看到的一个讲解身体机制的视频,人在危重的时候身体会有哪些反应。 +* 关于 `UserDefaults` 的一些用法。 +* 面试解析本期讲解 load 和 initialize 的一些知识点。 +* 内存方面的优化,通常分为两个步骤:问题定位,利用 Instruments 中的 Leak,Allocation 进行分析。问题解决,解决特定内存问题或使用 mmap 方案进行优化。大家也可以带着问题去阅读相关文章。 +* Open Source Society University:非常受欢迎的计算机科学自学教程,Swift Programming for macOS:用 Swift 开发 Mac 应用的一些示例介绍。 +* Messier:一个 Objective-C 方法耗时监控的方案。 + + +## 工具 + +### [cocoapods-TSPodfileTimeWatch](https://github.com/cxr0715/cocoapods-TSPodfileTimeWatch) + +[@红纸](https://github.com/nianran):这是一款开箱即用的 Cocoapods 插件,插件用于提供了 Cocoapods 中几项重要的耗时/磁盘占用指标(仓库下载耗时、仓库文件大小、Cache 文件大小、解压耗时、Git 版本差值),作者也很贴心的输出了 csv 格式文件。当小伙伴们需要 Cocoapods 相关的量化数据指标,做一些耗时跟磁盘相关优化的话,推荐可以使用此工具。 + +> 自荐:[Ke哀](https://github.com/cxr0715),目前就于职手机 QQ,从事手 Q 基础开发 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#171-2021.08.16.md b/Reports/2021/#171-2021.08.16.md new file mode 100644 index 000000000..f8050522e --- /dev/null +++ b/Reports/2021/#171-2021.08.16.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #171 | 2021-08-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +### 🌟 线下沙龙 + +[@Parsifal](https://github.com/ParsifalC):我们正在周报公众号上陆续发布今年杭州场和上海场沙龙的分享文章、PPT 和视频等内容,欢迎大家继续关注(公众号回复**杭州**即可获取杭州场文章和视频)~ + +- [基于 Bazel的 iOS MonoRepo 实践 - 张忻正](https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw) +- [Advanced Property Wrapper in Swift - 黄智杰](https://mp.weixin.qq.com/s/psgRgIZlVDtIeQeDmUmXOw) +- [From Idea To Product - Roc](https://mp.weixin.qq.com/s/TZHrFOU65iG7QQwP8b96-w) + +### 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,1 篇高质量内容已经发布~ + +- @陈剑强:[【WWDC21 10036】使用 SoundAnalysis 内置分类器实现声音分类](https://xiaozhuanlan.com/topic/5627914803) + +## 新手推荐 + +### 🐎 [iOS 页面渲染 - UIView & CALayer](https://mp.weixin.qq.com/s/ElGEsJoh3Y1-BWlvz1yJ9w) +[@ChengzhiHuang](https://github.com/ChengzhiHuang):UIView 所有 iOS 开发想必都接触过,但底下的 CALayer 大家了解就相对偏少,本文适合刚入门的开发者查漏补缺。内容如下: + +- CALayer 是如何与 UIView 配合实现动画,以及 内部的三份树形结构:layer tree (model tree)、presentation tree、render tree +- CALayer 在页面的渲染流程中发挥的作用,通过 CALayerDelegate 可以实现手动绘制、异步绘制 +- bounds、position、anchorPoint 等属性的介绍,并总结了 frame 与其他属性的关系 + +## 文章 + +### 🌟 🐢 [深入理解 Swift 代码覆盖率](https://mp.weixin.qq.com/s/uKfrC2NB3njzF1JQUt_cbg) + +[@Parsifal](https://github.com/ParsifalC):对于基础架构团队,输出产物的稳定性是至关重要的,尤其是像字节这样一个超大型的客户端团队内。为了保障各项 SDK 的稳定性,提高自动化测试的覆盖率是很多团队的一个选择。若你也是 Swift 的长期使用者或关注者,不难发现自从 Swift 2 开始,官方便支持了 Swift 测试代码覆盖率的统计。对于一般的项目而言,只要简单在 Xcode 中开启对应开关,就可以轻松得到项目中的覆盖率。但本文讨论的是基于分布式编译和测试场景下的 Swift 代码覆盖率,这一场景下,精准统计覆盖率就变得不那么容易了。主要原因在于分布式执行 CI 任务,是在相对隔离的环境下进行的,每次任务间的编译路径并不相同,无法简单直接累加覆盖率合成实际完整的项目木覆盖率。抖音团队通过深入研究官方提供的覆盖率测试文档,具体的做法是: + +- 将每个测试结果的 `profraw` 文件解析为文本格式的 `profdata` 并且统一路径 +- 合并多个 `profdata` 得到真实的覆盖率数据 +- 使用 `llvm-cov -path-equivalence` 命令完成源码路径的映射 + +### 🌟 🐕 [Reverse Engineering UIKit to Fix Our Top Crash | PSPDFKit](https://pspdfkit.com/blog/2021/reverse-engineering-uikit/) + +[@Barney](https://github.com/BarneyZhaoooo):本文是 PSPDFKit 团队通过逆向修复 UIKit bug 的实践经验,分析问题的过程十分详细,值得学习借鉴。 + +- 崩溃问题定位,Hopper 反汇编。 +- 问题分析,拆解。 +- UIPageViewController 逆向。 +- 通过 swizzling 修复并验证。 +- 复盘总结 Floating-point precision errors are vicious。 + +### 🐢 [听说你想写个 DNS 服务器 - 代理](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486791&idx=1&sn=2695a508ea45e43527875058ad106e6d&chksm=cf55828ff8220b990eb722b4fb149b8cd424133d05646ea7e369ab4597c1e97503714a6f20dd&token=1722840270&lang=zh_CN#rd) +[@水水](https://www.xuyanlan.com): 作者用实际代码详细的描述如何编写一个 DNS 服务器的雏形,包括对查询包的解析,然后返回对应的响应包。 +整个流程如下: +- DNS 服务器开启本地 UDP 服务。 +- 本地 DNS 客户端发起请求。 +- DNS 服务器收到请求后,重新构造请求包,转发到公共 DNS 服务器。 +- 当收到公共 DNS 服务器的结果后,构造响应包,将数据返回给客户端。 + +系列关联文章 - [听说你想写个 DNS 服务器 - 记录类型扩展](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486727&idx=1&sn=a71ed08275433e15593069e010c31c02&chksm=cf5582cff8220bd96ce28f0dd8874f27064e3999792e6ad25d90a0cf2f56651278495a6927de&token=1722840270&lang=zh_CN&scene=21#wechat_redirect) + +### 🐎 [深入浅出贝塞尔曲线](https://juejin.cn/post/6995482699037147166) +[@Smallfly](https://github.com/iostalks):本文详细介绍了贝塞尔曲线的定义和推导过程,以及 iOS 提供绘制曲线能力的相关类和 API。通过实现波浪动图来展现二阶和三阶贝塞尔曲线的应用。最后还介绍了在已知曲线阶数的前提下,根据起点和终点反向推导控制点的计算过程。强烈推荐不了解贝塞尔曲线实现的同学阅读。 + +### [Stack Overflow 2021 开发者调查报告出炉,开发浪潮中的变与不变](https://mp.weixin.qq.com/s/E6R3dXGBa4YzzuekxPMgOw) + +[@Parsifal](https://github.com/ParsifalC):2021 年 5 月 25 日,Stack Overflow 举办的一年一度的开发者调查重新启动,就在 8 月 2 日,调查结果新鲜出炉,超过 80,000 名开发者参与了调查,JavaScript 连续 9 年获得最常用编程语言冠军,React.js 首次赶超 jQuery 成为最常用的 Web 框架,而 Svelte 后来居上夺得最受欢迎 Web 框架。Rust 连续第 6 年登顶最受喜爱语言,受到超过 86% 开发者的喜爱。我们一起看一看 2021 年,开发者发生了怎样的变化。 + +## 摸鱼周报 + +[@摸鱼周报 #22](https://mp.weixin.qq.com/s/JI5mlzX9cYhXJS81k1WE6A):第二十二期摸鱼周报,一起来看下本期概要: + +* 本期话题:聊聊 iOS 博客环境,公众号vs掘金。 +* Tips:Reachability 的使用建议,SQL 中 JOIN、UNION 的含义,如何在项目中区分 AdHoc 和 AppStore 包。 +* 面试解析:本期讲解 block 类型的相关知识点。 +* 优秀博客:如何做电量方面的优化,关于 MetricKit 的使用。 +* 学习资料:布朗大学的学生制作的「看见统计」课程;一个 Github 仓库 Hacker Laws,总结各种定律和法则。 +* 一个帮助学习正则表达式的在线工具:regex101。 + +## 工具 + +### [mxcl/xcodebuild](https://github.com/mxcl/xcodebuild) + +[@红纸](https://github.com/nianran):这是一个基于 Github Actions 的 Action,其作用是帮助开发者去构建签名打出产物包和进行单元测试。其优势在于轻量化的配置方式和 Github Action 完整的自动化体系,只需要一个配置文件即可完成整个配置。如果你的整个持续集成体系是基于 Github Action 的值得进行一试。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#172-2021.08.23.md b/Reports/2021/#172-2021.08.23.md new file mode 100644 index 000000000..e42886f02 --- /dev/null +++ b/Reports/2021/#172-2021.08.23.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #172 | 2021-08-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 🌟 [WWDC 21 内参](https://xiaozhuanlan.com/wwdc21) + +[@Parsifal](https://github.com/ParsifalC):本周内参更新,4 篇高质量内容已经发布,总更新文章已达 92 篇,实际包含 session 内容超过 100 个~ + +### [【WWDC21 10012 】App Clip 新特性](https://xiaozhuanlan.com/topic/2048796351) + +@昊泽:App Clip 是 WWCD20 的一大亮点,它提供了一种“即时使用”的方式,基于苹果提供的各种唤醒方式,让用户在特定场景下很方便地体验 App 内的核心功能。现在一年过去了,世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式,也一并完善和优化了本地体验,并提供了命令行工具来帮助开发者们生成轻应用码。 让我们一起来看看吧。 + +### [【WWDC21 10076】使用 Object Capture 创建 3D 模型](https://xiaozhuanlan.com/topic/8026419753) + +@Hays:Apple 自 2017 年推出 ARKit 以来一直在推动增强现实技术在其各个平台上的应用和发展,但 AR 内容的匮乏与高成本一直是制约开发者们投入 AR 的重要因素。在本次 WWDC 上,Apple 将 3D 模型的构建效率提升了到了前所未有的高度,RealityKit 2 框架中的新 Object Capture API 为我们提供了一种非常便捷的方式来为生活中的物体创建 3D 模型,而你需要的仅仅是为目标物拍摄几张照片。此外,配合 AR Quick Look 可以轻松将创建好的模型集成到你的应用之中。 + +### [【WWDC21 10109】探索 Foundation 新增功能](https://xiaozhuanlan.com/topic/7093142658) + +@leejunhui:`Foundation` 作为最核心的系统库之一,今年带来了三大部分的新内容,分别是属性字符串,格式化器以及自动语法协议。这些内容的核心要点都表明 `Apple` 想要摒弃掉 `Objective-C` 时代留下的繁琐的 `API` 以及编程范式。 + +### [【WWDC21 10153】基于苹果芯片的图像处理](https://xiaozhuanlan.com/topic/5796308412) + +@潘名扬:这篇 WWDC 的分享主要介绍了如何针对苹果芯片对图像处理应用进行优化,探索了如何充分发挥 Metal 渲染命令编码器、切片渲染、统一内存架构,以及 memoryless attachments 的优势。在文中的示例里,工程师为我们展示了如何针对苹果 GPU 的 TBDR 架构来降低应用的内存占用,减少能耗。通过本篇分享,你还可以了解到将应用中的图形运算从独立显卡迁移到苹果芯片的最佳实践。 + +## 新闻 + +### 🐎 ["同播共享"发布计划的更新](https://developer.apple.com/cn/news/?id=mxaeu6er) + +[@zvving](https://github.com/zvving):在最新的 iOS15 developer beta 6 中 SharePlay 被禁用。这意味着 iOS15 正式版发布临近,最初版本不会包含 SharePlay, SharePlay 会在后续更新版本中提供。 + +在开发 SharePlay、GroupActivities 相关功能的朋友可以从原文下载配置文件确保开发不被中断,同时需要留意近期 App 提交不要包含 GroupActivities 授权配置,等待对应功能放开后再进行提交。 + +## 文章 + +### 🌟 🐎 [Making efficient use of the libdispatch (GCD) · GitHub](https://gist.github.com/tclementdev/6af616354912b0347cdf6db159c37057) + +[@Barney](https://github.com/BarneyZhaoooo):本文针对 **libdispatch** 总结了很多使用技巧,列举了一些常见的误区。类似各种高效 tips 整合文章,方便大家找到自己不了解的地方深入学习。 + +### 🐕 [微信跨平台硬件直播组件](https://mp.weixin.qq.com/s/qK73om3ueP_S6i8qp8hgHQ) + +[@anotheren](https://github.com/anotheren):微信视频号已提供跨平台硬件直播组件,支持移动平台(iOS/Android)、PC 平台(Windows/macOS)和嵌入式平台(以 Raspberrypi 为例)。文章简要介绍了其解决的问题以及实现的方案。相比传统的移动平台,广大云厂商早已推出了各自的成套解决方案,微信视频号这次应该是奔着相关直播硬件而来,只是不知会擦出怎样的火花。有嵌入式硬件需求,或者在设计直播组件的同学都可以仔细看看。 + +### 🐕 [Creating Custom Parseable Format Styles in iOS 15](https://emptytheory.com/2021/08/14/creating-custom-parseable-format-styles-in-ios-15/) + +[@AidenRao](https://weibo.com/AidenRao):在 iOS 15 之前,为了将数字或日期转换为字符串,你通常需要多行代码,维护一个 Formatter 派生类,编码过程较复杂且不易维护。iOS 15 及更新的版本,不需要任何 Formatter,我们可以在大部分场景,一行代码搞定格式化。 + +如果需要更灵活的格式化方式,可以自定义新的格式样式,本文实现了一个将简单的电话号码,格式化成标准美国格式电话号码的示例,413555212 → (413) - 555-1212,作为实现参考。 + +## 摸鱼周报 + +[@摸鱼周报 #23](https://mp.weixin.qq.com/s/1Vs50Lbo0Z27dnU-ARQ96A):第二十三期摸鱼周报来啦,一起来看下本期概要: + +- 话题:本期邀请 CoderStar 聊一下他的公众号和学习方法。 +- Tips:简版 PromiseKit 的设计思路;如何通过 embedded.mobileprovision 区分包类型。 +- 面试模块:isMemberOfClass、 isKindOfClass 的含义与区别。 +- 优秀博客:整理了Swift 指针、Swift 属性包裹器相关的几篇文章。 +- 学习资料:介绍三个机器学习的网站。 +- 开发工具:帮助解析 Shell 脚本的网站:explainshell。 + +## 工具 + +### [onefetch](https://github.com/o2sh/onefetch) + +[@EyreFree](https://github.com/EyreFree):Onefetch 是一款由 Rust 编写的命令行 Git 信息展示工具,它能够在终端中展示本地 Git 仓库的项目详情和代码统计等内容。使用时不需要网络连接,完全离线可用。它会自动从文本中检测开源许可证,并为用户提供有价值的信息,例如代码分发、pending、依赖数量、主要贡献者、占用磁盘大小、创建日期、代码行数等。Onefetch 可以通过命令行参数进行配置,以准确显示您想要的内容和方式:您可以自定义 ASCII/文本格式、禁用信息行、忽略文件和目录、以多种格式输出(Json、Yaml)等等。有需要的朋友们快试试吧。 + +### [网页 ipa 一键砸壳](https://www.dumpapp.com) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS 中所有 APP 上传到 APP Store 后都会被加上一层保护壳,如果我们想拿到 IPA 进行研究分析, 需要对 IPA 进行脱壳。这个平台可以实现导出全网 IPA 进行自动脱壳功能,不过有些功能需要付费才能体验。 + + +## 代码 + +### [AnyCodable](https://github.com/Flight-School/AnyCodable) + +[@Smallfly](https://github.com/iostalks):[AnyCodable](https://github.com/Flight-School/AnyCodable) 对遵循 `Encodable`, `Decodable` 和 `Codable` 协议的 Model 进行包装,抹掉其具体的类型。当需要在不同模块之间传递数据时,可以使用它实现模块对 Model 的解耦。 + + +### [Epoxy - Airbnb 声明式 iOS UI 框架开源啦!](https://mp.weixin.qq.com/s/DQ8avDt3pgMxQcb7p3WkwA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):[仓库地址](https://github.com/airbnb/epoxy-ios) ,一套完整的 Swift 实现的声明式 UI 框架。Airbnb 团队遇到的问题是:更新页面时,会需要手动操作 indexPath 来进行动画刷新,而操作 indexPath 稍有差错就会导致 crash,同时繁复的计算逻辑可读性也较差。可以回忆下即使使用 IGListKit 这样强大框架的 ListDiffPaths 计算 diff 并刷新列表,也依旧较为复杂,更不用说还需要手动控制动画了。 + +因此 Airbnb 团队选择了声明式编程,**描述目标 - 让页面更新至最新内容**。 + +- 一套描述页面渲染内容的语义接口:使用「内容」和「样式」两种类型来描述一个 view,并分别封装在 Content 和 Style 里 +- 搭建能自动更新页面渲染内容的计算框架,使用了 fast O(N) diffing 算法 +- 应用单向数据流,进一步简化数据状态管理,使页面的行为更易理解 + +同时还提供了如 EpoxyLayoutGroups 、EpoxyPresentations 、EpoxyNavigationController 等组件,提供了 UI 层面的完整方案。 + +[英文原文](https://medium.com/airbnb-engineering/introducing-epoxy-for-ios-6bf062be1670) + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#173-2021.08.30.md b/Reports/2021/#173-2021.08.30.md new file mode 100644 index 000000000..9ce5b980b --- /dev/null +++ b/Reports/2021/#173-2021.08.30.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #173 | 2021-08-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Apple 与美国开发者就 App Store 更新达成一致,这些更新将支持开发者业务,并持续为用户带来精彩体验](https://www.apple.com.cn/newsroom/2021/08/apple-us-developers-agree-to-app-store-updates/) + +[@Parsifal](https://github.com/ParsifalC):本周我们推送了一则短文 - [IAP 或将不再是唯一支付方式](https://mp.weixin.qq.com/s/vK3ilfP8MqdURooXEDH7kg),文章的主要内容便来自于苹果官方的这则新闻。新闻内容比较多,但最值得我们注意的便是苹果对于 IAP 使用条款的改变。虽然目前并没有明确说明,我们可以直接在应用内使用第三方支付,但从描述上看,苹果已经做出了比较大的改变,从原来不允许引导用户使用其他支付变为了可接受邮件等方式的引导。这些变更起源于美国的开发者群体与苹果的诉讼案,因而所有变更都仍需要那边的法庭最终同意才能正式推行。 + +## 新手推荐 + +### 🌟 [重磅首发|闲鱼构建Flutter企业级应用开发电子书新鲜出炉](https://mp.weixin.qq.com/s/DTLgVwUjfORBY5NCd9C-8g) +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 单看标题相信大家已经知道是什么了,没错,咸鱼团队出品的企业级 Flutter 应用开发指导书籍,本书从深度,广度,以及实用性几个方面着手,切合咸鱼项目的实际经验。对于正在学习和需要进阶的同学来说,可谓是不可多得的好资料,关键还免费 😄 + +## 文章 + +### 🌟 🐕 [How iOS 15 makes your app launch faster](https://www.emergetools.com/blog/posts/iOS15LaunchTime) + +[@Leo](https://github.com/leomobiledeveloper):对于 deployment targe 是 iOS 15 或者 macOS 12 的 App 来说,苹果使用了一种新的二进制格式来存储启动时候需要 bind 和 rebase 的信息。新的格式下 bind 和 rebase 被合并存储在 LC_DYLD_CHAINED_FIXUPS 段,合并后意味着更少的安装包占用,启动时需要的 page fault 也更少,进而提高启动速度。 + +### 🌟 🐕 [Building a token refresh flow with async/await and Swift Concurrency](https://www.donnywals.com/building-a-token-refresh-flow-with-async-await-and-swift-concurrency/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简述了如何使用 async/await 和 Swift Concurrency 构建刷新流,并配有流程图和代码示例,方便大家开启实践思路。 + +- 流程了解 +- **AuthManager** 的实现 +- 网络请求实践 + +### 🌟 🐕 [Flutter 疑难杂症系列:键盘原理及常见问题解决方案](https://mp.weixin.qq.com/s/snU-mNlmEnOUHw3I-DrJ_w) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Flutter 的键盘、输入框在双端的实现,大致都是借助 Native 的输入能力,通过 Channel 在 Flutter 和 Native 侧进行数据的同步。具体到 iOS 上,则是通过 FlutterTextInputPlugin 调用到了 Native 的 FlutterTextInputView 上,再调用 becomeFirstResponder 实现键盘弹出。 + +本文详细介绍了 Flutter 在如何实现:键盘调起之后页面的重绘逻辑、页面收缩动画。同时还列举了一些问题发现以及定位方法,值得细细钻研。其中Android部分机型的问题也有助于我们理解重绘的逻辑,具体如下: + +- 锁屏后键盘无法收回 +- Android 键盘动画卡顿 +- iOS 上搜狗输入法长按发送未换行 +- iOS 光标动画使得 CPU 飙升 +- iOS 上键盘收起之后,光标依旧存在 +- iOS12+ 长按系统输入法空格光标卡顿不灵敏 + +### 🐎 [Why Conditional View Modifiers are a Bad Idea](https://www.objc.io/blog/2021/08/24/conditional-view-modifiers/) +[@zvving](https://github.com/zvving):SwiftUI 中通过自定义视图修饰符(View Modifiers),能复用项目中的的定制视图逻辑,简化 View 声明代码。但是对于条件视图修饰符,并不像看起来那么美好。 + +使用条件视图修饰符(Conditional View Modifiers),初始样式一切正常,但是当条件变化时,动画可能并不符合你的预期,状态值也会在条件变化时莫名消失。这本质与 SwiftUI 中 if-else 内部实现有关:条件变化并非修改视图属性,而是对应的不同视图——在条件变化时移除或插入。文章详细解释这些问题背后的成因,相信能帮助你更好的使用 SwiftUI。 + +### 🐕 [降低 APP 卸载率,测试人员可以做些什么?](https://mp.weixin.qq.com/s/ogiOlV-eXkDFlGEp-pLgMQ) + +[@Smallfly](https://github.com/iostalks):随着移动互联网竞争白热化,各大厂商都希望能多抢占一些用户时间,App 的使用体验就变得越来越重要。对于不满足预期的 App,用户很可能会毫不留情的卸载。 + +闲鱼借鉴了马斯洛人类需求层次结构,从安全性、功能性、稳定性、易用性、愉悦性等五个逐级递增的层次,抽象出 App 用户体验金字塔模型。并介绍了他们在各个层次上做的具体改善措施,分别是: +* 隐私安全是底座 +* 跳出功能测试“陷阱” + * 探索性测试 + * 新用户视角测试 + * Bug Bash +* 重视全链路性能 +* 引入可用性测试 + +### 🐎 [Deprecating Workarounds](https://www.basbroek.nl/deprecating-workarounds) + +[@xiaofei86](https://github.com/xiaofei86):当我们在最新的系统版本遇到 BUG 时,往往直接判断当前版本,并提供将解决方案。这种情况下,如果下一个系统版本仍然存在此问题,就会导致线上 BUG。如果为大于当前版本的系统都应用此解决方案,如果下一个系统版本修复了此问题,那么我们的修复方案也会出现不可预知的情况。 + +本文提供了一个小 Tips 来更好的处理这种问题。我们定义单独的方法来解决此版本的问题,并将此方法标记为在下个版本废弃,这样我们可以在升级后获得一个编译警告提醒,以便于重新判断此问题是否已经被系统修复。如果没有被修复,就继续在下一个版本提醒,如果被修复就改为在特定版本应用。 + +## 摸鱼周报 + +[@摸鱼周报 #24](https://mp.weixin.qq.com/s/vXyD_q5p2WGdoM_YmT-iQg):第二十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:跟一位刚入职某一线大厂的同学聊一下最近的面试感受。 +* Tips:设计 OC 版本的 defer 功能;使用现有证书创建 Fastlane match 格式加密文件。 +* 面试模块:离屏渲染相关知识点。 +* 优秀博客:整理了Swift 闭包相关的文章。 +* 学习资料:介绍两个仓库,一个是大家容易读错的开发词汇汇总,一个是微软出品的物联网课程。 +* 开发工具:一款免费开源的跨平台密码管理工具:KeeWeb。 + +## 代码 + +### [swift-custom-dump](https://github.com/pointfreeco/swift-custom-dump) + +[@Damien](https://github.com/ZengyiMa):swift-custom-dump 库是针对 Swift App 中的数据进行调试、Diff 以及测试功能的工具集合,除此之外还具备了自定义扩展功能,有数据调试需求的同学不妨一试。 + +### [PreviewView](https://github.com/theoriginalbit/PreviewView) + +[@JonyFang](https://github.com/JonyFang):PreviewView 的作用是利用 SwiftUI 预览画布快速制作 UIViewController 和 UIView 原型。有类似需求的同学可以一试~ + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 抖音生活服务(上海/成都)招人,Android / iOS / Server 工程师,我们致力于将用户创建内容与用户兴趣相关业务、生活服务连接,通过生活服务带动抖音用户活跃度提升。 +> +> 简历发送至:fuxiang.666@bytedance.com + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#174-2021.09.06.md b/Reports/2021/#174-2021.09.06.md new file mode 100644 index 000000000..e149d1285 --- /dev/null +++ b/Reports/2021/#174-2021.09.06.md @@ -0,0 +1,127 @@ +# 老司机 iOS 周报 #174 | 2021-09-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## Apple 专家一对一 + +### 🌟 [第二期:探索 iPadOS 技术](https://developer.apple.com/cn/accelerator/) + +[@Parsifal](https://github.com/ParsifalC):苹果官方的一对一咨询活动第二期来啦!2021 年 9 月 14 日(下周二)举办主题为 “探索 iPadOS 技术”的在线研讨会。本次面向周报读者免费公开报名,**扫码即可参与**。独一无二的机会,直接向 Apple 的专家学习,**报名截止日 9 月 10 日,名额有限,报满即止**。 + +![image](https://user-images.githubusercontent.com/7930911/132127482-7eec524e-0fd8-4584-8ee2-ca812586a276.png) + +## 新手推荐 + +### 🐕  [Flutter 里的语法糖解析,知其所然方能潇洒舞剑](https://mp.weixin.qq.com/s/Wi2jJ8KnsSnrV8Dk_eIqDg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):以往大家都是从官方的介绍文档中认识 dart 的中的 关键字 / 语法糖 的,本文通过 [dump_kernel.dart](https://github.com/dart-lang/sdk/blob/master/pkg/vm/bin/dump_kernel.dart) 解析 dill 二进制执行文件,从编译产物的角度分析了 late 、 typedef 、extension 、 async / await 的具体实现。知道现象的你,如果也对下面的问题有所疑惑,在看了生成后函数就能明白底层是如何实现的。 + +- 当我们访问 late 声明的对象时,如果对象还没有初始化,为什么会返回一个异常? +- 使用 typedef 会不会对性能和运行结果产生影响? +- extension 关键字是如何在原对象基础上实现拓展呢? +- 为什么我们在外部对一个 Future 进行 try catch 不能捕获异常? + +想实操反解 dill 文件的同学可以参照这篇[文章](http://gityuan.com/2019/10/05/dart_vm/#25-%E6%9F%A5%E7%9C%8Bkernel%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F) 进行操作。 + +## 文章 + +### 🌟 🐕 [一文读懂字节跳动自研移动研发工具链 MBox](https://mp.weixin.qq.com/s/5_IlQPWnCug_f3SDrnImCw) + +[@Barney](https://github.com/BarneyZhaoooo):瓜神曾参与开发的 **Mbox** 终于开源了,文章从现状与问题开篇,详细介绍了 Mbox 诞生的背后思考、架构设计、核心功能、困难与挑战,给业内开发者带来了很好的参考。 + +### 🐕 [APP 隐私合规](https://mp.weixin.qq.com/s/_RP6EEYfYGJn877tRdXOFA) + +[@AidenRao](https://weibo.com/AidenRao):作者公司的 APP 收到通信管理局,关于 APP 侵害用户权益整治专项行动中核查整改问题的通知。整改要求是 10 天内完成对有问题 APP 的整改,并提交整改情况报告。 + +作者整理了中国网信网关于 APP 违规的认定标准,针对容易出现的违规问题,给出了整改方式建议。 + +### 🐕 [Reverse engineering a 5 year old Xcode issue](https://swiftrocks.com/reverse-engineering-xcode-issue-crash-symbol) + +[@Damien](https://github.com/ZengyiMa):你是否注意到 Xcode 中的 Organizer 中如果不是你本地机器打出的包将无法进行符号解析,作者通过 Hopper 等逆向手段定位到了 DVTAnalytics 框架中的一个 Bug,并且做了对应的修复,好奇是怎么实现的吗?对逆向感兴趣的同学值得一读。 + +### 🐢 [Swift 与 Objective-C 混编时,我们是如何将编译时间优化了 35%?](https://mp.weixin.qq.com/s/9BpfKhT1tQM_gAUNb2mQLg) + +[@Smallfly](https://github.com/iostalks):这篇文章比较长,详细地介绍了 58 同城在 Swift 和 Objective-C 混编过程中,编译速度优化的分析与实践。 + +Swift 和 OC 混编,要实现 Swift 引用 OC 文件,一种方案是添加桥接文件,另一种是采用 Module 化的方式引用,第一种方案有较高的维护成本,58 采用了第二种。 + +然而,在尝试 Module 化之后,整体的编译耗时比非 Module 化增加了,这和苹果官方给出的性能数据是不符的。 + +经过深层次的分析,最终通过 hmap 方案实现了编译耗时优化。对其他 App 的 Module 化有比较好的借鉴意义。 + +### 🐕 [添加编译警告的另一种方式:clang 开发入门](https://juejin.cn/post/7002999613984768031#heading-6) + +[@红纸](https://github.com/nianran):本文是一个 **clang** 插件开发的一个入门开发的实践文章。以检查 if 语句的过度嵌套提示 warning 为目标,对 AST 中 if 节点进行解析,输出 warning。对于没有了解过 clang 插件开发的同学,本文还是比较有意思的文章。 + +### 🐕 [Core Data with CloudKit (一)](https://www.fatbobman.com/posts/coreDataWithCloudKit-1/) + +[@JonyFang](https://github.com/JonyFang):WWDC 2019 Core Data 的更新引入了 `NSPersistentCloudKitContainer`,由此可以便捷的使用 Core Data with CloudKit 来进行多设备数据同步。本篇主要对 Core Data with CloudKit 的基础介绍,内容大概为: + +1. Core Data with CloudKit 的局限性 +2. Core Data with CloudKit 的优点 +3. 简介 Core Data 和 CloudKit +4. Core Data 对象 vs CloudKit 对象、 + +### 🐢 [Flutter Fish Redux 2.0 架构演进实践](https://mp.weixin.qq.com/s/5LUCFZWts9Q0lUNqtocADQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Fish-Redux 作为 Flutter 状态管理工具已经开源已久,也在大量应用和业务中被验证,特别是咸鱼。但随着业务和场景的复杂度不断增长,在有些场景下显得捉襟见肘,无法很好的满足,于是有了此次架构的演进,致力于解决复杂页面编排,动态 AB 问题,以及提升灵活度。 + +## 摸鱼周报 + +[@摸鱼周报 #25](https://mp.weixin.qq.com/s/LLwiEmezRkXHVk66A6GDlQ):第二十五期摸鱼周报来啦,一起来看下本期概要: + +* 话题:本期跟竹立交流一下关于求职和学习方法的话题。 +* Tips:如何清除启动图的缓存;如何优化 SwiftLint 流程。 +* 面试模块:本期解析一道 GCD 死锁题。 +* 优秀博客:整理了 Swift 泛型相关的几篇文章。 +* 学习资料:Adobe 的调色板网站:Adobe Color Wheel;知识小集的 Tips 汇总:Awesome-tips。 +* 开发工具:管理 Github 项目 Star 的工具:OhMyStar。 + +## 代码 + +### [swift-atomics](https://github.com/apple/swift-atomics) + +[@Parsifal](https://github.com/ParsifalC):去年 10 月,Apple 正式推出并开源了 swift-atomics,我们可以通过它使用纯 Swift 代码实现高性能的无锁并发数据结构。而近日,swift-atomics 终于发布了 1.0.0 版本,这也意味着 swift-atomics 有了一个正式的稳定版。 + +延伸: +- [Introducing Swift Atomics](https://swift.org/blog/swift-atomics/),非常详尽的官方介绍文档。 +- [【译】SE-0282 Low-Level Atomic Operations ⚛︎](https://kemchenj.github.io/2020-10-02/):周报编辑四娘翻译了 swift-atomics 的原始 Proposal,有助于更全面的了解它。 + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#175-2021.09.13.md b/Reports/2021/#175-2021.09.13.md new file mode 100644 index 000000000..48a6548f7 --- /dev/null +++ b/Reports/2021/#175-2021.09.13.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #175 | 2021-09-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [有消息了,找你的。](https://mp.weixin.qq.com/s/FPml7P1RHTc0QBbFb3TKbg) + +[@Parsifal](https://github.com/ParsifalC):苹果今年的秋季发布会正式官宣将在北京时间 9 月 15 日凌晨 1 点举行,iPhone 13 和 iPad 9 等主要硬件设备有望悉数登场,另外近年来一直传言的 AR & VR 领域也值得期待是否会在这次有所透露~ + +## 新手推荐 + +### 🐕 [灵动的适配器模式 | Flutter 设计模式](https://mp.weixin.qq.com/s/w0msBQnDzkZ4rsL1EtPyVA) + +[@邦Ben](https://weibo.com/linwenbang):本文以 Flutter 的角度来说明了 Adapter 模式的用法,如果是 Android 的同学会对这个模式更为熟悉。文中给出了具体的例子,感兴趣的同学可以一看。 + +## 文章 + +### 🌟 🐕 [iOS 端容器之 WKWebView 那些事](https://mp.weixin.qq.com/s/39u-48KvO-Fmkn9t0nJ-fA) + +[@JonyFang](https://github.com/JonyFang):本文主要总结了阿里在端容器设计开发过程中,WKWebView 使用上遇到的一些经典问题和对应的解决办法,能够为受此类问题困扰的同学提供一些帮助。 + +主要细述了 3 件事情: +- WKWebView 使用中的典型问题有哪些? +- 为什么会出现这些问题? +- 这些问题的解决办法有哪些? + +### 🌟 🐕 [iOS 崩溃日志在线符号化实践](https://mp.weixin.qq.com/s/MIun-eV4_J1hXGDRjGoLaw) + +[@Barney](https://github.com/BarneyZhaoooo):由百度 App 技术出品的崩溃符号化实践,从什么是符号化等最基础的概念入手,深入浅出,详细描述了在线符号化落地的全过程。 + +- 什么是符号化 +- 符号化原理 +- 本地符号化 +- 在线符号化 +- 效果和收益 + +### 🐢 [iOS 符号解析重构之路](https://mp.weixin.qq.com/s/TVRYXhiOXIsMmXZo9GmEVA) + +[@水水](https://www.xuyanlan.com):本文介绍了几种单机解析工具的简单使用,并详细的介绍了字节跳动终端技术的在线符号解析服务的历史方案探索路程,结合最终方案深入的介绍了符号解析原理相关知识。 +读者能够通过此文深入的了解符号解析的原理,也能为正在搭建符号解析平台的读者提供参考。 + +> WWDC 21 内参中的 [iOS 符号化:基础与进阶](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247491945&idx=1&sn=0d320492230940db88e34887dee96b76&chksm=eaa17e62ddd6f7747acf2fa6d86a9cf4aaf8e0ba6fd18a9d374b1ffcfbc1ca2e1a65c2cf9cc5&token=1941754559&lang=zh_CN#rd) 一文也值得大家学习。 + +### 🐕 [再探ARC,Autoreleasepool,NSString— —由一场直播 OOM 引发的故事](https://mp.weixin.qq.com/s/oU9DWR4OP8DMp6smMhIxZg) + +我们在日常的开发中,可能不会过多的关注内存的问题,因为 ARC 通常可以帮我们避免 99% 的内存泄漏问题,但是,ARC 毕竟不是万能的,对于剩下的 1% 内存问题,却可能造成很大的影响。快手最近就遇到了一个由 NSString 引发 的OOM 问题,本文详细回顾了问题的原因以及如果定位和解决的。 + +### 🐕 [在 SwiftUI 中使用 UIKit 视图](https://mp.weixin.qq.com/s/QEDd9cIHi3lk0O63fc-ApQ) + +[@zvving](https://github.com/zvving):SwiftUI 组件与细节功能日益完善,而实际项目中,但仍有大量的事情需要基于 UIKit 实现。如何封装 UIKit 组件,使其可以在 SwiftUI 中应用,怎样提供 SwiftUI 风格的调用方式,选择不同方案时又要注意哪些问题?本文从二者生命周期的不同出发,再通过实际代码带你了解 SwiftUI 使用 UIKit 的具体过程。 + +> 来自作者自荐:[@东坡肘子](https://www.fatbobman.com/) + +### 🐕 [一个 JavaScriptCore 框架中对象与 Timer 引发的死锁问题内幕](https://mp.weixin.qq.com/s/ywYj886iVoU3OvcV4pAC6g) + +[@Smallfly](https://github.com/iostalks):本文来自快手大前端团队,介绍了一个 Main Thread 与 JSC Heap Collector Thread 互相等待发生的死锁问题,并分享了相应的解决方案。其中详细的描述分析、验证、解决问题的过程,有不错的参考价值。 + +### 🐕 [Preventing Data Races Using Actors in Swift](https://swiftsenpai.com/swift/actor-prevent-data-race/) + +[@享耳先森](https://github.com/iblacksun):数据竞争一直是并行编程下的难点,其往往难以检测与解决。本文先介绍了数据竞争的的基础,再介绍 Swift 5.5 引入的 Actor 如何优雅的解决这个问题。 + +### 🐢 [Flutter 多引擎支持 PlatformView 以及线程合并解决方案](https://mp.weixin.qq.com/s/6aW9vbithMWTOJ_PGniQTA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):在多引擎使用 Flutter 时,会遇到一些问题,本文详述了使用 PlatformView 时遇到的问题。解决了 ``普通多引擎``与``轻量化多引擎`` 情况下 Platform Task Runner 与 GPU Task Runner (Raster Task Runner) 合并的问题,并以 PR 的方式合入了 Flutter 主分支。其中对源码的讲解十分有价值,有助于大家理解 engine 层的四大 Task Runner 是如何工作的。 +同时本文还介绍了给 Flutter 提 PR 时的一些步骤与经验。 + +### 🐎 [ARC 下还有 __NSStackBlock__ 吗](https://dengweijun.com/arc-nsstackblock-31c0c1d493974db5bd7f278dd20e223a) + +[@J_Knight_](https://github.com/knightsj):在 ARC 下,block 在赋值给强引用时会被复制到堆上,成为 __NSMallocBlock__ 类型的 block。本文作者结合代码介绍了如何在 ARC 下生成 __NSStackBlock__ 类型的 block 的方法,以及相关的 llvm 相关的在这方面做的优化。 + +## 摸鱼周报 + +[@摸鱼周报 #26](https://mp.weixin.qq.com/s/PnUZLoyKr8i_smi0H-pQgQ):第二十六期摸鱼周报来啦,一起来看下本期概要: + +* 话题:跟熊大聊一下独立开发和音视频开发。 +* Tips:对节流和防抖的再讨论;关于 TestFlight 外部测试的一些介绍。 +* 面试模块:本期解析 KVO 的实现原理。 +* 优秀博客:收录了一些 RxSwift 相关的文章。 +* 学习资料:靛青早期写的 RxSwift 学习教程。 +* 开发工具:公众号文章同步工具 Wechatsync。 + +## 代码 + +### [URLServiceRouter](https://github.com/lightank/URLServiceRouter) + +[@EyreFree](https://github.com/EyreFree):URLServiceRouter 是一个用 Swift 语言开发的基于 URL 的路由分发库,由一个高自由度的 nodeTree 和 RPC 来实现,可使开发者在 App 中很方便地实现诸如测试环境和生产环境切换之类的工作。 + +## 赞助者 + +### flomo 浮墨笔记 + +新一代卡片笔记,像聊天一样无压力输入,帮你积累知识的复利。还有极简的 API 可打通更多产品。老司机读者专属注册码(可以获得 45 天 PRO 会员):https://flomoapp.com/register2/?Mjk4Njk + +### 产品沉思录 + +一份由少楠& fonter 打理的付费邮件周刊及知识库,创建于 2017 年,累计 3000+ 用户付费订阅。涵盖了产品设计,服务设计,互联网技术,经济学,社会学等领域。我们尽量选择那些半衰期较长的内容,以确保这些知识能跨越时间。欢迎访问我们的免费精选集:https://index.pmthinking.com + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#176-2021.09.27.md b/Reports/2021/#176-2021.09.27.md new file mode 100644 index 000000000..de17600de --- /dev/null +++ b/Reports/2021/#176-2021.09.27.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #176 | 2021-09-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 🌟 通知 + +[@Parsifal](https://github.com/ParsifalC):国庆长假即将到来,周报也将进入短暂休刊,**下一期发布时间将会是 10.18 号**,提前祝大家长假愉快~ + +## 新闻 + +### 🌟 得物技术 iOS 专场线下沙龙一期圆满结束 + +[@Parsifal](https://github.com/ParsifalC):9.25 日上周六,我们在上海与得物技术一起联合主办了 iOS 专场沙龙活动。我们邀请到了 4 位嘉宾前来分享。他们分别来自于得物技术、字节跳动和阿里巴巴团队,主题涵盖 《得物 iOS 工程演进之路》、《字节跳动自研移动研发工具链 MBox》、《视频特效揭秘》和《基于 MNN 的移动端人工智能实践》。大家的参与热情远超我们预期,甚至现场还临时开了一个分会场,感谢所有人的支持~**活动相关的 PPT 和视频等资料我们正在整理之中,一切就绪之后便会在周报公众号及时发布。** + +### 🌟 [Back-deploy concurrency 已合并在 Swift 5.5 Release](https://github.com/apple/swift/pull/39342) + +[@Parsifal](https://github.com/ParsifalC):Swift Concurrency 的向后兼容的提案已于近日被 merge 进 Swift 5.5 的发布分支中,这就意味着 Concurrency 特性并不是 iOS 15 独有了,我们最低可在 iOS 13 中使用该特性。各平台最低支持版本为 macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0。值得一提的是,微信目前最低支持 iOS 11,按目前迭代速度最迟 23 年,将很可能提到 iOS 13+。 + +> 由 [LeeCenY](https://github.com/LeeCenY) 推荐收录 + +### [Flutter 2.5 版本发布](https://medium.com/flutter/whats-new-in-flutter-2-5-6f080c3f3dc) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 官方 9 月 9 日正式发布了 2.5 版本,本次版本关闭了 4600 多个 issues,同时包含了诸多性能和工具上的优化,当然也有一些组件及插件上的更新: + +- 性能优化 + - 光栅化提升,时间缩减了 2/3 + - UI isolate 事件循环策略优化,帧处理现在优先于处理其他异步事件 + - GC 提升,使得未被使用图像内存能被及时回收 + - 消息通道性能提升 50% + - Flutter 构建适配 Apple Silicon M1 + - Dart 2.14, 新的语言格式化和特性,以及 lint + +- Widget 更新 + - Android 全屏模式适配 + - Float Action 更新 + - ListView 底部和滚动条优化 + - ScrollMetricNotification + - Android 设备上相机使用增强 + +- DevTools + - 事件追踪能力增强 + - 卡顿诊断加强 + - CPU Flame 增强 + - Widget Inspector 组件信息更加详细 + +### [App Store 现已开放 iOS 15 和 iPadOS 15 app 提交](https://developer.apple.com/cn/news/?id=f87q5n2j) + +[@Parsifal](https://github.com/ParsifalC):9 月 14 日起 App Store Connect 已经开放 iOS 15 和 iPadOS 15 App 的提交,同时苹果宣布自 2022 年 4 月起,所有提交至 App Store 的 iOS 和 iPadOS app 都必须使用 Xcode 13 和 iOS 15 SDK 构建。 + +## 文章 + +### 🌟 🐢 [Cube 技术解读 | 支付宝新一代动态化技术架构与选型综述](https://mp.weixin.qq.com/s/UaQUkdTboYGU0_VYiAooVw) +[@Kyo](https://github.com/KyoLi):许多人期待已久的支付宝动态化方案 `Cube` 终于公开了,相比较于 Weex 或者 Flutter 这些跨平台方案,`Cube` 更加轻量级一些,尤其在首页卡片这类应用场景下非常适用。实际上,笔者个人也认为,在很多业务场景,这种自研的轻量跨平台动态化方案,其实是更好的选择,可以在技术上更加自主可控。本文是系列文章的第一篇,从项目背景、整体架构、应用场景上做了说明,期待后续的文章。 + +### 🌟 🐢 [企业微信超大型工程-跨全平台UI框架最佳实践](https://mp.weixin.qq.com/s/JdQmgQ57nWQM99JW_ueFVg) +[@折腾范儿_唯敬](https://www.weibo.com/agvicking/home?wvr=5):企业微信这次给我们带来了他们在 Flutter 跨平台方面的深度探索。企业微信自身的特点是大量业务逻辑已经抽离为 C++ 的跨平台模块,但各端的 UI 依然还是独立的代码与框架,因此他们对 Flutter 的诉求上定位相当的清晰,那就是“跨平台的UI渲染”。本文重点从,native 与 Flutter 的混合栈开发模式,到单引擎/多引擎的复杂交互实现。从 Flutter 与 native 与 c++ 的通信通道建设,到 Flutter 的性能与体验优化。同时还展现了企业微信庞大的 Flutter 一系列开发提效工具链,非常的实用也非常的强大。最后文章末尾稍微提了一些他们在 Flutter 动态化方面的探索,只是写的非常浅,而且也是基于别的 DSL/Layout 框架,本质上已经脱离了 Flutter 这个整体框架,单独借用其渲染模块,对 Flutter 动态化有兴趣的读者,更推荐深入去了解他们在文中提到的另外 2 种具体框架的动态化实践 + +### 🐕 [Xcode 13 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes) + +[@Smallfly](https://github.com/iostalks):本周 Xcode 13 正式版发布,包含 iOS 15,iPadOS 15,tvOS 15,watchOS 8 以及 macOS Big Sur 11.3 SDK。Xcode 13 需在 macOS 11.3 及以上版本运行,支持 iOS 9,tvOS 9,watchOS 2 及以上系统设备调试。 + +本次更新包含 Swift、Clang、Linking 等二十几个模块的新特性,建议阅读原文了解全貌。 + +> 另外特别说明一下,Xcode 13 正式支持了 Vim,Vim 党奔走相告。 + +### 🐕 [The difference between Thread.sleep() and Task.sleep()](https://trycombine.com/posts/thread-task-sleep/) + +[@anotheren](https://github.com/anotheren):线程的休眠与任务的休眠,正如它们名字的字面意思。`Thread.sleep()` 是一个旧方法,来自 `Foundation`,它会在指定的时间内卡住线程(CPU无法响应其他工作);`Task.sleep()` 是全新的 async 方法,来自 `Swift Concurrency`,它只会让当前的 Task 暂停/休眠指定时间,而不是阻止线程,CPU 可以继续其他任务。更详细的对比与案例,请阅读原文。 + +### 🐕 [Linting vs Formatting: A Swift Guide Part 1](https://jasonzurita.com/linting-and-formatting-swift-part-1/) [Part 2](https://jasonzurita.com/linting-and-formatting-swift-part-2/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Part 1 对 Linting 与 Formatting 的概念进行了明确,举个例子:Linting 包含 检查函数的圈复杂度、强制拆包等,Formatting 包含 code style 等。Part 2 推荐了一些工具如 [tailor](https://github.com/sleekbyte/tailor)、 [SwiftLint](https://github.com/realm/SwiftLint) 等,并介绍了这些工具在 PR 或 CI 中的最佳实践。 + +### 🐕 [关于 Swift Package Manager 的一些经验分享](https://mp.weixin.qq.com/s/s2GZ13PVdVa5t-SABArtdA) + +[@四娘](https://kemchenj.github.io/):这是一篇来自字节跳动团队的 SPM 经验分享,介绍了 SPM 基本的使用方式,团队内部的实践经验,常见问题以及与 Cocoapods 的对比。 + +### 🚧🐕 [迁往 Swift 5.5 Concurrency 之路:重构方式的选择](https://imtx.me/blog/migrate-to-swift-5-5-concurrency-choices-of-refactor-method/) + +[@极速男孩](https://github.com/ztlyyznf001/):苹果在 Swift 5.5 中加入了 Concurrency 的支持,最早在 iOS 15 上支持,但是最近苹果完成了 Back-Deploy 的开发支持 iOS 13 以上的系统。本文主要介绍了如何用 Xcode 中的 Refactor 工具将你的老的回调方法迁移到 async await 方法中去。 + +### 🐕 [Alibaba iOS 工程架构腐化治理实践](https://mp.weixin.qq.com/s/gS9yC4HUWxi0vkjQPdo5tw) + +[@红纸](https://github.com/nianran):本文为作者在工程架构上的腐化治理实践,其主要问题是初期没有明确的项目规范导致工程环境混杂,出现一系列的蝴蝶效应:头文件都添加到了 search path -> import 没规范 -> 模块依赖没有补全 -> 循环依赖,模块强耦合 -> 子项目没办法打包 -> Swift 没办法进行。 + +面对这样一个混杂的工程环境,作者从依赖树开始着手分析,四象限分层治理模块和依赖。利用自动化脚本,分析模块依赖关系、补全模块间依赖、自动生成 umbrella 头文件、修改不规范头文件等等来对腐化的工程进行整治。光治理还不够,为了防止项目继续腐化,在构建流水线末端设置构建卡口,设置规则防止不合规的代码继续产生。 + +### 🐎 [你真的了解符号化么?](https://mp.weixin.qq.com/s/6Odq8JTYXL0bA8xyWEO1Og) + +[@Jimq](https://github.com/waz0820):周报第 175 期推介了两篇关于符号化的文章,分别来自字节和百度,本篇文章来自搜狐,可以对照着一起看。字节文侧重于符号化的在线解析,针对在 Linux 服务器上规模化部署的痛点,对最终方案的实现原理、解析流程中每个节点的具体实现进行了深入讲解。百度文本地符号化与线上符号化并重,内容比较全面。本文侧重于 macOS 上的本地符号化,详细列举了相关参数、流程和工具,更加规整实用,方便开发者个人快速上手及日后查阅。 + +## 摸鱼周报 + +[@摸鱼周报 #27](https://mp.weixin.qq.com/s/WvctY6OG1joJez2g6owroA):第二十七期摸鱼周报来啦,一起来看下本期概要: + +* 访谈内容:跟 RunsCode 聊聊编程和兴趣爱好,以及如何在 1min 之内复原魔方😏。 +* Tips:iOS 识别虚拟定位调研;使用 App Store Connect API Key 解决 Fastlane 双重验证问题。 +* 面试模块:KVC 取值和赋值过程的工作原理。 +* 优秀博客:关于 Combine 的相关文章推荐。 +* 学习资料:阮一峰最新发布的 C 语言入门教程,GitHub 漫游指南。 +* 开发工具:Xcode 工程管理工具 XcodeProjects。 + +## 代码 + +### [ScriptWidget](https://github.com/everettjf/ScriptWidget) + +[@JonyFang](https://github.com/JonyFang):ScriptWidget 开源了,使用 React JSX 样式的代码产生 iOS 上的小组件,repo 目前仅支持了 iOS,也是 SwiftUI 动态化生成界面的雏形。 + +## 赞助者 + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#177-2021.10.18.md b/Reports/2021/#177-2021.10.18.md new file mode 100644 index 000000000..1ee9530dc --- /dev/null +++ b/Reports/2021/#177-2021.10.18.md @@ -0,0 +1,132 @@ +# 老司机 iOS 周报 #177 | 2021-10-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [王炸候场中,19 号等你来。](https://mp.weixin.qq.com/s/5k9_up9CdWHVF5J8zzKSHg) + +[@Parsifal](https://github.com/ParsifalC):北京时间 10 月 19 日凌晨 1 点,也就是明天凌晨,苹果将举办新一期的硬件发布会。市场预期苹果将会发布 M1X 的 MacBook Pro,考虑换代的朋友们可以准备起来了~ + +## 新手推荐 + +### 🐕 [从《虾票票》带你入门 iOS 系列](https://mp.weixin.qq.com/s/lj1zYvVitD6v7z0gjl13qg) + +[@享耳先森](https://github.com/iblacksun):这是 [Bo2SS](https://bo2ss.ml) 在公众号连载的系列文章,适合想从零入门 iOS 的同学,建议和 Apple 的教程一起阅读,目前连载到第四篇: +- [从《虾票票》带你入门 iOS(1)—— 定位与目标](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484201&idx=1&sn=bbc328b36d7bcd5737d6508dcc2a03b2&chksm=cedca8aef9ab21b8bb10a5cc04e349c58b257e6a24886255c19373dac7265bd0dc7356f82636&scene=178&cur_album_id=1755942094336000006#rd) +- [从《虾票票》带你入门 iOS(2)—— iOS 简史与工程创建](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484230&idx=1&sn=5570b91784500b2da61e7779d095a302&chksm=cedca8c1f9ab21d72ed3368e9613e25a385ae37ff1840834f6ef5ddd24caeff4ffb2700ff153&scene=178&cur_album_id=1755942094336000006#rd) +- [从《虾票票》带你入门 iOS(3)—— iOS 常用 UI 组件](https://mp.weixin.qq.com/s/lj1zYvVitD6v7z0gjl13qg) +- [从《虾票票》带你入门 iOS(4)—— 调试](https://mp.weixin.qq.com/s?__biz=Mzg3MzU3ODIxNg==&mid=2247484371&idx=1&sn=2f1e8cb8f074114ed548f4da3bc9f77d&chksm=cedca854f9ab2142ad67c2a76ab2774fb26f6fbf14bddedaef093eff753016983b84022de47c&scene=178&cur_album_id=2056906778021298177#rd) + +> 自荐人 [Bo2SS](https://bo2ss.ml) + +## 文章 + +### 🌟 🐢 [Telegram-iOS 源码导读](https://hubo.dev/2020-05-07-source-code-walkthrough-of-telegram-ios-part-1/) + +[@AidenRao](https://weibo.com/AidenRao):Telegram 是市场上最受欢迎的即时通讯工具之一,其 MAU 已突破 5 亿。大多数 Telegram 客户端应用程序都是开源的,以证明其安全性,这是一系列关于 Telegram-iOS 源码的文章。 + +该代码库展示了它对其他 iOS 工程师,会遇到的许多实际工程问题的解决方案。例如可靠的网络、安全存储、复杂的列表 UI、对系统控制器的自定义等。 + +基础: +[Telegram-iOS: Part 1](https://hubo.dev/2020-05-07-source-code-walkthrough-of-telegram-ios-part-1/),[Telegram-iOS: Part 2](https://hubo.dev/2020-05-11-source-code-walkthrough-of-telegram-ios-part-2/),[Telegram-iOS: Part 3](https://hubo.dev/2020-05-15-source-code-walkthrough-of-telegram-ios-part-3/) + +协议: +[Telegram-iOS Part 4: MTProto Connections](https://hubo.dev/2020-06-05-source-code-walkthrough-of-telegram-ios-part-4/) + +UI 架构: +[Telegram-iOS Part 5: AsyncDisplayKit](https://hubo.dev/2020-06-14-source-code-walkthrough-of-telegram-ios-part-5/),[Telegram-iOS Part 6: Bubbles](https://hubo.dev/2020-06-22-source-code-walkthrough-of-telegram-ios-part-6/) + +内容消费: +[Telegram-iOS Part-7: Link Preview and Instant View](https://hubo.dev/2020-07-12-source-code-walkthrough-of-telegram-ios-part-7/) + +> 由 [0x1306a94](https://github.com/0x1306a94) 推荐收录 + +### 🌟 🐕 [AttributedString——不仅仅让文字更漂亮](https://mp.weixin.qq.com/s/4P8hX7WoBUeUtvBOS4Tx7g) + +[@Barney](https://github.com/BarneyZhaoooo):本文从四个方面介绍了 WWDC 2021 上公布的新功能 AttributedString。 + +- **AttributedString vs NSAttributedString** 对比 +- **基础用法** +- **本地化** +- **Markdown 解析** + +### 🐎 [Swift-DocC is Now Open Source](https://swift.org/blog/swift-docc/) +[@Smallfly](https://github.com/iostalks):WWDC21 苹果发布了一款新的 Swift 文档编译器 Swift-DocC,它能更高效的把代码注释生成文档,以及为代码库生成综合性的在线文档。它的文档 API 支持 Markdown 格式的注释和长文,甚至能够集成图片。 + +Swift-DocC 被集成在 Xcode 13 的工具链中,帮助用户在代码中写出更详细的文档。现在苹果宣布 Swift-DocC 正式开源了,阅读原文可了解更多特性和用法。 + +### 🐎 [Apple documentation | canOpenURL:](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc) + +[@J_Knight_](https://github.com/knightsj):来自苹果官方文档:在 iOS 15后,限制了 LSApplicationQueriesSchemes 数量最多为50个。详情可以见文档中的内容。 + +> 推荐阅读:[LSApplicationQueriesSchemes](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/plist/info/LSApplicationQueriesSchemes) + +### 🐕 [The Mysterious CodableWithConfiguration Protocol](https://www.andyibanez.com/posts/the-mysterious-codablewithconfiguration-protocol/) + +[@xiaofei86](https://github.com/xiaofei86):每年苹果都会在 WWDC 为我们带来许多新的 API,但那些不是 “big things” 的更新并不会在 Session 中提及。本篇文章将为你介绍一个有趣新接口 —— CodableWithConfiguration。 + +如果你已经知道如何使用 Codable,那么你可以非常快速地开始使用这个新的 API。CodableWithConfiguration 允许你做与普通 Codable 完全相同的事情 —— 对来自不同格式的对象进行序列化,例如 JSON。 + +但 CodableWithConfiguration 允许我们将自定义的配置对象注入可编码类型的编解码过程。你可以根据配置灵活地控制编解码过程,例如:有选择地解码或编码一些键,或者转换它们。这打开了一个充满可能性和更整洁代码的世界,阅读原文了解更多的使用场景。 + +### 🐎 [Faster Builds with Code Signing Hacks](https://eisel.me/signing) + +[@老峰](https://github.com/gesantung):Code Sign 是为数不多的增量构建与 Clean 构建所需的时间一样的耗时操作之一,而且应用程序的规模越大,需要的时间也越长。本文介绍了在 Debug 环境下通过配置签名算法、签名规则等技巧,加快 Code Sign 速度,提升构建效率的轻量方案。 + +## 摸鱼周报 + +[@摸鱼周报 #29](https://mp.weixin.qq.com/s/TVBQgYuycelGBwTaCSfmxQ):第二十九期摸鱼周报来啦,一起来看下本期概要: + +* Tips:关于低电量模式的一些介绍。 +* 面试模块:Objective-C 的消息机制(下)。 +* 优秀博客:整理了几篇 Swift Tips 的文章。 +* 学习资料:gitmoji:一个 GitHub 提交信息的 emoji 指南😎。 +* 开发工具:能够使用 Swift 开发安卓应用的工具:SCADE;可视化解析 `.ndjson` 文件的工具:Privacy-Insight。 + +本期访谈内容独立成篇了,介绍一位拿下微软 iOS 岗位 Offer 的朋友准备和面试的经历,完整内容可以查看:[人物访谈--微软Offer之路](https://mp.weixin.qq.com/s/nh9Rr7lFMy49bEUMWQO3-g) + +## 工具 + +### [tuist](https://tuist.io) + +[@红纸](https://github.com/ninaran):Tuist 是一个命令行工具,其旨在 Xcode 项目的生成、维护和交互。其采用了清单格式来描述项目(使用 Swift 编写),可以彻底解决 xcode 项目文件的代码冲突问题。支持 Cocoapods、Carthage、SPM。 + +## 代码 + +### [swift-markdown](https://github.com/apple/swift-markdown) + +[@Parsifal](https://github.com/ParsifalC):苹果官方开源的 Markdown 工具,基于 Swift 编写,参考的是 GitHub 风格解析器。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#178-2021.10.25.md b/Reports/2021/#178-2021.10.25.md new file mode 100644 index 000000000..6e4dea057 --- /dev/null +++ b/Reports/2021/#178-2021.10.25.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #178 | 2021-10-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/) + +[@老峰](https://github.com/Gesantung):苹果上周宣布启动开发者参与的全新在线系列演讲 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/),包括 100 多场直播和超过 1500 小时的会谈时间,将在接下来的 8 周内展开。Tech Talks 将使开发者们有机会直接与 Apple 专家交流,深入了解新技术、解决疑难杂症以及相关指南与工具的理解,同时也包括分享他们在开发 App 与在 App Store 分发 App 的经验。[Tech Talks 2021](https://developer.apple.com/cn/tech-talks/) 面向 Apple 开发者计划和 Apple 开发者企业计划的现有成员开放,报名已开启,每两周会发布新演讲与会谈时间预约。关于日程和报名的信息,可访问 [Tech Talks 2021](https://developer.apple.com/cn/tech-talks/),感兴趣的 iOSer 快去报名吧~ + +## 文章 + +### 🌟 🐕 [Flutter 难点问题之 GPU 后台 Crash](https://mp.weixin.qq.com/s/KVux8rYCPXcvDODUskinBQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了后台访问 GPU 导致 App 后台被杀的修复方案。通过在主线程接收 App 退到后台的通知(退到后台即表示 GPU 不可用),并设置一个 bool 变量,在实际渲染的线程中根据 bool 变量,来进行分支处理:GPU 可用时照常使用 GPU 渲染;GPU 不可用时降级用 CPU 渲染。一般使用 SyncSwitch 时,语义都带 ``GpuDisabled`` ,因此 SetIfTrue 中才是 CPU 渲染的降级调用。 + +同时本文还介绍了通过 ``xxx_impl.h`` 来暴露方法,既免去了解决过多头文件的担心,也得以使改动通过单元测试。 + +### 🌟 🐕 [探究 iOS 编码对包大小的影响](https://juejin.cn/post/7015861914370736136) + +[@JonyFang](https://github.com/JonyFang):文中以分析属性为例子,从二进制文件层来分析编码对包大小的影响。介绍了属性、方法调用、函数调用、direct 方法调用、block 调用在汇编下的区别,能让我们对编写的代码在汇编时的表现有大概的认知。推荐阅读~ + +### 🐎 [MetalKit.org 总结:What’s new in Metal at WWDC21](https://metalkit.org/2021/06/18/whats-new-in-metal-at-wwdc21/) + +[@莲叔](https://github.com/aaaron7):WWDC2021 Apple 发布了一系列激动人心的新的 Metal Feature。本篇文章的作者从用 Metal 来实现光线跟踪的各个环节的关键技术为例,说明了一系列新的 API 的使用场景和作用,比如 intersection query、Bindless 等新的 API 机制,以及 Xcode 针对光线跟踪的调试器,能够可视化算法中的许多关键信息。文章整体比较专业,不太适合新手观看,对于图形图像有开发经验的同学可以研究一下。 + +### 🐎 [macOS 上 Flutter Desktop 与 Electron 的性能对比](https://mp.weixin.qq.com/s/uTHi8SfCvXJfbie1A1YNVA) + +[@Damien](https://github.com/ZengyiMa):Electron 和 Flutter Desktop 是当下最流行的 2 种跨端方案,本文分别从应用大小、运行效率、渲染机制、内存、帧数、CPU/GPU 等方面做了详细的对比。对 2 者的比较感兴趣的同学不妨一读。 + +### 🐕 [微信终端自研 C++ 协程框架的设计与实现](https://mp.weixin.qq.com/s/c17DaD7JbKlDFT6J8haEFw) + +[@老驴](https://weibo.com/u/6090610445):微信客户端团队自研了一套跨平台 C++ 协程框架:owl(然而还没有开源)。文中微信团队解释了为什么需要重复造轮子,以及在设计过程中对语法,堆栈,调度,并发的一些思考。文章中干货不少,适合开发底层框架的同学阅读学习。(还是催一下,啥时候开源哈) + +### 🐕 [干货:探秘 WKWebView](https://mp.weixin.qq.com/s/l9D4V0ON3uJ0HfsJ7bpJiQ) + +[@享耳先森](https://github.com/iblacksun):讲 `WKWebView` 应用的文章之前推过不少,这篇算是最全的了,基本包含了使用层的方方面面,特别是缓存及 `Cookie` 机制,建议阅读。 + +### 🐢 [SwiftUI by Example](https://jaywcjlove.gitee.io/swiftui-example/) + +[@kemchenj](https://kemchenj.github.io/):SwiftUI 示例,技巧和技术集合,可以帮助我们构建应用程序,解决常见问题以及了解 SwiftUI 的实际工作方式。 + +这个网站翻译自 [hackingwithswift.com](https://www.hackingwithswift.com/quick-start/swiftui),内容所有实例都是在 macOS Big Sur 系统上运行,基于 Xcode 12.4 开发。 + +> 由 [lijianfeigeek](https://github.com/lijianfeigeek) 推荐收录。 + +## 摸鱼周报 + +[@摸鱼周报 #30](https://mp.weixin.qq.com/s/KNyIcOKGfY5Ok-oSQqLs6w):不知不觉已经到第三十期摸鱼周报了,来看下这期内容概要: + +* Tips:分享 WKWebView 几个不常用的特性。 +* 面试模块:一道 Tagged Pointer 相关题目。 +* 优秀博客:本期博客整理了 Codable 在一些特殊场景的处理方式,Swift 处理 JSON 解析时的一些技术细节。 +* 学习资料:Xcode Build Settings 的参数说明网站;来自 Microsoft 的 Data Science 基础课程。 +* 开发工具:免费且开源的 Coding 时间追踪工具:wakapi。 + +本期访谈对象是一位学习能力很强的在校生,可以通过这篇文章对他进行一定的了解:[人物访谈|一位在校生的 iOS 之路](https://mp.weixin.qq.com/s/9Z7-8trqc7MmIlrjHqbtsA) + +## 代码 + +### [Apple Store 库存监控助手](https://github.com/Sunnyyoung/AppleReserver) + +[@anotheren](https://github.com/anotheren):今年没有抢到 iPhone 13 Pro 首发,并决定等到双十一的同学可能有点郁闷,不仅价格没啥变化,库存还异常紧张。如果你的城市有 Apple Store,那么预约线下取货也是快速拿到新手机的靠谱方式。这是一个线下门店放货监控的脚本工具,同时工具本身也使用 Swift 编写,同样是个学习的案例。 + +### 🐢 [Dflat: Structured Data Store for Mobile](https://github.com/liuliu/dflat) + +[@zvving](https://github.com/zvving):对于复杂应用,结构化数据的持久存储一直是值得反复讨论的命题。CoreData、Realm、WCDB、FMDB 各自有不同的设计权衡和适用场景,Dflat 这个崭新的库尝试带来一些不同的思考与探索: + +- 使用 Swift 从头开始构建,充分利用语言定义类型(Struct、Enum 等),提供带有类型检查的查询、Combine 订阅等现代特性,更适合单向数据流的编程模型 +- 数据获取均为不可变数据类型,对并发/同步编程、数据传递有着良好的支持,支持 多写/多读 or 单写/多读 模式 +- 引入 [FlatBuffers](https://halfrost.com/flatbuffers_schema/) 生成 Swift 模型代码(with [Bazel](https://bazel.build/)),方案在序列化、内存占用等方面有明显优势,常规应用场景的性能对比也[明显优于](https://dflat.io/benchmark/)传统 DB 方案 +- 存储方案目前基于 SQLite,设计上兼容切换不同存储方案 + +项目虽在早期阶段,文档规划清晰,非常值得提前了解学习:[官方文档](https://dflat.io/)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#179-2021.11.01.md b/Reports/2021/#179-2021.11.01.md new file mode 100644 index 000000000..440579957 --- /dev/null +++ b/Reports/2021/#179-2021.11.01.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #179 | 2021-11-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App 内活动正式开放](https://developer.apple.com/cn/news/?id=zghdvfza) + +[@Parsifal](https://github.com/ParsifalC):WWDC 21 中提到的 App 内活动于 10 月 27 日正式开放了。需要注意的是,要开始相关操作,**帐户持有人需要在 App Store Connect 里加入新版 App Store 提交体验**。您将能够体验更多功能,包括在一次提交中包含多至 10 个活动、**不使用新的 App 版本即可提交活动**等。创建活动后,App Store 中进入对应 App 的主页后就会弹出该活动卡片,并允许分享至社交平台,后续苹果也会继续迭代优化 App 内活动的运营数据等功能。 + +### [TestFlight 公开链接名额管理策略调整](https://developer.apple.com/cn/testflight/) + +[@Parsifal](https://github.com/ParsifalC):TestFlight 是苹果官方提供的内测平台,苹果也一直在优化它的使用体验。最近一次比较大的更新或许是 2019 年推出的公开链接,也自那个时候开始,国内也越来越多的厂家采用了 TestFlight 进行内测。按照 TestFlight 的使用文档,开发者可以通过公开链接提供 10000 个名额给内测用户。以往在实际使用中,部分开发者都会通过删除已经接受邀请的用户来释放名额,从而突破 10000 额度的限制。但最近,苹果似乎调整了这一策略。经过测试,目前单个 App 的 10000 个额度将会锁定在 90 日以内不变,也就是说不管是通过新建测试组、更新 build,还是通过删除已邀请用户或手动过期 build 等等这些方式,均不能释放 10000 以内的名额。 + +## 文章 + +### 🌟 🐕 [iOS 性能检测新方式 - AnimationHitches](https://mp.weixin.qq.com/s/SQgxvBztLQFZ6QV43iN2Vg) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍了 RenderLoop 及新的一帧展现给用户的整个流程。着眼于什么是卡顿,及它的两种类型:提交卡顿和渲染卡顿,最终定义了卡顿时间比,用以测量当前 App 的卡顿程度和性能。本篇可以带着读者对整个渲染循环和卡顿类型有更清晰的认识,日常编码中也可以尽量避免这些问题。 + +### 🌟 🐕 [58 同城 iOS 混编项目无用代码检测方案介绍](https://mp.weixin.qq.com/s/RU8jhQJ_LSFEJcZX3bXmLg) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了混编项目无用代码检测在 58 的实践步骤和心得,已开源。 + +- **混编项目无用代码检测的几种手段** +* OC 和 Swift 各自的实现 +- 遇到的困难 + +### 🐎 [苹果官方 “隐私洞见” 来了](https://mp.weixin.qq.com/s/jo9sb2AfrnzZWpDDuqJnCw) + +[@Smallfly](https://github.com/iostalks):苹果在 iOS 15.2 测试版中引入了应用隐私报告,旨在向用户提供已开启隐私权限的应用被获取敏感信息的频率。其中包括位置、联系人、相机、麦克风和照片等信息。 + +Apple 还会记录应用程序在后台访问了哪些域名,这个功能可以说让偷窥应用无处遁形。 + +通过如下方式可以启用隐私报告: +* 打开 **设置** 应用程序 +* 进入 **隐私** 页面,滑到底部 +* 点击 **应用隐私报** 告,打开「应用隐私报告」页面 +* 点击 **打开应用隐私报告** + +### 🐢 🚧 [iOS 隱私與便利的前世今生](https://medium.com/zrealm-ios-dev/ios-隱私與便利的前世今生-9a05f632eba0) + +本文综述性的介绍了从 iOS 7 到 15 Apple 在隐私方面做的持续改进:这些改进背后的原因以及对用户来说有什么好处? + +> 推荐人 [zhgchgli0718](https://github.com/zhgchgli0718) + +### 🐕 [干货 | 携程 APP Native/RN 内嵌 Flutter UI 混合开发实践和探索](https://mp.weixin.qq.com/s/yqChBHJ_QEpjuGYdIJsVzg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):携程当前 Flutter 的使用占比逐步提高,而老页面的技术栈还有 Native 或者 RN,因此做出了混栈的尝试。RN 嵌套 Flutter 的具体实现,其他资料相对较少,方案较为原始,仅供参考。相对于 RN 底层还是原生控件,Native 与 Flutter 交互还有很多细节值得研究。 + +携程团队当前的选择可能基于历史负担,但个人还是不推荐同时维护三种技术栈,新项目选型更是不可取:内存问题与开发成本都将逐步不可控。可以观察携程团队的后续的取舍。 + +### 🐕 [【译】 Flutter 延迟加载组件 【包体积优化 | 动态化】](https://juejin.cn/post/6970870114316976142) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 2.2 带来了很多新的功能,其中就有一个大家期待已久的功能: 按需加载「Deferred Components」。 这一特性可以让我们将 Flutter 产物拆分为多个组件,并在需要时再进行下载。 借助于这一特性,官方 Gallery 演示程序安装时的大小压缩了 46% (200KB 的代码和 43MB 的资源减少)本文向大家介绍,如何使用延迟加载功能。遗憾的是,该功能只能在 Android 平台使用,iOS 上不可用 😄。 + +## 摸鱼周报 + +[@摸鱼周报 #31](https://mp.weixin.qq.com/s/DQpsOw90UsRg6A5WDyT_pg):第三十一期周报来啦,从本期开始周报里面会尝试加入一些 Apple 最近公布的相关活动介绍。 + +* 本期话题:关于 In-App Events 的一些介绍。 +* Tips:优化 Xcode 增量编译的几个小技巧。 +* 面试模块:一道 RunLoop 相关题目。 +* 优秀博客:本期博客主题是 Swift 的高级中间语言:SIL。 +* 学习资料:raywenderlich 新出的 Flutter 教程;一份认知者偏差手册。 +* 开发工具:一个终端命令补全工具:fig。 + +## 工具 + +### [Aquarius](https://github.com/CrazyFanFan/Aquarius/blob/master/README_CN.md) + +[@红纸](https://github.com/nianran): Aquarius 是一个解析 Podfile.lock 的 GUI 工具,输出相比于 [cocoapods-graph](https://github.com/erickjung/cocoapods-graph) 的图输出更加友好(依赖数量、依赖关系等),其使用 SwiftUI 进行编写,开发者可以定制自己的各种需求~ + +> 推荐人:[lijianfeigeek](https://github.com/lijianfeigeek) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#180-2021.11.08.md b/Reports/2021/#180-2021.11.08.md new file mode 100644 index 000000000..d637de599 --- /dev/null +++ b/Reports/2021/#180-2021.11.08.md @@ -0,0 +1,123 @@ +# 老司机 iOS 周报 #180 | 2021-11-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [macOS 版 TestFlight 正式发布](https://developer.apple.com/cn/news/?id=0bemba6j) + +[@Parsifal](https://github.com/ParsifalC):TestFlight 正式支持 macOS 应用 分发了,规则总体与 iOS 版 TestFlight 差不多,总共 10000 个测试名额,支持分组等功能。另外,由于 Mac Catalyst 的存在,在 macOS 的 TestFlight 上体验 iOS App 的或许也会是一项新的分发尝试方向。 + +## 新手推荐 + +### 🌟 🐕 [GitHub - twostraws/Unwrap: Learn Swift interactively on your iPhone.](https://github.com/twostraws/Unwrap) + +[@Barney](https://github.com/BarneyZhaoooo):Unwrap 是一款开源的 Swift 应用程序,可以通过 100 节核心课程,或是运行代码进行实践,来更高效快速的学习 Swift。 + +### 🐕 [Xcode 中代码注释编写小技巧](https://juejin.cn/post/7020590213361565726) + +[@老峰](https://github.com/gesantung):写好注释是每一个程序员的一个基本素养,本文介绍了使用 Xcode 为 Objective-C&Swift 代码添加以及修改注释的小技巧。 + +## 文章 + +### [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/TdTGK21S-Yd3aD-yZDoYyQ) + +[@邦Ben](https://weibo.com/linwenbang):看这篇之前可以先看下[闲鱼Flutter图片框架架构演进(超详细)](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247485142&idx=1&sn=b416f1d0c8f3fd2077075441154df090&scene=21#wechat_redirect),了解一下闲鱼之前对图片的一些优化,逐步递进更容易理解,闲鱼在基于原有的外接纹理优化的前提,继续尝试了 dart:ffi 的方式进行优化(dart:ffi 提供了同步调用 native c++ 层的能力,因为是直接调用,因此性能高于常规的 channel 调用),闲鱼通过外接纹理和 ffi 组合使用的方式,进一步优化了: + +- 支持加载 ui.image,特殊场景可以使用 +- 支持预加载 +- 新增纹理缓存,统一图片缓存 +- 支持模拟器 +- 完善自定义图片类型通道 +- 完善的异常捕获与收集 +- 支持动图 + +结论: +- Texture 适用于日常场景,优先选择; +- FFI 更适用于: + - flutter <= 1.23.0-18.1.pre 版本中,在模拟器上显示图片 + - 获取 ui.Image 图片数据 + - flutter 侧解码,解码前的数据拷贝影响较小 + +关于开源: +目前还没开源,文中说计划12月底开源,可以期待一下 + +参考链接: +- [dart:ffi 官方文档](https://dart.dev/guides/libraries/c-interop) + + +### 🐎 [工程实践 | 在 Flutter 中实现一个精准的滑动埋点](https://mp.weixin.qq.com/s/Q0HLJdqeRcYg6GKQQWq4CQ) + +[@Damien](https://github.com/ZengyiMa):埋点,为了对行为特征的数据进行量化分析、优化产品,我们常常需要在特定的时机上报数据埋点,而滑动埋点曝光埋点则是其中的一个高频使用场景。本文将会提供在 Flutter 中如何实现自动滑动曝光埋点实现思路,对此领域感兴趣的同学可以详细阅读此文章。 + +### 🐕 [Introducing Swift Distributed Actors](https://www.swift.org/blog/distributed-actors/) + +[@xiaofei86](https://github.com/xiaofei86):Actor 模型是一种适用性非常好的通用并发编程模型。它不仅可以应用于共享内存架构,更适合应用于分布式内存架构,解决地理分布型的问题。如今,Swift on Server 生态也迎来了 [Swift Distributed Actors](https://github.com/apple/swift-distributed-actors/),一个面向服务器的完整集群库,用于即将推出的 Distributed Actors 语言功能。 + +Distributed Actors 是 Swift 并发模型演变的下一步,本文除了介绍这项新特性外,也通过 [SwiftNIO](https://github.com/apple/swift-nio)、[Swift Service Discovery](https://swift.org/blog/swift-service-discovery/)、[Swift Cluster Membership](https://swift.org/blog/swift-cluster-membership/) 等 Swift 生态搭建具备服务通信、服务发现等功能的服务集群 Demo 做功能演示。感兴趣的同学可以阅读原文持续关注。 + +### 🐕 [Flutter PlatformView 在闲鱼直播业务中的实践](https://mp.weixin.qq.com/s/u-nYmDm6doIMBoh8cTDzlQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):咸鱼直播的场景是 Flutter 套全屏的 Native 组件(通过全屏的 PlatformView ),特点是处于页面最上层且背景透明。需要解决“点击透明区域的时候让下层响应,点击非透明区域时 PlatformView 自己响应”的问题。 + +文章首先介绍了 PlatformView 的实现原理,即:通过 DelayingGestureRecognizer 延迟其他手势的响应,并将消息处理转发至 Flutter,遵循 Flutter 内部的优先级处理机制;如果应该由 PlatformView 响应,则由 ForwardingGestureRecognizer 进行转发,走熟悉的 iOS 手势处理。 + +因此咸鱼直播选择:在点击非透明区域时,在禁用 PlatformView 的两个手势,走 Native 手势处理;点击透明区域时,恢复 PlatformView 的两个手势,走 Flutter 内部处理。由此解决了全屏 PlatformView 的交互问题,有较大的借鉴意义。 + +同时,即使实际开发中不会选择这么使用 PlatformView,对 PlatformView 的源码剖析也很值得一读。 + +## 摸鱼周报 + +[@摸鱼周报 #32](https://mp.weixin.qq.com/s/6CyL0B6Zkf6KXRrfocohoQ):第三十二期摸鱼周报来啦,一起看下本期内容概要: + +* 话题:Mac 版 TestFlight 已经上线。 +* Tips:介绍了关于中间层的一些概念,前后端之间的现状以及需要解决的问题等。 +* 面试模块:能否向编译后的类增加实例变量?能否向运行时动态创建的类增加实例变量?为什么? +* 博客主题:Swift 关键字。 +* 学习资料:来自字节跳动的 OKR 学习网站;一个关于 SwiftUI 的 Cheat Sheet —— Fucking SwiftUI。 +* 开发工具:一个允许你在 App Store 上搜索 iOS 应用程序并下载应用程序包的命令行工具 —— ipatool。 + +## 工具 + +### [PillowTalk - iOS/Lite](https://github.com/Co2333/mobilePillowTalkLite) + +[@极速男孩](https://github.com/ztlyyznf001):一个使用 SwiftUI 编写的在 iOS 上对 linux 中的 RPC 服务进行监控的工具。 + +## 音视频 + +### 🐢 [5G,华为,土耳其——我花了两个月,搞懂了5G背后的秘密](https://www.bilibili.com/video/BV1fq4y1g7hq) + +[@zvving](https://github.com/zvving):5G 技术中的极化码是一个非常复杂的通信概念,UP 主作为一个『通信小白』,暴肝三个月,梳理信息论、信道容量、香农极限诸多知识,在此基础上介绍极化码及其背后的故事。视频是在讲解 5G 技术,更是表述刨根问底、用平和心态长期坚持的科研精神,分享给每一位有好奇心的朋友们。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#181-2021.11.15.md b/Reports/2021/#181-2021.11.15.md new file mode 100644 index 000000000..e09da305d --- /dev/null +++ b/Reports/2021/#181-2021.11.15.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #181 | 2021-11-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [针对在线多人活动的 app 内购买项目规定提醒](https://developer.apple.com/cn/news/?id=yeyd5xuh) + +[@Parsifal](https://github.com/ParsifalC):在多次推迟**在线多人活动 (一对几和一对多的实时服务体验)实行 IAP 制度**后,苹果终于决定正式实施了。在 2022 年起,若你的 App 存在在线多人活动的功能而又不是使用 IAP 进行支付的话,苹果将会予以拒绝。值得注意的是,仅在两个人之间提供实时一对一服务体验 (例如,学生辅导、医疗咨询、看房服务或健身训练) 的 app,则允许使用 app 内购买项目以外的购买方式。 + +### [年末假期接受 app 提交](https://developer.apple.com/cn/news/?id=y4fgrhhe) + +[@Parsifal](https://github.com/ParsifalC):往年这个时候,苹果总是开始提醒开发者将会在圣诞节等假日期间停止接受 App Store Connect 审核,而近期苹果宣布了 App Store Connect 这次不放假!但同时,苹果也提醒开发者,在 11 月 24 日至 28 日以及 12 月 23 日至 27 日期间,完成审核可能需时较长。 + +## 新手推荐 + +### 🌟 🐕 [Understanding how and when SwiftUI decides to redraw views](https://www.donnywals.com/understanding-how-and-when-swiftui-decides-to-redraw-views/) + +[@JonyFang](https://github.com/JonyFang):SwiftUI 的使用逐渐普遍起来,本篇从实例出发深入分析了 SwiftUI 视图重绘的方式及时间节点,结合重绘的原理,可以在后续开发里更巧妙的发挥 SwiftUI 的优势。 + +## 文章 + +### 🐕 [What Is a Deprecated API on iOS?](https://pspdfkit.com/blog/2021/what-is-a-deprecated-api-on-ios/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS SDK 包含大量的类、方法和其他接口,其中每一个都可以称为应用程序编程接口 (API),所有这些 API 共同构成了 iOS SDK 的 API。那么 Apple 是如何随着时间发展弃用其中的 API 呢? + +- 介绍 API +- Apple 意识到 API 存在问题,它被标记为已弃用但继续工作,引入替代 API +- 之后,Apple 宣布将删除该 API +- 之后,API 被删除 + +当 API 被弃用时,这意味着 Apple 不建议使用该 API,但该 API(几乎总是)仍然有效,弃用可能意味着 Apple 打算在未来的某个时候删除 API,并提供较长的过渡期。API 演进是在改进 API 和维护现有应用程序兼容性之间的平衡。 + +### 🐕 [闲鱼唤端的背后](https://mp.weixin.qq.com/s/MQ2XlroLF6vhM7qP1H-tBQ) + +[@享耳先森](https://github.com/iblacksun):如果你的 App 非常重运营,那么你一定非常想知道在每个运营活动中,带来多少新用户或日活,本文介绍了闲鱼 App 是如何做跨 App 启动以及所见即所得的。所见即所得依赖各端统一的数据上报与解析逻辑。 + +### 🐎 [Dangerous Logging in Swift](https://indiestack.com/2021/10/dangerous-logging-in-swift/) + +[@Damien](https://github.com/ZengyiMa):你在 Swift 中使用 NSLog 你是否会遇到 Crash 的场景呢?本文作者通过自己的代码中的转义引发 Swift 中使用 NSLog 的 Crash 问题为背景,深入的研究了 Swift 中使用 NSLog 的崩溃风险。感兴趣的同学不妨一读。 + +### 🐎 [聊聊__attribute__这个关键字吧~](https://mp.weixin.qq.com/s/FTC-IYVCqzGU-00nj5bVfw) +[@Smallfly](https://github.com/iostalks):本文通过实践探索了 `__attribute__` 关键字在不同参数下的作用,能够帮助读者多维度地了解该关键字的使用场景。 + +### 🐎 [端智能助力西瓜视频业务实践](https://mp.weixin.qq.com/s/qiVCG2ME8ppzia34txN9Rw) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文详细分析了在预加载视频的场景中``规则预测``的局限后,选择了``模型预测``。并基于业务场景与安全合规的考虑,放弃常规的云智能,选择了端智能的方案,最后获得了巨大的业务收益。其中对于场景的剖析和特征处理值得借鉴,另外可以看出 Pitaya 这套框架的完成度还是不错的,动态下发算法包以及对应的监控都较为完善。 + +### 🐢 [Core Image Tutorial for iOS: Custom Filters](https://www.raywenderlich.com/25658084-core-image-tutorial-for-ios-custom-filters) + +[@anotheren](https://github.com/anotheren):来自 raywenderlich 的 Core Image 自定义 Filter 教程。本文介绍了使用 Metal Shading Language 来创建自定义 CIKernel、应用滤镜的、以及如何 Debug 的详细流程,有图片/视频处理需求的小伙伴可以尝试一下。 + +### 🐕 [狐友iOS客户端埋点的前世今生](https://mp.weixin.qq.com/s/be4knvdFsMpykNKVSBnGwA) + +[@Barney](https://github.com/BarneyZhaoooo):本文以**狐友**iOS客户端埋点的实践为例子,向大家介绍了不同的埋点实现方案及一些问题总结。 + +- **认识埋点** +* **客户端埋点实现** +- **实践过程中遇到的问题** + +## 摸鱼周报 + +[@摸鱼周报 #33](https://mp.weixin.qq.com/s/nznnGmBsqsrWcvZ4XFMttg):第三十三期摸鱼周报来啦,一起看下本期概要: + +* 话题:感恩节和圣诞节期间 AppStore 将正常接受审核。 +* Tips:使用 os_signpost 标记函数执行和测量函数耗时;混编|将 Objective-C typedef NSString 作为 String 桥接到 Swift 中。 +* 面试模块:LeetCode - #1 Two Sum。 +* 优秀博客:本期为大家整理了一些关于图像识别框架 Vision 的文章。 +* 学习资料:Vue Color Avatar,一个纯前端实现的头像生成网站;一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章。 +* 开发工具:swiftenv。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#182-2021.11.22.md b/Reports/2021/#182-2021.11.22.md new file mode 100644 index 000000000..c37547bc0 --- /dev/null +++ b/Reports/2021/#182-2021.11.22.md @@ -0,0 +1,137 @@ +# 老司机 iOS 周报 #182 | 2021-11-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Tech Talks 2021 - 中文专场](https://developer.apple.com/cn/tech-talks/) + +[@Parsifal](https://github.com/ParsifalC):新一批的 Apple Tech Talks 2021 中文专场来了,本次更新了 5 个专题,欢迎大家扫码报名~ + +- [为 ProMotion 屏幕进行优化(普通话)](https://developer.apple.com/events/tech-talks/dashboard/6SJQVA7UR3/dashboard) +- [核心设计原则(普通话)](https://developer.apple.com/events/tech-talks/dashboard/BPMX7VDZB3/dashboard) +- [提升游戏手柄的支持(普通话)](https://developer.apple.com/events/tech-talks/dashboard/3Y7S665W96/dashboard) +- [充分利用 App Review 流程(普通话)](https://developer.apple.com/events/tech-talks/dashboard/SF7CY9GMFR/dashboard) +- [在您的app中为 Center Stage 和 Video Effects 添加控制 (普通话)](https://developer.apple.com/events/tech-talks/dashboard/U3JA83J3D3/dashboard) + +![image](https://user-images.githubusercontent.com/7930911/142759509-636fc4c9-0707-436a-8780-401510e71a16.png) + +### [Apple 宣布将推出自助维修计划](https://www.apple.com.cn/newsroom/2021/11/apple-announces-self-service-repair/) + +[@Parsifal](https://github.com/ParsifalC):未来我们可以直接从官方购买零件和工具进行自己维修设备啦!苹果近期宣布将推出自助维修计划,首先将会在明年初于美国率先试运行,而后逐步推广至其他国家。这对于平常喜欢自己动手拆机而又不想从网上到处找靠谱零件的朋友无疑是一个福音,如果未来推出的零件价格合适,相信很多朋友都会尝试自助维修了~ + +### [新版 Flutter 中文开发者网站发布](https://mp.weixin.qq.com/s/JOm2-TBh4m3nJZKWbfjoug) + +[@Parsifal](https://github.com/ParsifalC):2021 年 Google 开发者大会 (Google Developer Summit) 于近日顺利举办,包含众多最新 Google 技术产品更新的线上演讲,干货满满。大会上发布了新版 Flutter 中文开发者网站和 DartPad。 + +## 新手推荐 + +### 🐎 [Swift Playgrounds App Projects](https://skyaaron.com/posts/swiftpm-app-projects/) + +[@老峰](https://https://github.com/gesantung):Swift Playgrounds 是由苹果公司在 2016 年 6 月 14 日苹果全球开发者大会 WWDC 上发布的 Swift 编程语言学习 App。上周 Apple 发布了 Xcode 13.2 Beta1 带来了 Swift Playgrounds 4,它提供了新的 *.swiftpm 格式可以与 Xcode 兼容;支持 UIKit 的完整 API,支持 Swift Package Manager,支持 Objective-C、C 和 C++,对 Swift Playgrounds 4 感兴趣的新手朋友推荐尝试。 + +## 文章 + +### 🌟 🐢 [从野指针探测到对iOS 15 bind 的探索](https://mp.weixin.qq.com/s/jNiRinGYeV3LiF5Zjt-x0w) + +[@J_Knight_](https://github.com/knightsj):本文从野指针的探测这一问题展开,介绍了 bind 流程的机制,以及它在 iOS 15下的改动。同时也介绍了 fishhook 的工作流程以及其他 2种 hook C 函数的方案,同时也讲解了 LC_DYLD_INFO_ONLY 以及 LC_DYLD_CHAINED_FIXUPS 的机制。 + +### 🌟 🐕 [美团外卖终端容器无关化研发框架](https://tech.meituan.com/2021/11/11/meituan-waimai-containerless-framework.html) + +[@JonyFang](https://github.com/JonyFang):美团外卖研发了一款终端容器无关化框架 - React2X,与服务无关化(Serverless)的概念类似,即在保持顶层业务研发语言不变更的情况下,在下层可以兼容性地升级、替换终端容器的能力,让用户无需关心终端容器的运维,只要将精力聚焦到业务逻辑上。React2X 解决了业务需求在多端容器需要重复开发的难题,通过代码复用实现开发提效,实现了几个目标: + +- 解决公司内部多终端容器开发痛点,统一开发规范,抹平开发差异,并提供对其他容器的扩展能力; +- 建设跨容器动态化能力,可以解决美团外卖业务客户端发版限制和小程序包大小限制的问题,帮助业务实现快速发版上线以及线上问题热修复的能力; +- 建设容器无关的开发生态体系,解决的容器差异性,统一的技术生态能力建设,为多终端容器开发场景提升生产和运维效率。 + +### 🐎 [分享我成为 GDE(Google 开发者专家)的经历](https://mp.weixin.qq.com/s/14TpW7-EqZ_6XO1vYRnhiQ) + +[@老驴](https://weibo.com/u/6090610445):Google 开发者专家是 Google 给积极推广 Google 技术的开发者和布道者颁发的认证。最近几年因为有国内开发者积极参与推广,所以得到了越来越多人的关注。本文的作者 AlexV525 就在最近获得了 Flutter GDE 的认证。 Alex 分享了自己从申请到面试的全过程。有兴趣想拓展自己在开发者圈影响力的同学们也可以试试 GDE。 + +### 🐎 [Flutter 多插件本地化问题](https://mp.weixin.qq.com/s?__biz=Mzg4MjU2Mzc1MQ==&mid=2247486934&idx=1&sn=b1f809e93ffcf0ab051b0862c1f8eb03&chksm=cf55821ef8220b085333ffc8622f17cdec599bf53c0b95cfe1a50f901b85d778316a1feb7e39&token=290590453&lang=zh_CN#rd) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者在多插件开发的过程中,发现使用 Flutter intl 插件来自动生成本地化代码后,最终展示的文案不符合预期。在研究源码后发现是共用了一个 messageLookup 对象导致,并提供了能自动化解决的[脚本](https://github.com/silan-liu/flutter_app_localization/blob/main/scripts/intl.rb),有同样需要本地化开发的同学可以借鉴。 + +> 由本文作者 [summer-liu](https://https://github.com/silan-liu) 推荐收录。 + +### 🐕 [Introducing XCRemoteCache: The iOS Remote Caching Tool that Cut Our Clean Build Times by 70% : Spotify Engineering](https://engineering.atspotify.com/2021/11/16/introducing-xcremotecache-the-ios-remote-caching-tool-that-cut-our-clean-build-times-by-70/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了 Spotify 的 **XCRemoteCache** 实践,如标题所说,效果显著。 + +- 背景 +- 原理分析 +- 如何在工程中集成 XCRemoteCache + +### 🐎 [How to use Github Copilot with Swift using Visual Studio Code?](https://antran.app/2021/github_copilot_swift/) + +[@Smallfly](https://github.com/iostalks):[Github Copilot](https://copilot.github.com/) 是一款人工智能编程伴侣,它能根据输入的上下文代码或注释,「智能化」地生成代码段,支持主流的一些编辑器,但不支持 Xcode。 + +本文介绍了如何在 Visual Studio Code 中支持使用 Github Copilot 生成 Swift 代码的流程。 + +## 摸鱼周报 + +[@摸鱼周报 #34](https://mp.weixin.qq.com/s/P0HjLDCIM3T-hAgQFjO1mg):第三十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Apple 宣布推出自助维修计划。 +* Tips:混编|NS_SWIFT_NAME。 +* 面试模块:二叉树的三序遍历。 +* 优秀博客:几个 Swift 三方库的解析文章。 +* 学习资料:棒棒彬·技术参考周刊。 +* 开发工具:Mounty:一个在 macOS 下以读写模式重新挂载写保护的 NTFS 卷的免费的小工具。 + +本期摸鱼周报的访谈系列邀请的是一位参加过 WWDC 的同学,因为是 17 年,还是线下,所以有很多有趣好玩的事情。看完全内容可以点击这里:[人物访谈 | 一位参加过 WWDC 的 iOSer](https://mp.weixin.qq.com/s/5Z8n2bFPbZlG3R0MgqdGDQ) + +## 工具 + +### [SwagGen](https://github.com/yonaskolb/SwagGen) + +[@AidenRao](https://weibo.com/AidenRao):SwagGen 是一个库和命令行工具,用于解析和生成 OpenAPI/Swagger 3.0 规范的代码,完全用 Swift 编写。 + +[OpenAPI 规范](https://github.com/fishead/OpenAPI-Specification/blob/master/versions/3.0.0.zhCN.md)(OAS),是定义一个标准的、与具体编程语言无关的 RESTful API 的规范。OpenAPI 规范使得人类和计算机都能在“不接触任何程序源代码和文档、不监控网络通信”的情况下理解一个服务的作用。如果您在定义您的 API 时做的很好,那么使用 API 的人就能非常轻松地理解您提供的 API 并与之交互了。 + +如果您遵循 OpenAPI 规范来定义您的 API,那么您就可以用文档生成工具来展示您的 API,用代码生成工具来自动生成各种编程语言的服务器端和客户端的代码,用自动测试工具进行测试等等。 + +## 代码 + +### 🌟 [SwiftTreeSitter](https://github.com/ChimeHQ/SwiftTreeSitter) + +[@四娘](https://kemchenj.github.io):语法高亮的实现一直困扰着 GitHub/Atom 的工程师,网页和编辑器并不像 IDE 那样,它们没有完整的上下文,它们不了解每个单词背后代表着的是变量还是函数。 + +除此之外,性能也是一个问题,传统的多次正则匹配会让性能变得很差,而且不支持增量解析,这意味着每次敲下一个字编辑器都需要重新完整地解析一次,这对于大文件来说尤其致命。 + +TreeSitter 就是为了在这个场景下更好地进行词法分析的一个解析器,输入文件就可以输出 AST,它真正地实现了词法解析,支持增量解析,支持多语法的解析,例如 html 里的 javascript 和 css 也可以被正确解析,目前 GitHub 已经在线上启用了很长一段时间。 + +这个项目是 TreeSitter 的 Swift Binding,让我们可以使用 Swift 去调用 TreeSitter 的相关功能。另外,对于 Tree-sitter 感兴趣的同学也可以看一下[他们的工程师在某个技术大会上的演讲介绍](https://www.youtube.com/watch?v=Jes3bD6P0To)。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#183-2021.11.29.md b/Reports/2021/#183-2021.11.29.md new file mode 100644 index 000000000..2eef467f7 --- /dev/null +++ b/Reports/2021/#183-2021.11.29.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #183 | 2021-11-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [用苹果官方 API 实现 iOS 备忘录的扫描文稿功能](https://www.fatbobman.com/posts/docScaner/) + +[@anotheren](https://github.com/anotheren):iOS 系统自带的备忘录看似简单,实则功能强大。本文来自一位独立开发者,使用系统 API 尝试重现备忘录的扫描文稿功能。其主要使用了 VisionKit、Vision、NaturalLanguage、CoreSpotlight 等系统框架,推荐一读。 + +### 🐕 [Flutter 实现完美的双向聊天列表效果,滑动列表的知识点](https://mp.weixin.qq.com/s/LfsYzXv4GomyIbLysb-eNg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): IM 列表算是 Scrollable 视图比较常见的一个需求场景,本文从原理层面教你如何正确的使用 Flutter 开发一个 IM 滑动列表, 请仔细阅读 Center 讲解那块,非常干哟 😄 + +### 🐢 [干货 | 聊聊移动端安全加固](https://mp.weixin.qq.com/s/yCB2R8QPWNp2lJrQD4l_hw) + +如今,我国智能手机用户达到 12 亿,移动端的安全问题也被各大家开始广泛关注,比如我们熟知的反编译、注入攻击、设备篡改等手段严重威胁到了用户的数据安全以及公司的利益。本文从 iOS 平台着手,介绍了在 iOS 上如何进行安全加固,了解一些这方面的知识,即使不做安全这一块,也有助于我们更好理解系统的运行,以及写出更安全的代码。 + +### 🐕 [如何系统性治理 iOS 稳定性问题](https://mp.weixin.qq.com/s/M6dekf2_jbpkZqArPx7wgA) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要从以下四个章节介绍了 iOS 稳定性治理在字节的实践,并结合了很多线上问题排查经验来加以解释,深入浅出,干货满满。 + +- 稳定性问题分类 +- 稳定性问题治理的方法论 +- 疑难问题归因 +- 总结回顾 + +### 🐕 [百度 APP 移动研发平台及 DevOps 实践](https://mp.weixin.qq.com/s/XHv5NiEgKwt_shRyJQodhw) + +[@Smallfly](https://github.com/iostalks):随着移动开发团队规模和业务规模不断增长,研发效率和质量都会受到挑战。百度 App 移动研发平台 Tekes 提供一站式服务,极大地提高了研发团队的交付效率。本文主要介绍了 Tekes 的核心功能,以及实现原理。 + +Tekes 经过多年的演进,目前主要包括三个大的功能: + +1. 自动化研发流程 +2. 组件和 App 的防劣化 +3. 全局知识库 + +### 🐕 [Flutter 实现动态化更新 - 技术预研](https://juejin.cn/post/7033708048321347615) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者调研了市面上开源的三套 Flutter 动态化方案,以及相对通用的 webview 增强、UI 库模版化,共五套方案。在维护难度、学习成本、迁移成本等多个角度比较了各个方案的优劣,是一份详尽的调研结论,如果有运营相关的动态化需求,可以作为选型参考。 + +总体来说动态化的难度还是比较大的,挑选适合产品形态、团队规模、技术实力的方案才是最优的选择。 + +### 🐕 [拒绝编译等待 - 动态研发模式 ARK](https://mp.weixin.qq.com/s/2tnU4sHf9XVEaJYgyTXoaw) + +[@红纸](https://github.com/ChengzhiHuang):在大型工程面前,编译链接慢是通病。本文作者从动态库入手,平台提供基线 ipa 包,本地研发阶段时下载。同时研发仓库做动态库编译,替换原有基线 ipa 包中动态库,重签名,形成完整包,再进行装机调试。在这种模式下,本地的代码仓库就能做到最小化,编译链接时间明显缩短,再也长时间没有爆内存的烦恼了。 + +### 🐕 [Xcode Cloud: Automated Workflows](https://blog.devgenius.io/xcode-cloud-automated-workflows-730277773c37) + +[@Parsifal](https://github.com/ParsifalC):Xcode Cloud 是今年 WWDC 很受关注的特性功能,近期应该也有很多开发者陆续收到了 Beta 邀请。这是苹果官方的 CI/CD 工具,自然有着最适配苹果自身平台的优势,并且目前并没有看到相关收费的信息。 + +> 同时推荐小专栏里的 3 篇 Xcode Cloud 相关 session 解读: +> +> - [【WWDC21 10268/10269】探索 Xcode Cloud Workflows](https://xiaozhuanlan.com/topic/5493872016) +> - [【WWDC21 10267】一窥 Xcode Cloud](https://xiaozhuanlan.com/topic/2946158037) +> - [【WWDC21 10267/10268/10269】窥探 Xcode Cloud](https://xiaozhuanlan.com/topic/7496513820) + +## 摸鱼周报 + +[@摸鱼周报 #35](https://mp.weixin.qq.com/s/fCEbYkAPlK0nm7UtLKFx5A):第三十五期摸鱼周报来了,一起来看下本期摘要: + +* Tips:count vs isEmpty +* 面试模块:Swift 中 struct 和 class 的区别,值类型和引用类型的区别。 +* 优秀博客:本期继续介绍几个优秀的 Swift 开源库。 +* 学习资料:戴铭的 Swift 小册子,黑五软件打折优惠整理。 +* 开发工具:PhotoSweeper,一款快速而强大的重复照片清理器。 + +本期访谈系列邀请到的是一位在游戏行业工作的 iOS 开发。文中围绕他的工作日常,对于未来阶段 IAP 是否会支持三方支付,以及他如何坚持写博客这些事情展开讨论。感兴趣的同学可以点击这里查看全文:[人物访谈 | 一位游戏行业的 iOSer](https://mp.weixin.qq.com/s/tzYu-7H_GccjYhQh0u7zLQ) 。 + +## 工具 + +### [Learn X in Y minutes](https://learnxinyminutes.com/) + +[@Parsifal](https://github.com/ParsifalC):一个非常全面的教程大全网站,基础算法、数据结构和各类编程语言等等应有尽有,而且提供不同的翻译版本,值得加书签收藏一下。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +> 上海「哔哩哔哩主站直播」招人,加入后,会主要参与 B 站直播的「平台向/业务向」开发维护工作。本次为组内直推,效率会更高,[详情查看](https://mp.weixin.qq.com/s/gYobO5hM0wPSFRNJzGBGIA)~欢迎加微信:jony_chunfang + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#184-2021.12.06.md b/Reports/2021/#184-2021.12.06.md new file mode 100644 index 000000000..9b48f6f15 --- /dev/null +++ b/Reports/2021/#184-2021.12.06.md @@ -0,0 +1,117 @@ +# 老司机 iOS 周报 #184 | 2021-12-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 线下沙龙 + +### 🌟 [有赞移动技术沙龙火热报名中~](https://mp.weixin.qq.com/s/EdiV-CO80ONqx9-bKgciAA) + +[@Parsifal](https://github.com/ParsifalC):老司机今年联合企业举办的最后一场技术沙龙来啦~这次我们与有赞移动技术团队一起带来 **「质量·极致」** 为主题的线下沙龙活动。本次沙龙将涵盖中大型团队中把控线上稳定性的方方面面,共有 5 个主题,欢迎大家来现场学习!扫码即可参与报名! + +- 《有赞移动 APM 实践》 +- 《爱逛 Flutter 图片优化实践》 +- 《有赞 Flutter 热修落地实践》 +- 《有赞移动质量提升探索与实践》 +- 《有赞移动质量保障体系》 + +![image](https://user-images.githubusercontent.com/7930911/144743442-165b0f36-d75a-4d38-8150-941960647068.png) + +## 🌟 [Tech Talks 2021 - 中文专场 1217](https://developer.apple.com/cn/tech-talks/) + +[@Parsifal](https://github.com/ParsifalC):Tech Talks 2021 最后一批中文专场来啦~ + +- [探索出色 AR 体验的要素 (普通话)](https://developer.apple.com/events/tech-talks/dashboard/SR68FKF3QV/dashboard) +- [充分利用 App Review 流程(普通话)](https://developer.apple.com/events/tech-talks/dashboard/74LR339842/dashboard),错过第一场的可以参加这次 +- [设计出色的 iPad app(普通话)](https://developer.apple.com/events/tech-talks/dashboard/K2J9AL6RYT/dashboard) +- [将高性能视频与Metal集成(普通话)](https://developer.apple.com/events/tech-talks/dashboard/3VMP4RXSC4/dashboard) +- [使用 StoreKit 2 和 App Store Server API 为客户提供支持(普通话)](https://developer.apple.com/events/tech-talks/dashboard/7DH6V3D8RM/dashboard) + +![image](https://user-images.githubusercontent.com/7930911/144744488-48e43b3c-835e-40bc-b06a-ffc9d993dff1.png) + +## 新手推荐 + +### 🌟 [戴铭的 Swift 小册子](https://github.com/ming1016/SwiftPamphletApp) + +[@老峰](https://github.com/Gesantung):[小册子](https://github.com/ming1016/SwiftPamphletApp) 内容主要包括 Swift 语法特性、 Swift 官方社区动态、SwiftUI 等几个板块,面向 Swift 零基础的同学,包括一些直接可用的小例子,例子可以直接在工程中用或自己调试着看,可以使用作者开发的 macOS 程序来浏览,特别的程序是 Swift 写的,按照声明式 UI,响应式编程范式开发,源码也可以看看,推荐 Swift 新手及感兴趣的同学学习使用。 + +## 文章 + +### 🌟 🐢 [“杀死” App 上的疑难崩溃!](https://mp.weixin.qq.com/s/dHAiuHeF2n34DaPIGOtJaw) + +[@水水](https://www.xuyanlan.com): 作者分享了一个 58 同城 App 上遇到的疑难的崩溃,引出了 bugly 符号化不能正确解析的一些解决方案,过程中又发现了弱符号的问题,并按照这个研究方向在集团内做了一系列工具并解决了多个版本的历史遗留问题。 + +crash 解决方案是开发者需要持续关注的问题,周报中也多次推荐一些好的 crash 解决思路、工具等。小编建议读者们不管是否遇到类似问题都可以加以关注和思考。 + +### 🌟 🐎 [Solving Mysterious Logout Issues on iOS 15](https://sourcediving.com/solving-mysterious-logout-issues-on-ios-15-8b818c089466) + +[@Smallfly](https://github.com/iostalks):Cookpad App 在 iOS 15 上冷启动登录状态异常登出,作者经过一系列的排查,最终定位到和 iOS 15 系统的「pre-warm」机制有关,该机制的相关内容目前还不多,感兴趣的同学可以关注下。 + +### 🐕 [Web API Client in Swift](https://kean.blog/post/new-api-client) + +[@JonyFang](https://github.com/JonyFang):有了 Async/Await 和 Actors 的特性,现在在 Swift 中设计自定义 Web API 相比以往可以通过少量的抽象,使代码易于理解和扩展,文中进行了一些实践演示应用。 + +### 🐕 [自己搞一个 MemoryGraph 工具行不行?](https://mp.weixin.qq.com/s/pggPc5gWpV6ZX0rnVpN22Q) + +[@Barney](https://github.com/BarneyZhaoooo):答案是行!本文主要记录了自己搞一个 MemoryGraph 的调研过程,对比了业内方案,有自己的分析和思考。 + +### 🐕 [如果 Safari 做不到对,快有何用?](https://coderemixer.com/2020/10/21/safari-is-fast-but-so-what/) + +[@JonyFang](https://github.com/JonyFang):描述了 Safari cache POST 请求和 Safari cache GET requests with cache disabled 问题的现象和复现过程。 + +### 🐎 [What role do Tasks play within Swift’s concurrency system?](https://www.swiftbysundell.com/articles/the-role-tasks-play-in-swift-concurrency/) + +[@zvving](https://github.com/zvving):Swift5.5 引入的并发编程,Task 带来结构化并发 API,提供创建、组织、取消任务的简明方式;Actor 提供良好数据隔离方式,保障并发安全。本文作者通过页面中后台加载网络数据并主线程刷新内容的例子,介绍如何更好的使用 Task + MainActor。 + +### 🐎 [Editing Multiple Constraints](https://useyourloaf.com/blog/editing-multiple-constraints/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了批量编辑 Interface Builder 里约束的方法,习惯用 Interface Builder 的读者可以参考借鉴。 + +### 🐎 [M1 设备的 Xcode 编译问题深究](https://juejin.cn/post/7037037120158269448) + +[@Parsifal](https://github.com/ParsifalC):苹果推出 M1 芯片的 MacBook 已经一年了,不少小伙伴都陆续用其进行开发。M1 芯片是属于 ARM 架构,而之前的 Intel 则是 x86_64 架构,这对于我们做 iOS/Mac 开发就有了些不同,比如原来 64 位设备后模拟器架构只包含 x86_64,现在多了个 ARM64。虽然为了方便开发者平滑过渡,苹果已经尽可能地解决了一些问题,但实际开发过程中仍然会存在部分问题。这篇文章归纳总结了 M1 设备推出后 Xcode 可能存在的编译问题,并都给出了解决方案。 + +## 摸鱼周报 + +[@摸鱼周报 #36](https://mp.weixin.qq.com/s/K_JHs1EoEn222huWIoJRmA):第三十六期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Typora 开启收费模式,支持!(补充:目前国内网站被封锁,暂无法访问) +* Tips:混编|为 Objective-C 添加枚举宏,改善混编体验。 +* 面试模块:事件传递及响应链。 +* 优秀博客:几篇关于 Swift 字符串的优秀博客。 +* 学习资料:独立开发者经验分享。 +* 开发工具:思源笔记,一款本地优先的个人知识管理系统, 支持细粒度块级引用和 Markdown 所见即所得。 + +本期访谈邀请到的是一位优秀的 iOS 程序媛,一起来聊一下她眼中的 iOS。可以点击这里查看全文:[人物访谈 | 一位 iOS 程序媛](https://mp.weixin.qq.com/s/XIaiNY2oNEtayPcGNSos_A) + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#185-2021.12.13.md b/Reports/2021/#185-2021.12.13.md new file mode 100644 index 000000000..f597e5272 --- /dev/null +++ b/Reports/2021/#185-2021.12.13.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #185 | 2021-12-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [千钧一发之际赢得暂缓令,苹果 App Store 要反败为胜了?](https://www.36kr.com/p/1519790525222278) + +[@Parsifal](https://github.com/ParsifalC):Epic Games 与苹果之间的诉讼仍然在博弈中,9 月份法院宣判苹果败诉后,苹果也已经宣布会在 12 月 9 日前发布正式政策允许使用第三方支付。而就在限期到达前,苹果又向法院申请到了暂缓执行这一命令,并已经继续提起上诉。 + +## 文章 + +### 🐎 [如何构建异步渲染聊天框架](https://mp.weixin.qq.com/s/CAoTWjjnPBzALPBDZaU54g) + +[@JimQ](https://github.com/waz0820):本文前半部分侧重于“异步渲染”,概述了异步渲染的必要性,以及使用传统方案 TextKit 异步渲染的优缺点,针对其劣势引入了 Texture。后半部分侧重于“如何构建聊天框架”,基于 IM 输入框的实践,通过代码集中诠释了如何利用状态机和状态驱动来驱动 UI 的变化,从而降低用户使用框架的门槛。 + +### 🐎 [Support customers with StoreKit 2 and App Store Server API](https://developer.apple.com/videos/play/tech-talks/10887/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):苹果官方宣传 StoreKit 2 ,[中文](https://developer.apple.com/events/tech-talks/dashboard/7DH6V3D8RM/dashboard)的直播将在 12 月 15 日举行,感兴趣的同学可以预约。本次 Tech Talk 并没有新的 API 或者新特性出现,主要是重复介绍 StoreKit 2 的新特性,详细展开了:正常支付、用户续订用户、处理退款,三个场景的最佳实践。 + +想了解 StoreKit 2 的细节,可以查看三篇 WWDC21 的翻译。 +[【WWDC21 10175】IAP 用户退款与客诉处理优化](https://xiaozhuanlan.com/topic/8670251439) +[【WWDC21 10174】 IAP 后台通信优化与实践](https://xiaozhuanlan.com/topic/3768514920) +[【WWDC21 10114】 初见 StoreKit 2](https://xiaozhuanlan.com/topic/6138790425) + + +### 🐕 [淘特 Flutter 流式场景的深度优化](https://mp.weixin.qq.com/s/H2VqX6qSJ1KLkXB5p4S0dw) + +[@邦Ben](https://weibo.com/linwenbang):本文从底层原理,思路到最终实现,进行递进的讲解,Flutter 表现一直以来是堪比原生,但是终归有些场景还是原生占优,列表场景则是最为常用的场景了,本文主要的优化点是局部刷新。如果有需要对 Flutter 列表进行优化的,可以参考一下。 + +参考链接: +- [他把闲鱼APP长列表流畅度翻了倍(良心教程)](https://mp.weixin.qq.com/s?__biz=MzU4MDUxOTI5NA==&mid=2247486101&idx=1&sn=171d269a324748f01e5c92fbaa54854f&chksm=fd54de84ca2357920b822902ea8b23137d83e2f4f7340fabae819182cba2585181be5455e5b2&scene=21#wechat_redirect) +- [ListView流畅度翻倍!!Flutter卡顿分析和通用优化方案](https://juejin.cn/post/6940134891606507534) + + +### 🐕 [iOS Pod Update 指数级变慢?看 Flutter 新一代版本仲裁算法 Pubgrub 如何解](https://mp.weixin.qq.com/s/Ulz9FafWwtbefVuikTMj7Q) + +[@红纸](https://github.com/nianran):本文介绍了 CocoaPods 在出现包版本冲突情况下,Molinillo 仲裁算法使用回溯 DFS 父节点的方式解决冲突问题。但在大型工程下,依赖图异常复杂,回溯成本较高,会出现严重的降速问题。一般都会在 Podfile 中声明好具体依赖来减轻仲裁负担。本文还介绍新一代的仲裁算法 Pubgrub 推导不兼容性算法的数学逻辑来解决依赖仲裁问题。感兴趣的同学可以看一看~ + +关于 Molinillo 的详细介绍可以看这篇文章: [Molinillo 依赖校验](https://mp.weixin.qq.com/s/Kux4B4piqR43RLwiHRcHUQ)。 + +> 自荐:[BlackTea](https://juejin.cn/user/4406498332782141) + +### 🐕 [My worst tech interview experience · Jesse Squires](https://www.jessesquires.com/blog/2021/12/01/my-worst-tech-interview-experience/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了作者早期去面试 Apple Watch 团队的不愉快体验,结合后来的成长经历,表达了自己对如何面试的一些思考。 + +### 🐢 [浅谈 swiftinterface 文件](https://mp.weixin.qq.com/s/LVxFTp4nLHZDU_PqdsnX6Q) + +[@anotheren](https://github.com/anotheren):swiftinterface 是什么?文章以 **模块稳定性(Module Stability)** 为切入点,介绍了 .swiftinterface 文件的工作原理以及常见的误区,最后介绍了 `@_alwaysEmitIntoClient` 关键字以及它的实现原理。干货满满,还有不少作者的思考结论,推荐阅读。 + +### [Get started with in-app events](https://developer.apple.com/videos/play/tech-talks/10889/) + +[@享耳先森](https://github.com/iblacksun):从 Apple 在 WWDC 21 提起 In-app events 开始,到前段时间正式开放已经有一段时间了,建议回顾下本视频,包含了 in-app events 的一些建议和最佳实践。 + +### [Flutter 2.8 release 发布,快来看看新特性吧](https://mp.weixin.qq.com/s/7J_eLYO1DiPu8A2XsF99nw) + +[@Parsifal](https://github.com/ParsifalC):Flutter 继续稳步更新,2.8 版本正式发布。本次更新依然围绕着稳定性和性能方面。包含以下几点: + +- 改进了应用的启动延迟问题,尤其是 Android 低端设备上 +- 继续优化内存占用 +- Android systrace 的支持 +- Flutter DevTools 提高对性能调试的支持 +- Web platform views 的优化 +- WebView 3.0 + +## 摸鱼周报 + +[@摸鱼周报 #37](https://mp.weixin.qq.com/s/PwZ2nIHRo0GDsjMx7lSFLg):摸鱼周报第三十七期来啦,一起来看下本期概要: + +* 话题:苹果正式开放 AppStore 的 2 个重磅功能:自定义产品页和产品页优化。 +* Tips:设备启动流程的梳理。 +* 面试模块:HTTP/1.0,HTTP/1.1,HTTP/2 有哪些区别? +* 优秀博客:几个音视频相关的优秀仓库介绍。 +* 学习资料:计算机教育中缺失的一课(中文版)。 +* 开发工具:myyearwithgit,开启你的年度报告。 + +## 音视频 + +### 🚧 🐢 [Scale By The Bay 2021 : Konrad Malawski, Distributed Systems with Swift](https://www.youtube.com/watch?v=7yu6mEq8R2Q&ab_channel=FunctionalTV) + +[@老驴](https://weibo.com/u/6090610445):Swift 在最近几年添加了很多新的语言特性,极力试图突破 Apple 生态圈。这个视频就是 Apple Swift 团队的工程师来介绍如何使用 Swift 中新添加的特性如 distributed actor 来写大型分布式系统。不过还是要温馨提醒一下有兴趣的同学,分布式系统不是单单一个语言的问题,所以不妨自己尝试尝试以后再在生产环境中使用。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#186-2021.12.20.md b/Reports/2021/#186-2021.12.20.md new file mode 100644 index 000000000..e734087aa --- /dev/null +++ b/Reports/2021/#186-2021.12.20.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #186 | 2021-12-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### iOS 15.2 新增相册卡死 + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):12 月 15 日,苹果发布了 iOS 15.2 的正式版。不幸的是这次升级带来了卡死。在还未向用户申请相册权限时,即 ``[PHPhotoLibrary authorizationStatus] != PHAuthorizationStatusAuthorized`` 时,如果调用 ``[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:xxx];`` 添加监听,则会卡死。苹果开发者论坛也有同学[反馈](https://developer.apple.com/forums/thread/696131),目前苹果还未有回应,可以看到这个问题在 15.2 beta 版中就存在了,需观察苹果后续会如何处理。 + +临时方案可以在注册前进行判断,如果没有权限,则不注册观察者。 + +## 文章 + +### 🌟 🐕 [浅谈 Swift Dictionary](https://mp.weixin.qq.com/s/yIHaAaGRX7Ru_OetdX0_Vg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者分析字典下标访问方法,并将源码与汇编结合,便于读者加深理解,推荐一读。阅读需要对汇编有些基础了解,例如[保留字 qword、byte 等](http://c.biancheng.net/view/3465.html)。 + +同时本文还包含了: +- 字典的内存布局,主要关注 count、scale、rawKeys/Values 这些固定布局结构,和 bitset、Keys/Values 这些不固定布局的结构。 +- 简单介绍动态调试 Swift 源码的方案。 + +### 🌟 🐕 [FlutterWeb 性能优化探索与实践](https://mp.weixin.qq.com/s/fE11vs2qnRIHAWYv1af-gA) + +[@Damien](https://github.com/ZengyiMa):2021 年 3 月份,Flutter 2.0 正式对外发布,意味着 Google 更加坚定了多端复用的决心。本文是美团外卖商家团队基于 HTML Render 模式对 FlutterWeb 性能优化进行了探索和实践,主要包括: +- SDK(Dart-SDK、Framework、Flutter_Web_SDK)的精简 +- 静态资源产物优化(例如:JS 分片、文件 Hash、字体图标文件精简、分平台打包等) +- 前端资源加载优化(预加载与按需请求) + +使得 JS 产物由 1.2M 减少至 0.7M(非业务代码),页面完全加载时间 TP90 线由 6s 降到了 3s 的不错成绩,并且提出更加长期规划,对 FlutterWeb 感兴趣的同学不妨一读。 + +### 🐢 [不甘当学渣,努力作学霸,最终是学民](https://mp.weixin.qq.com/s/lZzX_1pLeied7e4jkvcVJQ) + +[@Smallfly](https://github.com/iostalks):本文记录了一名「普通」程序员在近两年工作,学习,旅行上不平凡的经历。 + +### 🐕 [从 350ms 到 80ms,打造新零售场景下 iOS 短视频的极致丝滑体验](https://mp.weixin.qq.com/s/qYsfyw2K77hKMfHd_uTp-Q) + +[@anotheren](https://github.com/anotheren):来自盒马的短视频优化方案,其核心方案依然是 3 点:提前缓存视频数据、视频文件编码/体积优化、提前准备播放器。 + +## 摸鱼周报 + +[@摸鱼周报 #38](https://mp.weixin.qq.com/s/a1aOOn1sFh5EaxISz5tAxA):第三十八期摸鱼周报来了,一起来看下本期概要: + +* 话题: Xcode 13.2 和 iOS 15.2 的正式版值得关注的几项新功能。 +* Tips:内存相关的一些机制。 +* 面试模块:dealloc 在哪个线程执行;NSString *str = @"123" 这里的 str 和 "123" 分别存储在哪个区域。 +* 优秀博客:SwiftUI 相关的几篇优秀博客。 +* 学习资料:软件随想录,Joel Spolsky 的 Blog 纸质版文集。 +* 开发工具:Dropshelf,一款 Mac OS 下的拖拽效率应用。 + +本期人物访谈邀请的是_夏天_,他是摸鱼周报的一位主编,主要负责 Tips 部分的编写和审核。曾参与掘金翻译计划,翻译过很多篇优质博客内容,也翻译过像是 iOS Crash Dump Analysis Book 这一类的外文图书。这次拉他来聊一聊关于外文翻译和他个人的一些工作感悟,完整内容可以点击查看:[人物访谈 | 一位普通的 iOS 程序员](https://mp.weixin.qq.com/s/60o6UKcDjf9lAy2o2AQ_tw)。 + +## 工具 + +### [Zealot](https://github.com/tryzealot/zealot/) + +[@JonyFang](https://github.com/JonyFang):推荐一个开源自部署 iOS、Android 及 macOS 应用分发平台,提供 iOS、Android SDK、fastlane 等丰富组件库,打包分发流程、简化了应用上传、可独立部署,是对开发者、测试者友好的开源项目。 + +## 代码 + +### [AppFlowy](https://github.com/AppFlowy-IO/appflowy) + +[@AidenRao](https://weibo.com/AidenRao):[Notion](https://www.notion.so/) 是深受团队和个人欢迎的生产力应用。AppFlowy 是 Notion 的开源替代品,支持主流的移动和桌面端系统,技术选型很有趣,前端选择了 Flutter,后端使用 Rust 编写,通过 FFI 进行通信。 + +## 音视频 + +### [佛系技术翻译组 SwiftGG 的过去与现在](https://www.xiaoyuzhoufm.com/episode/61b451ff0506e510b35d71d0?s=eyJ1IjogIjVlN2M4NjIxYjNjNWJjYTVmNjQxMzlmMiJ9) + +[@Parsifal](https://github.com/ParsifalC):老卓的播客这次邀请到了 SwiftGG 的两代负责人 梁杰 和 MM 一起谈谈社区组织 SwiftGG 的往事。SwiftGG 翻译组一直负责着 Swift 官方文档的翻译工作,并得到了官方的认可,还曾举办了国内的 Swift 大会和上海 T 沙龙活动。老卓也是老司机技术周报的创始人,并且周报编辑组也有多位成员参与了 SwiftGG。3 个人在这期播客里,聊到了很多做社区组织背后的小故事,分享了这些年来的经验和体会。 + +### [Explore and manipulate data in Swift with TabularData](https://developer.apple.com/videos/play/tech-talks/10100/) + +[@xiaofei86](https://github.com/xiaofei86):本期 Tech Talks 带了新的框架 TabularData,用来导入、组织和准备数据表以训练机器学习模型。除了为机器学习任务预处理数据外,你也可以将加载、浏览和操作 CSV、JSON 等非结构化数据的能力用在 App 中。 + +观看视频了解此框架如何帮助你处理大型数据集,并将多个数据表连接在一起进行过滤。视频还将向你展示如何使用 DataFrame 来驱动 App 的所有以数据为中心的功能。 + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2021/#187-2021.12.27.md b/Reports/2021/#187-2021.12.27.md new file mode 100644 index 000000000..bd867ed50 --- /dev/null +++ b/Reports/2021/#187-2021.12.27.md @@ -0,0 +1,168 @@ +# 老司机 iOS 周报 #187 | 2021-12-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 通知 + +[@Parsifal](https://github.com/ParsifalC):这是今年的第 44 期周报,也是 2021 年最后一期周报,同时也是我作为周报主编的最后一期。2017 年底老卓创办了老司机技术周报,然后是 2018 年底我继任主编,成刊整整 4 年,经历过各种各样的事情,但周报都没有因为非节假日原因断更过,这是我们编辑组所有人都可以引以为傲的事情。而今我也要将主编这个身份交接给了我们下一任负责人 - Damon,也就是大家所熟悉的老王~老王也是编辑组的 OG,并且主导了编辑组与社区近两年的 WWDC 内参活动,过去也参加了编辑组很多运营工作,这次算是正式接棒上任了。后续周报的更新、纳新、对外合作以及各类内容发布等等运营相关事宜,都可以直接联系老王协商。我们一直说编辑组最大的资本就是我们 30 多位优秀的编辑,我很荣幸成为其中一员,即使往后不再参与运营工作,但我也会是周报最忠实的读者。感谢大家多年以来的支持,提前祝大家新年快乐啦! + +## 🌟 [Tech Talks 2022 - 中文专场 0104](https://developer.apple.com/cn/accelerator/) + +[@Parsifal](https://github.com/ParsifalC):2022 年第一期 Tech Talks 中文专场来了!扫码即可报名~ + +### 使用 Group Activities 将共享群组体验引入您的 app + +SharePlay 让您可以将您的 app 整合到 FaceTime 中,并以这种全新的方式将用户聚集起来。通过 Group Activities API,您可以比以往更加容易地将您的 app 中的电影、电视、音乐和其他共享媒体带入到人们已经在用来相互联系的空间。您可以了解如何提供全新的卓越用户体验,以及用户之间的推荐为您的 app 带来的自然增长。 +名额有限。请在 2022 年 1 月 3 日前报名参加。 + +![image](https://user-images.githubusercontent.com/7930911/147406439-3d5a3463-84ed-4f50-90ee-da08f32d9e49.png) + +## 新闻 + +### 🐎 [Log4j Xcode vulnerability](https://developer.apple.com/forums/thread/696785) +[@Smallfly](https://github.com/iostalks):近期 Java 日志库 Log4j 漏洞影响了很多国内外主流的大平台,有用户在苹果论坛上指出,Xcode 在上传应用到 App Store 时使用了 Java 运行环境,疑似存在风险。苹果团队回应 Xcode 确实包含 Log4j 副本,Xcode 13.2.1 会自动更新到修复版本。 + +建议及时升级 Xcode。 + +## 文章 + +### 🌟 🐕 [Flutter疑难杂症系列:实现支持复杂需求的列表](https://mp.weixin.qq.com/s/CtcxDtTgcEh0L77Z2g9HFg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 列表页面在移动端开发可谓是一个必然面对的场景,复杂业务下的列表优化也是个老生常谈的话题,在 Flutter 中也是如此,本文是由字节跳动基础架构团队奉献,详细讲解了 Flutter 中如何应对复杂需求下的列表页,从原理到实践,到性能分析,再到功能扩展,一步步抽丝剥茧,值得每一位 Flutter 开发者细读,小编强烈推荐。 + +### 🌟 🐕 [Swift代码优化指南 | 如何最大化实现性能提升?](https://mp.weixin.qq.com/s/xGeLeqcXBeBw1zMPqBZKYA) + +[@JonyFang](https://github.com/JonyFang):本篇从语法角度优化代码,长远来看有益于养成良好的代码习惯,某种程度上从根源减少错误的产生。详细内容: +1. 编译速度优化 + - 费时类型判断; + - 现实运用中的取舍; +2. 内存分配与占用 + - 关于 struct 的使用; + - 用轻便的 Enum 替代 String; + - 优化集合类型(内存分配策略、预分配内存、惰性序列); + - 减少不必要的桥接(ContiguousArray 替换 NSArray); + - 善用写时复制; +3. 运行时速度优化 + - 介绍三种函数派发; + - 使用 final、private 优化派发方式; + + +### 🐕 [错误处理原则及其在Swift中的应用](https://mp.weixin.qq.com/s/DJKuCXzqxBg7LPmtPMgglw) + +[@Barney](https://github.com/BarneyZhaoooo):本文讨论了容易被大家忽视的错误处理,以及一些Swift中的应用。 + +- 错误处理的目标 +- 错误处理的方案 +- 异步函数的错误处理 +- Swift标准库的行为 + +### 🐢 [A roadmap for improving Swift performance predictability: ARC improvements and ownership control](https://forums.swift.org/t/a-roadmap-for-improving-swift-performance-predictability-arc-improvements-and-ownership-control/54206) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Swift 的开发者为我们带来了基于 ARC 内存管理的新特性 roadmap ,总体思路是在不影响主要代码逻辑阅读的前提下,在参数定义时增加特定的一些关键字来优化标明持有关系,使 debug/release 下的表现一致,辅以编译器的强提示来保证安全性;相较 C++ 严格的作用域模型,Swift 会略微宽松一些,同时也能避免在 deinit 时有先后顺序的依赖导致的问题。特别强调,目前只是 roadmap ,后续可能还会有变更。同时对目前 debug/release 释放时机不明确可能导致的问题进行了举例:例如在 deinit 时会调用 free ,而 free 对 errno 有影响,如果判定对象能够提前被释放,就有可能导致程序在 debug/release 下有不同的表现。 + +主要内容如下: +- 通过 move() 方法,在函数内显式转移控制权,这样原本的变量就不再被持有,那就被编译器认为可以被释放,可以避免 Copy-on-write 的多余操作。同时在函数内期望最后的一次使用该变量时,也可以调用此方法,防止该变量后续再被调用。 +- 通过在函数声明时对参数标注 consuming/nonconsuming 来传达持有关系。 +- 通过将 getter/setter 函数替换为 read/modify 来避免对 Array/Dictionary/Set 等类型的无用 Copy-on-write 。 +- 通过对参数标注 @noImplicitCopy 来保证:在函数体内,如果传递该参数到标明 consuming 的方法时,则需要显式调用 copy 方法,来确认参数的所有权。如果不显式调用,则会在编译期报错。 +- 对参数也可使用 @nonescaping 进行标注。 +- 上述 @nonescaping/@noImplicitCopy 的变量统称为 move-only 类型,会对参数列表中包含 move-only 类型的 API 进行性能优化。 + +### 🐕 [Introducing Swift for Visual Studio Code](https://forums.swift.org/t/introducing-swift-for-visual-studio-code/54246) + +[@老峰](https://github.com/gesantung):本文介绍了 VSCode Swift 扩展,该扩展可以提供 VSCode 下 Swift 开发,可以方便的处理 Vapor 项目,值得注意的是这是一个 0.1.0 版本,因此它的功能不完整,主要包括以下功能: +- 自动创建任务 +- 包依赖视图 +- 代码补全 +- 跳转到定义、查看定义、查找所有引用、符号搜索 +- 自动生成用于调试的启动配置 + +## 摸鱼周报 + +[@摸鱼周报 #39](https://mp.weixin.qq.com/s/DolkTjL6d-KkvFftd2RLUQ):第三十九期摸鱼周报来了,一起来看下本期概要: + +* Tips:混编|为 Swift 改进 Objective-C API。 +* 面试模块:HTTPS 证书有效性的验证过程。 +* 优秀博客:Core Data、Realm、MMKV 这几个库相关的一些介绍。 +* 学习资料:一个学习正则表达式的网站。 +* 开发工具:一个安装 Xcode 的 CLI 工具 `xcinfo`,一款开源的 Markdown 编辑工具 Mark Text。 + +本期访谈对象是老司机周报的主编:Parsifal。本次访谈主题分两部分,一部分是老司机周报的发展故事和他的行业观察,另一部分是他对开发者的一些建议。详情可以点击:[人物访谈 | 老司机周报主编 Parsifal 专访](https://mp.weixin.qq.com/s/HWbPbPBPYgFJsM-oc_4tvw) + +## 工具 + +### [ipatool](https://github.com/majd/ipatool) + +[@Parsifal](https://github.com/ParsifalC):一款通过终端下载 App Store IPA 的脚本工具,两行命令即可下载已经上架的 App 了(前提是你已经在手机上下载过该 App,即这个工具只是从你「已下载 App」里同步 IPA)。另外需要注意的是,如果账号开启了两步验证,则需要多试一次。第一次尝试会触发两步验证的验证码,第二次继续尝试并且将第一步获取到的验证码直接拼接到你账号密码后面即可。 + +```shell +#先执行一次 +ipatool download -b com.apple.testflight -e olddriver@gmail.com -p YourPassword$110 +==> ℹ️ [Info] Querying the iTunes Store for 'com.apple.testflight' in country 'US'... +==> ℹ️ [Info] Authenticating with the App Store... +==> ❌ [Error] An unknown error has occurred. + +#拿到上一次触发的验证码,比如123456,拼接到密码后面 +ipatool download -b com.apple.testflight -e olddriver@gmail.com -p YourPassword$110123456 +==> ℹ️ [Info] Querying the iTunes Store for 'com.apple.testflight' in country 'US'... +==> ℹ️ [Info] Authenticating with the App Store... +==> ℹ️ [Info] Authenticated as 'Old Driver'. +==> ℹ️ [Info] Requesting a signed copy of '899247664' from the App Store... +==> ℹ️ [Info] Downloading app package... [100%] +==> ℹ️ [Info] Saved app package to com.apple.testflight_899247664_v1.5.0_465.ipa. +==> ℹ️ [Info] Applying patches... +==> ℹ️ [Info] Done. +``` + +## 书 + +### [阅读亚马逊逆向工作法的几点收益](https://mp.weixin.qq.com/s/-FHtH2C8f7oKLh3QJ9DFWw) + +@叶孤城:推荐一本书叫做《亚马逊逆向工作法》,我买来看了一遍,受益匪浅。少有的在讲管理时,实操性极强,而不谈玄学的书。 + +## 音视频 + +### 🐢 [编码人声:新人该怎样入坑开源项目](https://dao.fm/2021/12/09/vol-333-编码人声:新人该怎样入坑开源项目?/) + + [@含笑饮砒霜](https://weibo.com/chinafishnews/):开源对普通程序猿来说似乎是很遥远的事情,这期播客请到了几位开源领域的大咖,聊一聊如何开始你的开源之旅。本期播客的主要内容: +- 嘉宾参与开源项目的心路历程 +- 开源的经济价值和社会价值 +- 如何开始参与一个开源项目 +- 只有程序员才能参与开源么 +- 开源对企业的价值在哪里 +- Github等开源平台的生态和挑战 +- 自海外诞生的开源文化,在中国会如何 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#188-2022.01.10.md b/Reports/2022/#188-2022.01.10.md new file mode 100644 index 000000000..748d662ec --- /dev/null +++ b/Reports/2022/#188-2022.01.10.md @@ -0,0 +1,181 @@ +# 老司机 iOS 周报 #188 | 2022-01-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +> 各位新年好呀!过去的 2021 年对于老司机周报来说发生了很多事情,我们也为此写了份 [年终总结](https://mp.weixin.qq.com/s/v-ZBo0uQjJWyBKvQqWK_TQ) 给到大家,非常感谢各位读者长期以来的支持与关注。这是周报的第 188 期,也是 2022 年的第 1 期,新的一年大家一起加油! + +## 🌟 [App 加速器 - 线上活动](https://developer.apple.com/cn/accelerator/) + +[@Damonwong](https://github.com/Damonvvong):2022 年第 2/3 期「App 加速器 - 线上活动」来了!扫码即可报名~ + +### 在您的 app 中训练自定义 Core ML 模型 + +了解如何通过在您的 app 中动态训练 Core ML 模型来构建自适应和个性化体验。首先,我们将回顾您可以在本地创建哪些类型的模型,包括基于图像的任务 (比如风格迁移和图像分类)、音频相关的任务 (如自定义声音分类) 以及使用表列回归器。我们还将向您展示您的 app 如何学习人们的个人行为以构建更智能、更直观的功能。 + +### 使用 StoreKit 2 和 App Store Server API 为客户提供支持 + +了解如何使用 StoreKit 2、App Store Server API 和 App Store Server Notifications 为您的客户创造出色的应用内购买体验,并提供支持和退款。我们将探索实施方法,提供最佳实践,并和您一起实现如何进行客户管理和退款管理。 + +![image](https://user-images.githubusercontent.com/11873526/148687044-1daf6e8c-066c-423c-a849-c78bbb86af92.png) + +## 新闻 + +### 🌟 🐢 [阿里自研标准化协议库 XQUIC 正式开源](https://mp.weixin.qq.com/s/OrvjikvYyqlHAzGamLmpsw) + +[XQUIC](https://github.com/alibaba/xquic) 是阿里自研的 IETF QUIC 标准化传输协议库。XQUIC 是基于 IETF QUIC 协议实现的 UDP 传输框架,包含加密可靠传输、HTTP/3 两大块主要内容,为应用提供可靠、安全、高效的数据传输功能,可以极大改善弱网和移动网络下产品的用户网络体验。手淘图片、短视频等场景已经落地 GQUIC,并拿到了一定的网络体验收益。 +XQUIC 是一个轻量、高性能、标准化的跨平台协议库,具有以下优势: +- 轻量性 - Android/iOS 双端的编译产物均小于 400KB +- 高性能传输 - 相对于内核态 TCP+HTTP/2 优化 20% 的网络请求耗时 +- 标准化 - 实现了整套 IETF QUIC 标准协议,包含传输层、加密层、应用层协议栈 +- 易用性 - 支持 Linux/Android/iOS/Mac 等平台,客户端可以通过 SDK 方式很方便地接入并使用、完善的文档(中文/英文对照)、demo 示 例和单测 + +### [Swift implemented in Swift](https://github.com/apple/swift/tree/main/SwiftCompilerSources) + +[@kemchenj](https://kemchenj.github.io):Swift 仓库近日添加了一个 Swift implemented in Swift 的项目,旨在使用 Swift 实现 Swift 编译器的部分功能。目前实现了 SIL 的桥接和部分简单的 SIL Pass,短期目标是将 SIL Optimizer 的功能改为使用 Swift 进行实现。 + +### [苹果“换芯”之路再起波折,M1 芯片功臣被英特尔挖走了](https://www.infoq.cn/article/wLXQeEayVLEdQSJyd6Eq) + +1 月 6 日,苹果 Mac 系统架构总监 Jeff Wilcox 在领英上宣布,他将离开苹果,前往英特尔担任新职位。他将担任英特尔研究员和设计工程组的首席技术官的领导职位,专注于客户端 SoC 架构。Jeff Wilson 说,他计划与英特尔一起打造开创性的 SoC。 + +## 文章 + +### 🌟 🐕 [小程序容器首屏秒开优化实践](https://mp.weixin.qq.com/s/7qeBZZ1KusME_SO3_A4L9g) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了饿了么 APP 小程序秒开的实践干货。 + +- 1、包和包信息(前置预请求、APP内预置、异步更新) +- 2、Render 创建、资源加载(前置预创建、资源前置分阶段预加载) +- 3、Worker 创建、资源加载(前置预创建、资源前置分阶段预加载) +- 4、首屏接口预请求(前置预请求) +- 5、首屏渲染(加载首屏快照) +- 6、Appx 框架(Appx2.0) +- 7、检测工具和数据验证 + +### 🌟 🐎 [Xcode13 自适应瀑布流 Layout 在 iOS15 上对 crash 的定位及修复](https://mp.weixin.qq.com/s/sdj5Ym186VkpxXwExIpC0A) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了排查特定构建环境,配上特定系统遇到的死循环案例。排查时作者逐步减少可能因素的过程较有学习价值。 + +同时也能看出本地开发环境与打包构建环境保持一致的重要性,推荐更快地适配新版 Xcode,如果确实有困难也应该设置 deadline,在 deadline 到来前集体完成升级。除了能减少维护多套打包资源,还能减少遇到兼容性问题排查的成本。 + +### 🌟 🐕 [Flutter 轻量级引擎实践与优化](https://mp.weixin.qq.com/s/n6rA0KyUSMGnnzG6Ij6edA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 开发中一直以来在 View 角度的使用和展示都是棘手问题,在 Flutter 2.0 之后 Flutter Engine Group 功能得以改善,字节跳动端团队从 Engine Group 上解决 View 级别的使用实践出发,并针对 Engine Group 场景下做了大量优化: +- 入口参数配置 +- 多引擎数据通信 +- 数据更新同步 +- 图片缓存共享 +- iOSSurface 释放 + +### 🐢 [TCA - SwiftUI 的救星?](https://onevcat.com/2021/12/tca-1/) + +[@zvving](https://github.com/zvving):从 UIKit 到 SwiftUI,声明式布局、数据传递、状态管理都带来极大的变化,在复杂项目中,如何通过 SwiftUI 构建可组合、易维护、可测试的项目架构本身就是一件很有挑战的事,受 [Elm](https://elm-lang.org) 启发诞生的 [TCA (The Composable Architecture)](https://github.com/pointfreeco/swift-composable-architecture) 是可能的答案之一。 + +- 通过 Reducer 统一 Action 带来的 State 变化,调试、测试更友好 +- 分割 Store/ViewStore:避免不必要的 view 更新,细粒度 view 有灵活的组合能力 +- 跨 UI 框架能力:为 UIKit 到 SwiftUI 提供更稳妥的过渡路径 +- 单个 Feature 有能力自由组合成为更大的 feature,这也是 Composable 名称的来源 + +[@onevcat](https://onevcat.com/tabs/about/)通过系列文章,用逐步完善的计数器例子介绍 TCA,目前已推出 [一](https://onevcat.com/2021/12/tca-1/)、[二](https://onevcat.com/2021/12/tca-2/),更多精彩内容敬请期待! + + +### 🐕 [赵海平与张宏波谈编程语言](https://mp.weixin.qq.com/s/FI2WFOENBxgCbykvy9wBYQ) + +[@莲叔](http://aaaron7.github.io/):伴随着各个领域的技术体系的升级,编程语言一直在持续的迭代和发展。拿移动端来说,Swift/Kotlin 方兴未艾。竟还横空出世了 Rust,成为移动技术领域的新宠。服务端技术也一样,微服务的大火让 GO 也成为主流的服务端开发语言。本篇文章是两个在编程领域颇具名气的前辈针对时下流行的编程语言的设计背景、优劣势进行讨论,很有价值。其中也讨论到了编程语言设计的核心标准:解决当下面临的痛点问题。 这也能够帮助我们在学习语言的时候对于语法和最佳实践有更深刻的认识。 + +### 🐕 [Swift 在 58 安居客房产实践](https://mp.weixin.qq.com/s/xMhVbw2-z2sDQbF9I8_0uA) + +[@xiaofei86](https://github.com/xiaofei86):随着苹果对 Swift 的大力推广,越来越多以 Objective-C 为基础的老项目逐渐以混编的形式开始尝试 Swift。本文 58 安居客房分享了自己的产品率先从 Objective-C 向混编改造的经验,以及在改造过程中遇到各种问题的分析及解决过程。 + +## WWDC21 内参 + +### 🌟 [检测和诊断 App 内存问题](https://mp.weixin.qq.com/s/E80VEIJma66fj7BZy1cCeQ) + +本 Session 讲解了如何使用 Xcode 检测和诊断内存问题。首先需要了解内存构成,内存占用对 App 的影响、以及一些常见的内存问题,最后学习使用一些工具来分析并解决内存问题。 + +### [iPhone 相机拍摄新变化](https://mp.weixin.qq.com/s/swzI8C1NHeDFQNBbkQQhUQ) + +去年 Apple 对 iPhone 的相机升级是非常明显的,比如增加了 10-bit HDR 视频的拍摄,Apple ProRaw 的支持等。同时得益于 M 系列/A 系列芯片强大的算力,Apple 目前对于拍摄上的思考和提升更多走的是 [计算摄影](https://zh.wikipedia.org/zh-hans/%E8%AE%A1%E7%AE%97%E6%91%84%E5%BD%B1) 路线,而非在光学硬件上做大幅度提升。所以今年的 WWDC Apple 将相机的更多能力开放给开发者使用。 + +### [更好用的 sheet](https://mp.weixin.qq.com/s/AR3SH9ddgKAiBDOVuPPUug) + +在 WWDC19 的 [Modernizing Your UI for iOS 13](https://developer.apple.com/videos/play/wwdc2019/224) 中,苹果介绍了 sheet 这种 present 视图控制器的方式。在 WWDC21 的 [Customize and Resize sheets in UIKit](https://developer.apple.com/videos/play/wwdc2021/10063/) 上,苹果介绍了对 sheet 展示方式的一系列优化,包括自定义视图大小、背景可交互等一系列新能力。让我们一起具体了解下吧 ~ + +## 工具 + +### [RegexLearn](https://regexlearn.com/zh-cn) + +[@红纸](https://github.com/nianran):RegexLearn 是一个正则表达的学习网站,与其他网站不同的是,它是一个游乐场,通过实践来学习和测试正则模型。 + +> 推荐人:[KeithBird](https://github.com/KeithBird) + +### 🐎 [用 rust 实现苹果的 atos 工具,atosl-rs 发布啦](https://mp.weixin.qq.com/s/Oy9jXMnVMYF55nqUpN2WXQ) + +[@Smallfly](https://github.com/iostalks):iOS 符号解析是非常基础的需求,苹果在 macOS 平台上提供了 `symbolicatecrash`, `atos` 等工具。作者使用 Rust 语言实现了一个跨平台的解析工具 `atosl-rs`,并做了开源,有兴趣可以围观。 + +## 代码 + +### [Rainbow](https://github.com/onevcat/Rainbow) + +[@享耳先森](https://github.com/iblacksun):Rainbow 是 [@onevcat](https://onevcat.com/tabs/about/) 开源的一个控制台和终端日志输出库,可以给文字添加颜色、背景色、样式等信息,支持 Apple 和 Linux 平台。 + +### [CreateAPI](https://github.com/kean/CreateAPI) + +[@Damien](https://github.com/ZengyiMa):CreateAPI 是用 Swift 编写的 OpenAPI 规范生成代码的工具,它具备 4 大优势: + +* 快速:在不到一秒的时间内处理 100K 行 YAML 的规范。 +* 智能:生成的 Swift 代码看起来就像手写的一样标准。 +* 可靠:在 100 万行公开可用的 OpenAPI 规范上测试,每次都能生成正确的代码。 +* 可定制:提供大量的定制选项来完成各种精细化控制 + +## 音视频 + +### 🚧 🐢 [Springboard: the secret history of the first real smartphone (Full Documentary)](https://www.youtube.com/watch?v=b9_Vh9h3Ohw&ab_channel=TheVerge) + +[@老驴](https://weibo.com/u/6090610445):科技行业总有存在一些超越时代的产品,他们生不逢时,最后不一定会成功,甚至大部分都失败了,但是他们对行业的引导性让之后的其他人,最终在合适的时间,合适的地点,做出合适的产品。就比如智能手机,现在的代表是 iPhone,但是在 iPhone 之前,有一些公司已经做了一些对智能手机的尝试。Verge 做了一期纪录片,采访了当时最早那批坚信移动互联网革命的人,他们来自 Handspring,第一个做出了世界上真正意义上的智能手机:Treo 系列。Handspring 后来也被 Palm 收购,而当时 Handspring 坚信的移动浪潮也最终来临。 + +### 🌟 卖鱼桥分桥 - 老司机技术周报四周年纪念 + +[@Damonwong](https://github.com/Damonvvong): 上周受周报创始人 [@卓同学](https://github.com/lacklock) 之约,我和 [@Parsifal](https://github.com/ParsifalC) 一起做客了他播客节目「卖鱼桥分桥」,聊了聊关于老司机技术周报的一些背后的故事,如果你对我们的故事也比较感兴趣可以在闲暇之余听一下哈~ + +- [老司机技术周报四周年纪念(上):成立、纳新、技术沙龙](https://www.xiaoyuzhoufm.com/episode/61d2baf2cb0f5d7d1b7ccc44?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D) +- [老司机技术周报四周年纪念(下):主编交接](https://www.xiaoyuzhoufm.com/episode/61d442e0cb0f5d7d1b7ccca8?s=eyJ1IjoiNWViODA4Y2UwZGJlZDIyMjcyY2ViNzk4IiwiZCI6MX0%3D) + +## 摸鱼周报 + +[@摸鱼周报 #40](https://mp.weixin.qq.com/s/y4229I_l8aLILR7WA7y01Q):第四十期摸鱼周报来了,一起来看下本期概要: + +* 话题:我们启用了新封面 +* Tips:Swift 中的预编译 +* 面试模块:dyld 2 和 dyld 3 的区别;Objective-C 及 Swift 编译流程 +* 优秀博客:包依赖管理工具 +* 学习资料:从头开发一个迷你 Go 语言编译器 +* 开发工具:git 资源库浏览工具 Tig + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +公众号回复「WWDC」可以获取往年《WWDC 内参》,回复「PPT」可获取往期线下沙龙 PPT 材料。 + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#189-2022.01.17.md b/Reports/2022/#189-2022.01.17.md new file mode 100644 index 000000000..85d49a350 --- /dev/null +++ b/Reports/2022/#189-2022.01.17.md @@ -0,0 +1,164 @@ +# 老司机 iOS 周报 #189 | 2022-01-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 手机 QQ 体积暴增,接近 900M + +[@Damonwong](https://github.com/Damonvvong): 上周手机 QQ 迎来今年的第一次升级,给大家带来了一个巨大的 “惊喜”,iOS 版本的安装包已经达到了 879M,有眼尖的网友发现内置了一个 UE4 虚幻引擎,但是用在了哪个功能至今还未发现。手机 QQ 和元宇宙会擦出怎么样的火花,让我们拭目以待 ~ + +### [“App 分析”现已可用于 app 内活动](https://developer.apple.com/cn/news/?id=pa0x2dzk) + +App Store Connect 中的“App 分析”能有效帮助您了解用户如何发现您的 app 并与之互动。您现在可以查看有关 app 内活动的信息,包括活动页浏览量、提醒和通知数据,以及由 app 内活动带来的下载和重新下载次数。每个指标都可以按照地区、来源类型、设备以及更多分类进行查看,让您能轻松了解您的 app 内活动如何推动了 app 的增长和成功。 + +### 🐎 [字节跳动技术 iOS 技术沙龙正式报名开启](https://mp.weixin.qq.com/s/yPTIOxJtl4BsjkDN0rXDdw) + +[@Leo](https://github.com/leomobiledeveloper):字节跳动第三次技术沙龙,本次主题是关于 iOS 开发的,可以通过这次沙龙了解「抖音 iOS 基础技术」的技术细节。本次分享的主题涉及架构、构建、自动化、性能、稳定性等领域,内容很丰富,时间在1月22日下午,进入文章即可免费报名,获取在线观看地址。 + +## 新手推荐 + +### 🐎 [iOS 浮点类型精度问题小记](https://juejin.cn/post/7047767024931438605) + +[@极速男孩](https://github.com/ztlyyznf001):浮点数精度丢失的问题是不少人都会面临的问题。本文主要介绍了在 iOS 中如何避免精度丢失的问题,并且解析了精度丢失的主要原因。 + +### 🐎 [Loop](https://www.swiftbysundell.com/basics/loops/) + +[@享耳先森](https://github.com/iblacksun):Swift 有多种内置语法对集合类型进行迭代:`for` `forEach` `enumerated()` `while` 等,本文介绍了各种语法的具体差异,建议阅读。 + +## 文章 + +### 🌟 🐢 [【译】SE-0302 Sendable 和 @Sendable 闭包](https://kemchenj.github.io/2022-01-07/) + +[@四娘](https://kemchenj.github.io/):去年 WWDC 里 Swift 更新了 Concurrency 相关的功能,后续的更新提供了一定程度的向后兼容,让 iOS 13 的程序也可以用上这些功能。 + +虽然 WWDC 上大部分篇幅都是在介绍 async/await,结构化并发和 Actor,但实际接入过程中这些功能并没有带来太多问题,反而是 Sendable 的检查难住了我,深入了解之后才发现这个功能是帮助 Concurrency 走向 type-safe 的关键。 + +通过翻译这篇文章解答了很多我在这个过程中的疑惑,非常推荐想要接入 Concurrency 的同学进行阅读: + +> Swift Concurrency 的功能渴望建立一个安全而强大的编程模型。我们希望实现这三件事: +> +> 1. 我们希望 Swift 程序员在试图 跨并发域传递 可能引入不受保护的共享可变状态 时得到一个静态的编译器错误。 +> 2. 我们希望高阶程序员能够实现包含复杂技术的库(例如并 ConcurrentHashTable),并且能够让其他人以一种安全的方式去使用。 +> 3. 我们需要拥抱现有的世界,其中包含了很多在设计时没有考虑到 Swift 并发模型的代码。我们需要一个平滑和渐进的迁移策略。 + +### 🌟 🐢 [基于 dylib 注入原理实现 iOS 热重载框架 CocoaHotReload](https://mp.weixin.qq.com/s/XsfYUBD2YK9Tq4cfoGW4JA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):非常详细的热重载实现原理介绍,支持真机(iOS 13+)、Swift 的 4 种函数派发方式都能支持、支持 Storyboard & xib 资源文件等等。方案十分完整,关键实现也已贴出代码,推荐一读。文章主要内容如下: + +- Mac app,主要职责是根据修改文件查找对应的编译指令并执行生成 .o 文件,接着链接 .o 文件及依赖的库生成 dylib 动态库 +- iOS Framework,主要职责是 动态库注入 和 资源包更新 + - ObjC 类替换,Swift 函数替换,C函数替换(Dobby 实现) + - hook 函数处理,解决函数调用栈丢失与死循环的问题 +- 解决 Swift 函数热重载问题 +- 解决部分库设置 Symbol hidden by Default 为 YES 导致的 Symbol not found 问题 + +### 🌟 🐕 [基于 Web 内核的微信小程序框架实践](https://mp.weixin.qq.com/s/vEu2Ft4c6LHPeUBHChjfFA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 微信小程序技术一直作为业界跨端方案的标杆一样的存在,此次小程序在内核上大跨步式改动,从类 PWA 转入 Chrome 内核以获得在 PC 层面的更多能力,并集成了 Node ,目前还未在 iOS 上应用,但作为跨端方案还是很有借鉴意义的,推荐相关同学深入阅读。 + +### 🐢 [A short-term roadmap for C++ interop](https://forums.swift.org/t/a-short-term-roadmap-for-c-interop/44768) + +[@Damien](https://github.com/ZengyiMa):本文是 Swift 社区提出的 Swift 和 C++ 交互的 roadmap 规划。其中主要目标是希望在接下来的几个月里,Swift 编译器可以完全导入 libc++ 头文件、LLVM 头文件和 Swift 头文件而不崩溃。对 Swift 编译相关感兴趣的同学建议一读。 + +### 🐢 [Swift 在手淘商品评价的技术重构与实践](https://mp.weixin.qq.com/s/J4wxvr5JvibG7vUtRz3ing) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文主要是对手淘探索 Swift 业务落地的一个总结。更快、更安全且更具备表达性的 Swift,这些年明显比 OC 发展的更好,国内外混编应用的占比持续增高,长远来看,使用 Swift 几乎是日常开发的不二之选。对于大型项目,引入 Swift、从哪些业务模块引入 Swift、引入 Swift 对当前项目架构的冲击等都是需要慎重考量的,文中也都有详细阐述,旨在希望可以给大家在技术选型或探索避坑的时候给到一点帮助。 + +### 🐎 [Xcode 配置多套 App 图标的方法 --- AppStore 图标 A/B Test 实践](https://mp.weixin.qq.com/s/BApDWf9acuFBSONzV2OnEQ) + +[@老峰](https://github.com/gesantung):2021 年 12 月 08 日,苹果推出 App Store 产品页的新功能,在 App Store 中开发者可以针对 app 产品页的不同版本上使用不同的图标、截屏和 app 预览,通过 A/B Test 找出效果最佳的版本。本文主要介绍了使用 Xcode 13 在 Assets.xcassets 创建多套测试的图标的操作细节以及要注意的一些点。 + +### 🐎 [让 UIKit 更优雅易用:Block 回调改造](https://juejin.cn/post/7045133536495403015) + +[@JonyFang](https://github.com/JonyFang):HWBlocksUI 对 UITableView,UITextField,UIButton,UISwitch 等常用的 UIKit 类进行了扩展,将之前需要 Delegate 或 target+selector 回调的方式改成了 Block。使用 Block 的优势体现在: + +1. 代码紧凑,无需声明协议,可以将相关代码逻辑集中在一起,降低开发调试成本; +2. 允许访问上下文变量,无需再专门抽出实例变量供不同代理方法共享; + +### 🐢 [Cube 技术解读 | Cube 小程序技术详解](https://mp.weixin.qq.com/s/Sm2xtyxPMGucUHtaUy_aOQ) + +[@Leo](https://github.com/leomobiledeveloper):在动态化或者跨端开发里,小程序是一个业界典型的实现方案。Cube 是阿里出品的轻量级小程序技术栈,具有体积小、启动快、内存占用低等特点。本文详细介绍了 Cube 小程序技术栈与技术演进实践,包含了布局计算、样式能力、组件支持、引擎优化等方方面面,推荐阅读。 + +### 🐢 [Swift Playgrounds 4 娱乐还是生产力](https://mp.weixin.qq.com/s/Uyd9Nf12HpmslYR0zOQaEQ) + +[@anotheren](https://github.com/anotheren):赶在 2021 年底,苹果终于发布了 Swift Playgrounds 4,作为近年来最具革命性意义的版本,Swift Playgrounds 4 提供了在 iPad 上开发并发行 App 的能力。本文介绍了这个版本的最新功能。如果你还没入门,不妨再读一下下面这个系列: + +- [玩转 Xcode Playground(上)](https://mp.weixin.qq.com/s/rHNrTt7CReTLL8aubz0SqQ) +- [玩转 Xcode Playground(下)](https://mp.weixin.qq.com/s/_kggsB9kL5jYi-40KDMsrQ) + +### [一场开源 RSA 库引发的“血案”](https://mp.weixin.qq.com/s/UM_Nrfd2I0oVosD6iQDn5w) + +[@老驴](https://weibo.com/u/6090610445):58 同城团队的一篇使用开源库踩坑的分享。简单来说就是 58 团队在使用了开源库后,上线发现频繁崩溃吗,debug 后发现原作者没有正确处理多线程。这类问题其实并不少见,很多人在使用开源库的时候,并没有去仔细调研库,而使用以后出现问题,甚至很难自己修复。也希望这篇文章能对大家是个提醒,最好在用开源库之前,先读一读代码,理解一下代码的意思,这样即便真的踩坑,需要 debug,也会轻松不少。 + +## WWDC21 内参 + +### [SwiftUI 技术内幕](https://mp.weixin.qq.com/s/Q8EuaXei9Q0q-3OyD6n9Bw) + +通过阅读本文,带你一起深入解读 SwiftUI,提高应用程序的性能。 + +### [初探 Swift 算法和集合](https://mp.weixin.qq.com/s/WpvuuUXQPwBHZpk8OmuPDg) + +本文主要介绍 Swift 的算法和集合开源包。列举了其中的几个算法和数据结构,深入了解 Swift 实现和优化方式。 + +## 工具 + +[Automatically merging conflicts in Xcode project files](https://blog.kulman.sk/automatically-merge-xcode-project-conflicts/) + +对于大一些的项目工程,参与提交代码的人比较多时,常常会遇到需要处理代码冲突的时候。常规的代码冲突只需要通过代码片段确认逻辑就可以解决,而有些文件格式,可读性很差,解起来很麻烦,例如 Xcode 项目文件(project.pbxproj)。Kintsugi 是一个轻量级工具,可以自动解决 Xcode 项目文件中的冲突。只需要通过 gem 安装: +``` +gem install kintsugi +``` +然后执行下面的命令,kintsugi 会帮助解决冲突,非常方便 +``` +kintsugi App/project.pbxproj +``` + +## 代码 + +### [Flipper](https://github.com/facebook/flipper) + +[@Barney](https://github.com/BarneyZhaoooo):Flipper 是 Facebook 开源的一个面向移动端(Android/iOS)开发者的桌面调试平台。 + +其主要包含: + +- macOS 的桌面应用程序 +- Android 和 iOS 的原生 SDK + +## 摸鱼周报 + +[@摸鱼周报 #41](https://mp.weixin.qq.com/s/DNXrfZgx0JaXyvfVZ4sYVA):第四十一期摸鱼周报来啦,一起来看下本期概要吧: + +- 话题:In-App Events 数据分析上线了;线上沙龙:抖音 iOS 基础技术大揭秘。 +- Tips:在 Objective-C 中标记构造器为指定构造器。 +- 面试模块:如何检测内存泄露。 +- 优秀博客:野指针的捕获与防护。 +- 学习资料:一份可视化的 Web 技能列表。 +- 开发工具:SwiftInfo 是一个 CLI 工具,用于提取、跟踪和分析对 Swift 应用程序有用的指标。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#190-2022.01.24.md b/Reports/2022/#190-2022.01.24.md new file mode 100644 index 000000000..d1fbbef98 --- /dev/null +++ b/Reports/2022/#190-2022.01.24.md @@ -0,0 +1,183 @@ +# 老司机 iOS 周报 #190 | 2022-01-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [Bazel](https://bazel.build/) + +[@红纸](https://github.com/nianran):Bazel 是最近比较热点的话题之一。作为新的构建系统,它具有远端缓存、远端执行、跨平台、高度扩展、高性能等诸多特性。不仅仅局限于 iOS 的构建领域,在其 Rules 的帮助下,可以扩展很多可能性。 +这边为大家稍作整理,给大家作为参考: +- 几篇入门: + - [Bazel 官网](https://bazel.build/) + - [Bazel 入门 - 放浪者](https://zhuanlan.zhihu.com/p/262171925) + - [Bazel - Sunxxxxx丶](https://www.jianshu.com/p/727cbf544c47) +- 几篇分享: + - [用 bazel 更快更稳定的构建 iOS 项目](https://bilibili.github.io/2020/07/22/bazel_ios.html) + - [基于 Bazel的 iOS MonoRepo 实践](https://mp.weixin.qq.com/s/zFrKoHPBv3qz8TiwdqP8Fw) + - [Improving Build Performance of LINE for iOS with Bazel](https://engineering.linecorp.com/en/blog/improving-build-performance-line-ios-bazel/) +- 几个工具、库: + - [PodToBUILD](https://github.com/pinterest/PodToBUILD):将 Cocoapods 的仓库转化为 Bazel 的 BUILD 文件 + - [cocoapods-bazel](https://github.com/bazel-ios/cocoapods-bazel):Cocoapods 的 bazel 插件 + - [tulsi](https://github.com/bazelbuild/tulsi):将 Bazel 的 BUILD 工程转成 Xcode 识别的 xcodeproj 工程 + - [xchammer](https://github.com/pinterest/xchammer):将 Bazel 的 BUILD 工程转成 Xcode 识别的 xcodeproj 工程 +- Awesome Rules: + - [bazelbuild/rules_apple](https://github.com/bazelbuild/rules_apple) + - [bilibili/rules_apple](https://github.com/bilibili/rules_apple) + - [line/rules_apple_line](https://github.com/line/rules_apple_line) + +> PS1: 内容比较多,大家可以慢慢消化一下。关于 Bazel 的讨论,也欢迎加入我们粉丝群进行交流,详情 @老王。 +> PS2: 字节于 2022/01/22 进行了 JoJo 构建系统的分享,Bazel 作为其核心的组成部分之一。分享文章跟视频暂时没有发布,大家可以等待一下。 + +### 🌟 🐕 [GCDAsyncSocket 在 iOS15 出现 -[_NSThreadPerformInfo dealloc] 崩溃排查笔记](https://mp.weixin.qq.com/s/Tn8SN1eNaGkR1ddEKTkzPQ) + +[@邦Ben](https://weibo.com/linwenbang):从 iOS 15.0 Beta5 开始,集成开源库 GCDAsyncSocket 的 APP 开始出现 -[_NSThreadPerformInfo dealloc] 相关的崩溃,作者从堆栈开始分析,讲述整个排查过程思路,并且每个步骤的分析以及原理都进行了很深入的研究,从而得到了最后的 crash 原因以及给出解决方案,结论先放出来,但是过程非常推荐一看。 + +- 结论:经过前面的分析,我们可以得知,iOS 的新系统中存在一个 bug,该 bug 导致即使我们通过将参数waitUntilDone 设置为YES 的方式阻塞当前线程时,仍然存在触发悬垂指针的可能。 +- 方案: + 1、通过单例持有 GCDAsyncSocket,避免调用 -[GCDAsyncSocket dealloc] + 2、先主动调用-[GCDAsyncSocket disconnect],再释放GCDAsyncSocket的实例 + 3、通过调整withObject:的参数,避免将 GCDAsyncSocket 的实例进行传递 + +### 🐕 [浅谈软件开发架构模式](https://mp.weixin.qq.com/s/cWp4J-XmvaoWHRMeuVDzPQ) + +[@Smallfly](https://github.com/iostalks):架构对开发者来说都不陌生,然而相同的架构模式在不同场景下可能有所区别。本文作者结合具体的问题和案例,从个人角度阐述了对 MVC/MVVM/VIPER 等架构模式的理解及运用。 + +### 🌟 🐕 [字节跳动 iOS Heimdallr 卡死卡顿监控方案与优化之路](https://mp.weixin.qq.com/s/qzA1g4mAH_Kgzc4fwVK2Rw) + +[@Leo](https://github.com/leomobiledeveloper):卡顿、卡死会造成应用体验大幅下降,进而影响留存、时长等核心业务数据。本文介绍了字节 APM 框架 Heimdallr 是如何监控卡顿卡死的,细节在字节系应用上验证和完善,被证明了是一套全面、稳定、可靠的技术方案。 + +### 🐢 [移动域全链路可观测架构和关键技术](https://mp.weixin.qq.com/s/grW6r_cpmrxEJ-pMacKtGg) + +[@xiaofei86](https://github.com/xiaofei86):监控告诉我们系统的哪些部分是工作的,而可观测性告诉我们那里为什么不工作了[[1]](https://xie.infoq.cn/article/598fd893709f01ae751dbd7b8?utm_medium=article)。相比传统的监控,可观测性能够通过结合数据,并且将数据有机联系在一起,产生更好的连接,帮助我们更好的观察系统的运行状况,快速定位和解决问题。 + +本文淘宝 App 基础团队通过对可观测理念的理解并结合客户端在运维排查、度量监控、全链路优化等方面遇到的实际问题,阐述团队对移动领域全链路技术理念的原创性应用。读者将收获移动技术域体验优化的思路转变,以及软件定义体验的沉淀和研发实践。 + +### 🐕 [iOS 如何记录堆栈信息?](https://juejin.cn/post/7049267131036205086) + +[@AidenRao](https://weibo.com/AidenRao):在 APP 卡顿、Crash 以及某些特定时机,开发者会想记录一下当前的堆栈信息。这篇文章主要从 [BSBacktraceLogger](https://github.com/bestswifter/BSBacktraceLogger) 源码入手,去理清记录堆栈信息的原理:回溯栈帧,获得函数调用地址,解析 MachO 文件获取函数名。 + +### 🌟 🐕 [从 0 到 1:美团端侧 CDN 容灾解决方案](https://mp.weixin.qq.com/s/BA55Op8A29sXq-_SHv1igg) + +[@JonyFang](https://github.com/JonyFang):本文结合美团外卖业务中的具体实践,介绍了一种在端侧感知 CDN 可用性状况并进行自动容灾切换的方案,通过该方案可有效降低业务对CDN异常的敏感,提高业务的可用性,同时降低CDN运维压力。 + +### 🐎 [静态库冲突问题思路全解](https://mp.weixin.qq.com/s/LAFS-6Oycnzu5kOhS9d7pA) + +[@AidenRao](https://weibo.com/AidenRao):iOS 开发中经常会遇到静态库冲突的问题,Xcode 报错关键词是duplicate symbol xxx,造成冲突的常见原因一般有两种: + +- 项目中引入了命名不同的同一个静态库。 +- 引入了不同的 SDK,SDK 中引用了同一个静态库。 + +本文介绍了解决冲突的多种方案,并对优缺点进行了对比。 + +### 🐕 [淘宝小部件 Canvas 渲染流程与原理全解析](https://mp.weixin.qq.com/s/o772Ziaxj64IOXXnckPFNQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要阐述 Canvas 在小部件下的渲染原理。从端上技术视角看,小部件首先是一个业务容器,它的特点是**DSL标准化、跨平台渲染、跨场景流通** + +- **端侧整体技术架构** +- **多视角看渲染流程** + +### 🐎 [從前端視角看 SwiftUI](https://blog.kalan.dev/2022-01-09-learn-swiftui-from-frontend-view/) +[@Smallfly](https://github.com/iostalks):SwiftUI 和 React 同为声明式框架,在使用上存在相似之处。本文站在前端视角,分别从组件化,响应式机制,状态管理,数据绑定等几个维度对比了两者使用上的异同点。而在开发体验上,Swift 作为静态编译型语言和 JavaScript 的动态性相比仍有差距。 + +### 🐎 [Apple’s use of Swift and SwiftUI in iOS 15](https://blog.timac.org/2021/1219-state-of-swift-and-swiftui-ios15/) + +[@anotheren](https://github.com/anotheren):在最新的 iOS 15 中,Swift/SwiftUI 在内置 App 的使用率进一步提升,如果你还在犹豫新技术的使用,看看 Apple 对于有内置 App 的改变。 + +### 🌟 🐕 [iOS 之深入理解 Image 与 MachO](https://juejin.cn/post/7053289480131706911) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Mach-O 以及其三个主要部分:Header、Load Commands 和 Data 的数据结构和功能。也介绍了 image、 Segment 和 Section 的相关操作 API + +### 🌟 🐕 [iOS 线上野指针探测实践与展望](https://mp.weixin.qq.com/s/BNIWBwemmz4isbjBb9-pnQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):野指针问题线下难以复现,crash发生时的堆栈也大概率不是问题的直接原因,因此线上的野指针检测方案是很值得探索的。为了尽量减小对帧率与内存的影响,作者也进行了三个方向的优化: + +- 仅监控必要的类型,对于系统类则通过基于 Bind 信息的方案,监控项目中使用到的系统类 +- dealloc 中减少耗时操作:不要调用任何 OC 代码、不要使用 objc_setAssociatedObject、先判断 isTaggedPointer +- 多线程处理对象释放与入池;用堆栈距离 (UInt64)&_mh_execute_header 的偏移替代堆栈,用 memcpy 替代 vm_read_overwrite + +### 🐕 [用 SwiftUI 实现一个开源的 App Store](https://juejin.cn/post/7051512478630412301) + +[@JonyFang](https://github.com/JonyFang):App Store 在 iOS 11 之前,App 排行榜一直是衡量开发者 App 活跃度的指标,在 iOS 11 后苹果弱化了榜单功能,改为了二级入口,相对之前榜单查询变得困难。编者通过 SwiftUI 结合开放 API 实现了一个可查看 App 榜单、搜索、信息、发布生效等功能的 App,该项目已开源。入门 SwiftUI 的同学,可以作为参考项目学习 SwiftUI。 + +### 🌟 🐕 [干货 | Dart 并发机制详解](https://mp.weixin.qq.com/s/WCvv7DXzWXNRaMtM-0u7pA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在日常的 Flutter 开发中最常接触到的便是 async-await 异步机制,鲜少有碰到使用 isolate 的情况,本文从 async-await 切入带你详细了解 isolate 的原理,生命周期、多 isolate 之间通信等,小编推荐所有 Flutter 开发同学仔细学习。 + +### 🐕 [在 SwiftUI 下定制手势](https://mp.weixin.qq.com/s/V_8jP3OPJa58eRz442LlQA) + +[@老峰](https://github.com/gesantung): SwiftUI 目前提供了 5 种预置手势,分别为点击、长按、拖拽、缩放和旋转,其本身没有采用对 UIGestureRecognizer(或 NSGestureRecognizer)进行包装的形式,而是重构了自己的手势体系,由于缺乏提供底层数据的 API,严重制约了开发者的深度定制能力,本文通过如下示例讲解了 SwiftUI 下定制手势: +- 轻扫:DragGesture 获取判断移动方向的数据,根据偏移量判断方向 +- 实现一个可以记录时长的按压手势:通过计时器在指定时间间隔后向闭包传递当前按压的持续时间。使用 GestureState 保存点击开始的时间 +- 实现提供触摸位置信息的点击手势:使用 simultaneously 将两种手势联合起来,从 DrageGesture 中获取位置数据,从 TapGesture 中退出 + +### 🐕 [iOS瘦身!一个让50%本地图片消失的方案](https://juejin.cn/post/7053978539523047437) + +[@水水](https://www.xuyanlan.com): 安装包瘦身一直是老生常谈的问题,这篇文章尝试了一个比较有意思的图片管理尝试 - 云端图片资源管理方案。基本思路是把可能未使用的图片通过脚本剔除出项目,在App启动后动态加载那些被剔除图片的zip包。具体实施方案和注意事项文章中都有提到,正在为安装包瘦身烦恼的读者朋友,感兴趣的可以看看~ + +### 🐕 [手机 APP 是不是在偷听我说话?](https://mp.weixin.qq.com/s/FCOrMXeV53YcoKgQ869aYw) +相信很多读者会有一个疑问,手机是不是在偷听我说话?可能今天刚刚跟同事说了买什么东西,结果一打开某个 app,第一页就正好显示了刚说的东西,这看起来很可怕。最近一期“猿桌派”节目,几位嘉宾就告诉了我们这个问题的答案,想知道答案的不妨听一听这期界面,除了这个问题,还有很多关于数据打点等的干活哦。 + +## 摸鱼周报 + +[@摸鱼周报 #42](https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU2MDQzMjM3Ng==&scene=124#wechat_redirect):第四十二期摸鱼周报来啦,一起来看下本期概要: + +* 话题:2022年1月31号之后提交的应用需提供账号删除功能。 +* Tips:openssh 8.8 默认禁用 ssh-rsa 加密算法导致 git 验证失效。 +* 面试模块:如何治理 OOM。 +* 优秀博客:一些优秀开发者的年终总结。 +* 学习资料:程序员考公指南;Vim 从入门到精通(中文)。 +* 开发工具:摸鱼单词,专注于利用碎片时间学习记忆英语单词。 + +## 代码 + +### [XMachOViewer](https://github.com/horsicq/XMachOViewer) + +[@Damien](https://github.com/ZengyiMa):XMachOViewer 是支持 Windows、Linux 和 MacOS 的 MachO 文件查看器和编辑器。它具备以下能力: + +* 启发式扫描 +* 字符串查看器 +* 十六进制查看器 +* 汇编查看器( x86/64, ARM, PPC, m68k) +* 熵值查看器 +* 哈希查看器 +* 密码搜索 +* 名称符号解析 + + +### [PAG](https://mp.weixin.qq.com/s/FncvW2ObIJGafk4X7EAZ-A) +[@莲叔](http://github.com/aaaron7):PAG 是近期技术社区比较热门的话题。PAG 是腾讯出品的一款特效 SDK,能够直接将设计师在 AE 设计的特效转换后直接在手机端展示,应用场景复杂的可以延伸至视频编辑的各种转场、贴纸特效,简单的也可以作为 Lottie 的替换,来实现端内一些 UI 动画效果。腾讯开放这款 SDK 的使用已经有一段时间,近期正式宣布了开源。开源意味着接入的成本与风险大大降低,对于业务有了更大的可控性,同时能享受到 PAG 的各种性能优化。如果你的业务有相关的场景,不妨可以了解一下。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#191-2022.02.14.md b/Reports/2022/#191-2022.02.14.md new file mode 100644 index 000000000..a600f47e5 --- /dev/null +++ b/Reports/2022/#191-2022.02.14.md @@ -0,0 +1,159 @@ +# 老司机 iOS 周报 #191 | 2022-02-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [非公开 app 分发](https://developer.apple.com/cn/support/unlisted-app-distribution/) + +AppStore 现在已经支持将不适合公开分发的 app 以非公开方式在 App Store 上发布,使其仅可通过直接链接发现。非公开 app 不会出现在任何 App Store 类别、推荐、排行榜、搜索结果或其他列表中。但可以通过 Apple 商务管理和 Apple 校园教务管理访问。面向特定组织、特别活动或调查研究的 app,或者用作员工资源或销售工具的 app,都非常适合进行非公开分发。 + +### [Apple Ads 现已支持自定产品页](https://developer.apple.com/cn/news/?id=ay7673lx) + +![image](https://user-images.githubusercontent.com/11873526/153762704-e740d339-e78b-4f71-bb3e-9dafb4b454aa.png) + +借助自定产品页功能,您可以创建多达 35 个额外的 App Store 产品页版本,以展示您 app 的不同功能、内容或促销活动。现在,自定产品页更与 Apple Ads 无缝集成,助您轻松地在 App Store 上针对不同受众群量身打造更好的广告版本。 + +##  Developer - 设计开发加速器 + +### [探索 A15 芯片的 Metal 高级功能](https://developer.apple.com/cn/accelerator/) + +2022 年 2 月 15 日(报名截止 2022 年 2 月 14 日) + +通过本次演讲您将了解如何使用 Metal 和 A15 芯片提升 app 和游戏的性能。我们将介绍 Apple GPU Family 8 的最新 Metal 功能:如何运用低损压缩节省内存,通过稀疏深度和模板纹理深入研究复杂的阴影映射技术,以及借助 SIMD 混洗和填充指令更快地处理图像。 + +### [在您的 App 中构建隐私保护](https://developer.apple.com/cn/accelerator/) + +2022 年 2 月 17 日 (报名截止 2022 年 2 月 17 日) + +Apple 认为隐私是一项基本人权。我们将会带大家了解我们的四项核心隐私原则,以及您如何运用这些原则实现 app 特性和提升用户体验。探索您该如何在 app 中实现数据最小化、本机处理、透明度和控制权以及安全保护措施。 + +![2022 2 event qrcode footer](https://user-images.githubusercontent.com/11873526/153765863-59bb7dc3-b714-4374-83d5-9f2b2fda8774.jpeg) + +## 新手推荐 + +### 🐎 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/) + +[@享耳先森](https://github.com/iblacksun):`Protocol` 是 `Swift` 中非常重要的基石,可以实现代码复用。本文详细介绍了利用 `Protocol` 的 `Extension` 及 `Conform` 特性实现代码复用与隔离。 + +### 🐎 [Swift 演进之路](https://ming1016.github.io/2022/02/10/swift-evolutionary-path/) + +[@老峰](https://github.com/gesantung):本篇主要梳理了 Swift 1.0 ~ Swift 5.5 演进过程中各版本新增的特性,Codable、dynamicCallable、SPM,Async await,能够更加全面和详细了解 Swift 语言的发展,文章中提到的 Swift 各版本的语法示例代码,及本文内容都可以在 Swift 小册子里对应栏目里找到,Swift 初学者推荐阅读。 + +### 🐎 [Swift 子数组提取性能优化分析](https://mp.weixin.qq.com/s/5oZkKX03C4DBUcN16f9u3w) + +[@xiaofei86](https://github.com/xiaofei86):本文通过对 for 和 while 的对比,逐个赋值与 memcpy 的对比,以及不同编译选项 Optimization Level 的对比,得出在极限情况下提取 Swift 子数组的最佳性能方案。阅读原文了解各种方案选型的取舍。 + +## 文章 + +### 🌟 🐕 [如何监控 iOS 的启动耗时](https://ai-chan.top/code/launch-monitor/#hook-%E5%8D%87%E7%BA%A7%E6%96%B9%E6%A1%88) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文通过 IPC 方案监控用户的启动耗时,方案与[抖音通过 applicationDidBecomeActive:](https://mp.weixin.qq.com/s?__biz=MzI1MzYzMjE0MQ==&mid=2247487757&idx=1&sn=a52c11f6a6f217bd0d3283de9b00c8bc&chksm=e9d0daefdea753f954cfcb15d5d0f90302a9f45ba06968377644ffe9e5757a69c5b0132d2c8b&scene=178&cur_album_id=1568330323321470981#rd)有些不同,理论上更接近真实用户体验。技术方案为通过 hook BSXPCServiceConnectionMessageReply 的 @selector(send) 实现。 + +本文主要内容如下: +- 介绍 iOS 的渲染机制 Render Loop +- 分析 Render Loop 中的 Commit 阶段 +- 尝试 hook 系统 api 实现,初次的目标函数由于调用是由 b 直接跳转而失效,最终通过 hook send 方法得以实现 + +### 🌟 🐕 [超全回顾 | 5位抖音工程师揭秘抖音iOS基础技术(附PPT和回放视频)](https://mp.weixin.qq.com/s/dFkGjCgZeXbYxsu3F40L-Q) + +[@J_Knight_](https://github.com/knightsj):本文整理了在今年1月22日下午举办的第三期字节跳动技术沙龙《抖音 iOS 基础技术大揭秘》的5个主题内容,分别是: +1. 《大型 App 开发架构演进及挑战》 +2. 《抖音 iOS 自动化服务:容器化和规模化探索》 +3. 《超级 App 构建效能提升 40%!JOJO,字节自研 iOS 构建系统》 +4. 《抖音 iOS 体验优化:流畅性优化探索》 +5. 《抖音 iOS 稳定性优化与探索》 + +对这些主题感兴趣的读者可以按需阅读,而且文章底部也有获取 PPT 和回放视频的方法 + +### 🌟 🐕 [音视频基础概念合集:148 个问题带你快速上车音视频](https://mp.weixin.qq.com/s/X1idBFp7T5zhnqPmYSbQDw) + +[@JonyFang](https://github.com/JonyFang):音视频是一个有一定技术门槛的垂直领域,对于刚开始接触音视频开发的同学,最头疼的问题应该是音视频纷繁庞杂的概念。本文通过 148 个问题带你快速了解音视频基础概念,对音视频开发感兴趣的 iOS 开发同学也许有用。 + +### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/) + +[@Smallfly](https://github.com/iostalks):[WWDC NOTES](https://www.wwdcnotes.com/) 涵盖近十年 WWDC 视频的观看笔记,数量达上百篇,是一个开源社区驱动的网站。 + +推荐结合老司机周报出品的 [WWDC 内参](https://xiaozhuanlan.com/wwdc21)阅读。 + +### 🐕 [WebAssembly 2021 年回顾与 2022 年展望](https://mp.weixin.qq.com/s/aKNfdQIMC_uJ6Fx7SytdBA) + +[@邦Ben](https://weibo.com/linwenbang):该文对 WebAssembly 2021 年的发展做了归纳总结,以及对 2022 年的发展做了一些的预测。很多人可能对 WebAssembly 比较陌生,WebAssembly(缩写为 wasm)是一种使用非 JavaScript 代码,并使其在浏览器中运行的方法。这些代码可以是 C、C++ 或 Rust 等。它们会被编译进你的浏览器,在你的 CPU 上以接近原生的速度运行。目前还在发展阶段中,对 web 或者做跨端开发的同学可以多关注一下,未来没准 WebAssembly 的使用场景会更加宽泛。 + +参考链接: +[WebAssembly 开发者引导](https://www.wasm.com.cn/getting-started/developers-guide/) +[几张图让你看懂WebAssembly](https://www.jianshu.com/p/bff8aa23fe4d) + +### 🐢 [深入剖析 iOS 编译 Clang / LLVM](https://xiaozhuanlan.com/topic/4916328705) + +[@Damien](https://github.com/ZengyiMa):本文深入且细致的介绍了 Clang / LLVM 编译器在构建一个 iOS 应用中各个流程所做的事情以及实现,从编译器的视角出发来阐述了编译过程的方方面面。对底层感兴趣的同学不妨一读。 + +### 🐎[Swift 汇编(一)Protocol Witness Table 初探](https://mp.weixin.qq.com/s/dvWVnU7ZWiSIvQZBhWXnSw) + +[@kemchenj](https://kemchenj.github.io/):这篇文章从汇编的角度去解析 Swift 里通过 Protocol Witness Table 派发函数的原理,感兴趣的同学可以看一看。 + +## WWDC 内参 + +### [为 Swift 和 SwiftUI 带来 Core Data 并发](https://mp.weixin.qq.com/s/ELsrzsUtMv-rdXyPAN3ERA) + +@SZ: 今年 Core Data 上带来了大量的功能增强,其中包括使用了 Swift 并发的新 API。 这些变化改善了使用 Core Data 进行 Swift 和 Swift UI 开发的体验,简化了异步数据操作的程序,因此我们推荐大家学习并逐渐开始使用这些新的 API。 + +### [App Clip 新特性](https://mp.weixin.qq.com/s/q8eptavjMvp48oppJ8F3cA) + +@昊泽: App Clip 是 WWCD20 的一大亮点,它提供了一种“即时使用”的方式,基于苹果提供的各种唤醒方式,让用户在特定场景下很方便地体验 App 内的核心功能。 + +现在一年过去了,世界各地的开发者开发出了各种优秀的 App Clip。同时 Apple 提供了一种全新的 App Clip Card 的展示方式,也一并完善和优化了本地体验,并提供了命令行工具来帮助开发者们生成轻应用码。 +让我们一起来看看吧。 + +### [再谈 watchOS 的数据传输](https://mp.weixin.qq.com/s/2DyDCknWzbLoFrVhyqaCdw) + +@Chars: 介绍 iCloud、Keychain、Watch Connectivity、Core Data 等这几种 Watch 支持的数据传输技术,简单说明它们的技术特点并进行优缺点比较。 + +### [watchOS 8 中的新特性](https://mp.weixin.qq.com/s/VppEWHOZO4nsOJU5oanIAg) + +@kk: 第一段介绍了 Watch OS 8 中的很多新功能,包括 App 支持常亮显示,健康数据后台刷新等。第二段是代码编程环节,带领读者通过 Swift UI 构建了一个简单训练类应用。 + +## 代码 + +### [Cokile/TweaKit](https://github.com/Cokile/TweaKit) + +[@JonyFang](https://github.com/JonyFang):一个可替代 [SwiftTweaks](https://github.com/Khan/SwiftTweaks) 的轮子: + +1. 使用 Property Wrapper 定义 tweak; +2. 原生支持 tweak 更多类型的值; +3. 精心设计的 UI; +4. 支持模糊搜索; +5. 支持 json 数据的导入导出; + +## 摸鱼周报 + +[@摸鱼周报 2021年度汇总](https://mp.weixin.qq.com/s/KPCx5jq9vn46MKziBUP0yQ):不知不觉摸鱼周报已经发展满一年了,回顾一下我们已经发布了非常多的内容。很多东西大家可能看完就忘了,但技术内容不比新闻,它基本不存在时效性,所以即使过去了一段时间,那些内容仍然是有价值,有生命力的。 + +我将各期内容按模块分类进行了整理,分为学习资料、开发工具、面试题,优秀博客,开发概念五个模块,然后整理成一个 PDF。PDF 可以点击链接外跳,这一点会比公众号阅读体验好很多。全部汇总完毕,字数将近 96000 字,共有 272 页,还是满满当当的。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#192-2022.02.21.md b/Reports/2022/#192-2022.02.21.md new file mode 100644 index 000000000..6e3090c16 --- /dev/null +++ b/Reports/2022/#192-2022.02.21.md @@ -0,0 +1,176 @@ +# 老司机 iOS 周报 #192 | 2022-02-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 2.10 现已发布](https://mp.weixin.qq.com/s/FgMu6-O_wMkwxp2yxiW2Ew) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 2.10 已经发布,2022 年的第一个 Stable 版本,按照惯例每个季度只会发布一个 Stable 版本,所以每一个 Stable 版本都是成吨的优化和性能改进: +- Flutter 构建 Windows 桌面应用 Stable +- 引擎的性能改进 + - 绘制脏区管理 + - 更快的类型流分析实现 +- 平台侧更新 + - iOS 平台键盘动画优化 + - iOS 9.3.6 的⽀持进入尾声,计划在 Q3 放弃对 iOS 9 和 10 的支持 + - Android 版本支持配置更新 + - Web 文本框滚动 bugfix +- Material 3 +- 开发工具更新 + - DevTools 命令行改进以及调试窗口对大型列表展示优化 + - VS Code 着色器增强( Color 类可弹出着色面板) + +### 🌟 🐢 [Apple 开源 dyld4](https://github.com/apple-oss-distributions/dyld/blob/main/doc/dyld4.md) + +[@Leo](https://github.com/leomobiledeveloper): 近期 Apple 开源了 dyld4 的源码,不同于以往,这次在开源的同时还附带了相对完善的文档,所以对开发者阅读体验更加友好,不用从零开始自己梳理逻辑了。dyld4 保留了相同的 mach-o 解析器,引入了 JustInTime 的加载器来优化 dyld3 闭包失效时候需要重建闭包的性能问题,推荐对底层原理感兴趣的同学阅读。 + + +## 文章 + + +### 🌟 🐕 [FFmpeg 工具:客户端音视频开发的必备工具](https://mp.weixin.qq.com/s/Rl7fxOP-YH37mQEvGxhfUA) + +[@JonyFang](https://github.com/JonyFang):FFmpeg 是从事音视频开发最常用的工具和三方库之一,我们可以用它来进行多种格式音频和视频的录制、转换、流处理功能。对对音视频感兴趣的 iOS 开发同学来说,FFmpeg 会是必不可少的工具。本文主要是对 FFmpeg 的常用功能做了详细的介绍。 + +本文内容框架: +- ffmpeg 常用命令介绍; +- ffplay 常用命令介绍; +- ffprobe 常用命令介绍; + +### 🌟 🐕 [可视化音视频分析工具:音视频原始数据、编码、封装分析好用工具集锦](https://mp.weixin.qq.com/s/jCYih3qgEIUctuWxn0aTGQ) + +[@JonyFang](https://github.com/JonyFang):在音视频开发中,FFmpeg 是必不可少的工具之一,但 FFmpeg 主要是命令行形式。为了方便、快捷、直观的分析音视频数据,最好能有一些可视化的分析工具来协助开发,本文主要介绍了一些常见的可视化音视频分析工具。 + +本文内容框架: +- 音画原始数据分析工具介绍; +- 编码数据分析工具介绍; +- 封装格式分析工具介绍; + +### 🐢 [阿里卖家 Flutter for Web 工程实践](https://mp.weixin.qq.com/s/pai_9kJuAdD0RoZOdemL9w) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文详细介绍了 FFW(Flutter for Web) 落地的全过程,从选择分支版本、迁移代码、发布构建、产物精简、兼容性踩坑 等多个方面全面介绍。最终能够取得不错的业务收益,一路艰辛,欢迎大家阅读。 + +插外说一句,选型还是要谨慎,toB 产品还好,toC 低端机用户较多且弱网的情况下,一个较大的 js 的资源包加载就足以影响用户体验了,期待团队的后续优化方案。本文的具体目录如下: + +- 工程基础:Flutter 版本选择、Dart 代码复用、平台相关插件 +- 发布体系:工程构建(选择 HTML 渲染)、产物精简和处理、页面发布 +- 能力支持:页面路由和地址、JS 调用、打点监控 +- 优化和兼容:骨架图避免白屏、JS 资源拆包、兼容问题解决 + +### [hacker-laws: 软件开发人员常用定律](https://github.com/nusr/hacker-laws-zh) +[@莲叔](http://github.com/aaaron7):在软件开发的过程中,有很多前人的经验和努力凝结而成的定律,比如摩尔定律,破船效应等等。这些原则总能够在项目开发过程中举棋不定的时刻来指导和帮助我们做出决定。这篇文章可以说是把软件开发中常见的定律、原则和模式做了一个汇总,非常有参考意义,并且每一个原则都给出了延伸阅读的资料,来帮你了解原则诞生的背景与故事,兼具了趣味性。总的来说,是非常不错的周末读物。 + +### 🐎 [Xcode 常见 CLI 工具](https://mp.weixin.qq.com/s/jF6mTsxC2xtn8Xp1Mn72Zw) + +[@Smallfly](https://github.com/iostalks):在日常开发中,或多或少都会用到 Xcode 内置的一些命令行工具(CLI),但是大部分小伙伴可能只是会用到一部分具体的命令。 + +本文较全面的介绍了 Xcode 内置的 20 种 CLI,主要分为六类: +- 前置工具 +- 符号表相关 +- 构建相关 +- 工具链相关 +- 工具相关 +- Mach-O 操作相关 + +### 🐎 [Unobtrusive runtime warnings for libraries](https://www.pointfree.co/blog/posts/70-unobtrusive-runtime-warnings-for-libraries) + +[@老峰](https://github.com/gesantung):写代码的过程中,API 调用的一部分错误是无法通过类型检查处理的,但直接 fatalError 也不好,在业务层使用 #if DEBUG 进行检查也很容易错漏。Point-Free 就在这篇文章里就为我们介绍了更好的处理方式,通过代码进入断点,亦或者是通过 Xcode 抛出 Runtime Warning,给上层用户更好的提示,并且将这些逻辑封装起来,感兴趣的同学可以尝试。 + +### 🐕 [iOS自动化测试框架Kiwi的使用介绍及原理分析 - 掘金](https://juejin.cn/post/7060780751700099080) + +[@Barney](https://github.com/BarneyZhaoooo):本文较为深入的分析了Kiwi的功能、实现原理,以及一些比较容易被忽略的机制。它有语义清晰,实现方式优雅等优点,用它写出来的测试代码会有很好的可读性。文章同时也给出示例,从实际场景分析其原理。 + +- **Spec** +- **Mock & Stub** +- **Expectation, Verifier and Matcher** + +### 🐕 [高级 SwiftUI 动画 — Part 1:Paths](https://mp.weixin.qq.com/s/5KinQfNtcovf_451UGwLQQ) + +[@水水](https://www.xuyanlan.com): 在本文中,结合原理和例子深入的探讨了一些创建 SwiftUI 动画的高级技术。 + +- Animatable +- animatableData +- GeometryEffect +- AnimatableModifier + +这些都是被官方文档完全忽略的主题,在 SwiftUI 的帖子和文章中也几乎没有提及。本文(Part 1)中介绍了 Animatable 和 animatableData。后续的 Part 2中将介绍 GeometryEffect , Part 3中将介绍 AnimatableModifier。 + +### 🐕 [“一把梭:REST API 全用 POST”](https://coolshell.cn/articles/22173.html) + +[@四娘](https://kemchenj.github.io/):大家在工作中,可能遇到过各种各样风格的 API 定义,那么到底什么样的 API 定义才是合理的?本文从 v2ex 的一个问题开始,探讨为什么 HTTP 需要不同的动词,POST 是否安全,对于其它上下游基础架构功能的构建会产生什么影响等等的问题。另外留言区也有一些针对实际业务场景的提问和回答,推荐大家阅读。 + +### 🐢 [LLVM中文网](https://llvm.liuxfe.com/docs/) + +[@红纸](https://github.com/nianran):这是一个 LLVM 学习站点,少有的中文版本 LLVM 文档网站。站内含有 LLVM 使用指南、编程文档、子系统文档、Pass 编写等多个主题内容。对底层感兴趣的同学不妨看一看。 + +## 代码 + +### 🌟 [百度网盘开源依赖注入框架 CarbonGraph](https://github.com/baidu/CarbonGraph) + +[@xiaofei86](https://github.com/xiaofei86):百度网盘开源依赖注入框架 CarbonGraph,框架使用 Swift 编写同时兼容 ObjC,提供完整的依赖注入能力(构造器注入、属性注入、方法注入、工厂注入)。你可以将类之间的依赖关系交给 IOC 容器来构建,使用框架定义的 DSL 能够方便地进行配置。 +构建更有利于测试和替换的松散耦合关系,可以实现不同业务对中台服务的个性化配置,也可以仅仅用来解决组件化中模块间直接依赖的问题。简单的使用示例如下所示,阅读原文了解更多信息。 + +```swift +let context = ObjectContext() +let definitionBuilder = Definition("filevc") + .protocol(UIViewController.self) + .object(FileViewController()) +context.register(builder: definitionBuilder) +context[UIViewController.self, name: "filevc"] +``` + +```swift +let context = ObjectContext() +let definitionBuilder = Definition() + .object(FileManager() as FileManagerProtocol) +context.register(builder: definitionBuilder) +context[FileManagerProtocol.self] +``` + +## 摸鱼周报 + +[@摸鱼周报 #43](https://mp.weixin.qq.com/s/Ktk5wCMPZQ5E-UASwHD7uw):第四十三期摸鱼周报来了,一起来看下本期概要吧: + +* 话题:dyld4 开源了 +* Tips:Fix iOS12 libswift_Concurrency.dylib crash bug +* 面试模块:Synchronized 源码解读 +* 优秀博客:Swift Protocol 进阶 +* 学习资料:南大软件分析课程,iOS 开发学习图谱 +* 开发工具:贝尔实验室开发的有向图/无向图自动布局应用,支持 dot 脚本绘制结构图,流程图等。 + +本期还有一个人物访谈:[人物访谈 | 东坡肘子:健康&开发](https://mp.weixin.qq.com/s/SO5UN1JGsjnQG5zyQMDRew),肘子是一位专注于 Swift 领域优秀博主。之前的一段时间经历过一场大病,本期访谈一方面聊一下他的独立开发和博主日常,另一方面则会聊些健康相关话题,希望大家能够重视自己身体发出的各类异常信号,任何阶段都应以身体为重。 + + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#193-2022.02.28.md b/Reports/2022/#193-2022.02.28.md new file mode 100644 index 000000000..c9091e92d --- /dev/null +++ b/Reports/2022/#193-2022.02.28.md @@ -0,0 +1,104 @@ +# 老司机 iOS 周报 #193 | 2022-02-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [【StoreKit2 JWS 签名验证】Code-Level Support 下的 X.509 证书链验证之旅](https://juejin.cn/post/7039622474274701348#heading-14) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文提供了通过 PHP 实现服务端校验 JWS 票据真实性的具体实现代码,并附上了与苹果 PKI 团队的邮件交流记录,也很有意思: ~~beg you~~ 以及加上代码注释以明确问题的理解一致等。[苹果根证书下载地址](https://www.apple.com/certificateauthority/)。 + +### 🐎 [iOS 逆向工具:逆向做的好,码农下班早丨音视频工具](https://mp.weixin.qq.com/s/QhVyUzyZN_h1qjEZhO9jYQ) + +[@Barney](https://github.com/BarneyZhaoooo):App 逆向工程是做竞品分析的常用方法,本文对 iOS 如何逆向做了简单的介绍。 + +1. 非越狱 App 调试 + - 环境配置 + - 安装 MonkeyDev + - 使用 MonkeyApp 调试 App + - 导出调试 App 的沙盒文件 +2. 越狱 +3. 砸壳 + +### 🌟 🐕 [iOS 音频采集 Demo:采集音频数据并存储为 PCM 文件](https://mp.weixin.qq.com/s/FDR_5cMfAJQgZhSvjgeWYA) + +[@JonyFang](https://github.com/JonyFang):iOS/Android 端开发同学如果想开始学习音视频开发,最丝滑的方式是对[音视频基础概念知识](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MTkxOTQyMQ==&action=getalbum&album_id=2140155659944787969&scene=21#wechat_redirect)有一定了解后,再借助本地平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助[音视频工具](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MTkxOTQyMQ==&action=getalbum&album_id=2216997905264082945#wechat_redirect)来分析和理解对应的音视频数据。 + +本篇是「音视频工程示例」的第一篇:iOS 音频采集 Demo。这个 Demo 里包含以下内容: + +1. 实现一个音频采集模块; +2. 实现音频采集逻辑并将采集的音频存储为 PCM 数据; +3. 详细的代码注释,有助理解代码逻辑和原理。 + +### 🌟 🐕 [iOS微信全文搜索技术优化](https://mp.weixin.qq.com/s/Ph0jykLr5CMF-xFgoJw5UQ) + +[@kemchenj](https://kemchenj.github.io/):这篇文章讲述了微信团队 2021 年优化 iOS 客户端搜索体验的过程,从技术选型开始,到方案落地以及最后的性能调优,非常具有学习价值,强烈推荐有类似需求的同学阅读。 + +### 🐎 [cocoapods-downloader 设计概要](https://mp.weixin.qq.com/s/J10EbVTAb_u_yDCThxFJYg) + +CocoaPods 是我们非常熟悉的工具了,本文就介绍了 cocoapods-downloader 的代码设计,并在文末给出了工厂类对具体子类解耦的一个优化方案。 + +### 🐕 [高级 SwiftUI 动画 — Part 2:GeometryEffect](https://mp.weixin.qq.com/s/rE_HILLt-uxzScS7wXh5jw) + +[@AidenRao](https://weibo.com/AidenRao):在 [本系列的第一部分](http://mp.weixin.qq.com/s?__biz=MzAxNzgzNTgwMw==&mid=2247487817&idx=1&sn=2dc07e2a4a58e4b0ba02b05ea5952734&chksm=9bde233daca9aa2b8312a91b61e259ba17f88be9e7863e7a159262bdd36825c9479baeba471f&scene=21#wechat_redirect) 介绍了 Animatable 协议,以及我们如何使用它来为路径制作动画。 + +本系列的第二部分,介绍一个新的工具 GeometryEffect,用同样的协议对变换矩阵进行动画处理。 + +第三部分介绍强大的 AnimatableModifier:[高级 SwiftUI 动画 — Part 3:AnimatableModifier](https://mp.weixin.qq.com/s/M6MW3idXS6jZJtl4Mz5DGQ),用于实现复杂动画。 + +文章结合动画 Gif 和源码为案例,深入的探讨了一些创建 SwiftUI 动画的高级技术。 + +## 代码 + +### [Mocha](https://github.com/White-White/mocha) +[@Smallfly](https://github.com/iostalks):Mocha 是一款 Swift 编写的 Mach-O 文件可视化工具,通过解释 Mach-O 文件中每一个字节的含义,帮助使用者理解 Mach-O。 + +### [ScreenShield](https://github.com/RyukieSama/Swifty) +[@Damien](https://github.com/ZengyiMa):ScreenShield 是极其轻量化的截屏防护方案,任何需要被保护的 View 作为子视图放入保护的视图中即可达到截屏时隐藏内容的效果。 + +### [MetalPetal: An image processing framework based on Metal ](https://github.com/MetalPetal/MetalPetal) +[@莲叔](http://github.com/aaaron7):顾名思义,MetalPetal 是一个用 Metal 做图像处理的框架。GPU 的图像处理框架,我们很容易想到的就是大名鼎鼎的 GPUImage,MetalPetal 可以说就是一个 Metal 版的 GPUImage。苹果近几年推广 Metal 的决心相信大家都有目共睹,Metal 不仅能提供了现代化的 API,也提供了碾压 OpenGL 的性能,是 iOS 上做 GPU 计算的不二之选。但如果我们希望用 Metal 来做图像和视频处理的时候,你会发现需要写非常多的代码才能够完成功能,比如图片加载,上传成纹理,创建 gpu 的 pipelie 等等,而视频则更复杂,涉及到解码、调度、丢帧等一系列逻辑。MetalPetal 这类框架就是为了这个这样的问题而生,让你通过简单的函数调用就完成 GPU 的计算。大幅提升开发效率。 + +## 摸鱼周报 + +[@摸鱼周报 #44](https://mp.weixin.qq.com/s/q__-veuaUZAK6xGQFxzsEg):第四十四期摸鱼周报来啦,一起来看下本期概要: + +* 话题:Apple 将推出 Tap to Pay 功能 +* Tips:解决 iOS 15 上 APP 莫名其妙地退出登录 +* 面试模块:Dealloc 使用注意事项及解析 +* 优秀博客:ARM64 汇编入门及应用 +* 学习资料:Github: How to Cook +* 开发工具:文件搜索应用:EasyFind + +## 赞助者 + +虚位以待.. + +**非常感谢以上赞助者的支持,如果你也有赞助我们的兴趣,欢迎添加微信 iTDriverr 哦~** + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们开通了公众号,每期发布时公众号(LSJCoding)会推送消息,欢迎关注。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#194-2022.03.07.md b/Reports/2022/#194-2022.03.07.md new file mode 100644 index 000000000..2e6459871 --- /dev/null +++ b/Reports/2022/#194-2022.03.07.md @@ -0,0 +1,139 @@ +# 老司机 iOS 周报 #194 | 2022-03-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Apple Park 传送门下周开启](https://mp.weixin.qq.com/s/9gsgkR6QW5o37ov4SltPmQ) + +Apple Park 传送门定时开启,北京时间 3 月 9 日凌晨 2 点,欢迎准时来 [Apple 官网](https://www.apple.com.cn/apple-events/)看 Apple 特别活动直播,还有同步中文字幕可以开启。 + +##  Developer - 设计开发加速器 + +### [探索物理空间音频引擎和游戏手柄](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 10 日(报名截止 2022 年 3 月 9 日) + +探索几何感知音频是如何帮助您的 app 构建复杂、互动和沉浸的音频场景。了解 Apple 的空间音频 API —— 物理音频空间化引擎(PHASE),以及它是如何使声音始终与您的体验保持一致 —— 帮助您在开发过程中创建空间声景和场景,而不是等到后期制作。我们还将向您展示虚拟和实体游戏手柄的最新改进,以及如何在您的 app 中支持手柄的分享功能。 + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 文章 + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +第二篇 iOS 音频编码:[采集音频数据并编码存储为 AAC 文件](https://mp.weixin.qq.com/s/q4n1dYTjcJVJolX-Wrdr9Q) + +第三篇 iOS 音频封装:[采集编码音频数据并封装存储为 M4A 文件](https://mp.weixin.qq.com/s/R86qnQAi2njr6k7tFvTF-w) + +[@JonyFang](https://github.com/JonyFang): 本 Demo 包含的主要内容有: + +1. 实现一个音频采集模块 +2. 实现一个音频编码模块 +3. 串联音频采集和编码模块,将采集到的音频数据输入给 AAC 编码模块进行编码和存储 +4. 详尽的代码注释,有助于理解代码逻辑和原理 + +### 🐕 [探索 iOS 编码对包大小的影响](https://mp.weixin.qq.com/s/3Z_IFBpjwDTrB6ynu2bKcQ) + +[@Smallfly](https://github.com/iostalks):本文介绍了比较极致和新颖的包大小优化技术,文章从二进制、汇编指令层面分析 Objective-C 代码对包大小的影响。主要从三个方面进行了讲述: + +1. 二进制层面分析 OC 代码对包大小的影响 +2. 编码上优化包大小的 tips +3. 总结各种 tips 的收益 + +### 🐎 [Publishing DocC Documentation as a Static Website on GitHub Pages](https://www.createwithswift.com/publishing-docc-documention-as-a-static-website-on-github-pages/) + +[@kemchenj](https://kemchenj.github.io/):去年 WWDC 苹果发布了 Swift 专用的文档生成工具 docc,接近一年过去了,社区主流的库都没有采用这个工具,其中一个重要的原因是 docc 不支持生成静态网页,无法部署在类似 github.io 之类的服务上,必须有服务器支持才可以。 + +最近在社区的帮助下,docc 也加入了静态网页生成的功能,预计会跟随 Xcode 13.3 一起发布,这篇文章的作者就分享了如何使用 Xcode CLI 命令调用 docc 生成静态网页,以及最终的效果。 + +另外跟随 Xcode 13.3 发布的 SPM 预计也会加入 [Command Plugin](https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md) 功能,苹果官方也发布了[对应的 docc 插件](https://github.com/apple/swift-docc-plugin),使用这个插件就可以在 CLI 里 `swift package generate-documentation` 一键生成文档。 + +### 🐕 [注解排列组合出启动任务 | ksp - 掘金](https://juejin.cn/post/7070887538444992526?share_token=7592be2d-eb07-4dd9-94ad-185665479303) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍了一种通过注解的排列组合优化启动任务的思路,让开发同学尽可能的对启动流程无感知。并提供了简单易懂的 demo。 + +- Ksp解析注解 +- Task生成结合TaskGroup概念 +- 拆分启动步骤 +- 依赖注入 +- Plugin + +### 🐕[iOS 自动化测试驱动工具探索](https://mp.weixin.qq.com/s/8bq-Y0rrV9Pw93e8IQoUaQ) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):该文介绍了字节 iOS 自动化测试驱动工具 bdc 的探索过程及实现原理。解决了目前 Facebook 方案耗时长性能差,对真机不友好,无法在 Linux 上部署等问题,值得一读。 + +文章主要内容如下: +- 参考 Facebook 的 wda 实现了更高效的 XCTest 工具,在执行速度和稳定性获得大幅提升 +- 通过研究 libimobiledevice 的原理,实现了调用 Xcode 自带工具集的能力 +- 通过将进程名加入 testmanagerd 的白名单实现了在 Linux 上的 docker 化部署 + +### 🐕 [如何在 macOS Monterey 中成功编译 objc4-838 源码](https://juejin.cn/post/7068539803318353928) + +[@Damien](https://github.com/ZengyiMa):你是否想自己编译 Objc4 的源码?那就来看看此篇文章吧。本文会手把手教你如何在 macOS Monterey 中成功编译 objc4-838 源码,并且对编译错误会有详细的修复说明,可以跟着作者一步步在 macOS Monterey 中成功编译。 + +### 🐕 [Combining protocols in Swift](https://www.swiftbysundell.com/articles/combining-protocols-in-swift/) + +[@anotheren](https://github.com/anotheren):Swift 中协议的核心优势之一就是方便我们抹除原始类型,并定义统一接口进行交互。本文展示了几种不同的方法来组合多个协议的功能。编程并没有绝对的标准答案,不同方案都有各自的特点。协议默认实现、协议扩展、范型约束,你更习惯哪一种呢? + +## 代码 + +### 🌟 [Flutter 图片库高燃新登场](https://mp.weixin.qq.com/s/irsf9550JcHrsd5l-V8BbQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 图片处理目前来说相对于原生而言,仍有不少的差距,尤其是在处理缓存方面。本期代码库推荐咸鱼出品的 Flutter 图片处理方案: PowerImage。该方案巧妙地将外接纹理与 FFi 方案组合,以更贴近原生的设计,解决了一系列业务和技术痛点,强烈推荐 👍 + +### [SwiftUIFlux](https://github.com/Dimillian/SwiftUIFlux) + +[@老峰](https://github.com/gesantung):Redux 是 JavaScript 的状态管理框架,SwiftUIFlux 一个非常简单的使用 Combine 为 SwiftUI 实现类 Redux 的状态管理框架,感兴趣的同学可以尝试。 + +### [Satin - A 3D Graphics Framework built on Apple's Metal](https://github.com/Hi-Rez/Satin) + +[@老驴](https://weibo.com/u/6090610445):最近随着元宇宙概念的火爆,3D 相关的技术也受到了大家的关注,有很多同学对 3D 引擎有很浓厚的兴趣,也想探究一下引擎的原理和实现。这个库就是一个 iOS 开发者基于 Metal API 写的一个引擎,作为学习 3D 相关知识来说,是个很好的材料。 + +## 摸鱼周报 + +[@摸鱼周报 #45](https://mp.weixin.qq.com/s/_N98ADlfQCUkxYjmH0SvZw):第四十五期摸鱼周报来了,一起来看下本期概要: + +* 话题:苹果公司宣布暂停在俄销售产品并关闭部分功能 +* Tips:在 SPM 集成 SwiftLint +* 面试模块:Swift 的 weak 是如何实现的? +* 优秀博客:iOS项目中的脚手架/CLI介绍 +* 学习资料:Swift 实现的设计模式 +* 开发工具:nginxedit:Nginx 在线配置工具 + +## 内推 + +### 南京、上海、深圳 - 华泰证券 - 招聘 iOS/Android 高级、资深工程师 + +> 招聘要求和联系方式:https://www.yuque.com/iosalliance/article/cinmb2 + +### 杭州 - 淘宝 - 终端平台技术部 - 招聘 iOS/Android + +> 招聘要求和联系方式:https://www.yuque.com/iosalliance/article/hszgat + +### 其他 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关于我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#195-2022.03.14.md b/Reports/2022/#195-2022.03.14.md new file mode 100644 index 000000000..148f9bd5c --- /dev/null +++ b/Reports/2022/#195-2022.03.14.md @@ -0,0 +1,125 @@ +# 老司机 iOS 周报 #195 | 2022-03-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [T 技术沙龙移动端技术实践(上海场)圆满结束](https://mp.weixin.qq.com/s/gjU6ejMRyG7Cqfr9271qsA) + +2022 年 2 月 26 日,由老司机技术周报与 T 技术沙龙联合主办的移动端技术实践(上海场)在上海圆满落幕。此次技术沙龙邀请到了来自澳洲 REA Group 的 Jake Lin、“开源实验室”博主张涛、前阿里技术专家王宇分别以《MVI 模式在 Jetpack Compose 上的应用》、《基于 C++ 的 Android 真协程设计》以及《自制渲染引擎解决客户端复杂 UI 组件的实现》为主题进行硬核分享与实践探讨。 + +##  Developer - 设计开发加速器 + +### [使用 SwiftUI 打造卓越体验](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 24 日- 25 日(报名截止 2022 年 3 月 23 日) + +欢迎参加为期两天的 SwiftUI 活动!通过本次活动,您将全方位了解 SwiftUI,包括 SwiftUI 的工作原理和控件使用,数据模型和视图的关联,容器布局和高阶渲染,以及使用 SwiftUI 打造多平台 app。此外,我们还邀请到社区内活跃开发者,来分享他们的 SwiftUI 实战经验。加入我们开启 SwiftUI 之旅! + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 新手推荐 + +### 🐎 [What’s new in Swift 5.6?](https://www.hackingwithswift.com/articles/247/whats-new-in-swift-5-6) + +[@Smallfly](https://github.com/iostalks):Swift 5.6 引入了一波新的特性,本文通过示例重点介绍了几个比较有意思的,并预测在不远的将来 Swift 6 可能会带来一系列破坏性 API。 + +### 🐎 [Easier Code Review With Pre-Commit Hooks](https://digitalbunker.dev/supercharging-git-with-pre-commit-hooks/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了 git 的 hooks 能力,并举例介绍了适合在 ``pre-commit`` 阶段做的检查,例如 文件名是否为纯 ASCII 字符,.xib/.storyboard 是否有 ambiguous constraints。但 hooks 文件不在 git 中保存,管理与同步困难,因此推荐了 [pre-commit](https://pre-commit.com/#intro) 这个工具通过 yaml 配置文件来拉取需要的hooks,确保保证 hooks 的同步,工具还预设了[很多选项](https://pre-commit.com/hooks.html)来开启能力,也可以找到别的开发贡献的 hooks。虽然工具名为 ``pre-commit`` 但也支持在各个阶段指定 hooks,功能相对完善。 + +## 文章 + +### 🌟 🐕 [快影 iOS 端如何实现 OOM 率下降 80%+](https://mp.weixin.qq.com/s/IvATFGU_bOph-WX5ZYLYew) + +[@Leo](https://github.com/leomobiledeveloper):OOM 的判定和优化一直是 iOS 上比较棘手的问题,快影充分利用自身架构的特点来采集和还原问题的上下文,实现了一套分析复现线上 OOM 头部问题的工具,基于这套工具 OOM 率大幅下降。文中技术方案的思路新颖,并且结合几个具体的案例做了深入的分析,干货很多,非常推荐阅读~ + +### 🌟 🐕 [iOS 高刷屏监控 + 优化:从理论到实践全面解析](https://mp.weixin.qq.com/s/gMxTq0_nmE-xW7GA3pkBJg) + +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了新引入的 ProMotion 屏幕背后的机制,并且透过表象深入汇编本质,还落地了监控 + 优化的方案,让大盘滑动帧率 P50 从 80 上升至 112 左右,取得了不俗的业务收益。 + +- 帧率介绍 +- 动态刷新率的表现形式 +- 设备差异 +- 解除 DisplayLink 的帧数限制 +- 动态帧率的应用场景 + +### 🐕 [如何让云音乐 iOS 包体积减少 87MB](https://mp.weixin.qq.com/s/GTbhvzMA-W0ANlars7mKog) + +[@水水](https://www.xuyanlan.com):包体积优化是客户端开发的老命题了, 本文记录了云音乐从了解口径、分析、实践的过程。云音乐的包体积主要优化点如下: +- 资源 +资源清理、资源整理、资源压缩、资源云端迁移、资源合并 +- 二进制 +无用代码检测、二三方库下线、动态库依赖裁剪 +- 编译优化 - 参数 +Asset Catalog Compiler Optimization、EXPORTED_SYMBOLS_FILE、Link-Time Optimization、GCC_OPTIMIZATION_LEVEL +- 防劣化 + +此前也有推荐过一些安装包瘦身的文章,一并贴出参考,希望对优化包体积感兴趣的读者可以根据自己的业务选择最适合自身 App 的方案。 + +- [iOS瘦身!一个让50%本地图片消失的方案!](https://juejin.cn/post/7053978539523047437) +- [App thinning checklist](https://oldoldb.com/2019/01/09/App-thinning-checklist/) +- [iOS 优化 - 瘦身](https://mp.weixin.qq.com/s/wDcYvea5dTq0dh0PBwRu4A) +- [On-Demand Resource 资源下发](https://www.xuyanlan.com/2018/12/07/%E8%B5%84%E6%BA%90%E4%B8%8B%E5%8F%91/) + +### 🐕 [让工程师拥有一台“超级”计算机——字节客户端编译加速方案](https://mp.weixin.qq.com/s/0nU5DHX0GnEidoCtlCOaOg) + +[@红纸](https://github.com/nianran):该文介绍了字节在分布式编译、编译缓存上的部分实现原理。文中提到**跨任务缓存**和**索引缓存**的两种实现方案。并介绍了依赖分析的四种技巧,分别从消噪、索引、缓存三个角度进行了优化。同时采用了开源框架 goma 的代码,针对 iOS 项目的特性,优化了编译任务依赖解析。 + +### 🐎 [本地生活端智能架构设计与技术探索](https://mp.weixin.qq.com/s/vrHNhik_ijqs5KE_0YRI1A) + +[@J_Knight_](https://github.com/knightsj):本文介绍了本地生活业务对端智能的应用与探索。首先介绍了端智能的概念,特性以及发展趋势。然后结合本地生活的业务分享了其所应用的端智能技术架构。最后结合了具体的细分业务:用户特征,智能推荐和智能触达介绍了端智能在这些业务的具体应用。在文末也对端智能在本地生活的应用做了展望和期待。 + +### 🐕 [Native Network Monitoring In Swift](https://digitalbunker.dev/native-network-monitoring-in-swift/) + +[@享耳先森](https://github.com/iblacksun):对于 App 内的网络状态监控,大家常用的是 `Reachability` 或 `Alamofire` 内部的 `NetworkReachabilityManager`。本文介绍了基于 iOS 12 后 `Network.framework` 内置的 `NWPathMonitor` 实现的网络状态监控。 + +## WWDC21 内参 + +### [通过断点技巧让调试更高效](https://mp.weixin.qq.com/s/kv2dfh6L06RQghwkQupi1w) + +[@PerTerbin](https://github.com/PerTerbin): 对于开发者来说都是及其重要的调试手段。本文将介绍 Xcode 中断点调试的技巧及 WWDC21 中苹果关于断点提出的新技术,学会这些技巧对于开发者来说都非常有必要,它能使我们的工作更加高效。 + +### [使用 Clang 静态分析器尽早发现 Bug](https://mp.weixin.qq.com/s/oGqTGgciaFIgMIKH96Ccng) + +[@Sean](https://github.com/yangzai360): 本文包括了 [WWDC 2021 Session 10202](https://developer.apple.com/videos/play/wwdc2021/10202/) 中的全部内容,Clang 静态分析器于 2011 年就集成进 Xcode 了,十年多来,它的功能越来越强大。在 Xcode 中简单的一个点击就可以让它来帮助我们找到很多隐晦的 Bug。本文图文并茂地介绍了分析器的使用操作、Xcode 13 中新增的检查项目、在BuildSeting中的可配置参数,以及最后译者补充了静态分析的简介、Clang 静态分析器源码结构。期望通过使用它,让你的工程变得更健壮! + +## 摸鱼周报 + +[@摸鱼周报 #46](https://mp.weixin.qq.com/s/8Wpfk9yxpjwaDXN7iXIcvQ):第四十六期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:苹果春节发布会,地表最强芯片 M1 Ultra +* Tips:如何在SwiftUI中显示二维码;如何将 JSON 字典编码为 JSONEncoder +* 面试模块:iOS 内存管理:Autorelease 细节速记 +* 优秀博客:SwiftUI 进阶技巧 +* 学习资料:KKBOX iOS/Mac OS X 基礎開發教材 +* 开发工具:几款面向 iOS 开发的 UI 调试工具 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#196-2022.03.21.md b/Reports/2022/#196-2022.03.21.md new file mode 100644 index 000000000..1b9cb00b1 --- /dev/null +++ b/Reports/2022/#196-2022.03.21.md @@ -0,0 +1,172 @@ +# 老司机 iOS 周报 #196 | 2022-03-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [4 月 25 日开始,提交到 App Store 的 app 都必须使用 Xcode 13 构建](https://developer.apple.com/cn/news/?id=2t1chhp3) + +从 2022 年 4 月 25 日开始,所有提交到 App Store 的 iOS、iPadOS 和 watchOS app 都必须使用 Xcode 13 构建。Xcode 13 已包含 iOS 15、iPadOS 15 和 watchOS 8 的 SDK。 + +##  Developer - 设计开发加速器 + +### [使用 SwiftUI 打造卓越体验](https://developer.apple.com/cn/accelerator/) + +2022 年 3 月 24 日- 25 日(报名截止 2022 年 3 月 23 日) + +欢迎参加为期两天的 SwiftUI 活动!通过本次活动,您将全方位了解 SwiftUI,包括 SwiftUI 的工作原理和控件使用,数据模型和视图的关联,容器布局和高阶渲染,以及使用 SwiftUI 打造多平台 app。**此外,我们还邀请到社区内活跃开发者,来分享他们的 SwiftUI 实战经验**。加入我们开启 SwiftUI 之旅! + +![2022 2 event qrcode footer 2](https://user-images.githubusercontent.com/11873526/156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f.jpeg) + +## 文章 + +### 🐕 [Tips for getting the most out of DocC](https://rhonabwy.com/2022/02/10/tips-for-getting-the-most-out-of-docc/) + +[@四娘](https://kemchenj.github.io/):文档工具 DocC 发布了已经快要一年,这段时间里加上了 static hosting,C/Objective-C 的支持以及 SPM 插件等功能,依托它来构建内部文档工具是一个不错的选择,也是一个顺便梳理项目内部代码的机会。 + +本文作者提供了一个渐进式接入 DocC 的步骤建议: + +1. 给 class/struct/enum 等类型添加注释文档 +2. 给公开的函数和属性添加注释文档 +3. 添加 documentation catalog 和 overview +4. 给主要的类型和函数分组 +5. 编写一篇大致的介绍文档 +6. 添加常用的代码模版 +7. 给其余的代码分组 + +### 🐎 [Swift进阶](https://juejin.cn/column/7069654800002252808) + +[@老峰](https://github.com/gesantung):作者比较系统的介绍了学习 Swift 的一些知识点,主要包含如下内容: + +- [Swift进阶(一) —— 类与结构体](https://juejin.cn/post/7048633193666183176) +- [Swift进阶(二) —— 方法探究](https://juejin.cn/post/7050873481029746696) +- [Swift进阶(三)—— 属性](https://juejin.cn/post/7062732599835721735) +- [Swift进阶(四)—— 指针](https://juejin.cn/post/7069654422359392292) +- [Swift进阶(五)—— 内存管理](https://juejin.cn/post/7071048325193007134) +- [Swift进阶(六)—— 枚举和可选类型](https://juejin.cn/post/7072287470791966750) + +### 🚧 🐎 [All Thumbs, Why Reach Navigation Should Replace the Navbar in iOS Design](https://medium.com/tall-west/lets-ditch-the-nav-bar-3692cb17cc67) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):一篇偏向交互设计的文章,介绍应该如何做好 Reach Navigation 的设计。随着 iPhone 手机屏幕越来越大,用户手指越来越难够到屏幕的顶部,在 Navbar 上设计功能交互区也显得越发不友好。于是作者提出了 Reach Navigation 的概念,并对三种情况做出了建议: + +- 使用 Tab Bar 的新 APP + - 使用从底部 pop up 的弹窗,并能通过下拉手势 swipe away + - 将常用的操作按钮放置在 Tab Bar 上 + - 在选择如何分配屏幕空间前,思考哪些是核心功能 + - 不要在 Tab Bar 中放置目的地按钮——比如搜索、购物车、新消息。通过别的方式嵌入内容区域或别的途径实现。 + +- 不使用 Tab Bar 的新 APP + - 使用苹果地图一样的抽屉式设计,或者像苹果邮箱一样的 sheet 设计 + - 优先考虑把按钮放在屏幕底部 + +- 修改传统的 APP + - 把最常用的按钮移动至底部 + - 所有页面适配在屏幕边缘的滑动返回 + - 提高用户方便触达区域的利用率 + - 把重要操作从 Navbar 的右侧移走 + +PS:本文是17年的文章了,但即使在现在看来也依旧不过时。一个的近期类似设计就是 iOS15 Safari 将 URL/search/tab bar 也挪到了底部,单手操作的体验获得了较大的提升。开发者也不应拘泥于写代码,懂一些交互的基本原理也是加分项。 + +### 🐎 [iOS代码覆盖率-增量覆盖率自动化实践](https://juejin.cn/post/7049973143007395877) + +[@Damien](https://github.com/ZengyiMa):全量代码覆盖率可以帮助开发者聚焦代码的逻辑缺陷,从而更好地避免线上问题,全量代码覆盖率可以直观的看到整个App的代码的覆盖率情况,但是往往有用的或者被关注的是增量代码覆盖率数据。本文通过探索和学习,研究了基于 Git Diff 能力,结合 Clang 覆盖率信息,最终形成了一套增量覆盖率自动化方案。有兴趣的同学不妨一读。 + +### [iOS番外-搞点音乐玩玩](https://juejin.cn/post/7075638987712364580) + +[@zvving](https://github.com/zvving):疫情波动的日子里,不妨听一首自动播放的钢琴曲([演示看这里](https://www.bilibili.com/video/BV1Yq4y1e7G9/))。 + +作者梳理唱名与 MIDI 值的对应关系,定义贝加尔湖畔曲谱文件,使用 [MIKMIDI](https://github.com/mixedinkey-opensource/MIKMIDI) 加载钢琴音色完成播放。**代码简单,也可以很有趣!** + +### 🐢 [Better performance with canvas in SwiftUI](https://swdevnotes.com/swift/2022/better-performance-with-canvas-in-swiftui/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Canvas 在各个平台都是一个备受争议的技术,在 SwiftUI 中也不例外,本文使用 Shape , Canvas , 静态图片来对比单个实例的创建和多实例滚动试图下的性能差异,综合结果还是 Canvas 胜出 ✨ + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +第四篇 iOS 音频解封装:[从 MP4 中解封装出 AAC](https://mp.weixin.qq.com/s/fCZfIXriTXUPcI4d4te_ew) + +第五篇 iOS 音频解码:[免费获得源码](https://mp.weixin.qq.com/s/7Db81B9i16cLuq0jS42bmg) + +[@JonyFang](https://github.com/JonyFang): 第四篇主要内容: +1. 实现一个音频解封装模块; +2. 实现对 MP4 文件中音频部分的解封装逻辑并将解封装后的编码数据存储为 AAC 文件; + +第五篇主要内容: +1)实现一个音频解封装模块; +2)实现一个音频解码模块; +3)实现对 MP4 文件中音频部分的解封装和解码逻辑,并将解封装、解码后的数据存储为 PCM 文件; + +### 🐕 [Writing testable code when using SwiftUI](https://swiftbysundell.com/articles/writing-testable-code-when-using-swiftui/) + +[@JimQ](https://github.com/waz0820):移动端界面开发不需要写单元测试,貌似已经成为理所当然的事(与界面弱相关的功能模块除外)。来到 SwiftUI 的时代,由于 SwiftUI 诸多开发范式的限制,业务逻辑与 UI 框架交互之间的解难解分比之 UIKit 的时代更有过之。 + +鉴于此,本文探索了如何使 SwiftUI 开发的 相关逻辑充分可测试(Test),主要包括两个部分:将逻辑提取到相应的 ViewModel 中,以及相对独立的逻辑抽取到相应的扩展中。 + +文章最后,作者也坦诚自己从未对 SwiftUI 的视图本身写测试(UITest)。作者专注于提取所有想测试的逻辑,使其从 UI 框架中摆脱出来,将主要精力致力于编写这部分的测试。小编作为一个页面仔也深感认同,这可能是一条更加可行的路线。 + +### 🐢 [iOS15 动态链接 fixup chain 原理详解](https://mp.weixin.qq.com/s/k_RI2in_Q5hwT33KWig34A) + +[@Leo](https://github.com/leomobiledeveloper):Fixup chain 是 Apple 在 iOS15 系统上所应用的一种新的动态链接技术,使用了 fixup chain 动态链接方案生成的 Mach-O 文件具有以下两个优势 + +- 更紧凑的存储信息格式所带来的更小的二进制产物 +- 更好的空间局部性所带来的更快的应用启动时间 + +本文从二进制布局和运行时解析两个角度深入分析了 fixup chain 解决的问题以及实现原理,推荐对底层原理感兴趣的同学阅读~ + +## 代码 + +### [SafeDecoder](https://github.com/GodL/SafeDecoder) + +SafeDecoder支持在Codable解码某个字段失败时设置默认值,并且默认值可配置。 + +> 推荐人:[GodL](https://github.com/GodL) + +## 摸鱼周报 + +[@摸鱼周报 #47](https://mp.weixin.qq.com/s/X6lPQ5qwY1epF6fEUhvCpQ):第四十七期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:苹果多个产品线的更新介绍 +* 面试模块:动态库与静态库的区别 +* 优秀博客:关于该不该换工作以及如何准备面试 +* 见闻:一个新的、偏技术领域的博客推荐模块 +* 学习资料:Rust 数据结构与算法 +* 开发工具:Aria2GUI,一款支持多种协议的轻量级命令行下载工具 + +上周还有一期人物访谈,对话一位全职的 iOS 独立开发者,全职独立开发还是非常有难度的,而且听他说靠独立开发的收入即将赶上工作时期的薪资。感兴趣的小伙伴可以点击这里探寻这位独立开发者的进阶之路:[人物访谈 | 极简时钟作者:道哥](https://mp.weixin.qq.com/s/-dZfT_ChTLESbweXyhP3pg) 。 + +## 内推 + +### [北京、上海、杭州、深圳] 抖音 - iOS 开发 - 研发效能方向 + +我们是负责抖音客户端基础能力研发和新技术探索的团队。我们在工程/业务架构,研发工具,编译系统等方向深耕,支撑业务快速迭代的同时,保证超大规模团队的研发效能和工程质量。在性能/稳定性方面不断探索,努力为全球数亿用户提供最极致的基础体验。 + +更多介绍详见: https://www.yuque.com/iosalliance/article/ozi46h + +### 其他 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#197-2022.03.28.md b/Reports/2022/#197-2022.03.28.md new file mode 100644 index 000000000..4792f5562 --- /dev/null +++ b/Reports/2022/#197-2022.03.28.md @@ -0,0 +1,143 @@ +# 老司机 iOS 周报 #197 | 2022-03-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift bugs are moving to GitHub Issues and we need your help!](https://forums.swift.org/t/swift-bugs-are-moving-to-github-issues-and-we-need-your-help/56125) + +[@J_Knight_](https://github.com/knightsj):Swift 的 issue 管理将要从 JIRA 转移到 Github,计划全部迁移过程在今年的4月28日结束。在这之前,已经在 JIRA 上建立的 issue 会被完全复制到 Github 的 issue 列表中,作为一个新的 issue。以后 JIRA 也不再支持新的 issue 的建立,而且 bugs.swift.org 网址也会重定向到 Github issue 的地址。想了解详细迁移步骤的读者可以了解一下。 + +##  Developer - 设计开发加速器 + +### 🌟 🐕 [在苹果加速器活动做的 SwiftUI 开发分享](https://mp.weixin.qq.com/s/vni4zrbIWqvX7vZ9WuX2xw) + +戴铭老师受 Apple 加速器 SwiftUI 活动的邀请在 3 月 25 日做了一次关于 SwiftUI 的分享,分享内容包括但不限于macOS 如何解决多栏问题、Toolbar、文件夹嵌套结构、文本和代码编辑器、Grid、Vision、SwiftUI 组件和 UIKit 组件对比等内容。 + +## 新手推荐 + +### 🌟 🐕 [Abstract types and methods in Swift](https://www.swiftbysundell.com/articles/abstract-types-and-methods/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了 Swift 中一种实现虚类的方案。单独使用 Class 或者单独使用 Protocol 都会有各自的不足,因此作者选择: + +方法定义在 Protocol 中(包含 associatedtype ),成员变量定义在 Class 中,再使用 typealias 将 Protocol 与 Class 组合成一个类型进行使用。 + +这个方案也会带来一些问题,但也有各自的解决方案,酌情选取即可。 + +- 由于新的类型也包含 associatedtype,因此[无法被直接当类型使用](https://www.swiftbysundell.com/questions/referencing-generic-protocols/),可以使用[类型擦除](https://www.swiftbysundell.com/articles/different-flavors-of-type-erasure-in-swift/)解决。 +- 无法基于新的类型添加 extension。只能在原本的 Class 中添加方法,但有时这个方法又不应该或者不能添加在原本的 Class中。这时则可以在 Protocol 中也重复声明 Class 中对应的变量,而把方法添加在 Protocol 对应的 extension 中。 + +## 文章 + +### 🐕 [内存优化: 纹理压缩技术](https://mp.weixin.qq.com/s/V7sK1WwQ4D3LikK2AHgrZQ) + +[@老驴](https://weibo.com/u/6090610445):元宇宙和 3D 相关技术的火爆也在最近带动了相关话题好文章的出现。淘系技术团队的这篇分享就是阿里团队在小程序中对纹理压缩的一些探索和优化。 GPU 的不断发展让纹理压缩在移动端也获得了广泛的支持,而如果能合理的使用,能够带来体积,内存占用和性能上的提升。 + +### 🐕 [AnyObject, Any, and any: When to use which?](https://www.avanderlee.com/swift/anyobject-any/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.6 在 [SE-355](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `any` 关键词,加上之前已有的 `AnyObject` 和 `Any`(注意是大写)。本文介绍了三个关键词各自的使用场景并着重介绍新引入的 `any` 的作用。 + +### 🐢 [Hummer 引擎优化系列 - 大批干货来袭预警](https://mp.weixin.qq.com/s/esYrzI1N_AsZPjJXZxnSdQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Hummer 是 UC 内核团队定制的 Flutter 引擎,它基于官方 Flutter 引擎进行优化增强。经过近两年的持续优化和增强,Hummer 在各方的表现都足够亮眼,且经过了巨量的验证,接下来 UC 团队将会讲这些优化经验回馈于社区,可谓是干货满满,主要集中在: + +- 性能优化 +- 包体积优化 +- 内存稳定性 +- Dart 语言层优化 +- 业务层功能增强 + +### 🐕 [Flutter 比 React Native 更好吗?](https://mp.weixin.qq.com/s/DozzpgKxvXtgBG1-tYjboQ) + +[@xiaofei86](https://github.com/xiaofei86):本文作者是一家软件开发公司的创始人兼 CTO,同时也是 React Native 的核心成员。在这篇文章里,作者试着尽可能公平地从人力成本,开发者体验,性能,体验,Web 支持,第三方生态,动态更新,以及使用它们的公司等多方面,去讨论 Flutter 和 React Native 的优劣,让大家在项目技术选型时多一点指导权衡思考的素材。 + +### 🐕 [Creating Airbnb’s Page Performance Score | by Andrew Scheuermann | The Airbnb Tech Blog | Medium](https://medium.com/airbnb-engineering/creating-airbnbs-page-performance-score-5f664be0936) + +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍了 Airbnb 构建自己的 PPS (一个 0 - 100分的多维度页面性能评分体系)的思考过程、维度分析、困难探索、落地效果。可以按下面几个步骤品读: + +- Early Performance Measurement Efforts +- Introducing the Page Performance Score +- The Metrics +- Web Metric Weights +- PPS Evolutions +- Weighted Average Score + +### 🐕 [自动拦截 50% crash,字节自研 Fastbot 如何助力今日头条稳定性测试](https://mp.weixin.qq.com/s/WOFf5Pj9zEKhqbRtzR95Gw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Fastbot 是字节自研的智能化测试服务,利用机器学习和强化学习进行遍历测试,在代码覆盖率方面与人工回归有着相当的表现。Fastbot 可以实现操作可视化、场景限定、卡屏检测、无障碍检测等诸多能力。目前 Fastbot 自动化任务已经能较好地发现 App 内的稳定性问题,已经可以帮助字节拦截 50% 左右的异常问题,同时会继续完善 Fastbot 的遍历能力和健全 Fastbot 相关指标建设。 + +## WWDC21 内参 + +### [为你的 App 减少网络延迟](https://mp.weixin.qq.com/s/F6Yfbqio50OyAzCntNEmXg) + +[@lmh](https://github.com/mhlee2913):本文主要介绍了影响网络延迟的原因及如何降低网络延迟,主要是从降低 `RTT` 次数,和降低单次 `RTT` 时间展开讲述。文中涉及了很多传输层协议相关的知识,也会对相关概念进行解释。最后介绍了目前一些技术的应用现状。 + +### [Swift 中的 ARC 机制: 从基础到进阶](https://mp.weixin.qq.com/s/ZJ3gVI-jzDcKpRKa0IMi0A) + +[@刘夏](https://github.com/lldong):文章围绕 Swift 语言中的 ARC(自动引用计数)机制讲述了实践过程中对象生命周期变化可能引发的问题以及如何从语言或代码设计层面去规避这些问题。 + +## 工具 + +### [swift-docc-plugin](https://github.com/apple/swift-docc-plugin) + +[@kemchenj](https://kemchenj.github.io):跟随 Xcode 13.3 发布的 SPM 加入了 [Command Plugin](https://github.com/apple/swift-evolution/blob/main/proposals/0332-swiftpm-command-plugins.md) 功能,苹果官方也发布了[对应的 docc 插件](https://github.com/apple/swift-docc-plugin),只要在 Package.swift 里引入这个 plugin,就可以在 CLI 里用 `swift package generate-documentation` 一键生成文档。: + +```swift +let package = Package( + // name, platforms, products, etc. + dependencies: [ + // other dependencies + .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), + ], + targets: [ + // targets + ] +) +``` + +## 摸鱼周报 + +[@摸鱼周报 #48](https://mp.weixin.qq.com/s/vdUy-BqxWzuPcjYO6fFsJA):第四十八期摸鱼周报来了,完整内容可以点击左侧链接,一起来看下本期摘要: + +* 话题:node-ipc 供应链投毒事件 +* 面试模块:OC 对象弱引用指针标识位 +* 优秀博客:程序员如何自我提升 +* 学习资料:以 Java 为背景的全栈知识体系 +* 开发工具:新一代卡片笔记工具:flomo + +## 内推 + +### [上海] 谷歌 - iOS 开发 - 智能家居 + +谷歌在上海开放了 iOS 岗位,主要与 Google Nest 智能家居相关的 App 开发。 + +更多岗位介绍详见:[Software Engineer, iOS App, Nest Smart Devices](https://careers.google.com/jobs/results/92585557856527046-software-engineer-ios-app-nest-smart-devices/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios) 和 [Lead Software Engineer, iOS App, Google Nest](https://careers.google.com/jobs/results/108031396271792838-lead-software-engineer-ios-app-google-nest/?company=Google&company=YouTube&hl=zh_CN&jld=10&location=Shanghai,%20Shanghai,%20China&q=ios) + +### 其他 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#198-2022.04.11.md b/Reports/2022/#198-2022.04.11.md new file mode 100644 index 000000000..4deaabe67 --- /dev/null +++ b/Reports/2022/#198-2022.04.11.md @@ -0,0 +1,234 @@ +# 老司机 iOS 周报 #198 | 2022-04-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Call to Code](https://developer.apple.com/wwdc22/) + +苹果将在今年 6 月 6 日举办一年一度的 WWDC 全球开发者大会,今年的大会主题是「Call to Code(召唤编码侠)」,依旧采用在线形式举行,会给大家带来各种最新技术的展示。今年,老司机依旧会牵头组织 「WWDC 内参」活动,想参与的可以添加 iTDriverr 了解细节。 + +### [“阅读器”app 分发的更新](https://developer.apple.com/cn/news/?id=grjqafts) + +去年,Apple 宣布了 2022 年初在 App Store 上将进行的更新,该更新将允许“阅读器”app 的开发者在 app 中提供一个指向其网站的链接,以便用户创建或管理帐户。从今天开始,《App Store 审核指南》中的准则 3.1.3(a) 将会更新,阐明阅读器 app 的开发者现在可以申请外部链接的帐户授权。此授权将允许阅读器 app 链接到开发者拥有或维护的网站,以便用户在 app 外创建或管理其帐户。阅读器 app 指的是提供以下一种或多种数字内容类型 — 杂志、报纸、图书、音频、音乐或视频 — 作为其主要功能的 app。 + +##  Developer - 设计开发加速器 + +### [降低 App 的卡顿率](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 12 日(报名截止 4 月 11 日) + +App 性能留给用户的第一印象往往难以改变。本讲座详细讲解导致 app 卡顿的一些反面典型,和避免这些卡顿的最佳实践。讲座重点讨论 Grand Central Dispatch 多线程技术,以便减少卡顿。并指导开发者适时采用异步编程,以便提高性能。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 新手推荐 + +### 🐎 [Introduction to Xcode Frame Debug - A Sherlock Holmes Adventure](https://holyswift.app/introduction-to-xcode-frame-debug-a-sherlock-holmes-adventure) + +[@Smallfly](https://github.com/iostalks):在 iOS 开发过程中经常要和 View 打交道,难免会遇到 View 显示异常的问题。本文从 Xcode Debug View 工具入手,介绍了几种调试 View 不显示的线索,主要包括: + +* 检查 View 是否在父视图上 +* 检查 alpha 属性 +* 检查 hidden 属性 +* 检查 frame 是否超出父视图 + +这几种方式都比较常规。最后还介绍了一个小技巧,设置 `clipsToBounds = true` 的父视图,通过 *Show Clipped Content* 能显示被裁切的子视图。 + +## 文章 + +### 🌟 🐢 [干货 | Flutter在携程复杂业务的高性能之旅](https://mp.weixin.qq.com/s/QgPXNpdU2mlAb6tlcsm_eQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 在渲染性能上一直都是其宣传的亮点,然而即使这样在业务开发中仍然有较多需要注意的地方,本文由携程团队给大家带来的 Flutter 下复杂场景的性能优化,涉及方方面面,干货满满,所有优化项所见所得: + +- UI 线程优化 + - 拆分VieModel降低刷新几率 + - Provider监听数据推荐使用Selector + - 减少在build中做耗时操作,放到Isolate去执行 + - 缓存高层级组件 + - 控制刷新范围、频次 + - setState 刷新颗粒度在最低层 + - const 修饰避免频繁构造 + +- GPU 线程优化 + - 使用RepaintBinary隔离 提别是轮播广告、动画 + - 减少ClipPath的使用,简单圆角采用BoxDecoration实现 + - 避免Opacity,可以通过切图实现。有动画效果的建议用AnimatedOpacity + - 避免使用带换行符的长文本 + +- 图片渲染性能和内存开销治理 + - 图片预加载 + - 资源优化 + - 图片内存优化 + +- 长列表滑动性能优化 + - ListView Item 复用 + - 首页预加载 + - 分页预加载 + - 取消在途网络请求 + +小编强烈推荐 👍 ,同时再次推荐携程团队的[另一个干货: Flutter控件CustomScrollView原理解析及应用实践](https://mp.weixin.qq.com/s/dF5Id3w_To4aXeXDbUnUjQ)给同学们搭配学习 + +### 🐕 [Airbnb’s Page Performance Score on iOS | by Nicholas Miller | The Airbnb Tech Blog | Medium](https://medium.com/airbnb-engineering/airbnbs-page-performance-score-on-ios-36d5f200bc73) + +[@Barney](https://github.com/BarneyZhaoooo):本文是 Airbnb PPS 的第二部分,介绍了 PPS 在 iOS 端的具体实践应用,并配有重点代码思路分析,时间锚点的选取和状态机的丝滑运用让人眼前一亮。 + +- Page System +- PPSStateMachine +- Time +- View Association +- Metric Implementation + +### 🐕 [FormatStyle AttributedString Output](https://ampersandsoftworks.com/posts/formatstyle/style-deep-dives/attributed-strings/) + +[@anotheren](https://github.com/anotheren): AttributedString 是 iOS 15 引入的全新富文本对象,同时也引入了 FormatStyle 协议来抽象格式化的方式。本文提供了大量实例(Playground)来展示如何使用这些内置的 API 来格式化日期、单位、数据等对象。 + +### 🐕 [iOS 15.4 12小时制 时间格式转换崩溃 - 掘金](https://juejin.cn/post/7077493937383948295) + +[@Barney](https://github.com/BarneyZhaoooo) :本文介绍了一个在iOS15.4系统由于时间转换造成的崩溃。时间转换是大家平时开发经常用到的,值得引起注意防患于未然。 + +- 系统解析对比 +- 理论原因定位 + +### 🐕 [Flutter 代码生成 source_gen 使用与原理分析](https://mp.weixin.qq.com/s/lrEzYdbafrqfDVFQl2ebRQ) + +[@邦Ben](https://weibo.com/linwenbang):众所周知,你应该多少会用过 json_serializable 吧,那么就一定知道基本的原理是通过解析声明文件,从而生成相关 json 序列化和反序列化代码。那么当你从事过较多的开发之后,一定会遇到很多重复的代码复制粘贴,例如:路由的编写,或者 channel 的生成,架构代码生成,ImageAsset 代码生成等等。那么你应该会自然地想到,我也可以像 json_serializable 和 pigeon 去做一些提高效率的工具,那这时候可以看下 source_gen,这个库进行了一些封装,让你更方便的定制代码生成的逻辑。 + +参考链接: +[Flutter使用source_gen快速提升开发效率](https://mp.weixin.qq.com/s/kwgI1FsEo5BGE7bRqKM7Mw) + +### 🐢 [Flutter 滑动体验对齐原生 - 滑动曲线篇](https://mp.weixin.qq.com/s/aqXdYYEArhEj6ikqg2oX9g) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍了在 Flutter 的滑动手感拉齐 Native 方向上做出的努力。主要思路分为两步:解决 fling 动画在一次滑动中反复重启;选择更合适的衰减公式。同时介绍了调整滑动曲线的一些常用思路:降低初速度给曲线减速;通过对初始速度叠加衰减值,运用二次函数,在快速滑动时衰减慢,慢速滑动时衰减快。 + +### 🐕 Optimization in Swift + +作者以 filter 为例,带着我们进行一次算法性能优化,包括算法性能的测算,结果的分析以及后续针对性的优化: + +1. [如何测量算法性能](https://trycombine.com/posts/swift-performance-concurrency-1/) +2. [使用 Concurrency 算法](https://trycombine.com/posts/swift-performance-concurrency-2/) +3. [内存预分配](https://trycombine.com/posts/swift-performance-concurrency-3/) +4. [总结](https://trycombine.com/posts/swift-performance-concurrency-4/) + +### 🐕 [Swift 生成原生二维码](https://digitalbunker.dev/native-barcode-qr-code-generation-in-swift/) + +[@AidenRao](https://weibo.com/AidenRao):如果你需要生成一个二维码或者条码,无需去寻找第三方库,直接用 swift 原生代码就可以实现。iOS 自带的 CIFilter 支持二维码、[Aztec 码](https://zh.wikipedia.org/wiki/Aztec%E7%A0%81)、[Code 128](https://en.wikipedia.org/wiki/Code_128) 以及 [PDF417 条码](https://zh.wikipedia.org/wiki/PDF417%E6%9D%A1%E7%A0%81),文章还提供了每一个条码的示例代码作为实现参考。 + +### 🐎 [Weak self, a story about memory management and closure in Swift](https://benoitpasquier.com/weak-self-story-memory-management-closure-swift/) + +[@kemchenj](https://kemchenj.github.io/):在 Swift 里我们经常需要使用 weak 和 unowned 来解决循环引用的问题。 + +只使用一个闭包的时候,引用的逻辑关系很简单明了,但闭包嵌套的时候,即使使用了 weak 也有可能会不小心产生循环引用,这篇文章就针对这种情况进行了仔细的说明,并且提供对应的解决方案。 + +### [Swift.org Website is Now Open Source](https://www.swift.org/blog/website-open-source/) + +Swift.org 网站一直以来为广大开发者提供 Swift 相关的开源库、工具、文章等,现如今,其官方宣布 Swift.org 网站本身也成为了一个开源项目!这为广大 Swift 粉丝提供了一个很好的学习平台,快去看看吧! + +### 🐎 [Consistent Swift style in Xcode with SwiftLint](https://swdevnotes.com/swift/2022/consistent-swift-style-in-xcode-with-swiftlint/) + +[@老峰](https://github.com/gesantung):SwiftLint 是 Realm 推出的一款 Swift 代码规范检查工具,本文较详细的的介绍了 SwiftLint 的使用,包括: +- 将 SwiftLint 与 Xcode 集成 +- SwiftLint 规则 +- 自动修复&手动修复 SwiftLint 违规代码 +- 自定义 SwiftLint 规则 + +### 🐕 [理解 Swift 中的指针](https://mp.weixin.qq.com/s/4O5RZCiR9-kUOHJ5SdE9jg) + +[@AidenRao](https://weibo.com/AidenRao):Swift中的指针分为两类 + +1. typed pointer: 指定数据类型指针,即 UnsafePointer\。 +2. raw pointer: 未指定数据类型的指针(原生指针) ,即 UnsafeRawPointer。 + +每一类又分可变不可变,pointer(单个值) 与 bufferPointer(相同类型集合)。 + +文章通过示例代码,详细介绍了这些指针的使用方式。 + +### 🌟 🐕 [短视频编辑中的AVFoundation框架](https://juejin.cn/post/7077870149239308324) + +[@JonyFang](https://github.com/JonyFang): 本系列文章围绕 iOS 平台上短视频编辑功能中 AVFoundation 扮演的角色展开讨论,本篇主要介绍学习 AVFoundation 框架需要了解的基础模块和相关的数据类型及注意事项。本系列文章分三篇,依次为: + +- [01.框架概述与基础](https://juejin.cn/post/7077870149239308324) +- [02.素材添加与处理](https://juejin.cn/post/7077875029161017380) +- [03.视频编辑与导出](https://juejin.cn/post/7079397452192841735) + +### 🌟 🐕 [音视频工程示例专栏](https://mp.weixin.qq.com/mp/appmsgalbum?) + +- 第六篇 iOS 音频渲染: [从 MP4 中解封装解码出音频并渲染播放](https://mp.weixin.qq.com/s/xrt277Ia1OFP_XtwK1qlQg) +- [iOS 音频处理框架及重点 API 合集](https://mp.weixin.qq.com/s/w_5pZoeV0GdcFppIpuvVcw) + +[@JonyFang](https://github.com/JonyFang): 第六篇 Demo,主要是实现对 MP4 文件中音频部分的解封装和解码逻辑,并将解封装、解码后的数据送给渲染模块播放;最后在前面音频处理 Demo 的基础上,对 iOS 音频处理框架及重点 API 的梳理。 + + +## 工具 + +### [Hot Reloading in Swift](https://merowing.info/2022/04/hot-reloading-in-swift/) + +[@zvving](https://github.com/zvving):Xcode 通过 Previews 提供快速预览 SwiftUI 代码修改的方案,虽几经迭代,稳定性一直被人诟病;而通过 [InjectionIII](https://github.com/johnno1962/InjectionIII) 同样可以达到实时预览(Live Reload)代码修改的效果,但注入代码非常冗余。通过作者提供的 [Inject](https://github.com/krzysztofzablocki/Inject) 可以大幅简化注入代码(依旧需要配合 InjectionIII 工作)。 + +需要经常调试预览 SwiftUI、UIKit 的朋友不要错过,建议先通过 [Example 项目](https://github.com/MarcoEidinger/InjectSwiftUIExample) 上手配置过程。 + + +## 代码 + +### 🌟 🐕 [fatbobman/SwiftUIOverlayContainer](https://github.com/fatbobman/SwiftUIOverlayContainer) + +[@JonyFang](https://github.com/JonyFang): SwiftUI Overlay Container 是一个用于 SwiftUI 的视图容器组件,可定制、高效、便捷的视图管理器。通过文档的配置,即可完成从视图组织、队列处理、转场、动画、交互到显示样式配置等基础工作。 + +## WWDC21 内参 + +### [初见 TextKit 2](https://mp.weixin.qq.com/s/vZ74jNgItabOB-TsaQn6Uw) + +[@Damien](https://github.com/ZengyiMa): 通过本文你将会了解到 TextKit 1 到 TextKit 2 的变化内容,并且可以深入了解 TextKit 2 的内部的工作原理和机制。 + +### [IAP 用户退款与客诉处理优化](https://mp.weixin.qq.com/s/MtytymgkcP3_oAH7JyI1og) + +[@SeaHub](https://github.com/SeaHub): 众所周知,IAP 客诉处理一直是一个"老大难"问题。用户在反馈 IAP 问题时,往往只提供其支付后获得的苹果订单。而由于苹果设计原因,开发者无法根据苹果订单反查出业务订单信息,继而无法较好的处理用户反馈的客诉问题,导致支付用户可能因体验不佳而流失。除此之外,恶意退款也是另外一个 IAP 工程师必经的"老大难"问题,无法有效索回商品,导致造成业务出现坏账的情况比比皆是 + +WWDC 2021,苹果为了优化客诉处理,同时为了打击恶意退款,提供了不少新能力。通过阅读本文,读者可以快速掌握部分 IAP 场景的痛点,以及如何基于新特性优化这部分的痛点 + +### [IAP 后台通信优化与实践](https://mp.weixin.qq.com/s/dWsRKRJsYMRl0GX_36T-kg) + +[@SeaHub](https://github.com/SeaHub): 长期以来,苹果仅为 IAP 提供了 /verifyReceipt 这一个用于校验票据的后台接口。这也导致了该接口被全球众多开发者所依赖,基本上这个接口一旦出现问题,依赖后台票据校验的 App 都会出现因无法校验票据有效性而出现发货延迟问题。令人糟心的是,/verifyReceipt 接口目前表现确实不太稳定,一年总会出现两三次的服务不可用的情况;而日常其请求时耗也极高,业务的 IAP 后台处理时耗严重受该接口影响 + +终于在今年,苹果新增了 Subscription Status API & In-App Purchase History API,同时,也诞生了可自校验的 JWS 形式票据。并且苹果还对备受开发者吐槽的后台通知进行了升级,新增 App Store Server Notification V2。 + +在我看来,类似的举措一方面是为了给 /verifyReceipt 降负,另一方面也是为了丰富 IAP 的场景,给开发者提供更好的服务。通过阅读本文,读者可以快速掌握本次 WWDC21 的新特性,以及能够基于新特性对历史遗留的痛点做相应的优化处理 + +## 摸鱼周报 + +[@摸鱼周报 #49](https://mp.weixin.qq.com/s/6GvVh8_CJmsm1dp-CfIRvw):第四十九期摸鱼周报来了,一起来看下本期概要: + +* 话题:Chrome 100 发布,关于阅读器类的 App 审核指南有所更新 +* 面试模块:Runtime 中的 **StripeMap** 模板类 +* 优秀博客:Swift 5.6 和 Xcode 13.3 的新特性和新功能 +* 学习资料:即时设计是一款可以在线实时协作的专业 UI 设计工具 +* 开发工具:Decode,将 `Xcode Interface Builder` 文件(`Xib` 和 `Storyboard` 文件)转换为 `Swift` 源代码。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#199-2022.04.18.md b/Reports/2022/#199-2022.04.18.md new file mode 100644 index 000000000..86ab1b8e0 --- /dev/null +++ b/Reports/2022/#199-2022.04.18.md @@ -0,0 +1,204 @@ +# 老司机 iOS 周报 #199 | 2022-04-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [“订阅优惠”的工程实践](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 21 日(报名截止 4 月 20 日) + +学习如何通过 StoreKit 技术的接入向您的用户提供自动续期订阅产品的推介促销优惠、促销优惠和优惠代码。允许新用户或现有用户在特定时限内免费获取或以折扣价购买自动续期订阅。 + +### [加快您的测试过程](https://developer.apple.com/cn/accelerator/) + +2022 年 4 月 19 日(报名截止 4 月 18 日) + +探索如何进行自动化测试,进一步有效处理测试结果。改进您的测试套件以加快反馈循环,进而更快地得到修复。了解如何利用 Test Plan 测试计划、xcodebuild 命令行工具及相关 API 来消除永无止境和表现不佳的测试。我们将研究 XCTest 中的测试超时和执行时间余量,检查设备并行化,并详细介绍用于平衡性能和明确故障定位的推荐实践。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 新手推荐 + +### 🐕 [Design Patterns 的实战应用记录](https://medium.com/p/78507a8de6a5) + +[@老驴](https://weibo.com/u/6090610445):2016年的时候最火的文章莫过于一些设计模式类的分享。当时各种 MVP,MVC 等等的讨论火爆整个移动开发圈。只不过这几年,很难再见到有这类的文章了。这篇文章是作者自荐,记录的是作者完成一个对其他第三方库的封装的过程。对于刚接触移动开发的同学,可以再学习一下设计模式和其中的思路。 + +对于大家刚接触这类的同学们,还是想再强调下,天下没有最好的设计模式,只有最适合当前项目的设计模式。千万不要陷入为了模式而模式的陷阱中去,过度设计也不可取。 + +> 推荐人:[zhgchgli0718](https://github.com/zhgchgli0718) + +## 文章 + +### 🌟 🐢 [Lookin 原理及 5 个开发难点](https://mp.weixin.qq.com/s/DL28y2qHkuDv4W_zLUbKcg) + +[@Damonwong](https://github.com/Damonvvong):Lookin 是一款可以查看与修改 iOS App 里的 UI 对象的软件,相信很多人都使用过它,之前一直好奇这款软件的实现原理,软件作者李凯就带了了实现 Lookin 的原理和 5 个开发难点。其主要通过 CS 架构实现 mac app 和 iOS app 之前的通信机制。同时也从做 Lookin 这款软件的过程中,总结了以下几个经验: + +- iOS 程序员如何学习写 macOS 程序? +- 如何在 macOS 和 iOS 之间传输数据? +- 如何正确渲染展开/折叠图像? +- 如何渲染 3D 图像? +- 如何加快刷新速度? + +感兴趣的同学,可以阅读原文查看细节。 + +### 🌟 🐕 [Xcode Cloud: Feedback from leboncoin](https://medium.com/leboncoin-engineering-blog/xcode-cloud-feedback-from-leboncoin-82991326faa0) + +[@Damien](https://github.com/ZengyiMa): Xcode Cloud 是专为 Apple 开发者设计的 Xcode 内置持续集成和交付服务。本文来自 leboncoin iOS 团队在使用 Xcode Cloud 的体验,详细介绍了 Xcode Cloud 的方方面面,也介绍了其中的不足和优势,对 iOS 开发 CICD 相关的感兴趣的同学不妨一读。 + +### 🌟 🐕 [音视频工程示例 AVDemo 7、8、9](https://mp.weixin.qq.com/s/CJAhkk9BmhMOXgD2pl_rjg) + +[@JonyFang](https://github.com/JonyFang): 音视频工程示例 AVDemo 7、8、9 篇: + +- iOS AVDemo 7: [视频采集 Demo](https://mp.weixin.qq.com/s/CJAhkk9BmhMOXgD2pl_rjg),实现视频采集逻辑并将采集的视频图像渲染进行预览,同时支持将数据转换为图片存储到相册; +- iOS AVDemo 8: [视频编码 Demo](https://mp.weixin.qq.com/s/M2l-9_W8heu_NjSYKQLCRA),串联视频采集和编码模块,将采集到的视频数据输入给编码模块进行编码,并存储为文件; +- iOS AVDemo 9: [视频封装 Demo](https://mp.weixin.qq.com/s/W17eLiUeCszNM8Kg-rlmBg),串联视频采集、编码、封装模块,将采集到的视频数据输入给编码模块进行编码,再将编码后的数据输入给 MP4 封装模块封装和存储; + +### 🐢 [得物 App H5 秒开优化实战](https://mp.weixin.qq.com/s/23ZFPK4CaCkinwpZ3SG9Rw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了得物技术是如何将 H5 页面的秒开率从 30% 提高到 75% 的。文章最开始介绍了优化的背景和使用的指标。然后介绍了具体的优化方案,在客户端和 H5 都做了优化: + +客户端优化: +- HTML 预加载 +- HTML 预请求 +- 离线包技术 +- 接口预请求 +- 预建连 & 链接保活 +- 预渲染 + +H5 优化: +- SSR 服务端渲染 +- HTML 预渲染 +- CSS 包大小优化 +- 图片优化 +- 其它优化 + +在介绍方案的同时,也给出了遇到的难点和方案应用后的效果展示,文章最后也介绍了所使用的前端性能监控的方案 + +### 🐢 [Introducing Swift Async Algorithms](https://www.swift.org/blog/swift-async-algorithms/) + +[@莲叔](http://github.com/aaaron7):async/await 操作符相信大家都不陌生,在很多语言中都对起进行了支持,比如 js。async/await 最大的意义在于让我们可以用顺序结构来书写异步代码,更加清晰,避免了callback hell。3月份,Swift 维护小组发布了原型版本的 Swift Async Algorithm Package,其中就包含了 async/await 的实现以及专门用来处理异步系列的算子,比如 Zip/CombineLast/Merge/Chain/Buffer/Debounce/Throttle。这些算子相信大家都不陌生,其实用法和在处理集合类型中使用是没有太大区别的,只是搭配 async/await 来使用就能够并发强大的能量,使用简洁的代码描述复杂的异步逻辑。感兴趣的同学可以持续关注这个 package 的后续进展。 + +### 🐎 [iOS SIGKILL 简单介绍](https://juejin.cn/post/7081995513700024327) + +[@xiaofei86](https://github.com/xiaofei86):当崩溃日志的 Exception Type 为 SIGKILL 时,表示操作系统从上层杀死了我们的进程。本文通过对苹果 [Understanding the Exception Types in a Crash Report](https://developer.apple.com/documentation/xcode/understanding-the-exception-types-in-a-crash-report) 和 [Addressing Watchdog Terminations +](https://developer.apple.com/documentation/xcode/addressing-watchdog-terminations) 文章的翻译整理,介绍了 SIGKILL 不同错误代码的含义,以及如何定位解决这些问题。 + +### 🐎 [Adding Custom Shortcuts To Xcode](https://digitalbunker.dev/toggling-slow-animations-again/) + +[@极速男孩](https://github.com/ztlyyznf001):在 Xcode 把开启模拟器中的Slow Animations 的 Command + T 去掉以后,如果要打开 Slow Animations 就变得十分麻烦。本文教你如何给 Xcode 设置一些自定义的快捷键。 + +### 🐢 [终端新玩法:“零代码”的剧本式引导](https://mp.weixin.qq.com/s/HZDcvHAtIgJfgD2mMGaHzA) + +[@AidenRao](https://weibo.com/AidenRao):互联网行业节奏偏快,App 的更新愈发频繁,如何让用户理解产品功能,完成认知迭代,是业务发展中不可忽视的一环。本文介绍了美团外卖终端团队在用户心智建设领域的探索与实践。从业务现状与剧本式思维的思考出发,终端加管理后台的一站式设计,传统 CV 与深度学习结合,大大简化了剧本式引导的接入门槛。 + +### 🐕 [Xcode13 “消失”的 Info.plist 文件](https://mp.weixin.qq.com/s/mgGjBb9dt714c117xrYGfQ) + +[@Barney](https://github.com/BarneyZhaoooo): 本文介绍了 Xcode13 中 Info.plist 文件的官方配置变化。 + +从 Xcode13 开始,新建的工程不再要求使用配置文件(Info.plist、entitlements)。如果需要修改 Xcode 的配置,请直接在 Xcod e面板 ”target - Info - Custom iOS Target Properties” 和 ”build settings”中设置。 + +- 消失的 Info.plist 文件 +- 如何回到从前的 Info.plist? + +### 🐎 [Flutter 代码生成技术 APT 与 AOP 适用场景与对比](https://mp.weixin.qq.com/s/eWG8HiaJFiHd3jxSnnZ4aQ) + +[@Damien](https://weibo.com/ZengyiMa):APT(Annotation Processing Tool)是注解处理工具,AOP(Aspect-Oriented Programming)是面向切面编程,在 Flutter 中也有类似的概念,本文从以下几个方面详细介绍了这 2 项技术: + +* APT & AOP 的概念解读 +* APT & AOP 的实现原理 +* APT & AOP 的使用场景 +* APT & AOP 的技术对比 + +### 🐎 [精确定位页面滑动帧率瓶颈及优化参考](https://juejin.cn/post/7077812846217658381) + +[@Leo](https://github.com/leomobiledeveloper):页面流畅性是一个非常影响用户体验的性能指标。本文从原理和工具出发,讲解了如何定义以及分析卡顿,接着从富文本异步绘制、约束布局、视图创建等几个角度介绍了如何针对性的优化。 + +### 🐕 [PROTOCOL & GENERIC IN SWIFT](http://nonomori.bitcron.com/post/protocolandgenericinswift/readme) + +[@zvving](https://github.com/zvving):Swift 基于面向协议的设计提供了简明&丰富的抽象手段,这也给复杂场景使用 Protocol 带来不少歧义,官方最近几个版本与之相关的设计也持续被讨论并改进。比如 [Opaque Result Types](https://github.com/apple/swift-evolution/blob/master/proposals/0244-opaque-result-types.md)、[Unlock existentials for all protocols](https://github.com/apple/swift-evolution/blob/main/proposals/0309-unlock-existential-types-for-all-protocols.md)。 + +本文从一个简单例子对比范型及类型擦除如何应用及二者内部实现的不同,帮助大家加深理解: +- 静态 vs 动态 +- 编译器生成模板代码 vs 通过 Existential Container 隐藏类型 + +### 🐎 [Type placeholders in Swift](https://www.swiftbysundell.com/articles/type-placeholders-in-swift/) + +[@anotheren](https://github.com/anotheren):Swift 5.6 中引入了 **Type Placeholders** 来进一步优化类型推断,允许使用 `_` 来让编译器自动推断类型,对于例如 `CurrentValueSubject` 这一类的复杂范型更加友好。 + +### 🐢 [构建顺滑自然的 Flutter 页面](https://mp.weixin.qq.com/s/6FLMcE67BCbXvnbFSRgHFg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 以高性能和高一致性渲染著称,但也不是随便写写就能流畅如丝的,本文由阿里巴巴移动团队产出,分享了 Flutter 流畅度优化的挑战、监控工具、优化手段和建议。从代码到工具侧的使用,抽丝剥茧,强烈推荐 + +## 工具 + +### [XcodePatch](https://github.com/unixzii/XcodePatch) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Xcode 13.3 在 LLDB 中使用中文输入就会直接卡死,这个工具通过重签与注入 Patch 的方式解决卡死。近日最新发布的 Xcode 13.3.1 依旧未修复此问题。~~升级 Xcode 竟成高风险行为~~。 + +### [Xcode13 Tips:构建系统](https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-13_3-release-notes#Build-System) + +[@红纸](https://github.com/nianran):Xcode13 现已提供新的构建参数用于加速 Swift 项目的构建,其能够更好的使用内容,加快构建速度。你可以通过下述全局命令打开此构建参数: + +```shell +defaults write com.apple.dt.XCBuild EnableSwiftBuildSystemIntegration 1 +``` + +### [xcframework-maker](https://github.com/darrarski/xcframework-maker) + +[@红纸](https://github.com/nianran):此工具可以将 Fat Framework 作为原料来转化为 XCFramework 文件。生成的 XCFramework 可以作为 SPM 的依赖使用。 + +## 代码 + +### [CodeEdit](https://github.com/CodeEditApp/CodeEdit) + +[@水水](https://www.xuyanlan.com): CodeEdit 是一个由开发者社区为社区而构建的免费开源的代码编辑器,功能包括语法突出显示、代码完整性、项目查找和替换、代码段、终端、任务运行、调试、git 集成、代码 Review、扩展等。CodeEdit 让不为苹果平台开发的项目像文本编辑一样轻松,但提供类似于 Xcode 的体验。换句话说,希望在保持轻量级、性能和可靠性的同时为开发人员提供完整 IDE 的功能。 + +## 摸鱼周报 + +[@摸鱼周报 #50](https://mp.weixin.qq.com/s/6IS0RlytWxjeRHyh0f2fXA):已经第 50 期了,一个新的节点,一起来看下本期概要吧: + +* 话题:WWDC 22 Call to Code,尝试从图标挖掘一些彩蛋 +* 面试模块:事件响应与传递 +* 优秀博客:复习 iOS 的 rebase 和 bind +* 学习资料:闲话 Swift 协程 +* 开发工具:AppleParty 是一款实现快速操作 App Store Connect 后台的自动化 macOS 工具。 + +## 内推 + +### [上海/北京/杭州/深圳] 字节跳动音乐团队 - 汽水音乐 - iOS/Android 开发 + +字节跳动音乐团队秉承『用音乐建立共鸣,用音乐激发表达。』的使命,除了刚刚上线的汽水音乐,字节在音乐业务已持续投入多年,海外产品 Resso 已突破 2kw DAU,抖音、TikTok 音乐场景不断建设、音乐人服务逐步完善。 + +团队目前 iOS/Android 职位急招(包含初/中高/Leader 职位),Base 上海/北京/杭州/深圳均可。 + +> 联系方式及更多信息:https://www.yuque.com/iosalliance/article/viprra + +### 其他 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#200-2022.04.25.md b/Reports/2022/#200-2022.04.25.md new file mode 100644 index 000000000..89f9827f4 --- /dev/null +++ b/Reports/2022/#200-2022.04.25.md @@ -0,0 +1,134 @@ +# 老司机 iOS 周报 #200 | 2022-04-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 开发者活动 + +> 4 月 23 号的「快手技术沙龙·iOS 技术专场」PPT 已经公开,可以通过「老司机技术公众号」发送「PPT」获取。文字整理和视频回放稍后放出。 + +### [「T Chat | 我在大厂做研发」系列直播首发](https://mp.weixin.qq.com/s?__biz=MzI2NTAxMzg2MA==&mid=2247494102&idx=1&sn=f29dfb12cffa840ee46169409002379a&chksm=eaa176ddddd6ffcbc4050f38f7fc7fa7dc4cd4bca9a59d74c97abd4a6d15ad6ce4b3076cf568#rd) + +作为开发者,在我们的职业生涯中,可能会无数次问自己或者被问到这两个问题: + +- 一线大厂的研发团队在做什么? + +- 研发专家们在关注什么? + +年初做调查问卷的时候发现,有很多人有同样的困扰。所以老司机技术周报决定联合 T 技术沙龙发起「T Chat | 我在大厂做研发」系列直播计划,邀请一线互联网大厂的研发专家,采用在线直播的方式,分享他们团队 or 个人的研发实践经验,尝试回答这两个问题。 + +### [T 技术沙龙移动端技术实践(上海场)文字稿整理完毕](https://mp.weixin.qq.com/s/gjU6ejMRyG7Cqfr9271qsA) + +- [基于 C++ 的 Android 协程设计 - 张涛](https://mp.weixin.qq.com/s/VJJhBt2zYzmczXQwIxu-jQ) +- [自制渲染引擎及在客户端应用 - 王宇](https://mp.weixin.qq.com/s/QanFOa-TsxXqylajjleF7Q) +- [MVI 范式在 Jetpack Compose 上的应用](https://mp.weixin.qq.com/s/1GiafKMZXrpzZDSqpGtpfQ) + +## 新手推荐 + +### 🐕 [iOS | 图解iOS签名背后的原理](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247484901&idx=1&sn=83fcf34b5b4b7a63c17742efa3ee20a8&chksm=ceea4845f99dc1537003bdebd2a93d09c9b413ad0cc8c5108cd93d5b84e63e65a30ce0f6c019&token=996185752&lang=zh_CN#rd) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者带领读者实操申请证书的全流程,并介绍了 iOS 开发证书的申请、验证、加签等过程的原理。适合新手一读。 + +> 本篇收录由该文作者 [@doubleLLL3](https://github.com/doubleLLL3) 自荐。 + +## 文章 + +### 🌟 🐕 [系统困境与软件复杂度,为什么我们的系统会如此复杂](https://mp.weixin.qq.com/s/3PSFMt9cQ1ZCoYQrdOCM6Q) + +[@xuyafei](https://github.com/xiaofei86):作者读《A Philosophy of Software Design》有感,有兴趣可以阅读原文。 + +软件的复杂性有多种表现形式,可能是因为领域模型的边界模糊,而使看似简单的变更需要多处修改代码;可能是因为设计者在各种模式中迷失,使项目脱离现状而过度工程化;可能是因为代码的混乱与文档的缺失,使改动影响范围难以明确。这些模糊创造了复杂,而依赖又传播了复杂,使复杂性不断递增。 + +宇宙处在无法抵抗的商增过程中,孤立的软件系统在不引入外部力量时,也无法抵抗走向复杂与混乱。而架构的本质就是成为这股约束力量。《Clean Architecture》中说道“软件架构的终极目标是用最小的人力成本来满足构建和维护该系统的需求”。 + +但软件工程学科最难的事情就这样的抽象能力,因为它没有标准、没有方法、甚至没有对错。如何在软件固有的复杂性上找到一条既不过度也不缺失的路,是软件工程师的终身课题。 + +### 🌟 🐕 [音视频工程示例 AVDemo 10、11、12、13](https://mp.weixin.qq.com/s/4Ua9PZllWRLYF79hwsH0DQ) + +[@JonyFang](https://github.com/JonyFang): 音视频工程示例 AVDemo 10、11、12、13 篇: + +- [iOS AVDemo 10 - 视频解封装,从 MP4 解出 H.264/H.265](https://mp.weixin.qq.com/s/4Ua9PZllWRLYF79hwsH0DQ): 实现对 MP4 文件中视频部分的解封装逻辑并将解封装后的编码数据存储为 H.264/H.265 文件; +- [iOS AVDemo 11 - 视频转封装,从 MP4 到 MP4](https://mp.weixin.qq.com/s/VVItfhebc6L-JQFCGBtapQ): 实现对 MP4 文件中音视频的解封装逻辑,将解封装后的音视频编码数据重新封装存储为一个新的 MP4 文件; +- [iOS AVDemo 12 - 视频解码,MP4 → H.264/H.265 → YUV 的源码](https://mp.weixin.qq.com/s/BIazU0Wd5_p4bx4nKJoH-g): 串联视频解封装和解码模块,将解封装的 H.264/H.265 数据输入给解码模块进行解码,并存储解码后的 YUV 数据; +- [iOS AVDemo 13 - 视频渲染,用 Metal 渲染](https://mp.weixin.qq.com/s/4K8xPX_A8NA01ecmA6UCtw): 串联视频采集和渲染模块,将采集的视频数据输入给渲染模块进行渲染; + +### 🌟 🐕 [视频下载加速,2.5倍优化](https://mp.weixin.qq.com/s/GDNBMmhaRuZH5BesjRdFfg) + +[@极速男孩](https://github.com/JonyFang): 介绍了在搜狐视频 iOS 客户端中,是如何利用 quic 中的 cronet 库,来动态调整缓存视频的并发数。主要通过测试当前的网速并结合当前的网络环境,设备性能和设备性能等因素来将并发数控制在一个合理的方位内。通过这样的优化给 WIFI 环境下带来了 2.35 倍和流量环境下 1.50 倍的速度提升。 + +### 🐕 🌟 [快手 iOS 启动优化实践](https://mp.weixin.qq.com/s/ph7kFRKYWP1bqbNtTK4z3Q) + +[@Leo](http://github.com/leomobiledeveloper):应用启动速度直接影响用户的使用体验,且启动越快、留存就越高,所以做好启动不仅有利于用户体验指标的提升,也会促进核心业务的增长。本文包含了快手团队在 iOS 启动优化上的实践,除了常规的优化方式,还包括像动态库懒加载、TTI 任务调度、后台启动、防劣化等多方面实践,推荐阅读~ + +### 🐕 🌟 [货拉拉用户端体验优化--启动优化篇](https://juejin.cn/post/7087773731061235743) + +[@红纸](https://github.com/nianran):在上篇提到了快手的启动优化,本篇文章则是货拉拉团队的启动优化方案。货拉拉团队在前期的主要优化实践为优化串行接口、启动任务管理、长尾治理(治理低端机的业务 API 耗时)、防劣化。此外文内还提到了三种轻量级的工具用于分析启动任务过程的耗时问题。推荐大家两篇文章一起阅读~ + +### 🐢 [Flutter 音视频开发新思路](https://mp.weixin.qq.com/s/ZpHfkz8CQmPhKY4--WYTWw) + +[@莲叔](http://github.com/aaaron7):Flutter 因为众多优秀的设计而在跨端方案中脱颖而出,成为目前跨端开发的主流选型。常规的业务功能和逻辑模块通过应用 Flutter 可以较好的实现双端代码的一致性。但是对于某些细分领域,比如音视频,对资源的使用和计算的性能高度敏感,Flutter 能做的可能就只能是偏向于纯展示,更多的逻辑都下沉在 Native 实现。虽然能满足需求,但丢失了 Flutter 跨端的优势。闲鱼在这个方向探索了一个新的思路。将音视频处理细化为一个个处理单元,然后在 Flutter 侧将这些处理单元组织成 pipeline 来实现业务逻辑,在保证可用性的基础上最大限度的提升了跨端代码的占比。虽然 Flutter 究竟是否适合音视频场景,业界也是有一定争议的。但这个方案有一定新颖性,也是值得研究学习一下的。 + +### 🐕 [SwiftUI performance tips](https://martinmitrevski.com/2022/04/14/swiftui-performance-tips/) + +[@zvving](https://github.com/zvving):相比 UIKit,SwiftUI 有着不同的声明式写法和渲染机制,这导致二者性能优化思路上有共性,同时也有不同的挑战。本文作者梳理了 SwiftUI 中常见的性能问题,帮助你实现流畅的用户体验: + +- 避免主线程繁重工作:线程隔离网络加载、数据库访问等耗时操作,合理增加数据缓存 +- 避免多余重绘:缩小重绘区域,控制频次,减少不必要的数据更新 +- 合理使用 SwiftUI 组件:用范型替代 AnyView、大量重用视图场景使用 Lazy 组件、最小化使用 GeometryReader 等 +- 使用 Instruments 定位性能问题的一些方法 + +### 🐎 [iOS性能优化——离屏渲染的分析探究](https://mp.weixin.qq.com/s/grfRkNI90bUUCWR0l7TjNw) + +[@Damien](http://github.com/ZengyiMa):离屏渲染是我们开发中经常提到的话题,处理不得当会造成的滑动帧率下降,但是离屏渲染背后的实现的原理是怎么样的呢?我们应该怎么去优化和避免它呢?本文将从 4 个问题出发,详细介绍了离屏渲染: + +- 什么是离屏渲染? +- 离屏渲染为什么会有性能损耗? +- 常见的离屏渲染场景有哪些? +- 怎么避免离屏渲染? + +### 🐎 [iOS制作iBeacon相关SDK,在程序杀死后无法收到本地通知 - 掘金](https://juejin.cn/post/7088597024781647909) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了排查 iBeacon 在程序杀死后无法收到本地通知的过程,也一并从头介绍了 iBeacon 的简单使用。 + +- iBeacon 简介 +- iBeacon 权限相关 +- iBeacon 相关代码实现 +- iBeacon 代码处于 SDK 如何实现后台和 kill 之后的监听 + +## 摸鱼周报 + +[@摸鱼周报 #51](https://mp.weixin.qq.com/s/ogjhELipiVFRaYJkT2NQwA):第 51 期摸鱼周报来了,一起来看下本期概要: + +* 话题:游戏版号恢复发放,45 款游戏获版号 +* 面试模块:简述 `mmap` 应用 +* 优秀博客:iOS 内购主题 +* 学习资料:一本刚翻译的 《iOS 高性能 App 架构》小书 +* 开发工具:`Quiver`是为程序员打造的笔记本,可以轻松混合文本、代码、`Markdown` 和 `LaTeX`。iTab 一款可以自定义 Tab 页的浏览器插件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#201-2022.05.09.md b/Reports/2022/#201-2022.05.09.md new file mode 100644 index 000000000..caecf5400 --- /dev/null +++ b/Reports/2022/#201-2022.05.09.md @@ -0,0 +1,158 @@ +# 老司机 iOS 周报 #201 | 2022-05-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [阐明 App Store 改善流程的标准和新的限期延长](https://developer.apple.com/cn/news/?id=gi6npkmf) + +过去几年,苹果为了保证贯彻在安全和隐私方面的最新改革,陆续下架了 280 万个 App。同时还强调了,在过去三年内从未更新且未达到最低下载量 (即该 App 在连续 12 个月内完全没有或只有极低的下载量) 时,其开发者将会收到电子邮件,告知该 App 已被识别并可能从 App Store 中被移除。具体细节请参照:[App Store 改善的支持页面](https://developer.apple.com/cn/support/app-store-improvements/) + +### [SSWG 2021 Annual Update](https://www.swift.org/blog/sswg-update/) + +Swift 服务端工作组发布了 2021 年的工作总结: + +- Swift Concurrency:社区的各个 HTTP 框架的客户端现在都已经添加了 async/await 接口 +- 工具链: + - 发布了 RPM/Deb 包 + - 发布了 Swift for VSCode 插件 + - 发布了 Setup Swift 的 GitHub Action + - 加强了对于 ARM Linux 的支持 +- 文档:工作组为旗下的项目补充了大量的文档 +- 生态: + - [SwiftMetrics](http://github.com/apple/swift-metrics),[gRPC Swift](https://github.com/grpc/grpc-swift) 项目完成了孵化 + - [SwiftStatsdClient](https://github.com/apple/swift-statsd-client),[SwiftPrometheus](https://github.com/MrLotU/SwiftPrometheus),[MongoSwift](https://github.com/mongodb/mongo-swift-driver),[Swift Service Lifecycle](https://github.com/swift-server/swift-service-lifecycle),[Soto for AWS](https://github.com/soto-project/soto) 陆续进入孵化阶段 + +以及 2022 年的目标: + +- 继续扩大生态圈 +- 继续加强 Concurrency 的支持 +- 拓展工具链 +- 缩短编译构建时间 +- 提升 Swift 服务端的使用率 + +##  Developer - 设计开发加速器 + +### [电商购物类 App 专场:为你的电商购物 App 提升体验](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 10 日至 11 日(报名截止 5 月 09 日) + +此活动将全面讲述 Apple 的相关最新技术在电商和购物领域不同使用场景中的最佳实施性,以及推荐的设计理念等,同时,也希望和行业从业者一起探讨目前遇到的问题、机遇和挑战。 + +### [案例学习:为 iPad 设计卓越的 App](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 12 日(报名截止 5 月 11 日) + +通过理论讲座与案例分析,学习如何充分利用 iPad 的大屏幕提供更高效的导航机制和更有效的设计模式,如何利用 iPad 多样的输入能力提供更加丰富的交互方式,以及如何面向全新的超大尺寸小组件进行设计。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### 🐢 [iOS StoreKit 2 新特性解析](https://mp.weixin.qq.com/s/RrkK5M3qYTs2cMi7sWTqrA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):StoreKit 2 距离发布已经快一年了,本文对整体的 Client/Server API 使用、抉择升级与否等问题,做出了完整的介绍与阐述。适合有内购开发需求的同学阅读。 + +### 🐕 [Mutex vs Semaphore: What’s the Difference?](https://www.guru99.com/mutex-vs-semaphore.html) + +[@Damien](https://github.com/ZengyiMa):在多线程我们常用互斥锁和信号量来保证线程安全,在本文中会基于: + +* 什么是互斥锁? +* 信号量的使用 +* 互斥锁的使用 +* 信号量与互斥锁之间的区别 +* 关于互斥锁和信号量的常见误解 +* 信号量的优点 +* 互斥锁的优点 +* 信号量的缺点 +* 互斥锁的缺点 + +几个角度来带读者深入理解互斥锁和信号量。对于 iOS 开发者来说,值得一读。 + +### 🐕 [淘宝小程序体验优化:数据分析和优化实践](https://mp.weixin.qq.com/s/eIeOncrNd_h8-7E8fg4bKg) + +[@Barney](https://github.com/BarneyZhaoooo): 本文介绍了淘宝小程序的体验优化,重点介绍了指标的定义和数据实践的探索,并且取得了不错的业务效果。 + +- 写在前面:如何定义好的体验 +- 数据采集 +- 数据分析和优化实践 +- 工具和平台 +- 数据效果 + +### 🐕 [Flutter PlatformView 优化](https://mp.weixin.qq.com/s/gJXk56yJ5oJREHCUbsdhXg) + +[@邦Ben](https://github.com/linwenbang): UC 的 U4 内核团队针对 Flutter 上的 PlatformView 做了深入的研究,并且做了一下优化 PR(部分合入到官方中),主要是针对 Android 的场景,目前官方提供的 Virtual displays 和 Hybrid composition 都存在一些问题,Virtual displays 存在功能性问题,Hybrid composition 存在因为线程合并带来的性能问题,以及死锁风险,且在 Android Q 以下因为内存拷贝导致性能变差。在之前的 Hummer 引擎中实现了挖洞模式,并且通过移植 Roger 大神在 U4 浏览器内核中实现的 Embed Surface 方案,来进一步优化。并且 Embed Surface 方案被合入到主线,后续会逐渐弃用 Hybrid composition。因此可以期待最新的 release 版本。 + +最终得到的结论: + +- 「挖洞模式」的性能仍然是最好的。在挖洞模式能满足的场景下,请考虑优先使用挖洞; +- Embed Surface 除了仅支持 Android 6.0 及以上外,没有明显短板,其帧率在大多数场景下可以与挖洞模式持平; +- 从测试数据看,不合并线程的 HybridComposition 的帧率波动比较大,并不比 Embed Surface 有优势。另外,因为不能完全避免 Android Q 以下的内存拷贝,同时还需要处理部分场景下的同步问题,所以我们不会继续优化该方案。 + +参考: +[Hummer 引擎优化系列](https://mp.weixin.qq.com/s?__biz=MzUzMjk2ODM1MA==&mid=2247484736&idx=1&sn=c080c85e8eab7152eccc599170613770&chksm=faaa63b1cdddeaa782aee05d96d733623cb4d52f26670b41ab2e9dbf63301aee4995c070fe00&scene=178&cur_album_id=2315269790401298433#rd) + + +### 🐎 [AVPlayer 播放器对远端缺失 Content-Range 功能的本地支持和处理](https://bbs.noahark.io/t/topic/312) + +[@JonyFang](https://github.com/JonyFang): 通常来说 H264/HEVC 编码可以通过 AVPlayer 直接播放,但是相对弱些的后台路由,在定位文件的时候并不支持 Content-Range 和系列相关报头,则会导致无法播放。本篇主要针对这类 case,通过 WebServer 的方式来解决该类问题。 + +### 🐕 [Binary targets in modern Swift packages](https://www.polpiella.dev/binary-targets-in-modern-swift-packages) + +[@AidenRao](https://weibo.com/AidenRao):本文总结了 2022 年在 Swift 包中使用二进制文件的最佳实践: + +- 如果你需要为 iOS/macOS 项目添加预编译库或可执行文件,你应该使用 XCFramework, 并为 iOS 设备、macOS 设备和 iOS 模拟器包含单独的二进制文件。 + +- 如果你需要创建一个插件并运行一个可执行文件,你应该将其嵌入为一个 Artifact Bundles,其中包含适用于不同支持架构的二进制文件。 + +### 🐢 [Flutter 新一代图形渲染器 Impeller](https://mp.weixin.qq.com/s/PLvlSt3tlX6AjufDm0XVMA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter在2022年的Roadmap中提出需要重新考虑着色器的使用方式,计划重写图像渲染后端。最近该渲染后端 Impeller(叶轮)初见端倪,[本文](https://mp.weixin.qq.com/s/PLvlSt3tlX6AjufDm0XVMA)就从 Flutter 图形渲染优化历史讲起,一步步带你了解 Flutter 下图形渲染的优化,以及最新开发中的 Impeller ,详细带你了解 Impeller 的方方面面 + +### 🐢[Locking in WebKit](https://webkit.org/blog/6161/locking-in-webkit/) + +[@水水](https://www.xuyanlan.com/):WebKit 团队在 2015 年 8 月用新的 WTF::Lock(WWeb Template Framework)替换了WebKit中所有的自旋锁和操作系统提供的互斥锁,统一了 Lock 的实现,与操作系统提供的锁(如pthread_mutex)相比,WTF::Lock 小64倍、快180倍。与操作系统提供的 pthread_cond 等条件变量相比,WTF::condition 要小64倍。本文首先介绍了一些关于锁的背景知识,重点介绍了如何构建 WTF::Lock 和 WTF::Condition。 + +### 🐎 [macOS 进化史](https://mp.weixin.qq.com/s/7ozZfNQTNK_Ibpfv1Wo7-g) + +[@红纸](https://github.com/nianran):作为 iOS 的开发人员,我们每天都在使用着 macOS,你对这个系统的历史了解有多少呢?本文将带你了解 macOS 的发展历史,从早期系统不成熟的 Mac OS Classic 到融合优秀特性 NeXTSTEP 后成为 MacOSX。了解 Darwin、XNU、Mach、BSD 的基础概念以及其之间联系、Darwin 的开源之路。 + +### 🐕 [Use Dependency Injection to Unit Test a ViewModel in Swift](https://swdevnotes.com/swift/2022/use-dependency-injection-to-unit-test-a-viewmodel-in-swift/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):依赖注入是一种将一个或多个依赖对象传递给另一个对象的技术。本文将基于 Weather App 在初始化时将天气服务传递给天气 ViewModel。这将允许使用模拟天气服务在单元测试中测试 ViewModel,而无需访问 OpenWeather 或任何网络调用。依赖注入使类或结构独立于它所依赖的对象的创建,有助于创建松散耦合的应用程序。 + +## 代码 + +### [GRDBQuery](https://github.com/groue/GRDBQuery) + +[@anotheren](https://github.com/anotheren):GRDBQuery 是一个为 [GRDB.swift](https://github.com/groue/GRDB.swift)(一个 Swift 版本的 SQLite 工具库)准备的扩展,提供了 `@Query` 的 property wrapper,简化了数据同步。 +它类似于 SwiftUI 中为 CoreData 提供的 `@FetchRequest`。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#202-2022.05.16.md b/Reports/2022/#202-2022.05.16.md new file mode 100644 index 000000000..625ca6d6b --- /dev/null +++ b/Reports/2022/#202-2022.05.16.md @@ -0,0 +1,126 @@ +# 老司机 iOS 周报 #202 | 2022-05-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐢 [Flutter 3.0 发布](https://mp.weixin.qq.com/s/7glBeUReiNytWqsNLhi7sA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 前两天的 Google I/O 上 Flutter 3.0 已经发布,主要包括 Flutter 对 macOS 和 Linux 正式版支持、进一步的性能改进、手机端和 Web 端相关的更新等等。此外还有关于减少对旧版本 Windows 的支持,以及一些 breaking changes 列表。国内外的相关技术咨询上有诸多讲解,这里小编就简单为大家汇总一下,方便同学们阅读学习: + +- [中文版讲解](https://mp.weixin.qq.com/s/7glBeUReiNytWqsNLhi7sA) +- [英文原版](https://medium.com/flutter/whats-new-in-flutter-3-8c74a5bc32d0) +- [Dart 2.17 新特性](https://medium.com/dartlang/dart-2-17-b216bfc80c5d) + +##  Developer - 设计开发加速器 + +### [通过服务器处理 App 内购买和提供用户支持](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 17 日(报名截止 5 月 16 日) + +了解如何使用 App Store 服务器 API 和 App Store 服务器通知处理 App 内购买,为您的客户提供支持和退款处理。报名预计开放时间:5月12日 + +### [音频类 App 专场:为你的音频类 App 提升体验](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 25 日至 26 日(报名截止 5 月 24 日) + +欢迎参加为期两天的音频类 App 专场活动!通过本次活动,您将全方位了解 Apple 的相关技术针对在“音频”领域不同使用场景如音乐、K 歌、有声书以及播客类场景中的最佳实施性等,包括物理音频空间化引擎工作原理和使用,音频识别和分类的智能构建等,以及如何利用 watchOS 打造更好的音频类 watchOS App 等等。期待您的加入和我们一起探索音频领域的空间! + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### 🐕 [西瓜视频 iOS Voice Over 无障碍适配实践](https://mp.weixin.qq.com/s/cVEPN28XOBs6XNy0PDGudg) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):无障碍的适配既是工信部的要求,也是企业社会责任感的体现。本文介绍了苹果原生无障碍相关的 API 使用以及业务渗透较高场景的适配实践。如有相关适配需求可以借鉴对应场景中的交互方式。文章内容集中于解决如下问题: +- 焦点相关问题:信息缺失/冗余/错误、顺序错乱、停留不当 等 +- 浮窗问题 / 焦点被覆盖时仍可访问 +- 嵌套容器 ScrollView 无法跟随滚动 + +### 🐕 [MachO 文件编译链接常见的三大认知误区](https://mp.weixin.qq.com/s/XpMcSzEayM-cBT4-jRr9kA) + +[@AidenRao](https://weibo.com/AidenRao):[《iOS15动态链接fixup chain原理详解》](https://mp.weixin.qq.com/s?__biz=Mzg2NTYyMjYxNg==&mid=2247486514&idx=1&sn=2fb1b443dafebd7bffd47cd53d170d8e&scene=21#wechat_redirect) 对 iOS15+ 动态链接过程性能优化的深度解析,引发了字节跳动 APM 团队对 MachO 文件的编译链接过程探索的兴趣。在学习的过程中,初学者常常会因为对该领域的不熟悉而陷入误区。本文整理了初学者比较容易犯的三大认知误区,避免大家重蹈覆辙。 + +### 🐢 [Swift 首次调试断点慢的问题解法](https://mp.weixin.qq.com/s/n6cRVhr5Sw1CSOqAYWiBRw) + +[@享耳先森](https://github.com/iblacksun):在 Swift 项目开发过程中,相信大家最近两年都深受「首次断点调试启动慢」问题困扰,根据项目大小和结构不同,首次调试时间从十几秒到几分钟不等,最近中文社区对此问题进行深入研究。 + +优酷团队发文 [Swift 首次调试断点慢的问题解法](https://mp.weixin.qq.com/s/n6cRVhr5Sw1CSOqAYWiBRw) 通过以下命令优化 LLVM 配置: +``` +settings set target.memory-module-load-level minimal +settings set symbols.use-swift-clangimporter false +``` +字节团队发文 [Swift 调试性能的优化方案](https://mp.weixin.qq.com/s/TXrY1bbSdYCkaeE8aq2NKg) 通过自定义 LLDB 及配置更细致的解决调试断点慢问题,实测效果更加明显。 + +>需要说明的是,以上方案与主工程项目结构有关,依赖的二进制库越多,效果越明显。 + +### 🐕 [Detecting Xcode Previews](https://www.createwithswift.com/detecting-xcode-previews/) + +[@Damien](https://github.com/ZengyiMa):在 SwiftUI 中想区分当前运行环境是在 Preview 中还是虚拟机中吗?来看看这篇文章吧,作者提供了从 ProcessInfo 中通过 XCODE_RUNNING_FOR_PREVIEWS 获取当前的运行环境的信息的思路,从而可以让我们识别运行环境是在 Preview 还是虚拟机。 + +### 🐕 [Jenga - 基于 Swift ResultBuilder 优雅的构建 UITableView](https://github.com/fanglinwei/Jenga) + +[@老峰](https://github.com/gesantung):Jenga 是一个基于 ResultBuilder 封装的类 SwiftUI 使用声明式语法构建 UITableView 开源库,提供了 State 和 Binding 特性,代码简洁,可读性强,感兴趣的同学不妨一试。 + +### 🐕 [Flutter 状态管理框架 Provider 和 Get 分析](https://mp.weixin.qq.com/s/iLSjr-HE4VC1kTdjI2bFNQ) + +[@极速男孩](https://github.com/ztlyyznf001):Flutter 作为一个声明式的 UI 框架状态管理是一个让人头疼的问题,没有状态管理会导致难以复用/单元测试,跨页面无法传递数据,setState 方法会过度刷新的问题。本文主要介绍了 Get 与 Provider 的状态管理的原理,并且如何利用他们去实现 MVP 模式,并且对比了两者的优缺点。 + +### 🐢 [Flutter 深入探索混合开发的技术演进](https://mp.weixin.qq.com/s/JjlCyCOC4gL7hx3UNs7ONQ) + +[@邦Ben](https://weibo.com/linwenbang): 本文梳理了 Flutter 中 PlatformView 的演进过程,也就是从直接通过 channel 打开一个 WebviewController 到 Virtual Displays 到 Flutter Hybrid Composition 的过程,文中通过各种例子说明原理以及也指明了优缺点,在使用 Flutter 的同学建议一看。同时上周推荐的 UC 团队做的进一步优化进行是下一步演进方向,也可以一并看看。 + +参考链接: +[U4 内核技术 - Flutter PlatformView 优化](https://mp.weixin.qq.com/s/gJXk56yJ5oJREHCUbsdhXg) + +### 🐕 [深入理解 OC/C++ 闭包](https://mp.weixin.qq.com/s/NEvtm_yBMghyP_WTUATy8g) + +[@xuyafei](https://github.com/xiaofei86):ObjC 编译器允许用户在同一个源文件里自由地混合使用 C++ 和 ObjC,相对于其它语言与 C++ 的文件隔离和架桥通信(Kotlin 使用 JNI,Dart 使用 FFI),Objective-C++ 的同文件混编方式无疑是令人舒畅的。虽然 Objective-C++ 没有为 ObjC 和 C++ 类增加功能,类的体系结构也互相独立,类之间不能互相继承,但有时二者也会相互把自己的魔杖伸向对方领域,从而会引发一些比较费解的问题。本文就从两种语言闭包混合捕获的原理出发,了解其混编方式背后机制的冰山一角,也帮助大家写出更好的 ObjC/C++ 混编代码。 + + +## 代码 + +### [老司机技术沙龙](https://github.com/SwiftOldDriver/Salon) + +不知不觉,已经联合举办了 6 场开发者活动了。我们对过去几场活动重新做了一次梳理,把所有可公开的资料都上传到了这里,后续的活动也会同步更新到这里。需要的朋友移步自取哈 + +![image](https://user-images.githubusercontent.com/11873526/168479876-db1097d6-d1f1-4320-9de6-86c3d4786fdc.png) + +## 摸鱼周报 + +[@摸鱼周报 #53](https://mp.weixin.qq.com/s/5chb-a9u7VMdLis1FG6B6Q):第 53 期摸鱼周报来了,一起来看下本期概要: + +* 话题:远程工作正在成为趋势 +* 面试模块:CRC 实践应用:理论推导 +* 优秀博客:App Extension +* 学习资料:一个大学生的学习计划 +* 开发工具:适用于 `macOS` 的现代媒体播放器,`IINA` 由开源媒体播放器 `mpv` 提供支持,几乎可以播放您拥有的所有媒体文件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#203-2022.05.23.md b/Reports/2022/#203-2022.05.23.md new file mode 100644 index 000000000..e94253a06 --- /dev/null +++ b/Reports/2022/#203-2022.05.23.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #203 | 2022-05-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [《WWDC22 内参》作者招募 &《WWDC21 内参》免费领取](https://mp.weixin.qq.com/s/W-15I-lTAPKzI6USw3nuuQ) + +《WWDC22 内参》作者招募工作正式开始,请感兴趣的朋友点击上方链接参与报名,报名截止时间为 5 月 30 号。 + +去年我们第一次公开招募了一些新的同学参与进来,同时也引入了审核机制,最终交付了一份还算满意的答卷。103 篇文章、2810 份订阅、几十万的阅读量,这些数据都要比往年要好,非常感谢大家对老司机技术的支持和信任。**《WWDC21 内参》也已经可以免费领取,在老司机技术周报公众号中回复「2022」即可获取链接。** + +##  Developer - 设计开发加速器 + +### [设计高效的 UI 测试](https://developer.apple.com/cn/accelerator/) + +2022 年 5 月 31 日(报名截止 5 月 16 日) + +了解如何设计测试,来帮助你发现和诊断最棘手的漏洞。我们将解释如何使用 XCTest 改进您的自动化测试,以找到代码中的隐忧,以及如何准备测试以应对失败。从而更轻松地对问题进行分类,以便您可以快速解决问题,并修复错误。理解中断,学习如何预测 App 的潜在中断、创建智能测试以识别它们。通过使用 UI 中断处理,构建更好的测试,管理预期的警报。 + +![156925166-f0e9ae02-0d06-4806-aa19-e84d84e2fd1f](https://user-images.githubusercontent.com/11873526/162620205-0cddfae9-05e0-4e10-9359-4d914e3ae08b.jpeg) + +## 文章 + +### [Dutter | 钉钉 Flutter 跨四端方案设计与技术实践](https://mp.weixin.qq.com/s/JyfwrfsWplHhkColYLhBpg?from=singlemessage&isappinstalled=0&scene=1&clicktime=1652443237&enterid=1652443237) + +[@老峰](https://github.com/gesantung):Dutter 即 DingTalk Flutter,是钉钉内基于 Flutter 构建的跨四端研发框架,本文主要包含以下内容: +- 整体架构: Dutter Runtime、Dutter Dev Kit、Dutter OPS Kit; +- 数据通信包括:Channel、Dutter FFI; +- 消息总线; +- 模块化; +- 容器化; +- 组件库:dingui_flutter 、dingtalk_uikit; +- 最佳实践以及部分 FlutterEngine 层面的问题定位等。 + +### 🐕 [Scripting in Swift: Git Hooks](https://www.polpiella.dev/scripting-in-swift-git-hooks) + +[@享耳先森](https://github.com/iblacksun):Swift 除了用于 App 还可以干什么?本文作者使用 Git Hooks 结合 Swift `Command Line Tool` 解决真实工作场景中遇到的问题,如果你也有类似需求又不熟悉其他脚本语言,Swift 是很好的解决方案。 + +### 🐕 [京东 App MCube 动态化实践](https://mp.weixin.qq.com/s/kjYRo2OcmWCoUBTdsAKrCw) + +[xuyafei](https://github.com/xiaofei86):在京东 App 业务高速发展的过程中,为了使更快的需求响应速度与研发人力和稳定性需求之间达到平衡,京东自研了一套原生的“动态化+跨端”框架 MCube。本文对其方案进行了简单介绍,其通过三方库 Yoga 作为其布局引擎;通过 XML 作为 DSL 描述原生控件;通过协议层对接各个可插拔组件。另外还有其容器分层架构的设计、配套管理平台和开发套件等介绍,感兴趣的同学可以阅读原文了解。 + +## 代码 + +### [Euclid: a Swift library for creating and manipulating 3D geometry](https://github.com/nicklockwood/Euclid#example) + +[@莲叔](https://aaaron7.github.io):这是一个能让你非常方便创建和操作各种基础3D模型的代码库,并且可以非常方便的和 SceneKit 相关的场景进行整合。传统的方法中,要创建三维模型然后添加贴图,往往都需要编写上百行 OpenGLES 的代码才能实现,而通过 Euclid,创建模型就如同创建一个普通的 View 那样简单,感兴趣的朋友可以看一下作者开发的一个 macOS App:[ShapeScript](https://apps.apple.com/app/id1441135869), 可以通过文本描述的方法创建三维模型,可以说这个开源的组件就是这个 App 的SDK版。应该有非常多有趣的功能可以实现。 + +### [Runestone](https://github.com/simonbs/Runestone) + +Runestone 是一个高效易用的代码编辑器库,最大的亮点是: + +- 使用原生技术实现,不需要依赖于 WebView +- 使用 TreeSitter 作为 Parser 后端,可以高效地进行增量解析,兼容大部分主流编程语言 +- 借鉴了 AvalonEdit 的 Line Management + +## 摸鱼周报 + +[@摸鱼周报 #53](https://mp.weixin.qq.com/s/5chb-a9u7VMdLis1FG6B6Q):第 53 期摸鱼周报来了,一起来看下本期概要: + +* 话题:远程工作正在成为趋势 +* 面试模块:CRC 实践应用:理论推导 +* 优秀博客:App Extension +* 学习资料:一个大学生的学习计划 +* 开发工具:适用于 `macOS` 的现代媒体播放器,`IINA` 由开源媒体播放器 `mpv` 提供支持,几乎可以播放您拥有的所有媒体文件。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#204-2022.05.30.md b/Reports/2022/#204-2022.05.30.md new file mode 100644 index 000000000..d52784073 --- /dev/null +++ b/Reports/2022/#204-2022.05.30.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #204 | 2022-05-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [帐户删除审核条例将在 6 月 30 日开始生效](https://developer.apple.com/cn/news/?id=12m75xbj) + +从 2022 年 6 月 30 日开始,支持创建账户的 App 必须同时支持账户删除功能,这项要求已经加入到了审核条例([《App Store 审核指南》第 5.1.1(v)](https://developer.apple.com/cn/app-store/review/guidelines/#5.1.1v))当中,具体详见原文链接,各位开发者务必提前做好准备。 + +### [码上就位 - WWDC 开发者活动](https://developer.apple.com/cn/news/?id=qnx0slc5) + +WWDC 开发者活动陆续在官网放出,今年依旧会和往年一样有 Keynote、Sessions、Labs、Digital Lounges 等富有特色的活动,大家可以根据自己的兴趣去参加不同的活动。此外,老司机技术也和 SwiftGG、T 沙龙一起在筹备 「WWDC.playground」的线上活动,马上会开启报名,大家可以期待和关注一下。 + +## 文章 + +### 🌟 🐢 [“Stop” using state management libraries](https://medium.com/flutter-community/stop-using-state-management-libraries-48a81ed7979d) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在 Flutter 项目中状态管理是必须要解决的问题,行业内也有各种解决方案,例如: GetX, Provider, MobX, BLoc 等,但在其下更应该思考的是是否有必要?本文标题党一把,从其需求根本上讨论使用的必要性,非常推荐小白细读. + +### 🐕 [【Hummer Flutter引擎】让Flutter绽放得更美 - 包体积优化之道](https://mp.weixin.qq.com/s/OnAnOAX1K5TyHbuUjV3LEg) + +[@极速男孩](https://github.com/ztlyyznf001): Flutter 的包体积一直是个让开发者头疼的问题。 本文主要介绍了 Hummer 引擎是如何通过引擎的优化和精简,分包动态化技术和资源的优化来完成对包体积缩减。并且介绍了监控和动态化平台的落地。 + +### 🐎 [主流图片加载库所使用的预解码究竟干了什么](https://dreampiggy.com/2019/01/18/%E4%B8%BB%E6%B5%81%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E9%A2%84%E8%A7%A3%E7%A0%81%E7%A9%B6%E7%AB%9F%E5%B9%B2%E4%BA%86%E4%BB%80%E4%B9%88/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Image/IO 的惰性解码流程,以及Force Decode这套流程它所解决的问题,以及优缺点。其中,着重介绍了 WebP 这一新兴的图片压缩格式以及它的优缺点。 + +## 代码 + +### 🐕 [YYJSON 0.5.0 Released](https://github.com/ibireme/yyjson/releases/tag/0.5.0) + +[@享耳先森](https://github.com/iblacksun) YYJSON 是用 C 写的 JSON 解析库,以性能著称,近日发布了 0.5.0 版,有许多新特性与改进。 + +### [unxip: A fast Xcode unarchiver](https://github.com/saagarjha/unxip) + +解压比系统自带的 xip 快 2-3 倍的一款工具,通过合理的流程设计让任务尽量并行化,内部使用 Swift Concurrency 驱动。 + +代码逻辑十分精简,只有 500+ 行,并且作者在 README 里有详细的设计说明,对 Concurrency 的使用也很有参考价值,非常值得仔细品味。 + +## 工具 + +### [Fig CLI](https://fig.io) + +[@Jimq](https:://github.com/waz0820):为你的终端添加类似 IDE 的自动补全功能,特色说明: + +- 将语法着色,语法提示,自动填充,自带注释,历史记忆这些基本功能有机融合在一起,产生一种奇妙的终端操作体验。 +- 不需要新的终端 App,只为你现有的终端或者 shell 作扩展,eg. 系统 terminal,iTerm, VSCode 内置的 terminal,bash,zsh,fish。 +- 支持 300 多种 CLI 工具,eg. cd, git, docker, npm, yarn, brew, kubectl, aws,可以做到 3 分钟为自己的 CLI 工具或者脚本添加自动补全功能。 +- 全键盘操作,快捷键方便高效。 +- 保护隐私,不跟踪敏感数据。 +- 内核 “Completion specs” 开源。 +- 正在打磨中的 Big Thing,将支持使用 fig.js API 构建自己的应用,打造终端应用生态系统。 + +## 摸鱼周报 + +[@摸鱼周报 #55](https://mp.weixin.qq.com/s/zDhnOwOiLGJ_Nwxy5NBePw):第 55 期摸鱼周报来了,一起来看下本期概要: + +* 话题:WWDC22 码上就位,介绍今年 WWDC 的流程 +* 面试模块:iOS WebView 中的 User-Agent +* 优秀博客:Swift 中修饰声明和类型的两种特性 +* 学习资料:TypeScript 入门教程 +* 开发工具:一款适用于 mac 的简洁日历软件 itsycal + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#205-2022.06.20.md b/Reports/2022/#205-2022.06.20.md new file mode 100644 index 000000000..4c00b54f5 --- /dev/null +++ b/Reports/2022/#205-2022.06.20.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #205 | 2022-06-20 + +> hello,大家好,失踪了两期,老司机技术周报又回来了。我们没有跑路,只是最近两周都在忙 WWDC 的活动,实在没有精力抽出时间来整理周报 Orz... +> +> 第一个活动是 wwdc.playground,我们和 SwiftGG、T 沙龙一起举办了一次线上技术沙龙活动,没有赶上的可以先去「老司机技术」视频号看直播回放,稍后会写个总结文给到大家。这次活动一共累计全网有几万开发者关注,非常感谢大家的支持。 +> +> 另外一个就是[《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22)了,为了能超越往年的质量,今年我们组建了一个 30 人的审核团队[严控质量](https://xiaozhuanlan.com/topic/5639708142),加上 wwdc.playground 前期事情特别多,所以总体进度比去年满了一些,希望大家可以理解一下 ~ 目前订阅价是 29.9(低于五折),欢迎大家前往订阅~ 后续会持续开始更新,预计会有 80 - 100 篇左右的文章。 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 《WWDC22 内参》 + +### 🌟 [【WWDC22 10127/10131】使用 RoomPlan 扫描创建参数化三维室内场景](https://xiaozhuanlan.com/topic/8127504396) + +本文将主要聚焦于 Apple 的 AR/MR 新 API:RoomPlan 。全文共分为 3 个部分: + +第一部分是 Apple 的 AR/MR 技术发展回顾,包括 RoomPlan 和 Object Capture 技术背后的原理简介。 + +第二部分是对 RoomPlan 技术的介绍,包括如何使用官方 API ,快速在您的 App 中使用 RoomPlan,以及如何通过数据 API 自定义 RoomPlan 的使用。 + +最后一部分是关于 AR/MR 应用设计实践的相关建议。 + +### 🌟 [【WWDC22 10025】VisionKit 的机器视觉方案,更智能的捕获文本与条码](https://xiaozhuanlan.com/topic/8205316479) + +本文将与大家一同认识 VisionKit 中的 `DataScannerViewController`。通过简单的 Swift API 来实时的捕获视频源中的文本、条码。将展示如何控制程序捕获的内容,以及如何启用用户指导、突出显示等。 + +##  Developer - 设计开发加速器 + +### [WWDC22 讲座集锦](https://developer.apple.com/cn/accelerator/) + +2022 年 6 月 28 日至 29 日(报名截止 6 月 27 日) + +「 Developer - 设计开发加速器」精选了 WWDC22 公布的最新技术,邀请 Apple 设计和技术布道师为中国开发者带来中文讲座集锦。通过本次活动您可以了解最新技术趋势、学习平台的最新功能,从而打造更为卓越的 App 体验。 + +**从本次活动开始,除特殊活动单独说明以外,加速器活动会开放给所有Apple Developer Program 成员(包含免费的用户)。** + +![](https://user-images.githubusercontent.com/11873526/174491806-a2ca1010-dd77-4b19-9bcd-4ab690f736d8.jpeg) + +## 文章 + +### 🐎 [聊聊 libffi 的调用流程](https://www.jianshu.com/p/4644b1584a1f) + +[@xuyafei](https://github.com/xiaofei86) FFI (Foreign Function Interface) 是用来与其它语言交互的接口,是实现跨语言调用的主要方式之一。其通过直接将其它语言的接口内嵌实现更高的执行效率,而通过进程间通信 (IPC) 或网络通信 (RPC, RESTful 等) 则至少需要两个独立进程才能实现。 + +libffi 是 ffi 的主流实现方式,主要使用 C 和汇编实现,最常用作编译语言和解释语言实现之间的桥接技术。本文从 libffi 的调用流程出发,带大家了解 ffi_call 和 ffi_closure 是怎样帮助我们实现动态调用的。 + +### [从响应式编程到 Combine 实践](https://mp.weixin.qq.com/s/b_q6R64xkq8Rl9EiIde4MA) + +[@zvving](https://github.com/zvving):响应式编程由来已久,苹果钦定的 Combine 正是 Reactive Streams 规范的一种实现。伴随着官方 SwiftUI 的推广,声明式布局+响应式编程也因其简洁、直观、易测、易重用的优势渐渐流行。本文正是字节跳动音乐团队在大项目中落地响应式编程的选型思考和最佳实践,非常值得参考。 + +### 🐕 [Swift 中的幻象类型(phantom types)](https://mp.weixin.qq.com/s/HLWu24LrfqSfbhd9x6Q_ag) + +[@享耳先森](https://github.com/iblacksun):`Phantom Types` 是一种编码技巧,让你可以利用 Swift 的强类型特性写出更安全的代码,本文介绍了一些可使用 Phantom Types 的场景及使用技巧。 + +建议结合下面文章一起阅读: +[Phantom Types in Swift](https://zhuanlan.zhihu.com/p/35696032) +[Swift tricks-Phantom Types](https://www.jianshu.com/p/72cd63cf9393) + +> 推荐人:@Swift社区,本文翻译自 [swiftbysundell.com](https://www.swiftbysundell.com/articles/phantom-types-in-swift/) + + +### 🐕 [探秘 AutoreleasePool 实现原理](https://mp.weixin.qq.com/s/fcS6aiddSjeQSfjMY-8Oow) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):无论是 MRC 还是 ARC 时代,autorelease 最大的作用,是在大量创建对象的同时,通过修饰让内存得到提前释放,从而降低内存峰值。本文就旨在通过分析源码了解内部是如何实现的。 + +### 🐢 [节日献礼:Flutter图片库重磅开源](https://mp.weixin.qq.com/s/WnpDbDvEVNMj_96ulnuWkQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 去年,闲鱼技术团队新一代图片库 PowerImage 在经过一系列灰度、问题修复、代码调优后,已全量稳定应用于闲鱼。相对于上一代 IFImage,PowerImage 经过进一步的演进,适应了更多的业务场景与最新的 flutter 特性,解决了一系列痛点. + +### 🐕 [Auto-generating, Auto-hosting, and Auto-updating DocC Documentation](https://blog.swiftpackageindex.com/posts/auto-generating-auto-hosting-and-auto-updating-docc-documentation/) + +[@四娘](https://kemchenj.github.io/):WWDC 21 推出了 docc 之后,逐渐成为社区主流的文档生成器,但接入时比较麻烦的是需要添加 docc 作为依赖,并且需要通过 GitHub Page 或者 Web 服务器进行部署。 + +Swift Package Index 为此提供了一个新功能,可以自动部署和更新你的 docc 文档,只需要在仓库内添加一个声明文件即可。 + +社区热门的 Kingfisher 也已经[采用了这种方式部署文档](https://swiftpackageindex.com/onevcat/Kingfisher/master/documentation/kingfisher),[接入的 PR](https://github.com/onevcat/Kingfisher/pull/1948) 大家也可以拿来参考。 + +### 🐢 [ViewBuilder 研究](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg) + +[@AidenRao](https://weibo.com/AidenRao):作者通过上下两篇博文,对构建 SwiftUI 视图的 ViewBuilder 进行探讨。 + +[上篇](https://mp.weixin.qq.com/s/4TwfyhWHVjm3Dv-Vz7MYvg)将介绍 ViewBuilder 背后的实现者 —— result builders + +[下篇](https://mp.weixin.qq.com/s/E6VKDbgKerFf0P20N1DsuA)将通过对 ViewBuilder 的仿制,进一步地探寻 SwiftUI 视图的秘密。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术】,回复「2022」,领取 WWDC21 及以前的内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#206-2022.06.27.md b/Reports/2022/#206-2022.06.27.md new file mode 100644 index 000000000..286e9256e --- /dev/null +++ b/Reports/2022/#206-2022.06.27.md @@ -0,0 +1,213 @@ +# 老司机 iOS 周报 #206 | 2022-06-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 13 篇,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10092】遇见 Passkey](https://xiaozhuanlan.com/topic/8042173596) + +苹果一向以对用户隐私的严格重视和出色的隐私保护能力而广受赞誉。passkey 是苹果在用户隐私保护与信息安全方面提出的一个完整的解决方案。本文将带你一起来了解这一方案是什么、为什么和怎么用。 + +### 🌟 [【WWDC22 110357/110358】Swift Regex: 蓄谋已久的正则优化](https://xiaozhuanlan.com/topic/0563284917) + +Chris 画了有五年的大饼 Swift Regex 终于要落地啦!一种号称要超越 Perl 的字符串处理方式,一种兼顾简洁和直观的正则表达式构建方法,一种使正确处理 Unicode 编码轻而易举的抽象模型。Swift Regex 的步伐虽然缓慢,凡坚信不疑的,主必赐福于他。(官方原文:So we go out and evangelize our clearly superior approach to anyone who will listen. Adoption is slow but promising.) + +### 🌟 [【WWDC22 10054】SwiftUI 新导航方案](https://xiaozhuanlan.com/topic/7841259603) + +导航是所有 App 不可或缺的功能。SwiftUI 在发布时就为我们带来 NavigationView 来支持简单的导航场景,但存在许多不足。幸运的是 WWDC22 为我们带来 NavigationStack 和 NavigationSplitView 来解决各种痛点。 +本文通过一个真实的例子《唐诗三百首》详细讲述新的方案的适用场景及使用建议,帮助读者熟悉和迁移到新的导航方案。 + +## 新手推荐 + +### 🐕 [How to Start iOS Development Career](https://holyswift.app/how-to-start-ios-development-career-the-5-steps-plan) + +[@老峰](https://github.com/Gesantung):作者通过系列文章罗列了 iOS 开发上手主要知识点,主要包含如下内容: + +- Swift 语言:学习资源以及学习方法 +- 构建 UI 界面:Using Interface Builder&Build programmatically;UIKit&SwiftUI +- iOS 基础概念:数据存储、网络请求、多线程、内存管理 +- 测试:单元测试、集成测试、快照测试、应用程序流测试 +- 架构&工具:未完 + +### 🐎 [逐步实现基于源码的 Swift 代码覆盖率](https://mp.weixin.qq.com/s/cz5hk23XtjCWGi-rb3-cCg) + +在这篇短文中,作者将向你介绍其研究 Swift 代码覆盖率检测方案时找到的最佳实践,包括: + +* 如何生成 \*.profraw 文件并通过命令行测量代码覆盖率 +* 如何在 Swift App 项目里调用 C/C++ 方法 +* 如何在 Xcode 中测量完整 Swift App 项目的代码覆盖率 + +## 文章 + +### 🌟 🐕 [基于 Bazel 的 iOS Monorepo 工程实践](https://mp.weixin.qq.com/s/WHmYD2X8JGfIQTMmsDG5oA) + +[@JonyFang](https://github.com/JonyFang): 一篇实用的技术分享,主要介绍了 BILIBILI 基于 Bazel 的 iOS Monorepo 工程实践,内容结构如下: + +1. 介绍 BILIBILI 客户端工程开发模式演进的背景; +2. 解答什么是 Monorepo?有哪些成熟的 Monorepo 工具? +3. 介绍选型 Bazel 原因,着重介绍了 Monorepo 以及 Bazel 带来的优势; + +目前 B 站客户端的 Monorepo 模式还在进化中,未来会有越来越多的编译优化的自研规则实装到我们的 iOS 项目中,目前分布式编译能力也已经提上了日程。欢迎对 Monorepo 或 Bazel 感兴趣的同学和我们一起进行技术讨论,也欢迎加入我们的 CI/CD 团队,深度参与改造和建设 iOS 端 Monorepo 工程体系。 + +### 🐕 [西瓜视频 iOS 播放器技术重构](https://mp.weixin.qq.com/s/EX2WcoxxqRDSPk_xdxkIzA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):西瓜视频中有各种视频题材,业务逻辑大量耦合,也是业务的最核心模块。本文聚集于业务播放器的重构(并非 VideoEngine 层),通过将播放器拆分为:极简播放器、基础播放器、业务播放器 三层;将业务任务化;降低各层耦合 等手段,最后在可维护性、性能、业务等多方面都拿到了不错的收益,具体的分层方案与思想大家可以借鉴,但最后都要根据业务复杂度来选择最合适的划分。 + +### [Using the ‘some’ and ‘any’ keywords to reference generic protocols in Swift 5.7](https://www.swiftbysundell.com/articles/referencing-generic-protocols-with-some-and-any-keywords/) + +[@zvving](https://github.com/zvving):相比 ObjC,Swift 协议带来更丰富的实用场景和更严格校验的类型信息。当我们遵循苹果的建议,尝试在项目中落地面向协议编程时,在参数类型、范型关联等场景,类型信息带来大量的限制,这导致我们不得不大量应用类型擦除,能解决问题,也带来更多的理解成本。 + +Swift 5.1 引入 some 关键字(opaque return types),让基于协议的返回类型更易用。而 Swift 5.7 更进一步,让 some 更灵活的应用与函数参数及范型等场景,同时引入 any 关键字带来官方的类型擦除语义用于类型容器场景。至此,在实例类型更明确的场景使用 some 关键字,类型容器场景使用 any 关键字,Swift 在面向协议编程中真正达到简洁同时兼顾灵活。 + +### 🐎 [App Store Server API 实践总结](https://mp.weixin.qq.com/s/yP3jlEzN5o0EsaNoW-4mVw) + +[@J_Knight_](https://github.com/knightsj):本文分享了苹果开放的 App Store Server API 的接口: +- 查询用户订单的数据 +- 查询用户历史数据 +- 查询用户内购退款 +- 查询用户订阅项目状态 +- 提交防欺诈信息 + +还介绍了线上环境和沙盒环境的测试服务器地址。而因为这些接口的调用需要先通过 JWT ( JSON Web Token) 的方式授权,所以也介绍了该授权方式的具体操作,例如生成密钥和签名等等。文章的后半部分提供了这些接口的调用示例以及相关的错误码等的相关信息。 + +拓展阅读:[【WWDC22 10040】 探索 In-App Purchase 集成和迁移](https://xiaozhuanlan.com/topic/8024563197) + +### 🐕 [Announcing the Language Workgroup JUNE 15, 2022Ted KremenekTed Kremenek](https://www.swift.org/blog/language-workgroup/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):自 Swift 成为开源项目以来,Swift 社区共同完成了许多工作。现在,将启动语言工作组,它将承担监督语言和标准库的主要职责。有了一个致力于语言发展的工作组,核心团队将在项目的整体监督和方向上投入更多。核心团队成员将担任管家,协调各个工作组的工作,并制定建立一个更加活跃的开源项目和周边社区的战略。 + +### 🐕 [SwiftUI 状态管理系统指南](https://mp.weixin.qq.com/s/gJCis1z2zY0dZTLfu7T9CQ) + +[@EyreFree](https://github.com/EyreFree):SwiftUI 与 Apple 之前的 UI 框架的区别不仅仅在于如何定义视图和其他 UI 组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。SwiftUI 没有使用委托、数据源或任何其他在 UIKit 和 AppKit 等命令式框架中常见的状态管理模式,而是配备了一些属性包装器使我们能够准确地声明我们的数据如何被我们的视图观察、渲染和改变。这篇指南能很好地概述 SwiftUI 的各种状态处理机制,文中强调的概念涵盖了所有基于 SwiftUI 的状态处理的绝大多数用例,推荐对 SwiftUI 感兴趣的朋友阅读。 + +### 🐕 [WWDC 2022 Viewing Guide](https://useyourloaf.com/blog/wwdc-2022-viewing-guide/) + +[@Barney](https://github.com/BarneyZhaoooo) 今年的 WWDC 有 175 个 sessions 和大量的新特性要学,光是看视频就要花费大量的时间。东西太多抓不住重点?没关系,不如先按本文的分类从感兴趣的入手。 + +### 🐕 [Rendering SwiftUI views within UITableView or UICollectionView cells on iOS 16](https://www.swiftbysundell.com/articles/rendering-swiftui-views-within-uitableview-or-uicollectionview/) + +[@JimQ](https://github.com/waz0820):今年的 WWDC 终于带来了在 UITableView/UICollectionView Cells 中渲染 SwiftUI 视图的能力,但并不是可以完全混用了,仅限于 Cells(比如 UITableViewHeaderFooterView 就不能用),Cells 与 SwiftUI 之间要依赖 UIHostConfiguration 的桥接支持,使用一个新的 UIHostConfiguration 对象 wrap SwiftUI 视图并赋值给 cell.contentConfiguration。John Sundell 的这篇文章可以带领大家了解更多详情,并充分利用这一新特性。 + +### 🐕 [Google I/O Extended | Flutter 游戏和全平台正式版支持下 Flutter 的现状](https://mp.weixin.qq.com/s/3fL_nYvkatqGfBMQ_sddwQ) + +[@极速男孩](https://github.com/ztlyyznf001):今年 Google I/O 上谷歌主要展示了 Flutter 对游戏开发的支持和全平台支持的能力。谷歌通过一款 pinball 的小游戏来展示 Flutter 如何通过 Skia 渲染引擎和 Flame SDK 来提供游戏开发的能力。在 3.0 中 Flutter 提升了 macOS 和 Linux 上应用稳定性,让开发者在尽可能多的共享 UI 和逻辑的基础上,更灵活的利用底层逻辑操作系统。 + + +### 🐕 [wakeup in XNU](http://djs66256.github.io/2021/04/03/2021-04-03-wakeup-in-XNU/) + +[@水水](https://www.xuyanlan.com/):关注性能的读者可能会碰到有一种有一种被系统 kill 类型是 weakup,又因为收集到的日志不足以定位问题,本文通过另一种思路去解决这个问题。整体介绍了weakup是什么、系统如何统计的以及关键的是如何治理。 +- 为什么要统计 wakeup +- wakeup 是什么 +- wakeup 如何统计的 +- wakeup 治理 +- 监控与防劣化 + +### 🐕 [What’s new in Swift 5.7](https://www.hackingwithswift.com/articles/249/whats-new-in-swift-5-7) + +[@AidenRao](https://weibo.com/AidenRao):Swift 5.7 变化巨大,新特性中包括正则表达式, `if let` 速记语法,以及围绕 `any` 和 `some` 关键字的一致性改动,在本文中,作者会通过一些示例来介绍这些新特性。 + +中文翻译:[【WWDC22 110354】Swift 新特性介绍](https://xiaozhuanlan.com/topic/2498765013) + +### 🐕 [Flutter 高延迟渲染流水线调度](https://mp.weixin.qq.com/s/Iv7zogoFD38n-92Un-5Bgg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 长久以来以高性能著称,但你可能好奇 Flutter 上的卡顿是什么引擎的,又应该如何解决。本文由 U4 内核组带你揭秘 Flutter 体系下的渲染流程,并从中找到卡顿的原因,抽丝剥茧,进阶必看 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110379】创建一个响应速度更快的媒体应用](https://xiaozhuanlan.com/topic/4263197580) + +本 session 主要对 `AVFoundation` 中原本不是很合理的同步 API 做了异步优化,同时将 async/await 应用到了更多 API 中,让 API 更安全的同时还能保持易用。涉及到的模块包括视频截图、视频编辑、自定义资源加载。 + +### 🌟 [【WWDC22 10002】利用 Virtualization 构建虚拟机,从未如此简单](https://xiaozhuanlan.com/topic/4132786905) + +本文介绍了平台虚拟化技术的方案类型,分析了 macOS 上的虚拟化方案。通过 Virtualization.framework 和基于这个框架的命令行工具,我们一起创建可用的 macOS 虚拟机、Linux 虚拟机(GUI)、Linux(CLI),感受现代虚拟机强大的性能。利用 Virtualization 打造属于专属自己的虚拟机,从未如此简单! + +### 🌟 [【WWDC22 110341】短信过滤器原理和更新](https://xiaozhuanlan.com/topic/8021693745) + +本文将主要聚焦于 iOS 16 中 `IdentifyLookup` 框架的新特性。全文共分为 3 个部分: +- 第一部分是回顾整个短信过滤 API 的发展。 +- 第二部分是对 短信过滤的原理介绍。 +- 最后一部分是一个简单的 Demo 示例实践。 + +### 🌟 [【WWDC22 10049】探索 iOS 16 中 WKWebView 的新功能](https://xiaozhuanlan.com/topic/7295803164) + +本文主要是探索 WKWebView 在 iOS 16 中的新功能,全文主要分为 4 部分: +- 第一部分是 对 Web 内容的交互新增了 3 种方式,同时新增了 20 种 CSS 视口单位和查找交互功能。 +- 第二部分是新增了对特定 URL 其显示内容拦截的功能。 +- 第三部分是 iPadOS 中新增了加密媒体的功能。 +- 第四部分是支持在第三方浏览器中调试 App 内嵌的 Web页面。 + +### 🌟 [【WWDC22 110350】Swift 并发的可视化和优化](https://xiaozhuanlan.com/topic/0186237549) + +本文主要是讨论 Swift 并发代码的优化,并介绍了一个 Instrument 14 提供的一个可视化工具。session 的内容可以分为 3 个部分: +- 一、回顾 Swift 并发代码基础 +- 二、结合代码片段展示如何用 Instrument 来解决性能问题,包括 Main Actor 阻塞 和 Actor 竞争 +- 三、最后讨论了一些 Swift 并发的潜在问题包括线程池耗竭和续体误用 + +### 🌟 [【WWDC22 110354】Swift 新特性介绍](https://xiaozhuanlan.com/topic/2498765013) + +Swift 一直致力于让编程变得更简单,并以此为目标不断地进行迭代。本文将对 Swift 5.7 的新特性进行介绍,主要分为以下五个部分: +- 1. 社区最新动态 +- 2. Swift Package Manager 插件 +- 3. Swift 底层性能优化 +- 4. Swift 并发模型 +- 5. Swift 语言优化 + +### 🌟 [【WWDC22 10065】即插即用:将 Apple frameworks 添加到您的 Unity 游戏项目](https://xiaozhuanlan.com/topic/2583470691) + +本文将帮助开发者如何在 Unity 应用或游戏中快速集成 Apple 的一些原生功能插件,以提升作品的体验。本次 WWDC , Apple 为我们带来了六个基于 Unity 版本的插件:Apple.Core、Game Center、Game Controller、Accessibility、Core Haptics 和 PHASE。我们将分别介绍它们的功能,以及如何快速编译、导入到开发者的项目中。文末,还给出了使用这些插件的一些场景以及注意点。 + +### 🌟 [【WWDC22 110336】 Screen Time API 的新特性](https://xiaozhuanlan.com/topic/7169340528) + +本文将介绍 Screen Time API 在 iOS 16 的新特性以及基于此可以实现的功能。全文分为三个部分: +- 1. 回顾 iOS 15 中 Screen Time API 特性 +- 2. Screen Time API 在 iOS 16 的新特性介绍 +- 3. Screen Time API 新特性的实践 + +### 🌟 [【WWDC22 10115/10119】优化 CoreData & CloudKit 实现](https://xiaozhuanlan.com/topic/5821964073) + +本文将结合开发者个人项目案例,旨在通过单元测试、Instruments、日志收集三方面,覆盖开发流程的三个重要方面:探索、分析与反馈,帮助开发者优化实现方案实现,做出更好的产品。同时了解到 CloudKit 的同步流程与相关系统服务。 + +### 🌟 [【WWDC22 10040】 探索 In-App Purchase 集成和迁移](https://xiaozhuanlan.com/topic/8024563197) + +本文主要聚焦于 App Store Server API 和 App Store Server Notifications。从去年 WWDC21 苹果推出了 StoreKit v2、App Store Server API v1 和 App Store Server Notifications v2,今年 WWDC22 基于这些功能的基础上,增加了一些新的 API 和一些服务的优化。另外,针对大家对这些新特性有一些疑虑,如 JWT/JWS、兼容性、安全性、订阅通知、集成和迁移等等,苹果进行了详细的解答,还提供非常多的最佳实践的案例和优化建议。 + +## 摸鱼周报 + +[@摸鱼周报 #57](https://mp.weixin.qq.com/s/e4ZbFBPqclgy7KyfxVyQZA):第 57 期摸鱼周报来了,这期排版做了一些改动,一起来看下本期概要: + +* 本期话题:WWDC22 讲座集锦,Apple 夏令营课程回归 +* 本周学习:Xcode Playground Tips +* 内容推荐:苹果开发者大会落幕,介绍一些 WWDC22 推出的新技术和新内容 +* 摸一下鱼:Apple Logo Artwork,收录苹果独特多彩风格的媒体版本 Logo + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#207-2022.07.04.md b/Reports/2022/#207-2022.07.04.md new file mode 100644 index 000000000..35e36e29b --- /dev/null +++ b/Reports/2022/#207-2022.07.04.md @@ -0,0 +1,218 @@ +# 老司机 iOS 周报 #207 | 2022-07-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 19 篇文章,目前总共已经更新了 34 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10078】降低网络延迟:让你的 App 变得更快](https://xiaozhuanlan.com/topic/3108247569) + +如何让 App 变得更快,对于开发者来说是一个永恒的课题。2021 年,苹果给大家分享了许多网络延迟优化相关的理论知识,而今年,苹果在去年的基础上,又为我们带来了这一篇颇具实战指导意义的分享,从客户端侧、服务端侧、网络协议侧三个方面入手提供了一系列行之有效的建议,帮助开发者们更好的分析和改善应用的网络延迟状况,从而让你的 App 变得更快。 + +### 🌟 [【WWDC22 110427】What's new in Xcode](https://xiaozhuanlan.com/topic/9706284531) + +本文主要从 Xcode 14 功能上的更新以及体积性能的改进入手,通过简单 Demo 的演示,分享此次 Xcode 令人振奋的一些更新。本文将主要聚焦 Xcode 本身的性能优化提升、开发者效率提升以及其他新增功能这几个角度,通过对这些更新的了解,相信会对大家的日常工作开发有很大的帮助。 + +### 🌟 [【WWDC22 110362】快速链接:提高构建和启动耗时](https://xiaozhuanlan.com/topic/1509638472) + +本 session 是由苹果链接器团队的首席工程师 Nick Kledzik 带来的关于如何实现快速链接的分享。主要介绍了苹果近期在静态链接和动态链接方面的一系列优化,同时帮助大家理解链接过程中的底层细节,让大家可以提升自己 App 的静态和动态链接性能。 + +### 🌟 [【WWDC22 110355】Meet Swift Async Algorithms](https://xiaozhuanlan.com/topic/8217965043) + +本文通过阅读源码的方式,来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为三部分: +- 第一部分介绍对于多个输入情况下,处理输入/输出结果的逻辑 +- 第二部分介绍 Clock 协议,以及相关的使用方式和效果 +- 第三部分介绍在 Clock 协议上实现的两个算法 +- 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架 + +### 🌟 [【WWDC22 110351】使用 Swift 并发消除数据竞争](https://xiaozhuanlan.com/topic/8297064135) + +本文主要回顾了在 Swift 5.5 中引入的 Sendable 协议和用法,同时介绍了 Swift 5.7 编译器中基于 Sendable 协议实现的边界检查,防止在任务切换或者 Actor 切换时造成的数据竞争。探讨了低级数据竞争( low-level data race ),也探讨了如何通过在 Swift 并发中实现事务原子性从而防止高级数据竞争( high-level data race ),同时讲述了如何在安全的并发环境中保持代码逻辑的执行顺序。 + +## 新手推荐 + +### 🐕 [iOS内存分析之Memory Graph](https://mp.weixin.qq.com/s/siwMWiSGcCyk-CVPcNjHMw) + +[@老驴](https://weibo.com/u/6090610445):Memory Graph 是 iOS 开发中经常用到的非常好用的工具。对于一些比较难 debug 的内存泄露类型的 bug 来说,可以做到事半功倍的效果。这篇文章介绍了怎么样使用 Memory Graph,也包括了内存泄露的分析的基础分析方法,如果你是刚接触 iOS 开发的话,不妨来读一读。 + +## 文章 + +### 🐎 [What Apple might do with distributed computing](https://rhonabwy.com/2022/06/01/what-apple-might-do-with-distributed-computing/) + +[@Smallfly](https://github.com/iostalks):本文针对 Swift 不断迭代的并发模型,提出了对苹果在分布式计算领域的发展设想。作者期望苹果系统的跨进程通信能力,能复用在跨设备通信上,来提高苹果设备的协作性。并例举了分布式计算能解决的两个现存问题,一个是 Siri 唤起多设备,设备不能统一化决策问题;另一个是 HomeKit 数据共享问题。 + +### 🐎 [Existential any in Swift explained with code examples](https://www.avanderlee.com/swift/existential-any/) + +[@享耳先森](https://github.com/iblacksun):在 Swift 5.6 中,[SE-335](https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md) 引入了 `existential any`,Swift 5.7 对其进行了增强。本文详细介绍了 `any` 关键词具体用法、和 `some` 的差异及对性能的影响。 + +### 🐕 [如何持续突破性能表现?DX 性能优化策略详解](https://mp.weixin.qq.com/s/E-ep8vIQpIIMCUhGGxdS0Q) + +[@Barney](https://github.com/BarneyZhaoooo) 本文介绍淘宝乃至整个阿里集团内广泛使用的 Native 动态化方案 DinamicX,一步步带我们揭开它的神秘面纱,文章干货比较密集,需要仔细品读。 + +- DX 现状 +- 管线优化 +- 渲染优化 +- 离屏资源管控框架 + +### 🐢 [使用 LLVM](https://ming1016.github.io/2022/06/10/use-llvm/) + +[@anotheren](https://github.com/anotheren):来自戴铭的 LLVM 系列文章,目前已更新至代码真实使用情况的篇章,介绍了如何使用 LLVM 低成本地检查代码使用情况。如果你也需要检查代码的新陈代谢来控制包体积,不妨看看这篇文章。 + +### 🐎 [Some keyword in Swift: Opaque types explained with code examples](https://www.avanderlee.com/swift/some-opaque-types/) + +[@Damien](https://github.com/ZengyiMa): some 关键词是 Swift 5.1 的新特性,它的作用是允许你在不定义具体类型的情况下描述预期的返回类型,在 Swift 中可帮助简化代码并提高可读性。同时在 Swift 5.7 也引入了许多改进并且编译器也可以进行代码优化,本文作者细心整理了使用 some 的例子和注意事项,想必看了本文之后能对 some 的理解和使用更上一层楼。 + +### 🐎 [Dutter | 前车之鉴:聊聊钉钉 Flutter 落地桌面端踩过的“坑”](https://mp.weixin.qq.com/s/53pZQgDI642dWQPY2CdkiA) + +[@老峰](https://github.com/gesantung):本文主要介绍一下钉钉 Flutter 业务灰度过程中,在桌面端遇到并处理过的几个 FlutterEngine 层面的 Bug。具体包含以下内容: + +Mac 端: + +- FlutterEngine 退出之后内存泄漏问题; + +- FlutterEngine shutdown 阶段死锁问题; + +- 低版本 macOS OpenGL 析构阶段 Crash 问题; + +Windows 端: + +- Win7 设备渲染模块「Crash + 残影」问题; + +- FlutterPlugin 注册阶段野指针 Crash; + +- Flutter Window 可见性变化之后页面白屏。 + +《Dutter 系列文章》分享了钉钉在跨四端方框架的技术实践与踩坑经验,共分为上、下两篇,上篇内容可点击[《钉钉 Flutter 跨四端方案设计与技术实践》](https://mp.weixin.qq.com/s?__biz=Mzg4MDY0ODk0Ng==&mid=2247486687&idx=1&sn=f928b90fb1d3964970dc0c6b0d9f11f9&chksm=cf70bb42f80732549e87b91ca1ad72a758db06d890249c8ac47cfc86c2689556f8ba84d51946&scene=21#wechat_redirect),感兴趣的小伙伴建议阅读。 + +### 🐕 [Flutter 渲染性能问题分析](https://mp.weixin.qq.com/s/PaJs948QvupKZ0umjT2vjA) + +[@EyreFree](https://github.com/EyreFree):Flutter 有很多优点,虽然它在渲染性能上有不少缺陷,但是某种程度上,某些缺陷也是为了实现更高层次的设计目标而不得不承受的结果。这篇文章就是对比 Web (Chromium) 和 Native (Android),对 Flutter 的渲染性能问题进行深入分析,特别是分析惯性滚动性能糟糕的原因。并且提供了一些优化思路和优化结果的分析数据,对 Flutter 性能优化感兴趣的朋友不要错过。 + +### 🐎 [信息安全 | 互联网时代,如何建立信任?](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247484972&idx=1&sn=4f0d819e8ab9456bd2ee81942abb3f22&chksm=ceea4b8cf99dc29ad27798c860c9db89621d81497fb6a5d206ed0602d75cffbb1bfdbec5809a&token=2062691669&lang=zh_CN#rd) + +文章从信息安全是什么说起,到为什么,到怎么做,脉络清晰,层层递进,最后还聊了一些相关的应用加深理解。 + +通过文章可以让读者回答并理解以下问题: + +1. 信息传输一般使用对称加密+非对称加密,为什么?不能只使用其中一种吗? +2. 信息安全为什么需要数字签名? +3. 为什么签名前需要做哈希操作? +4. 信息安全为什么需要数字证书? + +文章的终极目标是:当我们在遇到密码学相关问题时,不再恐惧和迷惑。 + +> 推荐人:[doubleLLL3](https://github.com/doubleLLL3)(公众号 Bo2SS) + +## 工具 + +### Git 相关 + +- [lazygit](https://github.com/jesseduffield/lazygit) +- [约定式提交](https://www.conventionalcommits.org/zh-hans/v1.0.0-beta.4/) +- [git-cz](https://github.com/streamich/git-cz) + +[@红纸](https://github.com/nianran): lazygit 是一款 GUI 化的 Git 终端交互工具,其界面简洁,通过快捷键就能触达各个指令功能,实属是键盘控的福音了~ + +约定式提交提供了一种提交 git commit message 的规范化里面,旨在提供「一种用于给提交信息增加人机可读含义的规范」,举例用 "feat(Person): Submit new parameters" 来提供人机可读的交互,**feat** 代表新功能 **(Person)** 则代表 Person 作用域,后面则是具体的提交说明。使用约定式提交,我们还可以利用 CI/CD 来自动化生成 CHANGELOG,包括我们 SDK 的 Release Note 都可以这么去做。git-cz 则是一款非常优秀的引导使用约定式提交工具。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10074】AppKit 框架的新特性](https://xiaozhuanlan.com/topic/5137426980) + +AppKit 是 macOS 应用的核心框架之一。WWDC22 对 AppKit 框架的更新包括对设计语言的完善和平台一致性相关的演进。本文将介绍 AppKit 在 WWDC22 上的新特性和开发者的适配要点。 + +### 🌟 [【WWDC22 110344/10109】 Developer Mode 与 Notarization](https://xiaozhuanlan.com/topic/5760498231) + +苹果作为隐私安全方面的先行者,一直致力于让用户能够下载到可靠和安全的应用,并确保用户和开发者的使用体验,试图在安全性和易用性上达到一个良好的平衡。 +本文介绍的 iOS 方向的 developer mode 和 macOS 方向的 notarization 都是苹果基于这些原则的最新实践。 + +### 🌟 [【WWDC22 10041】Wallet 和 Apple Pay 的新功能](https://xiaozhuanlan.com/topic/6245091837) + +本文通过回顾 WWDC 2022 了解 ``Wallet`` 和 ``Apple Pay`` 常规更新和新增的功能。其中常规更新包含:**无接触支付**、**Mac 同步 Apple Pay 功能**、**SwiftUI 新增 API**等功能,新增功能包含:**多商户支付**、**自动支付**、**订单跟踪**、**身份验证**等功能。最后更新了交通卡支持 ``Apple Pay`` 的城市和地区以及目前支持的设备,并提供相关 Demo 以供大家测试。 + +### 🌟 [【WWDC22 10003】初见 WeatherKit](https://xiaozhuanlan.com/topic/7104928536) + +本文将介绍 Apple 新推出的 WeatherKit 天气服务。全文共分为四个部分:第一部分是介绍 Apple 平台中的天气 app。第二部分是介绍支持查询的天气数据集的具体指标。第三部分是介绍如何使用 Swift 和 Python 3 进行接入及接入注意事项。第四部分是总结和展望。 + +### 🌟 [【WWDC22 10075】结合使用 SwiftUI 和 AppKit](https://xiaozhuanlan.com/topic/4072968531) + +本文以 macOS 版本的快捷指令应用(Shortcuts)为例,介绍把 SwiftUI 和 AppKit 结合使用的一些方式和注意事项。 + +### 🌟 [【WWDC 110371】 使用 Xcode 进行多平台开发的那些事](https://xiaozhuanlan.com/topic/8549720316) + +本文将配合 Xcode 14 从以下几个方面讲述多平台项目从开发到上线的过程。 + +### 🌟 [【WWDC22 110345】 使用 Endpoint Security 保护 Mac 安全](https://xiaozhuanlan.com/topic/6541789230) + +本文将主要聚焦于 Mac 的 EndPoint Security 功能的新特性。全文共分为 3 个部分:第一部分是介绍端点安全将取代之前的 kAuth 等 API 。第二部分是对 Muting 技术的介绍,包括如何使用官方 API 。最后一部分是关于 eslogger 可以提供更加丰富的端点安全事件。 + +### 🌟 [【WWDC22 10076】 将你的 iOS 应用搬到 Mac 上](https://xiaozhuanlan.com/topic/5912378064) + +SwiftUI 可以跨整个苹果生态,Flutter 可以跨大多数主流平台,为什么我还要选 Mac Catalyst ?假如有一套已经基于 UIKit 实现的 iPad 代码想要迁移到 Mac 上的话,Mac Catalyst 将是你的不二之选。本文将为你介绍 iOS 应用迁移到 Mac 上的几种方式,并且展示了新系统中的新接口。 + +### 🌟 [【WWDC22 10007】 IAP 新特性](https://xiaozhuanlan.com/topic/3872506491) + +本文结合 WWDC21 IAP 相关能力,对 WWDC22 IAP 相关新特性进行了梳理回顾。本年度苹果虽无 WWDC21 的大拆大建,但却进行了大量的小修小补。苹果对基础能力的补充,让 StoreKit 2 从可用变成好用。阅读本文,与我们一同探讨优化 StoreKit 2、App Store Server API 及 App Store Noitfications V2 的相关策略! + +### 🌟 [【WWDC22 10155】ScreenCaptureKit:MacOS 上的高性能屏幕录制框架](https://xiaozhuanlan.com/topic/0458326917) + +屏幕录制一直以来都是一个桌面系统需要提供的基本能力,可以应用到很多场景,例如:视频会议中的桌面共享、电脑游戏直播、远程桌面控制等。 今年的 WWDC 苹果新推出了一个 MacOS 上的高性能屏幕录制框架 ScreenCaptureKit。 ScreenCaptureKit 不仅通过提供更加易于理解的 API 来简化开发成本,还大大提升了屏幕录制的性能,以便 MacOS 用户可以获得更佳的使用体验。 + +### 🌟 [【WWDC22 10089】 What's new in PDFKit](https://xiaozhuanlan.com/topic/9204781563) + +本文基于 WWDC17 Introducing PDFKit on iOS 以及 WWDC22 What's new in PDFKit 两个 Session 的内容梳理,先后介绍了 PDF 的简介、苹果在 PDF 处理中的发展历史、PDFKit 的基本内容以及 PDFKit 最新的特性。 + +### 🌟 [【WWDC22 10120】进化你的 Core Data Schema](https://xiaozhuanlan.com/topic/6074813952) + +数据迁移是数据库绕不开的话题。在 Core Data 中,轻量迁移更是每一个使用者的必修课。本文将由浅入深的介绍 Core Data 轻量迁移的功能、局限与最佳实践以及迁移在 CloudKit 中的注意事项。 + +### 🌟 [【WWDC22 10077】验证码的替代者—私有访问凭证](https://xiaozhuanlan.com/topic/6437105829) + +验证码技术一直被用于真实流量识别,虽然比较有效但是也给用户带来了一些不便,于是一些平台尝试收集用户隐私信息来精准识别用户。一向注重保护用户隐私的苹果则认为这种做法不可取,于是苹果带来了新的认证技术:Private Access Token。 + +### 🌟 [【WWDC22 10061】将多窗口引入 SwiftUI 应用](https://xiaozhuanlan.com/topic/3529016874) + +本文将围绕构建 SwiftUI app 的多窗口进行讨论。 共分为 4 个部分: +1. 介绍 SwiftUI 生命周期中的各种 scene types,包括几个新引入的 Window 和 MenuBarExtra; +2. 通过添加auxiliary scenes的方式将这些 scene types 组合在一起; +3. 介绍一些为特定 scenes 打开窗口的新 API; +4.介绍一些在 app 中自定义 scene 的方法。 + +## 摸鱼周报 + +[@摸鱼周报 #58](https://mp.weixin.qq.com/s/KwqFraJk40f9bEy0eKa8Kw):第 58 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:在您的 App 中提供帐户删除选项 +* 本周学习:如何配置合适的 ATS +* 内容推荐:WWDC22 推出的新技术和新内容(二番) +* 摸一下鱼:开启真·摸鱼模式,在线养金鱼;极客风的听歌网站,纯文字的音乐播放器;网页设计博物馆;Stack Overflow 年度调查。 + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#208-2022.07.11.md b/Reports/2022/#208-2022.07.11.md new file mode 100644 index 000000000..f904f3716 --- /dev/null +++ b/Reports/2022/#208-2022.07.11.md @@ -0,0 +1,205 @@ +# 老司机 iOS 周报 #208 | 2022-07-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +> [苹果 App Store 审核问题和体验收集](https://docs.qq.com/form/page/DZUxDcVdPQWpJc0hL#/fill) +> 老司机准备做一次社区内关于 App Store 审核这方面的问卷调查,旨在了解我们社区内 App Store 审核的体验与存在的问题。收集完问卷后我们会不定期组织有经验的开发者进行圆桌讨论,并将典型的问题整理成文发布。可以[点击链接](https://docs.qq.com/form/page/DZUxDcVdPQWpJc0hL#/fill)填写。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 14 篇文章,目前总共已经更新了 48 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10056】在 SwiftUI 中组合各种自定义布局](https://xiaozhuanlan.com/topic/1507368249) + +在本 Session 中介绍了 SwiftUI 用于编写应用程序视图布局的一些新工具。 + +- 我们可以使用 Grid 来构建高度可定制的静态信息二维布局。 +- 我们可以使用布局协议来定义自己的通用布局、可重用布局或特别定制用例的布局。 +- 当我们想让 SwiftUI 从一组视图中选择最适合屏幕可用空间时,我们可以使用 ViewThatFits。我们可- 以使用 AnyLayout 在不同的布局类型之间平滑地过渡。 +- 以及关于 GeometryReader 的讨论。 + +### 🌟 [【WWDC22 10106】游戏内存调试与优化](https://xiaozhuanlan.com/topic/4258936701) + +本文展示了 Apple 平台游戏 App 内存的计算、分配、和调优技巧。全文分四个部分: +- 第一部分讲解了内存的基本概念; +- 第二部分展示如何使用 Instruments 工具和 Game Memory Template 来分析游戏,通过游戏内存快照来监测当前内存使用情况; +- 第三部分介绍了使用 Xcode Memory Debugger 和命令行工具进行分析优化; +- 第四部分探索 Metal Debugger 中的 Metal 资源,并提供提示和技巧以进一步优化内存使用。 +通过本文的探索,您可以更好地理解游戏的内存构成和优化游戏的内存使用。 + +### 🌟 [【WWDC22 110370】使用 LLDB 调试 Swift](https://xiaozhuanlan.com/topic/4809126537) + +本文主要介绍了在使用 LLDB 调试 Swift 代码时常见的问题,包括源代码索引问题以及 po 指令失效问题,通过分析问题出现的原因和解决方案,帮助各位开发者更深入地了解 LLDB 的调试信息和工作原理,并且学会在复杂场景下设置 LLDB 友好的 Swift 项目。 + +### 🌟 [【WWDC22 10122】提升 “通过 Apple 登录” 的体验](https://xiaozhuanlan.com/topic/8752349016) + +本文主要介绍如何通过 “通过 Apple 登录” 将基于密码的账户升级为拥有安全便捷的一键登录凭据,增强和简化应用的登录体验,同时并探索如何无缝处理 App 中用户会话的更改和账户删除,以及在 Web 和其他跨平台上充分发挥 “通过 Apple 登录” 的优势。 + +### 🌟 [【WWDC22 10147】 创造优秀的视频播放体验](https://xiaozhuanlan.com/topic/8504173629) + +这篇 session 围绕着 Apple 新升级的视频播放器,描述了新的播放器的新界面、新功能,以及 Apple 对提高视频播放体验的建议和思考。全文主要分成两部分:第一部分会介绍新版播放器的功能和播放器的设计建议;第二部分会对播放器新支持的 API 做出简单的阐述。文章的最后列举了国内外播放器的设计实现,希望对你有所启发。 + + +## 新闻 + +### [HTTP3 RFC标准正式发布,QUIC 会成为传输技术的新一代颠覆者吗?](https://mp.weixin.qq.com/s?__biz=Mzg4MjE5OTI4Mw==&mid=2247494885&idx=1&sn=bb61db8b0f5f5cf3c540c6dad8070532&source=41#wechat_redirect) +[@莲叔](http://aaaron7.github.io/):相信和网络经常打交道的同学对QUIC都不陌生,在很多数据密集传输的领域,如音视频,往往基于 UDP 协议能提供比 TCP 更鲁邦的传输性能和吞吐量。如果网速越来越快,以及 HTTP 协议的大规模使用,使得 QUIC 横空出世成为 HTTP 协议演进的主要方向。手淘已经很早就在实际的业务场景中使用 QUIC 来做网络传输优化并实现了自研的 XQUIC,适逢 HTTP3 标准发布,本篇文章就是由 XQUIC 组的同学分享了关于 QUIC 应用的经验,主要包括【适用的场景】,【业务应用 QUIC 路径】,【QUIC性能提升的选择】以及【服务端 UDP 瓶颈突破】几个方面,对网络优化有需求的同学可以了解看看。 + +## 文章 + +### 🐎 [Automatically update if let and guard let for Swift 5.7](https://digitalbunker.dev/updating-if-guard-let-for-swift-5-7/) + +[@张嘉夫](https://github.com/josephchang10):[What's new in Swift](https://developer.apple.com/videos/play/wwdc2022/110354/) 介绍了 Swift 5.7 对 `if let` 和 `guard let` 语法的更新。在 Swift 5.7 之前,当我们使用 `if let` 或者 `guard let` 来展开可选值时,我们通常会使用相同的命名。最新版本的 Swift 支持了简写,可以直接省略等号及右边部分。本文提供了两个正则表达式,以便把代码库整体更新为这个新的、更整洁的语法。此外,作者还提供了一个 pre-commit hook 脚本,以确保你已经进行了转换。 + +### 🌟 🐢 [8K HDR!|为 Chromium 实现 HEVC 硬解 - 原理/实测指南](https://mp.weixin.qq.com/s/O6lU8qTKAKBMH3Oi5H4yxg) + +[@JonyFang](https://github.com/JonyFang): 本文简述了 Web 解码方案现状,介绍了作者为 Chromium 浏览器实现、完善硬解码过程中遇到的问题及最终的实现原理。在文末,也附带了测试结果,预编译版本供参考,希望可以解决 FrontEnd 苦于 HEVC 已久的问题。 + +### 🐕 [Alibaba.com App瘦身实践——iOS包大小技术与ROI总结 - 掘金](https://juejin.cn/post/7117074938577551368) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了阿里巴巴App瘦身的整体思路,包体优化的文章有很多,但本篇文章在技术大图上组织的比较清晰,尤其对复杂业务的梳理值得借鉴。 + +- 业务价值 +- 分析技术 +- 瘦身过程 + - 瘦身技术大图 + - 组件瘦身 + - 资源瘦身 + - 编译优化 + - 代码下线 + - Flutter专项 +- 防劣化 + +### 🐕 [Flutter 小技巧之 Dart 里的 List 和 Iterable 你真的搞懂了吗?](https://mp.weixin.qq.com/s/GwAoMN77EVbZdo9Jya9hRA) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文内容如下: +- 介绍了 Dart 中的 Iterable 协议的 Lazy 属性,只有被操作时才会生成对应元素,且结果不会被缓存,多次访问会导致多次计算 + - 在 List 上调用 map/where 会返回 lazy 特性的 Iterable + - 在 List 上调用 toList/toString 等则不会 +- 介绍了 Iterable 懒加载特性的适用场景与注意事项 + - 不要在 Iterable 中使用副作用 + - 分页加载数据、数据库查询 时可以使用 Iterable +- 对比了 List 与 一般的 Iterable 在内部实现中的不同 + - List 具有 length(长度),内部的 ListIterable 是通过 _iterable.length 与 _iterable.elementAt 实现 + - 一般的 Iterable 是顺序访问的集合,并不关心 length(长度) + +笔者:如果做个类比,那在表现上可以理解为 Swift 的 lazy 。现在新的语言大多都有互相借鉴能力的倾向,关于 Swift 的 lazy 可以查看: [Lazy Sequences in Swift And How They Work](https://swiftrocks.com/lazy-sequences-in-swift-and-how-they-work)。 + +### 🌟 🐢 [干货 | 携程酒店 Flutter 性能优化实践](https://mp.weixin.qq.com/s/sFF0R_wVBO6e3OSo27V1kg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在业务不断迭代和代码持续更新的状态下,应用的性能始终是一个需要持续关注和优化的点,Flutter 应用亦如此。本文由携程前端团队产出,聚焦于 Flutter 体系下的各类优化及详细方法: + +- FPS&TTI 提升优化 +- UI GPU 问题定位与优化 +- Flutter 服务通道优化 +- 内存泄漏治理 + +笔者: 携程前端团队近大半年在 Flutter 相关的技术上产出颇丰,小编建议各位同学可以翻一下往期相关文章,一定收获满满 + +### 🐢 [通过汇编分析方法参数,其实很简单~](https://mp.weixin.qq.com/s/7w6h3GONKXl23D4eoIAd3w) + +[@AidenRao](https://weibo.com/AidenRao):我们经常会在开发过程中遇到崩溃,如果是崩溃到系统的方法里,我们想要知道方法的参数什么,在不知道参数的个数和参数类型的情况下是非常头痛的。作者通过几个例子,逐步讲解函数在汇编下的调用过程,及如何通过汇编推测函数的参数个数和类型。 + +### 🐕 [Flutter 小技巧之有趣的动画技巧](https://mp.weixin.qq.com/s/bIuTsqg7p8F979owSpEO2Q) + +[@EyreFree](https://github.com/EyreFree):Flutter 里实现常见的动画效果很简单,甚至不需要自定义布局,只需要通过官方的内置控件就可以轻松实现。本篇通过分享一个示例动画的实现,简单轻松地讲解了 AnimatedPositioned 和 AnimatedContainer 的使用,并且进一步引出它们是如何基于 ImplicitlyAnimatedWidget 实现所拥有的功能的,剖析了 Flutter 里的动画技巧。在学习和使用 Flutter 的朋友不要错过。 + +### 🐕 Hummer 引擎优化系列-[Sliver多节点和单节点分帧原理](https://mp.weixin.qq.com/s/otV8FOZyH6AbPeI1EtU5CA)[Dart Split AOT技术,以及定制化Deferred Components的实现](https://mp.weixin.qq.com/s/gzTRQCqRV1XUYwNuROFx_g) + +[@极速男孩](https://github.com/ztlyyznf001):Hummer 是阿里的 UC 团队深度定制优化的 Flutter 引擎,第一篇主要介绍了如何利用分帧原理 Flutter 中 Sliver 单节点和多节点滑动优化的。第二篇主要介绍了 Hummer 引擎如何利用 Dart Split AOT 技术和定制化 Deferred Components 来实现原来只能在 Play Store 才能实现的递增下发的功能。 + +### 🐕 [百度 APP 基于 Pipeline as Code 的持续集成实践](https://mp.weixin.qq.com/s/oVkFmwFN68b6W_SkcJHKRA) + +[@红纸](https://github.com/nianran):本文简述的是百度的持续集成实践(Pipeline as Code),让产品线用结构化的语言去描述他们研发流程需要的一组功能或特性,然后根据描述(DSL)自动化地生成对应的流水线,其 DSL 参考于 Github Actions。文中也提到了一些实现细节,包含 Action 的可复用机制、事件触发机制、基于百度云的虚拟机集群、Pause/Unpause 的恢复上下文技术、多种 Action 和 Runner 交互的方案。 + +### 🐕 [React Native 中实现动态导入](https://mp.weixin.qq.com/s/oKeY6DsBDarBxRzySDMzDQ) + +[@xuyafei](https://github.com/xiaofei86):随着业务的发展,每一个 React Native 应用的代码数量都在不断增加,bundle 体积不断膨胀,对应用性能的负面影响愈发明显。拆分多业务包虽然可以解决单个应用不断膨胀的问题,但仍存在不少局限性。本文,网易云音乐技术团队为大家带来对 Metro 进行深度定制实现的动态导入(Dynamic import)方案。其可以方便地实现页面按需加载,组件懒加载等能力,感兴趣可以阅读原文了解。 + +### 🐕 [Reduce in Swift](https://swdevnotes.com/swift/2022/reduce-in-swift/) +计算一个数组里面所有值的和,我们可能通常会想用 for 循环去做。但其实 Swift 很早就给我们提供了一个高阶函数去实现类似的功能,它就是 Reduce 函数。熟悉函数式语言的同学对 Reduce 应该并不陌生,Swift 里的 Reduce 也是用作数组元素的累加计算,掌握它可以让我们写出更优雅的实现! + +## 工具 +### [SwifRegex.com](https://swiftregex.com/) + +[@kemchenj](https://kemchenj.github.io/):正则表达式是一种简洁强大的工具,但伴随而来的是 Debug 难的问题。SwiftRegex.com 就是为解决这个问题而制作的一款工具,让我们可以快速调试检验自己的正则表达式,并且也提供了 Builder DSL 模式让我们可以使用 Regex Builder 的表达式来编写。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110355】了解 Swift 异步算法](https://xiaozhuanlan.com/topic/8217965043) + +本文通过阅读源码的方式,来深入理解苹果官方 Async Algorithms 实现逻辑。全文可以分为四部分: +- 第一部分介绍对于多个输入情况下,处理输入/输出结果的逻辑 +- 第二部分介绍 Clock 协议,以及相关的使用方式和效果 +- 第三部分介绍在 Clock 协议上实现的两个算法 +- 第四部分简单的比较苹果实现的 Async Algorithms 和常见的面向过程框架 + +### 🌟 [【WWDC22 10043/10044/110404】App Store Connect 中的新特性及最佳实践](https://xiaozhuanlan.com/topic/1502478369) + +本文对本次 WWDC22 中更新的三个 session:10043、10044、110404 进行了归纳整理,梳理了本次更新中 App Store Connect 的新特性,并对其中的重要更新功能:增强的 App Store 提交体验、应用基准测试工具、用户订阅状态即时获取,展开了最佳实践讨论。 + +### 🌟 [【WWDC22 110380】 SharePlay 中显示广告和插播内容](https://xiaozhuanlan.com/topic/3149265870) + +本文是基于大家对 SharePlay 技术有一定了解的情况下,介绍关于流媒体 App 使用 SharePlay 技术向不同用户展示不同广告/插播内容时产生不同步问题的解决方案。 + +### 🌟 [【WWDC22 110349/110348】Swift Playground 指北](https://xiaozhuanlan.com/topic/9107542836) + +Apple 在今年 WWDC22 中没有重点展开 Swift Playgrounds 的内容,但 Swift Playgrounds 4.0 以上版本可以作为一个完整、运行在 iPad 中的 IDE,更强大用户权限管理、更细致 的 UI 表现以及更符合直觉的代码联想,我们终于可以在 iPad 上写真正的 App 了! + +### 🌟 [【WWDC22 10166/10167】探索应用追踪透明化 App Tracking Transparency 与隐私标签](https://xiaozhuanlan.com/topic/0934681275) + +现阶段,所有 App 想要追踪用户的数据,必须要通过 AppTrackingTransparency 框架来获得用户授权。因此,本文将聚焦于应用追踪透明化(App Tracking Transparency),并解释了用户追踪是如何定义的以及在确实需要接入此框架时,具体应该如何接入。 + +### 🌟 [【WWDC22 10098】在 Safari 里使用 Web Push](https://xiaozhuanlan.com/topic/0819724365) + +本文基于 WWDC22 Meet Web Push for Safari 的内容梳理,介绍 web push 的流程和在 macOS 平台的实现细节。 + +### 🌟 [【WWDC22 10133】实践项目:使用 SwiftUI 的新功能为 Apple Watch 构建出色的效率 App](https://xiaozhuanlan.com/topic/2487691035) + +“你的手腕从未像现在这样如此高效。”我们将使用 SwiftUI 在 Apple Watch 上实现滑行键入、与朋友共享内容及显示基本图表,构建一个跟踪「项目完成」效率的、全新的、独立的 watchOS App。 + +### 🌟 [【WWDC22 10018】为 macOS 应用支持「连续互通相机」](https://xiaozhuanlan.com/topic/5641729830) + +本文介绍了 macOS 13 和 iOS 16 的一个新的联动能力:Continuity Camera(连续互通相机)。这项能力将 iPhone 上优秀的摄像头模组和算力带到了 Mac 上面,并让大部分型号的 Mac 都能够受惠。Apple 不仅向我们展示了连续互通相机强大的功能/设计及其运用场景,同时演示了如何快速低侵入得集成连续互通相机的所有功能。 + +### 🌟 [【WWDC22 10048】Safari 和 WebKit 新特性介绍](https://xiaozhuanlan.com/topic/1560743928) + +本文主要介绍过去一年,Safari 和 Webkit 有哪些新增功能和改进。全文着重介绍了两个方面的改进,一个是 CSS,耗费了大量的笔墨介绍了过去 CSS 上的新增功能。另外就是 Web API 上新增了Web Push、Web Manifest File、Broadcast channels 、文件系统访问 API 以及在 Canvas 上对 P3 色域的支持。 + +## 摸鱼周报 + +[@摸鱼周报 #59](https://mp.weixin.qq.com/s/LJNCo0Eg11shGZN75-TZcg):第 59 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:CI/CD 和 DevOps 有什么区别?如果你不能准确回答的话,可以读一下这篇介绍,对 DevOps 再次加深理解。 +* 本周学习:OC所使用的类信息存储在哪? 如何从Macho中找到? +* 内容推荐: WWDC 2022 上推出的新技术(三番) +* 摸一下鱼:一款跨平台摸鱼神器 Thief,有趣的骚话生成器 sao-gen-gen + +## 内推 + +老司机周报团队联合知识小集和 SwiftGG 翻译组收录了一份靠谱的内推职位。 + +如果你想**找工作**,点这里:https://www.yuque.com/iosalliance/article/bhutav + +如果你想**招人**,点这里:https://www.yuque.com/iosalliance/article/ycyhf3 + +当然,也欢迎你关注我们每一期的周报,我们会在每期周报底部及时更新编辑内推岗位。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#209-2022.07.18.md b/Reports/2022/#209-2022.07.18.md new file mode 100644 index 000000000..47487a97b --- /dev/null +++ b/Reports/2022/#209-2022.07.18.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #209 | 2022-07-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 10 篇文章,目前总共已经更新了 58 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 3 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 10090】TextKit 2 新特性解读及适配方案](https://xiaozhuanlan.com/topic/5941762038) + +本文基于 WWDC22 10090 - What's new in TextKit and text views 进行介绍,首先是对于 iOS 上文本系统发展的回顾,接着介绍了 TextKit 的核心设计原则,TextKit 2 相对于 TextKit 1 的优化点,及 TextKit 2 新特性的解读及适配方案。 + +### 🌟 [【WWDC22 10082】利用 Xcode 和设备上的检测工具排查卡顿](https://xiaozhuanlan.com/topic/9126308457) + +今年 Apple 在开发各阶段中更新了一些帮助开发者定位卡顿的工具,借此机会笔者结合了本次更新内容与大家一同探讨分享卡顿的治理排查思路。 + +### 🌟 [【WWDC22 10083】减少手机电池消耗](https://xiaozhuanlan.com/topic/9602743158) + +本文将介绍优化电量消耗的相关内容,主要分为 4 个主要模块,分别是基于暗黑模式、刷新率、后台任务、推迟非实时性任务的耗电量优化。 + +## 文章 + +### 🐢 [How necessary are the programming fundamentals?](https://swiftrocks.com/how-necessary-are-the-programming-fundamentals) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者以自身的经验总结并回答了:“我一个 iOS 开发为什么需要懂图论等理论知识”这个常见的问题,并列举了哪些开发更应该重视这块内容;同时总结了为什么现在面试中的八股文现象导致大家对理论知识如此反感;最后作者给出了一些如何正确地在面试中结合实际项目考察理论知识的方法,值得一读。 + +### 🐎 [SF Symbol Changes in iOS 16.0](https://hacknicity.medium.com/sf-symbol-changes-in-ios-16-0-70a80660ba79) + +[@Smallfly](https://github.com/iostalks):苹果在 [WWDC 2022: What’s New in SF Symbols 4](https://developer.apple.com/videos/play/wwdc2022/10157) 宣布了 SF Symbols 的更新,目前已经超过 4000 个符号,自 iOS 13 发布,已经更新了十个版本。新版本中重命名的符号是向下兼容的,需要注意的是重命名的符号,要使用老的名称才能在低版本生效。此次更新的内容主要有: + +- 新增 698 个新符号图标 +- 默认渲染模式支持 `monochrome` 和 `hierarchical` +- 新增 150 个高亮状态可变色(Variable Color)符号图标 +- 重命名 24 个符号图标 +- 支持更多本地化符号图标 + +### 🐢 [文本布局性能提升 60%,Inline Text 技术原理与实现 | Cube 技术解读](https://mp.weixin.qq.com/s?__biz=Mzg4MjE5OTI4Mw==&mid=2247494888&idx=1&sn=c358b190640934bf83f42993ac4992ac&source=41#wechat_redirect) + +[@Leo](https://github.com/leomobiledeveloper):Cube 是一个轻量级支付宝小程序引擎,具有体积小、启动快、内存占用低的特点。本文详细讲解了 Cube 引擎对文本相关能力增强细节。包括了对文字的宽高的测量与计算,排版和布局,在增强 CSS 能力的同时又可以提升布局性能,这些文字相关的能力(或者叫 Feature )统一被称为 Inline Text。 + +目前在优酷 OTT 上 90% 由搭建平台产生的产物都默认开启了 Inline Text,使用了相关能力,提升布局的性能,由于协议页面的需求,开发者无需再使用 Javascript 进行分词更换颜色,直接使用引擎能力。 + +### 🐢 [淘宝iOS扫一扫架构升级 - 设计模式的应用](https://mp.weixin.qq.com/s/v3MWjZ4AcVxzVW6HfY9IiQ) + +[@老峰](https://github.com/gesantung):在日常开发中,经常会有老代码需要维护更新甚至重构,本文是手淘扫一扫针对旧业务进行架构升级以及设计模式在其中应用的的总结,全文包含如下内容: + +- 扫一扫原架构 +- 新架构设计模式:责任链模式、状态模式、代理模式 +- 扫一扫新架构 + +### 🐎 [Generics in Swift explained with code examples](https://www.avanderlee.com/swift/generics-constraints/) + +[@Damien](https://github.com/ZengyiMa):泛型允许你编写通用且可重用的代码,避免重复,并且泛型在 Swift 标准库中无处不在。你会在 Swift 中使用泛型特性吗?如果你对此不熟悉,不妨来读读此篇文章,作者会从各个角度来深入介绍泛型的使用。 + +### 🐢 [SwiftUI Grid](https://sarunw.com/posts/swiftui-grid/) + +[@Jimq](https://github.com/waz0820):今年的 SwiftUI 新增了一些富有表现力的控件,比如 Charts、Grid,为我们制作相应功能的界面提供了非常趁手的工具。其中,Grid 是在二维布局中排列其他视图的容器视图,所谓二维布局即行列布局。Grid 不是简单的 VStack / HStack 嵌套,它会将行列的创建作为单个操作处理,集中而非孤立地处理行列及其内部的 Cells。借助 Grid,我们可以批量又不失灵活性地控制行列的宽高,Cells 的对齐、间距、合并或空白填充。本文图码并茂,详细地介绍了其具体功能和用法。 + +### 🐎 [How iOS 16 makes your app launch faster](https://www.emergetools.com/blog/posts/iOS16LaunchTime) + +[@JonyFang](https://github.com/JonyFang): iOS 16 通过减少从磁盘加载的数据量,缩短了加载二进制文件所需的时间。在这篇文章中,作者主要介绍 iOS 16 中发生了什么变化,它到底快了多少,以及我们如何最好地利用这些新功能。 + +### 🐕 [Reverse Engineering SwiftUI’s NavigationPath Codability](https://www.pointfree.co/blog/posts/78-reverse-engineering-swiftui-s-navigationpath-codability) + +[@AidenRao](https://weibo.com/AidenRao):在一众开发者的呼吁声中,NavigationStack 成功取代 NavigationView 成为 SwiftUI 导航系统的主力。但在重新学习过程中,你是否对 NavigationPath 这个似乎有魔法的结构产生过疑问。它如何对不同类型的值进行类型抹除并存放在同一个数组容器中,同时又在取出值时恢复其类型信息以进行后续操作?[Point-Free](https://www.pointfree.co/) 试图通过逆向工程解答这一问题,并以此为契机打开 existential types 的潘多拉魔盒。 + +> 由 [KeithBird](https://github.com/KeithBird) 推荐收录 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 110429】探索 iOS 相机新特性](https://xiaozhuanlan.com/topic/0591234867) + +本 session 主要是 iPhone 相机模块有关的新 feature 介绍,包括 AVFoundation 支持新的深度相机类型、更智能的人脸驱动 AF/AE、相机视频流的优化以及相机支持多任务处理等更新内容。 + +### 🌟 [【WWDC22 110359】Swift Package plugins 初探](https://xiaozhuanlan.com/topic/7316598402) + +本文是 Swift 包新特性包插件的介绍文章。包插件可以做很多事情,比如代码格式化、代码扫描、自动生成多语言文件等等。通过本文介绍什么是包插件?包插件能做什么?包插件怎么用?让你对 Swift 包插件有个具体了解,可以上手开发自己的包插件。 + +### 🌟 [【WWDC22 110338】在 Now Playing 中展示播放信息与控制播放](https://xiaozhuanlan.com/topic/2819035467) + +本文主要讲述在 Now Playing 中展示播放信息与控制播放。 + +### 🌟 [【WWDC22 110403】初见新框架 "Background Assets"](https://xiaozhuanlan.com/topic/3198024567) + +Background Assets 是苹果在 iOS 16 中引入的新框架,目的是帮助用户减少 APP 使用时的等待时间,提升 APP 的整体使用体验,避免网速差、资源大等原因造成的用户流失。 + +### 🌟 [【WWDC22 10062】初见 Transferable](https://xiaozhuanlan.com/topic/7965203418) + +CoreTransferable 是苹果今年新出的纯 Swift 的框架,提供了一种更 Swift、更声明式的方式来描述数据该如何被传输和共享。本文将介绍其核心的 Transferable 协议的实现方式,及其常见的用法。 + +### 🌟 [【WWDC22 10035】探索苹果地图新功能](https://xiaozhuanlan.com/topic/0698342715) + +在过去十年里,‘苹果地图’持续修补漏洞、改进功能,从一开始依赖第三方数据到自己收集数据,一直在努力将其打造为世界上最好的地图应用。同时为开发者提供了两种将地图 App 整合到其产品中的方式,其中之一是 MapKit,可以让你将地图 App 整合到 iOS、iPadOS 或 macOS 的 App 中,这样你就能在 App 中显示地图或卫星图像、添加注释和悬浮窗、标注兴趣点、确定地图坐标信息等等。另外一个是MapKit JS,可为网站带来交互式地图,不只是添加注释、悬浮窗,还有搜索和导航等地图服务的界面。 + +在今年的 WWDC 中,苹果不仅带来了 MapKit 的新功能,还首次开放 Apple Maps Server API(苹果地图服务接口) 来帮助开发者构建性能更好的地图服务。 + +### 🌟 [【WWDC22 10052】What's New In SwiftUI](https://xiaozhuanlan.com/topic/3615907284) + +本文介绍 WWDC22 中 SwiftUI 的更新,使用代码 + 图片的形式进行介绍,包括 SwiftChart, Navigation and windows, Advanced controls,Sharing,Graphics and layout 等主题内容的介绍。 + +## 摸鱼周报 + +[@摸鱼周报 #60](https://mp.weixin.qq.com/s/Sv3goAv198eXjmlVJsN1rw):摸鱼周报已经到第 60 期了,大家可以看下本期概要: + +- 本期话题:2022 Apple 高校优惠活动开启 +- 本周学习:Swift 5.7 中的 opaque parameter 和 primary associated types +- 内容推荐: WWDC22 内参推荐 +- 摸一下鱼:推荐收集到的各种图标网站 +- 岗位推荐:上海 Espressif 招聘全栈工程师 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术】公众号,回复「2022」,领取 WWDC21 及以前的内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#210-2022.07.25.md b/Reports/2022/#210-2022.07.25.md new file mode 100644 index 000000000..b5340b9bc --- /dev/null +++ b/Reports/2022/#210-2022.07.25.md @@ -0,0 +1,168 @@ +# 老司机 iOS 周报 #210 | 2022-07-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 16 篇文章,目前总共已经更新了 74 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 5 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 110363】App 包大小优化和 Runtime 上的性能提升](https://xiaozhuanlan.com/topic/4675012938) + +今年 Apple 在 Objective-C 运行时和链接器底层做了重大优化,包括 Swift 协议检查、Objective-C 消息发送、Retain 和 Release 底层优化以及 Autorelease 自动省略优化。以往开发者往往需要使用各种奇淫技巧来优化包大小,而在 2022 年的当下,Apple 从汇编代码以及编译器、链接器层面做出的优化,就能自动让 App 的包体积得到减小。 + +### 🌟 [【WWDC22 10026】沟通影像世界的新桥梁——实况文本 API 介绍](https://xiaozhuanlan.com/topic/2861437095) + +实况文本(Live Text)是 Apple 为 iOS 15 和 iPadOS 15 新增的实用功能之一,简单来说,实况文本是一个系统级的 OCR 工具,它能够帮助我们把照片、相机界面当中的文字转化为可交互的文本。在 iOS 16 系统中更是开放了一系列封装好的实况文本 API,让我们可以方便在应用中集成实况文本功能。 + +### 🌟 [【WWDC22 10110】如何搭建一个国际化的应用](https://xiaozhuanlan.com/topic/6498107253) + +随着苹果的服务遍布全球,开发者的应用也被世界各地的用户使用。在这样的背景下,开发者们应该如何将自己的应用完成本地化呢? + +### 🌟 [【WWDC22 110368/110369】Swift-DocC 新特性](https://xiaozhuanlan.com/topic/3658492071) + +去年 Swift-DocC 一经发布就在社区引起了不小的反响,而开源更是为它带来了更强的社区支持。让我们一起看看这一年,这个官方力推的文档工具有哪些方面的进化,一起探索 Swift-DocC 背后的实现原理。 + +### 🌟 [【WWDC22 110364】揭开 Xcode 构建并行化的神秘面纱](https://xiaozhuanlan.com/topic/0389142657) + +本文会从 Xcode 构建的核心概念开始,让读者对构建过程有个初步了解,并提出一个强有力的新工具——构建时间轴(Build Timeline)。最后从 Target 内部的并行优化和 Target 之间的并行优化两方面介绍本次主题。 + +## 新闻 + +### [Upcoming transition from the XML feed to the App Store Connect API](https://developer.apple.com/news/?id=yqf4kgwb) + +苹果预计将在 2022 年 11 月下线 XML Feed 的请求,苹果提供了 App Store Connect REST API 来进行代替。新的 REST API 可以支持对 IAP、订阅状态、元数据、定价 等功能的自动管理。XML Feed 将继续对现有的 Game Center 管理提供支持。 + +关于 App Store Connect REST API 的进一步具体使用与介绍可以查看我们今年的内参:[【WWDC22 10043/10044/110404】App Store Connect 中的新特性及最佳实践](https://xiaozhuanlan.com/topic/1502478369)。 + + +## 文章 + +### 🐕 [StoreKit2 实际接入时候的踩坑与解决实录](https://juejin.cn/post/7122458652945956878) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文主要内容如下 +- lipo 裁剪拼接,32 位(armv7)环境下也可以在同一个 framework 内集成 StoreKit2 +- 通过 md5/pkcs7 等方式处理用户凭证为 uuid,同时兼容 applicationUsername(Original StoreKit) 与 appAccountToken(StoreKit2) 以获得订单与用户的关联 +- 介绍兼容新旧两套的交易通知的验证逻辑,减少用户掉单的情况 + +### 🐎 [UIPasteBoard's privacy change in iOS 16](https://sarunw.com/posts/uipasteboard-privacy-change-ios16/) + +[@张嘉夫](https://github.com/josephchang10):在 iOS 16 中,用户可以在某个 app 尝试读取剪切板数据之前允许或拒绝读取权限。和位置等其他隐私权限类似,在 app 尝试访问剪切板数据时,会向用户显示一个警告弹窗。但在当前的 beta 版本中,`UIPasteBoard` 的隐私权限与其他权限在行为上存在几处不同之处,例如用户做出的选择在 app 重新构建之后不会被记忆,以及该权限不会在 app 的隐私设置中显示,以致用户在允许之后无法再进行更改等。此外,作者还提供了三种方式来避免在访问剪切板数据时显示权限弹窗: + +- 用户通过选项菜单主动粘贴 +- 用户使用键盘快捷键(Command+V)进行粘贴 +- 使用 iOS 16 新增加的 `UIPasteControl` + +### 🐕 [MemoryThrashing:抖音直播解决内存抖动实践](https://mp.weixin.qq.com/s/KSSWuk6y3A6qL7WPL9irvA) + +[@Leo](https://github.com/leomobiledeveloper):内存有较大波动的时候往往会导致峰值过高或者驻留对象过多,进而直接或者间接造成 OOM。本文是抖音直播基础技术团队提出的 iOS MemoryThrashing 解决方案,通过采样多个时刻的内存(主要监控 class 的实例个数), diff 出内存信息找出 top 增长,达到归因的目的。 + + +### 🐕 [一键释放iOS 64位App潜力](https://www.toutiao.com/article/7116717500678570507) + +[@红纸](https://github.com/nianran):本文主要讲述一个冷门知识,利用两个配置可以扩大虚拟内存的申请上限(com.apple.developer.kernel.increased-memory-limit、com.apple.developer.kernel.extended-virtual-addressing)。遇到申请虚拟内存失败导致 Crash 的可以试下。 + +### 🐕 [04 - 探究 iOS 底层原理 | ARM64 汇编](https://juejin.cn/post/7115302848270696485) + +[@AidenRao](https://weibo.com/AidenRao):在探究底层原理过程中,我们必须掌握一定的前知识,才具备探究底层原理的手段。因此,作者分享了 iOS 系统真机环境下,ARM64 硬件架构的相关汇编知识。浅显易懂,值得阅读。 + + +## 工具 + +### 🐎 [抢先体验! 在浏览器里写 Flutter 是一种什么体验?](https://mp.weixin.qq.com/s/BZgc2VWWqOvUjZyo1FS3nw) + +[@极速男孩](https://github.com/ztlyyznf001):Zapp 是一款由 Invertase 公司提供的在浏览器中构建 Flutter 应用的服务。提供了和桌面端类似的高亮语法、自动完成、调试、Git 代码管理、测试等功能,让我们在 iPad 上写 Flutter 成为了可能。具体可以在 [Zapp 应用主页](https://zapp.run) 了解。 + +### 🐕 [iOS 為多語系字串買份保險吧!. 確保 Localizable.strings 文字檔不被意外改壞 | by ZhgChgLi | ZRealm Dev. | Jul, 2022 | Medium](https://medium.com/p/48a8526c1300) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了使用 SwifGen & UnitTest 来确保多语言的安全。 +Localizable.strings 这样的纯文字经常会漏掉或者改错,又或者是 key 直接展示给用户,这些都是很不好的体验。 + +解决方案 +- 使用 swift 编写完整的检查工具 +- Xcode13 内建 Build Time 检查 Localizable.strings 的正确性 +- 使用 SwiftGen 取代原始 NSLocalizedString String Base 存取方式 +- UnitTest 检查 + + +### 🐎 [妈妈再也不用担心我找不到 iOS 学习资料啦](https://mp.weixin.qq.com/s?__biz=Mzg3MjcxNzUxOQ==&mid=2247485043&idx=1&sn=d19ea1c32495eb40c78d6356819aa5e3&chksm=ceea4bd3f99dc2c55c8d8f8abf3071dd9aeca1a59cd4e764ac2b886ed785e81a661e441ad414&token=2062691669&lang=zh_CN#rd) + +[@J_Knight_](https://github.com/knightsj):本文分享了 iOS 相关的学习资料,包括 iOS 相关的在线学习资料(Awesome iOS),书籍以及公众号,另外也附上了 WWDC 和 Human Interface Guidelines 等官方资源。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10116】初见 CKTool JS](https://xiaozhuanlan.com/topic/8235470691) + +本文将带你了解如何使用 CKTool JS 自动化管理 iCloud 容器。展示如何配置 CKTool JS 来管理容器、修改记录以及操作数据。我们还将探讨如何将 CKTool JS 集成到自动化工作流程中。为了更好地理解,建议先了解 CloudKit、JavaScript 和 npm。 + +### 🌟 [【WWDC22 10097】What's new in App Clips](https://xiaozhuanlan.com/topic/6739528410) + +在今年的 session 中,iOS 16 将 App Clip 的包体积大小提升到了 15 MB,给了工程师更多的空间来创造更多天马行空的功能。App Clip 诊断工具也帮助工程师更好地解决 App Clip 链接配置问题。CloudKit 和 keychain 让我们可以更大程度地复用 App 中的代码来让 App Clip 的开发变得轻松。App Clip experiences API 可自动化管理你的 advanced App Clip experiences。 + +### 🌟 [【WWDC22 10038】SKAdNetwork 4.0 新特性](https://xiaozhuanlan.com/topic/3468519720) + +SKAdNetwork 是苹果于 2018 年推出的 App 安装归因框架,主要目标是在保护用户隐私的前提下,将归因数据发送给广告商,帮助广告主衡量广告的投放效果。在 WWDC 2022 上,苹果介绍了最新版本 4.0 的新特性,让我们一起来看看吧! + +### 🌟 [【WWDC22 10113/10114/110565】在 iOS 上探索 EDR](https://xiaozhuanlan.com/topic/1874509623) + +EDR(Extended Dynamic Range 扩展动态范围),是 Apple 的 HDR 渲染和像素表示技术,能更好地表示图像的亮暗细节,还原更真实的世界。2021 年 WWDC 苹果给不支持 HDR 的 Mac 带来了 HDR 的“支持”,今年苹果给不支持 HDR 的 iOS 也带来了 HDR 的“支持” -- iOS EDR 渲染技术。 + +### 🌟 [【WWDC22 10148】Meet Apple Music API & MusicKit](https://xiaozhuanlan.com/topic/1625743890) + +本文简要介绍了 MusicKit & Apple MusicAPI 的背景和能力,并通过一个简单的需求,详细介绍了在播放列表、搜索等场景下 Apple MusicAPI 的使用过程。 + +### 🌟 [【WWDC22 10162】使用网格着色器处理几何变换](https://xiaozhuanlan.com/topic/0723561894) + +本文主要讲述 Metal 3 新推出的网格渲染管线,其中包括对象着色器(Object Shader)和网格着色器(Mesh Shader),文章分为三个部分: +- 第一部分,新旧渲染管线对比,对网格渲染管线有个初步认识 +- 第二部分,通过两个具体的例子,更深入地感受网格渲染管线 +- 第三部分,网格渲染管线的一些限制,包括着色器限制以及运行新管线的设备要求 + +### 🌟 [【WWDC22 10157/10158】SF Symbols 4 使用指南](https://xiaozhuanlan.com/topic/8712590364) + +本文基于 WWDC 2022 Session 10157 和 Session 10158 梳理。本文从 SF Symbols 4 的新特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些优点以及该如何使用。在这次 WWDC 2022 中,除了符号的数量的增加到了 4000+ 之外,还有自动渲染模式、可变符号等新特性推出,让 SF Symbols 这把利器变得又更加趁手和锋利了。 + +### 🌟 [【WWDC22 10039】Xcode StoreKit 测试的新功能](https://xiaozhuanlan.com/topic/5842093617) + +本文主要聚焦于 In-App Purchase 内购商品的测试。在 Xcode 12 之前,App 内购买项目是不能在 Xcode 模拟器中进行购买,只能使用真机进行测试内购充值,因为模拟器无法连接到 App Store 服务器进行交易。苹果在 WWDC20 推出了 StoreKit Testing,通过 Xcode 12 创建 StoreKit 配置文件和搭建本地测试环境,实现本地 App 内购买和验证收据等测试流程,而无需依赖 App Store 服务器。而今年的 WDC22 苹果对 StoreKit 测试流程改进完善,包含 Xcode 14 中测试功能的优化,支持订阅商品更多场景的测试,还有 StoreKit 配置文件通过 App Store Connect 自动同步等等。 + +### 🌟 [【WWDC22 10096】What’s new in Privacy](https://xiaozhuanlan.com/topic/9482017536) + +苹果近几年一直致力于用户隐私保护方向的构建和优化,在技术的不断更新中,同时也给开发者们带来更加复杂的的交互,但是这无疑是增加了我们每个人保护隐私的意识。今年在 UIKit 框架中优化了对用户更加友好的使用后台定位 App 提示,Safety Check、PassKey 等等,这一篇文章更多的是给我们展示了关于隐私架构相关的概况,更多原理相关内容,可以根据文中链接尽情的阅读吧!愿我们的互联网环境的隐私越来越美好。 + +### 🌟 [【WWDC22 10117】“对讲机”的体验提升](https://xiaozhuanlan.com/topic/2863915470) + +本文主要是通过分析业内 app 中“对讲机”这类产品的功能痛点,结合 Session 10117:Enhance voice communication with Push to Talk 的内容,解析了 iOS 16 在解决这些痛点时的新增技术要点,并结合这些技术升级了“对讲机”的技术方案,最后讲述了 PushToTalk.framework 的如何集成、代码上如何使用,以及开发要点。 + +### 🌟 [【WWDC22 10126】Discover ARKit 6](https://xiaozhuanlan.com/topic/2439056187) + +本文将分两部分介绍 ARKit 相关的内容,第一部分是 ARKit6 相关的特性,第二部分是对 ARKit 历史版本从跟踪、理解、渲染三个角度进行梳理和归类。内容不深,应该容易读懂,感谢品尝。 + + +## 摸鱼周报 + +[@摸鱼周报 #61](https://mp.weixin.qq.com/s/WfwqRhC-9-isUanv8ZnvMQ):第 61 期摸鱼周报来了,来看下本期概要有没有你感兴趣的内容: + +* 本期话题: Developer 设计开发加速器|探索 Create ML Components +* 本周学习:解决使用 AVAudioRecorder 录音保存 .WAV 文件遇到的问题 +* 内容推荐:SwiftUI 相关的几篇博文 +* 摸一下鱼:几个摸鱼网站推荐 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#211-2022.08.01.md b/Reports/2022/#211-2022.08.01.md new file mode 100644 index 000000000..c30935ae8 --- /dev/null +++ b/Reports/2022/#211-2022.08.01.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #211 | 2022-08-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight 更新:支持上传使用 Xcode 14 beta 4 打包的 App](https://developer.apple.com/news/releases/?id=07282022b) + +2022 年 7 月 29 日,TestFlight 可以上传 Xcode 14 beta 4 打包的 APP 以供开发者进行分发测试,已支持的新特性有 WeatherKit、CloudKit、PushToTalk 等,但目前 Background Assets 还未获得支持。 + +### [Live Activities 文档放出](https://developer.apple.com/documentation/activitykit/displaying-live-data-on-the-lock-screen-with-live-activities) + +今年 WWDC22 上苹果有放出 Live Activities 相关信息,Slack 上也有众多开发者咨询,但当时苹果表示还没有更多可以放出的消息。目前已放出了示例代码与 API。需要注意的是,目前苹果已确认在 iOS 16 的第一个正式版中不会包含相关功能,真正使用上还需时日。 + +## 文章 + +### 🐢 [深入浅出依赖注入及其在抖音直播中的应用](https://mp.weixin.qq.com/s/Zp-OqCVVr9CbDv1Y1zWN-w) + +[@AidenRao](https://weibo.com/AidenRao):在软件工程中,依赖注入(dependency injection)的意思为:给予调用方它所需要的事物。本文试图从原理入手,讲清楚什么是依赖,什么是反转,依赖反转与控制反转的关系又是什么?一个依赖注入框架应该具备哪些能力?抖音直播又是如何通过依赖注入优雅的实现模块间的解耦?通过对依赖注入架构优缺点的分析,能对其能有更全面的了解,为后续的架构设计工作带来更多的灵感。 + +### 🐕 [Swift 中的 JSON 反序列化](https://mp.weixin.qq.com/s/lvX4uY1dGo7k3OGmEayJpg) + +[@Smallfly](https://github.com/iostalks):JSON 反序列化是非常基础的需求,本文对比了业界的几种方案,分析了它们的不足之处。同样,Swift 4.0 之后官方 Codable 也无法满足云音乐团队灵活定制的需求,最终推出了基于 Codable 扩展的自研方案,满足如下的场景需求: + +1. 支持默认值 +2. 类型互相兼容,如 JSON 中的 int 类型可以被正确的解析为 Model 中的 String 类型 +3. 解码失败允许返回 nil ,而不是直接判定解码过程失败 +4. 支持 key 映射 +5. 支持自定义解码逻辑 + + +### 🌟 🐢 [从零开始理解 JSC 中的 GC](https://webkit.org/blog/12967/understanding-gc-in-jsc-from-scratch/) + +[@Damien](https://github.com/ZengyiMa):在 JavaScript 语言中是依靠垃圾回收 (GC) 来回收内存的,你是否会对其中的 GC 的是如何实现的感兴趣?本篇文章来自斯坦福大学博士生,作者深入的探索了在 WebKit 中是如何实现 GC 内存回收的,本文会涉及较多的底层实现和原理,给你一个独特的视角从零开始了解 WebKit 中 GC 的实现细节,对相关话题感兴趣的同学请不要错过。 + +### 🐢 LLVM New Pass Manager + +[@kemchenj](https://kemchenj.github.io/):LLVM 13 修改了默认的 PassManager,新的 PassManager 最大的改变是将 Pass 和 Analysis 拆分开。 + +更加合理的架构除了让逻辑变得更加清晰,也让性能得到了提升,Rust 编译器在迁移到新的 API 之后观测到了 5-20% 的性能提升,Swift 近日也开始[迁移到新的 API](https://github.com/apple/swift/pull/60077)。 + +如果你好奇什么样的修改可以让性能有如此大的提升,那就一定不要错过,这一系列文章详细讲解了新 API 的设计和使用方式,以及与之前 API 的对比。 + +- [LLVM Pass 其零:新的 Pass 机制](https://homura.live/2022/06/19/llvm-pass-0/) +- [LLVM Pass 其一:PassManager](https://homura.live/2022/06/26/llvm-pass-1/) +- [LLVM Pass 其二:Analysis 与 AnalysisManager](https://homura.live/2022/07/03/llvm-pass-2/) +- [LLVM Pass 其三:PassBuilder](https://homura.live/2022/07/10/llvm-pass-3/) +- [LLVM Pass 其四:PassManager 的改进与迁移现状](https://homura.live/2022/07/17/llvm-pass-4/) + +### 🐎 [AssociatedObject 源码分析:如何实现线程安全?](https://juejin.cn/post/7124943924308738061) + +[@JonyFang](https://github.com/JonyFang): 本文通过 AssociatedObject 与 Property 的对比,探究他们是如何设计线程安全的。AssociatedObject 也是老八股了,推荐想对线程安全实现了解的同学阅读。 + +### 🐕 [幸福里 C 端 iOS 编译优化实践 - 优化 40% 耗时](https://mp.weixin.qq.com/s/EQ9FXuDbtMa3RtxIAaXtig) + +[@红纸](https://github.com/nianran):本文是一篇 iOS 编译优化实践,作者从以下几个方面对工程进行优化 + +1. dolphin 分布式编译缓存:字节 app infra 团队通过 hook LLVM Clang,将编译文件和依赖哈希成唯一 key,编译结果 .o 则根据 key 存储在本地或者云端 +2. 资源优化:移动主工程的图片资源文件至 POD 仓库内,降低主工程资源的编译耗时。在 POD 仓库内则可采用 **resource_bundles** 的形式引入,来降低资源的编译耗时 +3. 链接优化:使用基于 ld64 优化的 [zld](https://github.com/michaeleisel/zld) 来编译优化项目,zld 在 ld64 的基础上增加了并发数、并且使用效率更高的数据结构 + +### 🐕 [iOS 不必现崩溃的点对点解析以及治理](https://mp.weixin.qq.com/s/tGvE-2flzhm4skkrfbUIBA) + +[@J_Knight_](https://github.com/knightsj):本文介绍了用多种工具排查崩溃的时候,如 Bugly,崩溃日志解析等遇到的各种问题以及解决方案,并将该方案以开源工具的方式分享出来,感兴趣的读者可以找到文章末尾的 github 链接查看详情。 + +## 工具 + +### [开源一款苹果 macOS 工具 - AppleParty(苹果派)](https://juejin.cn/post/7081069026515877919) + +[@红纸](https://github.com/nianran):AppleParty 是 37 手游 iOS 团队研发,实现快速操作 App Store Connect 后台的自动化 macOS 工具。当前实现了以下几个功能: + +1. 内购项目管理(批量创建和更新) +2. 批量商店图和预览视频上传和更新 +3. 数据报表批量下载 +4. 邮件发送工具 +5. 二维码扫描和生成工具 + +### [腾讯柠檬清理](https://github.com/Tencent/lemon-cleaner) + +[@EyreFree](https://github.com/EyreFree):腾讯柠檬清理是针对 macOS 系统专属制定的清理工具。主要功能包括重复文件和相似照片的识别、软件的定制化垃圾扫描、可视化的全盘空间分析、内存释放、浏览器隐私清理以及设备实时状态的监控等。重点聚焦清理功能,对上百款软件提供定制化的清理方案,提供专业的清理建议,帮助用户轻松完成一键式清理。此仓库为官方开源的 macOS 代码,对本软件内部实现感兴趣的朋友可以自行研究。 + +## 摸鱼周报 + +[@摸鱼周报 #62](https://mp.weixin.qq.com/s/HySX4Yaf3Zxy8Wn-LyUO0A):第 62 期摸鱼周报来了,一起来看下本期概要: + +* 开发资讯:Live Activity 上线 iOS 16 Beta 4; App Store 专家会面交流; Google 发布 Carbon 语言 +* 本周学习:iOS 使用 Pod 在现有项目上集成 React Native +* 内容推荐:性能优化文件以及 WWDC22 优秀内容推荐 +* 摸一下鱼:Flowful 用程序生成氛围音乐;柠檬清理开源;网页版便携小空调带给你夏季清凉 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#212-2022.08.08.md b/Reports/2022/#212-2022.08.08.md new file mode 100644 index 000000000..4e001c341 --- /dev/null +++ b/Reports/2022/#212-2022.08.08.md @@ -0,0 +1,155 @@ +# 老司机 iOS 周报 #212 | 2022-08-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC22 内参》](https://xiaozhuanlan.com/wwdc22) + +> 上周一共更新了 12 篇文章,目前总共已经更新了 86 篇,每篇质量都非常高,由于篇幅问题,开头先推荐 3 篇可能大家更感兴趣的,其他的放到周报最后了~ + +### 🌟 [【WWDC22 110352/110353】拥抱 Swift 泛型](https://xiaozhuanlan.com/topic/7651204893) + +本文主要介绍 Swift 5.7 中关于泛型新增的语言特性。通过一个示例程序与你探讨泛型的使用场景与协议的接口设计,帮助你理解 some 与 any 修饰符在泛型中的使用。 + +### 🌟 [【WWDC22 10068】UIKit 新特性](https://xiaozhuanlan.com/topic/3805624917) + +UIKit 作为 iOS 开发过程中非常核心的一个 framework,每年的更新换代都会对其做出一些升级和调整。只不过以往更多是针对单独的改动出独立的 session,没有专门出一个 session 成去体系地介绍 UIKit 里的改动。自从 WWDC 2021 开始,第一次系统地介绍了 What's new in UIKit ,主要围绕的方面包括针对生产效率提升的改动,UI 改动及 API 的改动等等。今年沿用了去年的思路,继续围绕这几个方面展开介绍。这个 session 虽然没有办法展开介绍所有的 UIKit 改动的技术细节,但它会把 UIKit 新特性里最重要的部分归纳到一起,起到提纲挈领的作用,让大家对 UIKit 的变动有一个整体的了解。文中会附有一些 session 的链接以及苹果的官方文档,方便读者了解其更进一步的改动细节。 + +### 🌟 [【WWDC22 10136/10137/110340/110342】Swift Charts 高效图表的实现与优质图表设计要素](https://xiaozhuanlan.com/topic/2164358790) + +本文将会基于各种实例和 Swift Charts API 实现从简单到复杂的图表;同时了解一些优质图表的设计体验要素;相信会对计划在桌面小组件场景应用 SwiftUI ,提供一些图表绘制的帮助和指南。 + +## 文章 + +### [Switching between SwiftUI’s HStack and VStack](https://www.swiftbysundell.com/articles/switching-between-swiftui-hstack-vstack/) + +[@zvving](https://github.com/zvving):`HStack`、`VStack` 是 SwiftUI 基础的布局工具,在涉及设备横屏竖屏切换时,我们也会期望布局在 `HStack`-`VStack` 间动态转换。 + +`GeometryReader` 看似是可行的方案之一:通过计算容器宽高来选择布局方式,但同时也会带来布局细节及(横竖屏切换时的)动画问题。本文介绍如何使用 `Size classes` 和 iOS16 引入的 `AnyLayout`、`ViewThatFits` 更好地解决类似问题。 + +### 🐎 [使用 deno_core 开发一个 JavaScript 运行时](https://mp.weixin.qq.com/s/CLYFgEKnjPufoE07wKnzdQ) + +[@Smallfly](https://github.com/iostalks):本文介绍如何创建一个自定义 JavaScript 运行时 runjs,可以把它近似为简易版的 Deno。目标是开发一个命令行程序,实现执行本地的 JavaScript 文件,可以读文件、写文件、删文件,以及一个 console API。 + +### 🐢 [tcmalloc 源码解析](https://dirtysalt.github.io/html/tcmalloc.html) + +[@xuyafei](https://github.com/xiaofei86):tcmalloc 是 Google 开发的内存分配器,在 Golang、Chrome 中都有使用该分配器进行内存分配。其有效地优化了 ptmalloc 中存在的问题,当然为此也付出了一些代价。感兴趣可以阅读原文了解 tcmalloc 的具体实现。 + +### 🌟 🐎 [可支持动态插入业务元素的混合 MP4 方案 - YYEVA](https://juejin.cn/post/7126797460189478920) + +[@JonyFang](https://github.com/JonyFang):本篇主要介绍 YYEVA 整体框架,YYEVA 是 YY 推出的一款 MP4 支持动态元素的解决方案,包括 AE 插件、在线预览工具、渲染 SDK(支持 iOS、Android、Web),文末附有 YYEVA 开源的地址。YYEVA 框架相关的一些文档介绍: + +- [第一篇:直播间礼物动效 - 实现方案](https://github.com/yylive/YYEVA/blob/main/%E7%9B%B4%E6%92%AD%E9%97%B4%E7%A4%BC%E7%89%A9%E5%8A%A8%E6%95%88%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%A1%88.md) +- [第二篇:透明 MP4 礼物](https://github.com/yylive/YYEVA/blob/main/%E9%80%8F%E6%98%8EMP4%E7%A4%BC%E7%89%A9.md) +- [第三篇:变换矩阵在动画上一些应用](https://github.com/yylive/YYEVA/blob/main/%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5%E5%9C%A8%E5%8A%A8%E7%94%BB%E4%B8%8A%E4%B8%80%E4%BA%9B%E5%BA%94%E7%94%A8.md) +- [第四篇:YYEVA , 让 MP4 静态资源也能够动态起来](https://github.com/yylive/YYEVA/blob/main/YYEVA-%E8%AE%A9MP4%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E4%B9%9F%E8%83%BD%E5%A4%9F%E5%8A%A8%E6%80%81%E8%B5%B7%E6%9D%A5.md) +- [第五篇:YYEVA 设计规范](https://github.com/yylive/YYEVA/blob/main/YYEVA%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.md) +- [第六篇:YYEVA 数据结构](https://github.com/yylive/YYEVA/blob/main/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84.md) + +### 🐕 [一文了解字节跳动“埋点验证平台”](https://mp.weixin.qq.com/s/4SnwKSswo0LJDUg6NoaAQw) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要从宏观视角介绍了字节跳动的埋点验证平台。从多角色、多节点、多方面,全方位保证了埋点质量,值得学习。 + +介绍大致分为: +- 埋点验证流程 +- 技术架构总览 +- 产品流程总览 +- 技术挑战和结果收益 + +### 🐕 [解决 Flutter 引起的 iOS 内存崩溃问题](https://juejin.cn/post/7123765829929762847) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 目前主流版本的 Flutter 在 iOS 平台上存在内存问题,但是却不易解决,本文通过两种方案帮助读者解决问题。同时,提供了保姆级魔改 Flutter Engine 的操作流程。小编提醒⚠️ : 该方案不建议小白用户尝试。 + +### 🌟 iOS 16 UIView/UIViewController 新变化 + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):最近在适配 iOS 16 时发现了一个新的异常:``Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Application circumvented Objective-C runtime dealloc initiation for object.'`` + +经过 [pudge62](https://github.com/pudge62) 研究,iOS 16 里 UIViewController 多了一个方法叫 ``_objc_initiateDealloc``,内部代码是用来保证 VC 在主线程释放的。 调用链为: +> release - > -[UIViewController _objc_initiateDealloc] -> dispatch_async(_objc_deallocOnMainThreadHelper) -> -[UIViewController dealloc] + +以前的系统也有这个机制,看起来是 iOS 16 换了实现方式。而 ``_objc_initiateDealloc`` 这个名字和异常里的 ``dealloc initiation`` 看起来关联很大。 + +具体原因:工程内有代码覆盖了 UIViewController 的 ``+initialize`` 方法,这样会导致不调用 ``_class_setCustomDeallocInitiation([UIViewController class])``,最终发生崩溃。 + +解决方案:由于系统 UIView/UIViewController 有了 ``initialize`` 方法,推荐大家不要覆盖 UIViewController 的 ``+initialize`` 方法;如果一定要覆盖 ``+initialize`` 方法,那就要想办法先调用官方的,再调用自己的 ``+initialize`` 方法(不建议这么做)。 + +> 该具体分析与解决方案由 [pudge62](https://github.com/pudge62) 提供 + +### 🐢 阿里跨端技术演进 + +[@kemchenj](https://kemchenj.github.io/):阿里巴巴的千牛团队为我们带来的跨端技术演进分享,这个系列总共三篇文章: + +- [跨全端 SDK 技术演进](https://mp.weixin.qq.com/s/NMsZWEzP3oE-KexRQMesmQ):伴随业界跨平台技术发展与演进,千牛团队也沉淀了一整套基于 C++ 的跨平台技术体系,本文将以消息 SDK 为例,详述这一技术演进历程。 +- [跨桌面端 Web 容器演进](https://mp.weixin.qq.com/s/cAPAHzlChV-TjbAIj4YQ_Q):从容器的架构演进,容器的功能增强和稳定性保障及未来的演进,这 3 个方面介绍一下千牛的应用程序如何对接浏览器的能力。 +- [跨桌面端之组件化实践](https://mp.weixin.qq.com/s/t7apHNc9ZHF__dab1KKwIQ):主要介绍了千牛 PC 跨端框架中,关于组件化部分的思考、方案选择、遇到的一些问题和解法。 + +### [iOS 16 Live Activity](https://mp.weixin.qq.com/s/aKD-WBYHsepg96zOC378cg) + +[@享耳先森](https://github.com/iblacksun):WWDC22 Keynote 中介绍了 iOS 16 中一个比较亮眼的更新:Live Activity,开发者可以在锁屏页面上放置一个可以「实时」更新的 Widget,比如外卖或者打车应用,开启 Live Activity 后在锁屏页上实时看到 外卖小哥/司机 与我们的距离及预计到达时间。 + +这一 API 及对应功能终于在 iOS 16 Beta4 一起放出,但 Apple 明确不会随正式版的 iOS 16.0 一起发布,而是在今年晚些时候释出,具体时间没有给。 + +本文介绍了 iOS 16 Live Activity 的适配及注意事项,也分享了下开发 / 使用体验,文章最后也提供了一个 Demo 供大家参考,可以与[Experimenting with Live Activities](https://oleb.net/2022/live-activity/) 关联阅读。 + +## WWDC22 内参更新 + +### 🌟 [【WWDC22 10058 & 110343】SwiftUI on iPad](https://xiaozhuanlan.com/topic/3145670289) + +本文基于 10058 和 110343 两个 Session 的内容梳理,以官方 Places App 为范例,介绍了 SwiftUI 在 iPadOS 16 上的新特性。 + +### 🌟 [【WWDC22 10142】 通过并发编程更优雅的管理后台任务](https://xiaozhuanlan.com/topic/4708519362) + +这篇 session 结合场景和案例,基于 SwiftUI 和 Swift 并发特性来讲解如何以更好的方式来管理异步的后台任务执行流程,并介绍了 URLSession 的后台模式,以更贴合实际的方式来解释后台任务的原理和规则。 + +### 🌟 [【WWDC22 10066/10101/10104】 探索 Metal3](https://xiaozhuanlan.com/topic/9276153048) + +Metal 是 Apple 的高效低销图形计算 API 。它旨在以最快、最高效的方式驱动 Apple 产品背后强大的 GPU。本文介绍了 Metal 3 强大的新功能,包括快速加载资源、离线编译、MetalFX、Mesh Shaders、光线追踪管道、机器学习支持等内容。 + +### 🌟 [【WWDC22 10079】提高应用程序和服务器的 DNS 安全性](https://xiaozhuanlan.com/topic/4802516793) + +本文旨在探索如何确保 DNS 在应用程序中安全使用的最新方法。首先介绍了为什么 DNS 是不安全的,以及如何通过 DNSSEC 和使用 DDR 加密的 DNS 来保护他的安全性。 + +### 🌟 [【WWDC22 10032】使用新框架实现 Shortcuts](https://xiaozhuanlan.com/topic/7083456912) + +使用新框架 AppIntents 来为 App 扩展功能,以支持 Siri 和 Shortcuts app。 + +### 🌟 [【WWDC22 110367】使用 Concept 简化 C++ 模版](https://xiaozhuanlan.com/topic/6302984517) + +本 session 主要介绍了 Xcode14 上新支持的 C++20 中比较有代表性的新特性 concept,并从实际例子出发,使用 concept 对 C++ 的模版代码进行简化,最后还介绍了用于编译时计算的 constexpr 特性。 + +### 🌟 [【WWDC22 10016】使用 CarPlay 扩展你的 App](https://xiaozhuanlan.com/topic/5913846702) + +本文主要是介绍了 iOS 16 中 Carplay 的新特性,包括四个部分:第一部分是对 Carplay 的 UI 渲染方式-模板的讲解。第二部分介绍了新增的两种应用类型以及对应的一些应用。第三部分是讲解了新增的一种 Caplay 测试方式的使用讲解。最后则是介绍了 Carplay 如何和汽车的仪表盘联动。 + +### 🌟 [【WWDC22 10128】利用现实物体搭建 AR 场景](https://xiaozhuanlan.com/topic/5789132064) + +从你手边的现实物体(以及脑海中关于 AR 的 idea),到一个有趣的 AR App,需要经历什么过程?这个 session 也许能给出答案。本文对 Object Capture 进行了回顾,介绍了 ARKit 相机增强可与其结合使用的新 API,并以一个 AR 象棋游戏作为例子,展示了从获取现实物体的 3D 模型到构建 AR 应用的基本工作流。 + + +## 摸鱼周报 + +[@摸鱼周报 #63](https://mp.weixin.qq.com/s/nAMshUG4AjWLAAHOFPVqXg):第 63 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 企业家培训营已开放申请 +* 本周学习:Swift 当中的 Sequence +* 内容推荐:WWDC22 & SwiftUI 好文推荐 +* 摸一下鱼:React 实现的 Win11 在线体验,模拟 Windows 和 x86 系统的网站 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#213-2022.08.15.md b/Reports/2022/#213-2022.08.15.md new file mode 100644 index 000000000..9e105fa23 --- /dev/null +++ b/Reports/2022/#213-2022.08.15.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #213 | 2022-08-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 How To Boost Your iOS Code Performance:[Reduce Searching In Array](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-reduce-searching-an-array-55fbdfee2050) / [Reducing Collection Type Initialisation](https://betterprogramming.pub/how-to-boost-your-ios-code-performance-by-reducing-collection-type-initialisation-564bffee94a3) + +[@Smallfly](https://github.com/iostalks):这两篇文章介绍了一些提高编码性能的小技巧。在遍历数组时,要警惕多层循环,多思考是否可以利用 Set/Dictionary 降低复杂度。在循环体内尽量避免创建集合类型,特别需要关注值类型的 Copy-on-write。 + +### 🐕 [货拉拉 iOS 司机端线程治理总结](https://juejin.cn/post/7129391597967376415) + +[@AidenRao](https://weibo.com/AidenRao):文章主要介绍了货拉拉 iOS 司机端,在线程治理方面的实践。如:队列的管理和分配,高并发业务的梳理和重构,线程使用的合理性评估与改造,线程相关 crash 的排查和修复,长效机制的建立。 + +### 🐎 [Content transition in SwiftUI](https://swiftwithmajid.com/2022/08/02/content-transition-in-swiftui/) + +[@Damien](https://github.com/ZengyiMa):SwiftUI 框架从第一个版本就提供了视图转换功能。每当视图被移除或添加时,可以使用特定的动画来进行呈现。但是在视图内容发生变化时,SwiftUI 框架无法应用动画转换效果, SwiftUI 框架在最新迭代中为我们带来了内容转换的新特性。它允许我们在视图内容发生变化时应用特定的过渡动画,具体怎么做呢?对 SwiftUI 感兴趣的同学不妨一读。 + +### 🐢 [Shared with You implementation and testing explained](https://www.avanderlee.com/swift/shared-with-you/) + +[@享耳先森](https://github.com/iblacksun):WWDC 22 中苹果将原来仅 Apple 可用的 `Shared with you` 开放给所有开发者,本文详解了其工作机制和适配方式。 + +### 🐎 [Advances in Swift Package Manager's dependency access control](https://www.polpiella.dev/advances-in-swift-package-access-control/) + +[@张嘉夫](https://github.com/josephchang10):在最新的 Swift 5.7 development snapshot 中 `swift` 可执行文件新增了一个叫做 `--explicit-target-dependency-import-check` 的 flag,改进了 SPM 的依赖系统,允许开发者启用或禁用一个新的构建验证步骤,以检测未在 target 的依赖列表中明确定义的 import 语句,并相应触发 warning 或 error。作者在这篇文章中实际测试了这个新的 flag。 + +### 🐎 [MachO 代码签名剖析](https://juejin.cn/post/7017842746937311246) + +[@kemchenj](https://juejin.cn/post/7017842746937311246):验证代码的正确性是计算机科学中最难的问题之一,因为不存在普遍意义的正确的算法,所以这一验证通常使用数字签名处理。大家可以通过阅读本文思考代码来源是否合法和代码是否被修改过的验证是如何实现的。 + +### 🐎 [RTC 场景下的屏幕共享优化实践](https://mp.weixin.qq.com/s/tyD_y0xhCMEJg0tfTelHfA) + +[@邦Ben](https://weibo.com/linwenbang):该文章和 iOS 其实并没有直接关系,主要说在飞书上共享屏幕的情况下,如果进行一个策略的优化。通过算法进行识别当前屏幕的内容,然后进行分析自动切换到不同的模式。 + +1. 清晰模式:主打清晰度,尽量保持高分辨率(如:最高 4K 原画质),带宽或性能不足的时候,只降低帧率(如:从 30fps -> 5fps),不降低分辨率。 + +2. 流畅模式:主打流畅度,尽量提升帧率(如:最高 30fps),带宽或性能不足的时候,优先降低分辨率(如:从 4K -> 720p),最后才考虑降帧率。 + +手动切换是个基本的选择,但是通过自动化更佳。识别算法主要是:光流法,决策树,颜色直方图,方向统计。文章大体做了一些介绍,但是也比较属于入门概念介绍,有兴趣的同学可以了解一下。 + + +## 工具 + +### 🐕 [Device List | AppleDB](https://appledb.dev/device-list.html) + +[@Barney](https://github.com/BarneyZhaoooo):**Device List** 可以方便地查询 Model、Name、Board、Soc 之间的对应关系。 + +## 摸鱼周报 + +[@摸鱼周报 #64](https://mp.weixin.qq.com/s/Bd9MZDqmvmgp1UTr5WKPig):第 64 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:今年 8 月,把握与 App Store 专家会面交流的机会 +* 本周学习:Swift 闭包中的变量捕获 +* 内容推荐:程序开发文档及资源网站 +* 摸一下鱼:一款体感识别空气投篮模拟器 App;To-D 杂志 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#214-2022.08.22.md b/Reports/2022/#214-2022.08.22.md new file mode 100644 index 000000000..bfb687c4d --- /dev/null +++ b/Reports/2022/#214-2022.08.22.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #214 | 2022-08-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [iOS 中的字节对齐](https://juejin.cn/post/7132403137725333518) + +[@Smallfly](https://github.com/iostalks):字节对齐是 C 语言中的概念,Objective-C 作为 C 语言的超集,iOS 开发者也需要对字节对齐有所了解。本文给出了一些字节对齐的建议,以及字节对齐的相关介绍: + +- 什么是字节对齐 +- 为什么要字节对齐 +- 字节不对齐的风险 +- 字节对齐对编程的启示 +- Objective-C 字节对齐实现 + +### 🐕 [iOS 底层原理 39:Instruments 系列(三)Animation Hitches](https://mp.weixin.qq.com/s/fTmgN5phGQtbQOUHZ7Pe3Q) + +[@Leo](https://github.com/leomobiledeveloper):由于高刷屏和动态帧率的设备出现,用 FPS 来衡量界面的流畅性已经不那么准确了,所以 Apple 提出了 Animation Hitche 这个概念来衡量滑动期间的掉帧情况。本文详细讲解了界面渲染的阶段和原理,并且涵盖了不同阶段引起 Hitche 的原因和解决办法,对流畅性优化有非常好的参考意义。 + +### 🐢 [网络通信 | HTTP(S) 那些事儿](https://mp.weixin.qq.com/s/YtyrIl8UWK43iYfjN4HUyQ) + +[@AidenRao](https://weibo.com/AidenRao):HTTP 在整个互联网是非常常见的,比如我们看剧、刷短视频、面向 Google 编程,都会用到它。作为研发,我们有义务深入了解它的结构、规范和设计思路。看完本文你将能够: + +1. 🔍 快速定位 HTTP 问题; +2. 🥣 熟悉 HTTP 报文里的常见头字段; +3. 🔐了解基本的加密知识。 + +最终拥有通过 WireShark、Chrome、Telnet 等工具,甚至 RFC 文档去自行深入学习 HTTP 的能力。 + +### 🐕 [iOS 16 NSURLComponents 行为变更] + +[@极速男孩](https://github.com/ztlyyznf001):在 HTTPURL 的 [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) 规范中规定,URL 中只允许包含以下四种: +1. 英文字母 +2. 数字 +3. ``-_.~`` 4 个特殊字符 +4. 所有保留字符,包括 ! * ’ ( ) ; : @ & = + $ , / ? # [ ] + +并且要求在使用特殊字符的时候将特殊字符转换成相应十六进制。 +所以在 iOS16 中如果你使用 +```[NSURLComponents componentsWithString:]``` +或者 +```[NSURLComponents componentsWithURL:resolvingAgainstBaseURL]``` +的方法去构建一个不符合 RFC3986 规范的 URL(常见的比如 URL 中包含 - 或者 _ )时会直接返回一个 nil。 + +### 🐕 [Flutter 状态管理新的实践](https://mp.weixin.qq.com/s/oNjRt2qGHetEXLtkDPU63A) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 声明式 UI 其实并不是近几年的新技术,但是近几年声明式 UI 框架非常的火热。单说移动端,跨平台方案有:RN、Flutter。iOS 原生有:SwiftUI。android 原生有:compose。Flutter 平台上就有多种方案,BLoc,Provider,RivePod,GetX 等。本文从函数编程方向做新尝试,是一份不错的学习资料。小编建议,对于 Rx 系列框架不熟悉的,不要轻易放到生产环境中 . + + +## 工具 + +### 🐎 [Xcode console 替代方案 - ConsoleRedirect](https://github.com/luoqisheng/ConsoleRedirect) + +[@水水](https://www.xuyanlan.com): ConsoleRedirect 是一款通过 redirect App 的 stderr 和 stdoutput 将 Xcode 的输出实时同步写到 macosx 下指定目录的工具。配合 klogg 等日志查看工具,可以实时查看、过滤、查找、高亮 Xcode 的控制台输出。用于代替功能比较单薄的 Xcode 控制台输出,操作比较简单,有需要的朋友可以一试。 + +### [Pulse 2.0 released](https://kean.blog/post/pulse-2) + +[@kemchenj](https://kemchenj.github.io):Pulse 是一个 Apple 平台的开源日志框架,不止提供了 AppKit/UIKit 集成,也提供了可视化的工具 App 查看日志。最近推出了 2.0 版本,进行了大量重写,包括了: + +- 新增 macOS/watchOS/tvOS 的日志查看工具,使用 SwiftUI 实现。 +- 性能提升: + - 日志存储空间减少 90%。使用苹果提供的 lzfse 进行压缩,并且使用 SHA1 替代之前的 SHA256。 + - 日志的预览图改为小尺寸的缩略图,并且使用 HEIF 编码,以 Demo 为例减少了 99% 的存储占用。 + - 文档格式优化。允许控制分享的时间范围,并且使用 lzfse 替代 ZIPFoundation,可以减少分享的文件大小。 +- 文档重写,使用 DocC 进行生成。 + +## 摸鱼周报 + +[@摸鱼周报 #65](https://mp.weixin.qq.com/s/lvMHf5qQHpnDGLz1KY-2dg):第 65 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:App Accelerator 分享会 & 什么是精准测试 +* 本周学习:iOS Memory 内存概念 +* 内容推荐:Swift 内容推荐 & Github 实用技巧 +* 摸一下鱼:两款动态图片生成器,iOS 16 Beta 6 和 iPhone 14 发布日期确认,系统设计课程以及 Go 语言教程,IAP 服务端通知状态码变化流程。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#215-2022.08.29.md b/Reports/2022/#215-2022.08.29.md new file mode 100644 index 000000000..41b1286bb --- /dev/null +++ b/Reports/2022/#215-2022.08.29.md @@ -0,0 +1,124 @@ +# 老司机 iOS 周报 #215 | 2022-08-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [以小窥大:IO 卡顿探寻苹果文件系统](https://mp.weixin.qq.com/s/_bdY3hvd8VBEAfgxmMVf_A) + +[@JonyFang](https://github.com/JonyFang):从一个用户反馈的不寻常的 I/O 卡顿入手,发现苹果 APFS 的一个严重 bug。结合问题场景分析问题,结合数据分析结果,发现苹果的文件操作存在的坑,并给出了相应建议。在日常缓存设计中,也需要留意相应的这些点。 + +分析问题 +- 寻找关键堆栈 +- 构造必现代码 +- dtrace 分析 +- Hopper 分析 +- 对比 HFS+ + +结合已有数据分析,发现苹果的文件操作里存在的坑: +- tmp 在极端情况下可能会存在 >90G 的占用; +- WebKit 随机 + 群众的方式删除网络缓存极端情况下的问题; +- NSURLCache 在 diskCapacity 设置过大时存在的问题; +- 密集删除文件导致 I/O 性能下降过快的问题; + +为了避免上述这些极端情况下会导致的 I/O 性能骤降,移动端 APP 也需要合理的设计存储结构。如需要分层管理文件,尽量不将单个文件夹或单个文件搞得过大,同时也需要定时清理临时缓存目录,来进一步优化存储空间占用和优化 I/O 效率。 + + +### 🌟 🐎 [不改一行业务代码,飞书 iOS 低端机启动优化实践](https://mp.weixin.qq.com/s/KQJ5QXHdhwHRN65KdD45qA) + +[@Leo](https://github.com/leomobiledeveloper):在性能优化中,并发是一个常见的手段。但 CPU 核数是有限的,意味着同时能执行的线程数量也是固定的,不合理的并发一方面会带来线程频繁切换的开销,另一方面也会引起一些意料之外的抢占,导致主线程得不到执行。本文结合 Lark 在低端机上的实践,详细地讲解了线程 QoS 优化的原理,对性能优化很有参考意义。 + +### 🐕 [在 SwiftUI 中用 Text 实现图文混排](https://www.fatbobman.com/posts/mixing_text_and_graphics_with_Text_in_SwiftUI/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI 提供了强大的布局能力,不过这些布局操作都是在视图之间进行的。当我们想在 Text 中进行图文混排时,需要采用与视图布局不同的思路与操作方式。本文首先介绍一些与 Text 有关的知识,并通过一个实际案例,为大家梳理出在 SwiftUI 中用 Text 实现图文混排的思路。 + +### 🐎 [响应式编程的复杂度和简化](https://mp.weixin.qq.com/s/7jUGbSmR87FkTRqsm20NFQ) + +[@Smallfly](https://github.com/iostalks):响应式编程思维能够降低异步编程出错的概率,但我们要把它和响应式框架区分开。本文从响应式编程的概念出发,通过具体的代码案例,分析了响应式编程实现的复杂度。最后介绍如何使用 Rx/Combine 和 AsyncSequence 框架对响应式编程代码进行简化,并对这两种实现方式作出了对比。 + +### 🐕 [基于汇编实现 objc_msgSend hook 方法耗时的方案](https://juejin.cn/post/7134877291716280328) + +[@kemchenj](https://kemchenj.github.io/):测算函数 / 方法执行耗时,对于每一位开发同学来说,似乎都是一道绕不过的坎。 + +本文通过引入货拉拉移动端研发过程中的痛点,产生方法耗时分析的需求,在调研业内各种分析工具和方案后,结合需求整合出他们的方案,感兴趣的同学可以点击前往阅读。 + +### 🐢 [【译】本地优先软件 Local-first software](https://www.zxch3n.com/local-first/) + +为了追求更好的工具,我们将许多应用程序转移到云端。然而,在云中,数据的所有权属于服务器,而不是用户,因此我们成了自己数据的借用者。在云应用中创建的文件注定会在这些服务的创建者不再维护它们时消失,云服务是无法长期保存的。 + +在这篇文章中,我们为未来的软件探索了一条新的发展道路。我们展示了用户有可能保留对其数据的所有权和控制权,同时也受益于云相关的功能:无缝协作和从任何地方访问。鱼和熊掌可以兼得。 + +### 🐎 [Implementing Parts of the Swift Compiler in Swift](https://forums.swift.org/t/implementing-parts-of-the-swift-compiler-in-swift/59524) + +[@张嘉夫](https://github.com/josephchang10):在过去几年中,Swift 编译器的一些组件已经开始用 Swift 实现,包括新的 [Swift Driver](https://github.com/apple/swift-driver)(用于协调 Swift 编译)、[正则表达式字面值](https://github.com/apple/swift-experimental-string-processing/) 的解析、一些新的 [SIL 优化](https://github.com/apple/swift/tree/main/SwiftCompilerSources/Sources/Optimizer) 通道等。但因为某些原因,这些组件都是非必要的。 + +作者在这篇帖子中提议,开始要求现有的 Swift 编译器能够构建 Swift 编译器,以开启用 Swift 实现编译器中必要部分的大门,同时又避免让开发 Swift 编译器或移植到其他架构变得过于复杂。作者随后还列出了对编译器中用 Swift 实现的必要部分的要求,以及它们的用例,同时还提出了包含 Swift 代码的 Swift 编译器的具体构建流程,以及持续集成等。 + +### 🐕 [抖音平台多产物代码隔离技术的实践与探索](https://mp.weixin.qq.com/s/fjeF3LLoGsPIQN4D3el67g) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了利用适配器模式进行代码隔离的整体架构思路和框架的实现思想。 + +介绍大致分为: +- 设计思想 +- 进阶图纸 +- 工程视角 +- 实战脚手架 + +### 🐕 [深入解析 Flutter 下一代渲染引擎 Impeller](https://mp.weixin.qq.com/s/GptJbPXPediNRc4KvZzr6g) + +[@xuyafei](https://github.com/xiaofei86):2022 年 6 月在 Flutter 3.0 版本中 Google 官方正式将渲染器 Impeller 从独立仓库中合入 Flutter Engine 主干进行迭代,这是 2021 年 Flutter 团队推动重新实现 Flutter 渲染后端以来,首次正式明确了 Impeller 未来代替 Skia 作为 Flutter 主渲染方案的定位。 + +在这篇文章中,我们尝试从 Metal 着色器编译方案,矢量渲染器原理和 Flutter Engine 渲染层的接口设计三个维度去探究 Impeller 想要解决的问题和渲染器背后的相关技术。 + +* Impeller 项目启动背景 +* Metal Shader Compilation 演进 +* 矢量渲染基础概念 +* Flutter DisplayList +* Impeller 渲染流程和架构设计 + +## 工具 + +### 🐎 [flutter_impression - Flutter 曝光事件检测工具](https://github.com/623637646/flutter_impression) + +[@水水](https://www.xuyanlan.com):此工具可以方便的检测 Flutter Widget 的曝光事件,目前 Flutter 还没有其他相关的开源工具。 +使用起来也很简洁: +``` +ImpressionDetector( + impressedCallback: () { + debugPrint('impressed'); // 此处可以实现曝光时你要做的任务,比如:埋点等 + }, + child: MyWidget(), +) +``` + +### 🐎 [ZReviewTender](https://github.com/ZhgChgLi/ZReviewTender) + +[@老峰](https://github.com/gesantung):ZReviewTender 是基于 Ruby 免费开源的 App Reviews 监控机器人工具,可自动监控 App Store iOS/macOS App 与 Google Play App 的使用者最新评论信息,其中 iOS 使用全新的 App Store Connect API 取得评价列表稳定可靠,可使用 Github Repo & Gtihub Action 免费部署。 + +## 摸鱼周报 + +[@摸鱼周报 #66](https://mp.weixin.qq.com/s/LP1qNAgjzEiDwrR7I32kuA):第 66 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Shazam 迎来问世 20 周年 +* 本周学习:将 NSImage 转换为 PNG 的方法;在 macOS 中找到以前最前沿的应用程序 +* 内容推荐:iOS 基础应用和优化内容推荐 +* 摸一下鱼:微软开源表情符大全,软件快捷键速查资源,以及可以制作猫咪插画的网站资源 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#216-2022.09.05.md b/Reports/2022/#216-2022.09.05.md new file mode 100644 index 000000000..cd669cb54 --- /dev/null +++ b/Reports/2022/#216-2022.09.05.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #216 | 2022-09-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 3.3 正式发布](https://mp.weixin.qq.com/s/-AYFnatRYNARGTxhzSY9Lg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 3.3 发布了 🎉🎉🎉,这是一个比较常规的版本,主要是新功能和优化: + +- 框架更新 + - 全局选择 + - 触控板操作 + - 随手写功能 + - 文本输入 +- Material Design 3 支持 +- 桌面端平台 + - Windows 桌面应用的版本可以通过 pubspec.yaml 和构建参数进行设置 +- 开发体验 + - VS Code 插件增强 + - Flutter 开发者工具更新 +- 性能及稳定性 + - Raster 缓存改善 + - 禁用 iOS 内存指针压缩 +- API 改进 + - FragmentProgram 更新 + - PlatformDispatcher.onError 改进 + - 布局小数处理 + - 停止支持 iOS 32 位设备 + - 停止支持 BitCode 😄 + +除此之外,小编偷偷地告诉各位一句:Skia 被抛弃了,Flutter 3.3 开始使用新的绘制引擎:Impeller. + +相关阅读: +- [Whats new in Flutter 3.3](https://medium.com/flutter/whats-new-in-flutter-3-3-893c7b9af1ff) +- [Announcing Flutter 3.3 at Flutter Vikings](https://medium.com/flutter/announcing-flutter-3-3-at-flutter-vikings-6f213e068793) +- [Flutter 3.3 中文解析](https://mp.weixin.qq.com/s/-AYFnatRYNARGTxhzSY9Lg) +- [Dart 2.18](https://medium.com/dartlang/dart-2-18-f4b3101f146c) + +## 文章 + +### 🐕 [How to improve iOS build times with modularization](https://www.runway.team/blog/how-to-improve-ios-build-times-with-modularization) + +[@享耳先森](https://github.com/iblacksun):随着业务的迭代,项目代码的复杂度越来越高,如果不能很好地架构我们的应用,将严重拖慢编译速度,从而影响开发体验。本文介绍「模块化」的方式(很多大厂也是这么做的),利用模块间的横向依赖(而不是垂直依赖)来解决这一问题。 + +### 🐎 [Moving “ The Swift Programming Language ” book to open source](https://forums.swift.org/t/moving-the-swift-programming-language-book-to-open-source/59989) + +[@Smallfly](https://github.com/iostalks):Swift-DocC 是苹果在 2021 年推出的文档编译器,它能通过编译源码中的注释来生成文档。近期苹果将 Swift 官方文档源码在 Github 开源,宣称未来会基于这个仓库使用 Swift-DocC 来构建文档。苹果期望和开源社区一起来完善 Swift-DocC,并期待开发者能为官方文档作贡献。 + +想了解更多关于 Swift-DocC 的内容,请参考内参文章[【 WWDC22 110368/110369 】 Swift-DocC 新特性](https://xiaozhuanlan.com/topic/3658492071)。 + +### 🐎 [云音乐 iOS 端网络图片下载优化实践](https://mp.weixin.qq.com/s/R1XLp9hjHDBdYcOI6w8psw) + +[@J_Knight_](https://github.com/knightsj):本文介绍了网易云音乐团队的图片下载优化方案:通过拼接参数,在远端进行裁剪,质量压缩从而下载到不同的图片。具体的做法是将 SDWebImage 里的 SDWebImageManager 和 SDImageCache 进行改造,作者附上了代码和流程图分享了具体的改造方案。团队自测该方案将图片的下载速度提升了 50%,同时日均节约 至少 10% 的 CDN 的带宽。 + +### 🐎 [Clang Module 内部实现原理及源码分析](https://mp.weixin.qq.com/s/fm_Wxrs9o6V53jtGdp3v9w) + +[@Damien](https://github.com/ZengyiMa):本文来自阿里的钉钉团队,钉钉团队在支持 Swift 和适配 Clang Module 的过程中,遇到了各种各样的编译问题,由此作为切入点,从编译提供的参数出发,一步步深入挖掘了 Clang Module 内部的实现原理。 + +### 🐕 [How do we use SwiftUI in the Medium iOS application](https://medium.engineering/how-do-we-use-swiftui-in-the-medium-ios-application-8f7bd95416ce) + +[@JimQ](https://github.com/waz0820):随着 SwiftUI 近四年的迭代,尤其是本月即将迎来的 4.0 正式版,似乎预示着 SwiftUI 已经可堪大用。本文深入介绍了 Medium iOS 客户端中不断增长的 SwiftUI 的使用情况,其中一些常见场景的模式和用法以及遇到的问题和妥协,对我们把 SwiftUI “用起来”有很好的参考价值。 + +### 🚧 🐕 [Stop Xcode 14 beta from draining your battery](https://blog.nihongo-app.com/stop-xcode-14-beta-from-pegging-cpu/) + +[@水水](https://xuyanlan.com):Xcode14 betas 4~6 中有一个错误,当运行 iOS 16 iPhone 模拟器时,会导致 Postboard 进程中的崩溃循环,使得 CPU 使用率飙升,电池消耗非常快。在苹果解决这个问题之前,文章提供了一个解决办法。并且发现了一个不需要下载旧模拟器的解决方案。 + + +## 摸鱼周报 + +[@摸鱼周报 #67](https://mp.weixin.qq.com/s/8H7YnrVTubKvVnYJBXcF_A):大家好,第 67 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:WWDC22 视频现已提供简体中文字幕;现已推出 Xcode Cloud 订阅 +* 本周学习:移动网络的优化方向;DNS 解析的相关问题 +* 内容推荐:SwiftUI 相关的一些文章推荐 +* 摸一下鱼:Superhuman 3D 捏人;Swifty Compiler 是一个可以在 iPhone/iPad 上编写和运行 Swift 代码的 app;一款命令行版本的电脑状态管理器 iStats;一款极客范儿的浏览器主题 YuIndex。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#217-2022.09.19.md b/Reports/2022/#217-2022.09.19.md new file mode 100644 index 000000000..122dbd806 --- /dev/null +++ b/Reports/2022/#217-2022.09.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #217 | 2022-09-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [字节跳动 DanceCC 工具链系列之 Xcode LLDB 耗时监控统计方案](https://mp.weixin.qq.com/s/4DgbZosBit-kTVhYMwRlHw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 [字节跳动 DanceCC 工具链系列之 Swift 调试性能的优化方案](https://blog.csdn.net/YZcoder/article/details/124684083) 一文中,介绍了如何使用自定义的工具链,来针对性优化调试器的性能,解决大型 Swift 项目的调试痛点。为了精确测量经过优化后的 LLDB 调试 Xcode 项目效率提升效果,衡量项目收益,需要开发一套能够同时获取 Xcode 官方工具链与 DanceCC 工具链调试耗时的耗时监控方案。本文详述了 DanceCC 提出了一套专门的方案,方案原理基于 LLDB Plugin,利用 Fishhook,从 LLDB 的 Script Bridge API 层面拦截 Xcode 对 LLDB 调用,以此来进行耗时监控统计。 + +### 🐢 [这一年,我对终端组织与技术架构的思考【专家讲技术】](https://mp.weixin.qq.com/s/BGGsuYrlojMfTqfTo71VZg) + +[@莲叔](http://aaaron7.github.io/):闲鱼是国内较早进行 Flutter 业务尝试,也是较早的全面拥抱 Flutter 的 App。本篇文章里,闲鱼的技术负责人宗心分享了他对于移动开发行业从软件架构和组织形式两个视角的变迁,之后提出了未来可能的一种岗位分工:应用研发工程师和基础设施开发工程师,并且发布了闲鱼围绕这样的岗位分工开发的一套基于 Flutter 的 UI 开发渲染引擎 KUN。移动开发到如今已经发展的超过十年的时间,研发团队相比最开的 iOS/Android 开发已经演化出了更复杂的形式,这篇文章是对这些趋势一个比较不错的归纳,对自己技术栈觉得迷茫的同学也可以看看。 + +### 🐎 [基于 React Native 的动态列表方案探索](https://mp.weixin.qq.com/s/5Oa45FN3SECveu6_N89k2A) + +[@Damien](https://github.com/ZengyiMa):动态渲染框架大家一定不陌生,比如阿里的 DinamicX、Tangram 大家应该都很熟悉了,基于 DSL 的动态化方案虽然有性能上的一些优势,但是毕竟不是图灵完备的,一些需要逻辑动态下发的需求实现成本偏高,网易云音乐团队带来了他们的最佳实践,基于 React Native 的动态列表方案。简单来说就是将 ReactNative 容器内嵌在 RecyclerView 的 ViewHolder 中,页面主体框架还是由 Native 开发和渲染,首屏加载速度得到了保证,局部的 RN 实现也使页面获得动态化的能力。有兴趣的同学不妨一读。 + +### 🐢 [终极 C++ 避坑指南](https://mp.weixin.qq.com/s/Isr5-FojMTRK36g-Gh2_yQ) + +[@xuyafei](http://github.com/xiaofei86):C++ 是一门古老的语言,但仍然在不间断更新中,不断引用新特性。但与此同时 C++ 又甩不掉巨大的历史包袱,并且 C++ 的设计初衷和理念造成了 C++ 异常复杂,还出现了很多不合理的“缺陷”。本文主要有 3 个目的: +1. 总结一些 C++ 晦涩难懂的语法现象,解释其背后原因,作为防踩坑之用 +2. 和一些其他的编程语言进行比较,列举它们的优劣 +3. 发表一些我自己作为 C++ 程序员的看法和感受 + +### 🐢 [如何判断 ScrollView、List 是否正在滚动中](https://juejin.cn/post/7143002835192381471#heading-0) + +[@老峰](http://github.com/gesantung):SwiftUI 并没有提供这方面的 API 。本文将介绍几种在 SwiftUI 中获取当前滚动状态的方法,每种方法都有各自的优势和局限性。 +1. Introspect:通过访问其背后 Delegate 的 UIKit 控件;优点准确、及时、系统负担小;缺点向后兼容性差。 +2. Runloop:创建绑定于不同 Runloop 模式下的 TimerPublisher ,实现对滚动状态的判断;优点简单、准确、及时;缺点只支持 iOS,屏幕中只能有一个可滚动控件。 +3. PreferenceKey:子视图可以通过 preference 视图修饰器向其祖先视图传递信息;优点支持多平台,前后兼容;缺点需要为可滚动容器的子视图添加修饰器,判断的准确度没有前两种方式高。 + +另外作者针对以上方案写了 [IsScrolling](https://github.com/fatbobman/IsScrolling) 开源库,有需要的同学可以参考。 + +### 🐢 [你真的懂 iOS 的异常捕获吗?](https://juejin.cn/post/7142656591139962888#heading-16) + +[@邦Ben](https://weibo.com/linwenbang):我们的开发中一定会接触到异常捕获,本文作者从操作系统层面进行分析。在触发异常的时候,会让应用从用户态切换到内核态进行处理。文章中介绍到,异常分成两类:1. 硬件异常,2. 软件异常。触发了异常,一条包含异常信息的 Mach Message 会通过 Match Exception 机制进行传递到注册的端口,从而被处理。Mach Exception 如果没有在 tread 和 task 中得到处理,那么会转成成 Unix Signal 信号。所以需要做的就是捕获 Mach Exception 以及 Unix Singal,具体的代码,文章中进行了讲述。想详细了解的,具体看一下文章,同时可以去参考一些开源的 CrashReport 库。 + +### 🐕 [Clip control on the Apple GPU](https://rosenzweig.io/blog/asahi-gpu-part-6.html) + +[@AidenRao](https://weibo.com/AidenRao):Apple 最新的 Mac 系列包括他们内部的 "M1 " 系统芯片,具有一个定制的 GPU,既没有公共文档也没有开源驱动程序。苹果为 App Store 开发者提供的 Metal 只具备有限的 API,缺乏对 OpenGL 功能的支持。文章作者提供了多种解决方案,去支持 OpenGL 的 clip control,最终实现在 Mac OS 上运行游戏 [Neverball](https://neverball.org/)。 + +### 🐕 [特效侧用户体验优化实战 -- 包体积篇](https://mp.weixin.qq.com/s/3ZrRW0iRSBjqs0ix4FWzZA) + +[@JonyFang](https://github.com/JonyFang):在了解了特效基础的包体积组成,可以针对性的对编译选项、代码进行调整,以优化包体积。同时介绍了包体积监控工具,输出每个需求带来的包体积增长大小、包体积增长原因,及时给出包体积告警、定位异常增量 case,减缓包体积增长,推动业务优化。 + +### 🐕 [What's the "any" keyword? Understanding Type Erasure in Swift](https://swiftrocks.com/whats-any-understanding-type-erasure-in-swift) + +[@享耳先森](https://github.com/iblacksun):Swift 的强类型是程序健壮性的基石。但在过去,有些特殊场景下强类型给开发者带来一些不必要的规避工作,Swift 5.7 引入的 `any` 关键词很好的解决了这一问题。本文解释类型擦除的概念,以及过去是如何做的?有 `any` 后有什么不同?建议结合 [Existential any in Swift explained with code examples](https://www.avanderlee.com/swift/existential-any/) 一起阅读。 + +### 🐕 [iPhone 14 Screen Sizes](https://useyourloaf.com/blog/iphone-14-screen-sizes/) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了 2022 年 iPhone 14 屏幕尺寸变化的回顾,并配有简单易懂的样例图,一目了然。 + +## 工具 + +### [Regex101, 正则调试在线工具](https://regex101.com) +[@anotheren](https://github.com/anotheren/):Regex101 是一个正则调试的在线工具,提供了大量的帮助信息来优化正则编写,甚至还提供了 Code Generator 来直接生成相关语言的代码(支持 Swift)。不仅仅是方便新手,如果你也经常与正则打交道,可以试试这个工具。 + +## 摸鱼周报 + +[@摸鱼周报 #68](https://mp.weixin.qq.com/s/YNukagI-VTOsIkhlYM6dEQ):第 68 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:iPhone14 灵动岛创意前瞻 +* 本周学习:OC 泛型中的 `__covariant` 与 `__contravariant` +* 内容推荐:编译和热重载优秀文章推荐 +* 摸一下鱼:关于 iOS 开发国际化相关工具推荐 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#218-2022.09.26.md b/Reports/2022/#218-2022.09.26.md new file mode 100644 index 000000000..b0a16db5f --- /dev/null +++ b/Reports/2022/#218-2022.09.26.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #218 | 2022-09-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [中心化决议管理——云端分析](https://mp.weixin.qq.com/s/BcX73VpSBxAgjOwoKaEoEw) + +[@JonyFang](https://github.com/JonyFang):本文主要分享了目前字节跳动内部的一种 CocoaPods 云端化的优化方案,针对大量重复的 iOS 工程流水线构建任务进行了收敛和复用,在保证依赖决议正确性的前提下加速了依赖管理速率,提升了研发效能。目前云端分析服务已经完成第一阶段的开发并落地使用,已被内部几个核心的生产线使用。 + +内容结构: +1. 背景 +2. 什么是云端依赖分析 +3. 如何加速决议 + - 制品库(全量组件索引信息) + - 缓存机制(排序 Version 缓存、Spec 对象缓存、缓存复用) + - 物料剪枝 + - 决议策略兼容 + +### 🐎 [How to use UIViewController in SwiftUI](https://sarunw.com/posts/uiviewcontroller-in-swiftui/) + +[@Damien](https://github.com/ZengyiMa):在 iOS 开发中,SwiftUI 和 UIKit 将会长期共存,无论使用的是哪种框架,有时你都可能需要相互调用,幸运的是,Apple 可以轻松地将 UIKit 代码引入 SwiftUI 中使用,在本文中,作者将向你展示如何在 SwiftUI 使用 UIViewController。有兴趣的读者不妨一读。 + +### 🐎 [viewDidLoad() in SwiftUI](https://sarunw.com/posts/swiftui-viewdidload/) + +[@zvving](https://github.com/zvving):从 UIKit 来到 SwiftUI 世界,你可能会困惑:`viewDidLoad()`在 SwiftUI 下的等效方法是什么? + +在声明式视图框架体系下,苹果并没有提供 `load view` 的行为细节回调。在绝大多数场景,可以通过 `onAppear()` 模拟 `viewDidLoad()` 的近似方法。本文详细介绍了模拟过程,以及如何封装成 `view modifier` 方便使用。 + +### 🐕 [云音乐 iOS 启动性能优化「开荒篇」](https://mp.weixin.qq.com/s/XVd9QNvXgJx_9K3XHAcaSA) + +[@Smallfly](https://github.com/iostalks):启动速度是 App 的「门面」,影响用户第一使用体验,是非常重要的体验优化项。本文记录了云音乐 App 在 iOS 13 之后冷启动优化实践。 + +以 `main()` 函数作为分界点,分别从 T1 和 T2 两个阶段进行针对性的优化。T1 阶段的治理主要包括动态库治理、+load 方法、无用代码清理、二进制重排;T2 阶段的治理主要是高频 OC 方法、runtime 符号遍历、网络相关、系统接口、业务影响等等。 + +经过阶段性的启动性能专项优化,云音乐 App 启动性能提升了 30%+。 + +### 🌟 🐕 [大终端领域的新物种-KUN](https://mp.weixin.qq.com/s/tDDI9Wn5eUTOJKHxYL27xg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 动态化的尝试和建设在社区从未停止过,今年来各种方案层出不穷: AST 解析,JS Engine+,Lua VM 等,各有千秋;KUN 是咸鱼团队基于 Kraken 产出的一套夸多端的 Flutter 动态化方案,兼顾 iOS & Android 动态化的同时,对齐 W3C 标准做到 Web 端兼容,其整体方案的思路值得深入学习和借鉴,暂时并未开源。 + +## 音视频 + +### 🐎 🚧 [Dynamic Island Animation explained](https://twitter.com/BradEllis/status/1570892167807377409?s=20&t=T38Q6Acu_TAqOGhWbmQE0A) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):你是否很好奇灵动岛的动画是如何设计出来的,作者通过将两个圆叠在一起,先模糊(blur)再锐化(sharpen),得到蒙层,复现了同样的动效。 + +## 摸鱼周报 + +[@摸鱼周报 #69](https://mp.weixin.qq.com/s/Miy8xsHYHHSXsl5NtxswQA):第 69 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:使用 iOS 16.1 Beta 版和 Xcode 14.1 Beta 版,准备登陆灵动岛 +* 本周学习:了解符号 Symbol +* 内容推荐:Swift、SwiftUI 相关好文推荐 +* 摸一下鱼:iOS 16 锁屏组件以及几个有趣的小工具:emojimix、hexclock、能不能好好说话 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#219-2022.10.17.md b/Reports/2022/#219-2022.10.17.md new file mode 100644 index 000000000..40cc459a2 --- /dev/null +++ b/Reports/2022/#219-2022.10.17.md @@ -0,0 +1,133 @@ +# 老司机 iOS 周报 #219 | 2022-10-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [Apple 面向开发者推出 Ask Apple](https://www.apple.com.cn/newsroom/2022/10/apple-introduces-ask-apple-for-developers/) + +![Ask Apple](https://developer.apple.com/events/ask-apple/images/ask-apple-icon-array_2x.webp) + +Apple 宣布推出 [Ask Apple](https://developer.apple.com/cn/events/ask-apple/),这是一项全新的互动式 Q & A 和一对一咨询(Office Hour)系列活动,为开发者提供更多机会与 Apple 专家直接交流沟通,获取洞见、支持与反馈。 + +开发者需要加入 Developer 计划,并且下载 Slack 参与交流互动(与 WWDC22 的 Digital Lounges 模式相似,当时参与过的同学应该对讨论中的丰富信息记忆犹新)。欢迎大家注册参加 Q & A 的[大量话题讨论](https://developer.apple.com/cn/events/ask-apple/questions-and-answers/),例如灵动岛、SwiftUI、新平台和硬件的体验优化等。 + +同时还有中文开发者的 Office Hour 专场(共 4 场),时间也充分考虑到了国内开发者。 +- 咨询设计布道团队(大中华区) + - 10 月 21 日上午 10:00 - 12:00 + - 10 月 21 日下午 14:00 - 16:00 +- 咨询技术布道团队(大中华区) + - 10 月 21 日上午 10:00 - 12:00 + - 10 月 21 日下午 14:00 - 16:00 + +## 新手推荐 + +### 🐎 [Dynamic Island (and Live Activities): Quick start tutorial](https://nemecek.be/blog/171/dynamic-island-and-live-activities-quick-start-tutorial) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 +Xcode 14.1 Beta 中带来了灵动岛的相关 API ,本文主要介绍了如何简单的利用新的 Live Activities 的 API 来创建一个自己的灵动岛。 + +## 文章 + +### 🐕 [CPU 是如何与内存交互的](https://mp.weixin.qq.com/s/SaaHKPnNUSvDkmwKtip3HA) + +[@老驴](https://weibo.com/u/6090610445):今年上半年 M1 Pro/Max/Ultra 在 GPU 上实际表现没有达成预期之后引发了很多人对 M1 系列芯片的进一步探究,后来 TLB 容量不足的问题也被发现。那什么是 TLB?CPU 又是如何去映射内存的?本文就从当今主流 CPU 架构出发,科普当今的 CPU 是如何管理使用 L1/2/3 缓存和内存的。 + +### 🐕 [Apple’s use of Swift and SwiftUI in iOS 16](https://blog.timac.org/2022/1005-state-of-swift-and-swiftui-ios16/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):iOS 16 刚刚发布,本文分析了苹果内置的应用程序使用 Objective-C、Swift、SwiftUI 以及 C 和 C++ 的占比。通过对比 iPhone OS 1 到 iOS 16 的各个系统,可以得出一些结论: + +- Objective-C 是 iOS 的核心,被大多数应用程序直接或间接使用 +- Swift 的使用在过去的 iOS 版本中迅速增加。今年 Swift 终于超越了 C++ +- 多年来C++的使用稳定 +- SwiftUI 开始引人注目,这是一个很好的迹象 +- C正在缓慢但肯定地消失 + +### 🐕 [一文让你理清 PrimaryScrollController](https://mp.weixin.qq.com/s/1kLtGleY6BiC3bkV6YK83Q) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 对苹果用户来说,大家基本都知道,iOS 手机应用有一个比较常见的功能:点击状态栏,列表就会滚动到顶部. 但是在 Flutter 的各种列表组件中并未带有该特性,本文教大家如何使用 PrimaryScrollController 来实现这一特性. + +### [Where View.task gets its main-actor isolation from](https://oleb.net/2022/swiftui-task-mainactor/) + +[@Damien](https://github.com/ZengyiMa): Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者在视图中使用基于 async/await 的异步代码,但是你知道 task 是如何获取自己所执行的线程吗?以及它和 MainActor 修饰词有什么关系?如果感兴趣不妨一读。 + +### 🐕 [Xcode 14.0 generates wrong concurrency code for macOS targets](https://oleb.net/2022/xcode-14-mac-concurrency-bugs/) +[@Cooper](https://github.com/cjlcooper):Mac 开发者在 Xcode 14.0 和 14.0.1 进行构建工程的时候可能会出现并发错误(concurrency bugs),因为 Swift 5.7 编译器在针对 macOS 12.3 SDK 时会生成无效代码。解决方案是在 Xcode 14.1 发布之前,使用 Xcode 13.4.1 构建工程。产生错误的原因如下: + +- 因为实现了 [SE-0338](https://github.com/apple/swift-evolution/blob/main/proposals/0338-clarify-execution-non-actor-async.md) ,Swift 5.7 编译器的执行器跳跃点(executor hops)与 Swift 5.6 不同 +- Swift 5.7 新增非官方属性 @_unsafeInheritExecutor,用于注释一些需要退出新规则的标准库函数,当编译器编译到该属性时,它会生成不同的执行器跃点 +- 产生编译错误的原因是在 Mac 开发中,Xcode14 使用了 Swift 5.7 的编译器和 Swift 5.6 的标准库,后者不包含 @_unsafeInheritExecutor 属性 +- Xcode14.1 和 macOS 13 SDK 发布后将会修复这个问题 + +### 🐢 [基于自建 VTree 的全链路埋点方案](https://mp.weixin.qq.com/s/FuL2zynvf1xGjg_RCZcc4Q) + +[@Barney](https://github.com/BarneyZhaoooo): 本文详细介绍了网易云音乐技术团队自研的一套全链路埋点方案,从埋点设计、到客户端三端(**iOS**、**Android**、**H5**)开发、以及埋点校验&稽查、再到埋点数据使用。从设计到背后的思考和上线实践都有详细的说明,适合仔细阅读思考。 + +### 🐢 [虚拟内存 & I/O & 零拷贝](https://mp.weixin.qq.com/s/DMWfSxrbu4kgCh4JCQ4XIQ) + +[@老峰](https://github.com/gesantung):内存管理也是操作系统的核心功能之一,本文主要讲解了 Linux 系统下内存管理技术,是一篇不错的科普文,主要包含以下四部分: +- 虚拟内存: 地址翻译、高速缓存、加速翻译&优化页表 +- 内核空间 & 用户空间:内核态与用户态 +- IO:(同步)阻塞 IO、(同步)非阻塞 IO、IO 多路复用、网络 IO 模型、异步 IO +- 零拷贝:传统 IO 流程、mmap + write、写时复制 + +## 工具 + +### 🐕 [妙言 - 更适合工程师用的 markdown 笔记应用](http://miaoyan.app/) + +[@水水](https://www.xuyanlan.com):一个简洁好看的开源的 Mac Markdown 编辑器,没有任何多余的功能。使用原生 Swift 开发,轻量性能高,安全纯本地使用,具备语法高亮、黑暗模式、自动格式化、单独编辑、演示模式、图床等功能。也可以做为备忘录、归档使用,我个人还是比较喜欢的。 + +- 下载链接:http://miaoyan.app/ +- 工具源码:https://github.com/tw93/MiaoYan + +## 代码 + +### [Semaphore](https://github.com/groue/Semaphore) + +[@Smallfly](https://github.com/iostalks):`Semaphore` 是一种信号量管理类,它和 `DispatchSemaphore` 区别是不会阻塞线程,而是在 Swift Concurrency 框架下提供更细颗粒度的资源管理能力,例如支持对 Task 的挂起和恢复等。 + +### [响应式编程 Demo - RxStudy、GetXStudy](https://github.com/seasonZhu/RxStudy) + +[@JonyFang](https://github.com/JonyFang): [RxStudy](https://github.com/seasonZhu/RxStudy)、[GetXStudy](https://github.com/seasonZhu/GetXStudy) 分别是基于 RxSwift/RxCocoa、GetX 框架的 Demo,可以结合两个项目,对比编程思路。 + +### [package-benchmark](https://github.com/ordo-one/package-benchmark) + +[@xuyafei](https://github.com/xiaofei86):package-benchmark 是一种用于轻松创建 “macOS 和 Linux 的 Swift 性能测试报告” 的工具。它既适用于主要关注运行时的临时小型代码片段(本着 Google [swift-benchmark](https://github.com/google/swift-benchmark) 的精神),也适用于更广泛的指标,例如内存分配、系统调用、线程使用等。 + +package-benchmark 支持本地使用和基准比较,用于单个开发人员的迭代工作流,但更重要的是,它很好地支持 GitHub CI 的集成。其提供的示例工作流用于在主分支和 PR 分支之间进行自动比较,以支持 PR 的强制性能验证(具有可定制的阈值),这也是该工具的主要预期用例。 + +## 摸鱼周报 + +[@摸鱼周报 #70](https://mp.weixin.qq.com/s/rSPC8lgvUKPKfgR53xdHqg):第 70 期摸鱼周报,一起来看下本期概要: + +* 本期话题:苹果 iOS / iPadOS 16.1 公测版 Beta 3 发布,为老款 iPad 支持台前调度 +* 本周学习:排查修复 App Store 上架项目闪退问题 +* 内容推荐:iOS 开发技巧及计算机基础内容学习 +* 摸一下鱼:计算麦当劳套餐卡路里的营养计算器,可以模拟木鱼声音的软件,以及插图绘制软件 + +[@摸鱼周报 #71](https://mp.weixin.qq.com/s/0mAKYvVuPLKEA2qnsNfCvQ):第 71 期摸鱼周报,一起来看下本期概要: + +* 本期话题:十月份还有 One More Thing?Apple 新增 QA 活动;Swift 和 SwiftUI 在 iOS 系统中的使用情况。 +* 本周学习:在 iOS 16 中更改文本编辑器背景;解决 Cocoapods 导致的 Showing Recent Messages 问题 +* 内容推荐:SwiftUI 好文推荐 +* 摸一下鱼:推荐一款图片在线处理网站以及老地图查询网站;供摸鱼的迷宫生成器。 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#220-2022.10.24.md b/Reports/2022/#220-2022.10.24.md new file mode 100644 index 000000000..f2acaf7de --- /dev/null +++ b/Reports/2022/#220-2022.10.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #220 | 2022-10-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [A Possible Vision for Macros in Swift](https://forums.swift.org/t/a-possible-vision-for-macros-in-swift/60900) + +[@kemchenj](https://kemchenj.github.io):前一段时间 Swift 团队决定将编译器的 Parser 改为使用 Swift 实现,并且将这一部分功能内置到 SwiftSyntax 里。 + +这意味着 **Swift 成为了语法 API 的一等公民**,我们可以很便捷地在 Swift 代码里里访问和修改自身(源代码),更进一步地说,我们可以通过代码去编写代码。 + +如果把这个功能集成到编译器和语法里,就成了我们熟知的**宏 (macro)**。趁着这个机会,Swift 团队思考了后续如何借助这套 API,提供宏的实现,并且分享了初步的设计思路到论坛里,希望大家可以一起参与讨论。 + +以往很多硬编码在编译器里的功能都可以改为通过宏系统进行实现,例如 `Equatable`/`Hashable` 的实现自动合成等等: + +```swift +extension Equatable { + macro func ==(lhs: Self, rhs: Self) -> Bool +} +``` + +### 🐎 [Which Collection?](https://khanlou.com/2022/10/some-collections/) + +[@Smallfly](https://github.com/iostalks):集合(Collection)是编程语言常用的类型,Swift 集合是值类型的,对于复杂的集合数据,频繁拷贝可能会带来性能问题。本文通过一个数独算法,介绍如何对数组做优化,主要利用了 `some` 关键字配合 Swift 5.7 协议支持关联类型的新特性实现。想了解更多请参考 [SE-0346](https://github.com/apple/swift-evolution/blob/main/proposals/0346-light-weight-same-type-syntax.md)。 + +### 🐕 [Xcode 中使用 SPM 和 Build Configuration 的一些坑](https://onevcat.com/2022/10/spm-in-xcode/) + +[@红纸](https://github.com/nianran):经喵神的相关测试发现,在 Xcode 中使用 SPM 的包编译时将参照 Build Configuration 的名字,自动选择使用 DEBUG 还是 RELEASE 模式来编译,这将导致编译宏、编译配置等一系列因素影响最终的二进制产物。 + +规则:若名字里包含有 Debug 或者 Development(不区分大小写)则选择 DEBUG 模式,反之则选择 RELEASE 模式。 + +### 🐕 [iOS 灵动岛开发实践](https://juejin.cn/post/7153236337074634788) + +[@anotheren](https://github.com/anotheren):灵动岛是 Apple 为 iPhone 14 Pro 系列带来的下一代交互体验。在 iOS 16.1 中,相关 API 已向开发者开放,并仅提供了 SwiftUI 版本的接口。本文从电商角度,带来了灵动岛开发的入门实践。但是并非所有功能都适合在灵动岛上展示,推荐核对 Apple 的人机交互设计指南中的 [Live Activities](https://developer.apple.com/design/human-interface-guidelines/components/system-experiences/live-activities) 部分。 + +### 🐢 [Swift Concurrency – Things They Don’t Tell You](https://wojciechkulik.pl/ios/swift-concurrency-things-they-dont-tell-you) + +[@Cooper Chen](https://github.com/cjlcooper):Swift Concurrency 提供了一种非常好的编写异步代码的方法,同时它也被宣传为使用安全。然而不幸的是 Swift Concurrency 编程有很多陷阱,而且编译器不会检查所有东西 +- 如果使用 async 关键字,确保在后台线程上调用,否则需要添加 @MainActor 属性 +- Swift Actor 不能保证在使用过程中避免数据竞争,不保证异步方法在调用另一个方法之前会被完全处理 +- 避免将锁和信号量等经典的同步方法与 Swift Concurrency 混合使用 +- 设置 Task 优先级,避免在单个队列上分派所有内容 +- 避免在 Task 中进行繁重的同步工作,例如当需要像图像处理这样的繁重工作时,请使用自定义 DispatchQueue +- 必要时请使用 await Task.yield() 允许更频繁地切换任务 + +## 代码 + +### [灵动岛开发示例代码](https://github.com/jordibruin/Dynamic-Islands) + +[@anotheren](https://github.com/anotheren):这是一份灵动岛开发的示例代码,包含了多个实例的展示,你可以结合上面灵动岛开发实践一起食用更佳。 + +## 音视频 + +### [Swift 视频教程 ChaoCode](https://space.bilibili.com/1911023449/video) + +[@EyreFree](https://github.com/EyreFree):Swift 视频教程 ChaoCode 从 [油管](https://www.youtube.com/c/ChaoCode/featured) 入驻 B 站,从基础的 Swift 语法到中级 Swift 内容、 SwiftUI、用 Swift 制作完整 App 等都有,比较适合入门学习 Swift,感兴趣的朋友可以关注。 + +> 由 [KeithBird](https://github.com/KeithBird) 推荐 + +## 摸鱼周报 + +[@摸鱼周报 #72](https://mp.weixin.qq.com/s/WUVAHbJe_dmA-DVFXpF2Qw):第 72 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:1024 程序员节在各个技术网站已经开始预热,有不少奖品可以捞一捞;App Store 现已开放 iOS 16.1 和 iPadOS 16.1 App 提交 +* 本周学习:当设置 `UIImageView` 高亮时,会暂停当前的动画;Xcode 14 编译包在 iOS 12.2 以下设备崩溃的解决方案 +* 内容推荐:灵动岛有很多玩法还待探索,本期推荐一些相关文章 +* 摸一下鱼:CleverToolKit:iOS 开发者辅助工具,页面简洁,体积小巧。目前包含 json2model 功能。 + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#221-2022.10.31.md b/Reports/2022/#221-2022.10.31.md new file mode 100644 index 000000000..f1115d534 --- /dev/null +++ b/Reports/2022/#221-2022.10.31.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #221 | 2022-10-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [全新升级 | 第十七届 D2 终端技术大会终于来了~](https://mp.weixin.qq.com/s/e1ilPhCaJDT9takQE9vpBA) + +D2 的前身是「前端技术论坛」,应该有不少前端朋友对它非常了解,去年大概有 2000 多个人报名。今年也升级成了「终端技术大会」,加入了不少客户端的内容,D2 不仅会重视内容的深度,同时也会拓宽内容的广度,希望和大家一起了解一线互联网在前端 / 客户端领域的技术探索与未来。此外,本届 D2 两大方向所擦出的火花,将为单一技术栈的同学带来更多方向性的输入。 + +从目前报名的议题上看含金量应该会非常不错。目前活动也已经正式官宣了,感兴趣的可以关注下。 + +### [Apple 的安全研究平台正式公开上线](https://mp.weixin.qq.com/s/M_NZF8F9r9PNkKTQbOycNg) + +苹果的安全平台 [Apple Security Research](https://security.apple.com/) 正式公开上线,可以看作苹果将更加重视社区提交的安全报告。苹果承诺将更快地对提交的内容做出回应,并且提供了更便捷地追踪提交漏洞的方式,开发者能够及时获得状态的更新。并且团队上线了一篇 XNU 内存安全的 [kalloc_type 介绍](https://security.apple.com/blog/towards-the-next-generation-of-xnu-memory-safety/)文章。 + +同时直到 11月 30 日截止,[Apple Security Research Device Program](https://security.apple.com/research-device) 还在接收报名,对安全研究感兴趣的同学可以报名。 + +## 文章 + +### 🐢 [iOS 高级之美(六)—— malloc 分析](https://juejin.cn/post/6844904033908424717) + +[@xuyafei86](https://github.com/xiaofei86):“iOS 高级之美” 是作者对自己工作中研究的一些总结,涵盖了常见的 Runtime 面试考点。此系列文章围绕底层进行源码分析、LLDB 调试、源码断点和汇编调试,共有 6 篇文章: + +1. iOS_objc4-756.2 最新源码编译调试 +2. OC 对象底层上篇 +3. OC 对象底层下篇 +4. isa 原理分析 +5. 类结构分析 +6. malloc 分析 + +本篇针对 malloc 展开分析,感兴趣的同学可以阅读原文一探究竟。 + +### 🐎 [iOS ADRP 汇编指令与虚拟内存](https://juejin.cn/post/7159152535062888479) +[@Damien](https://github.com/ZengyiMa):你了解 ADRP 吗? ADRP 意为符号的页数地址,那么它是如何生成和确定的呢?本文作者会从最基本的 UITextView 的使用出发,深入汇编源码,一步步为我们展示阐述其中的原理,感兴趣的同学不妨一读。 + +### 🐎 [iOS SIGKILL 信号量崩溃抓取以及优化实践](https://mp.weixin.qq.com/s/2S3XIpKXMnYNFayeBE_d2Q) +[@JonyFang](https://github.com/JonyFang): 和其他信号不同,SIGKILL 不可被捕获,这是 Linux/Mach 内核的限制,为了让操作系统在程序无法响应的时候,可以从上一层控制进程的生命周期。自 iOS 13 后,引入了 MetricKit 框架,可以用来汇总和分析有关异常和崩溃诊断以及电源和性能。本文即介绍了如何使用 MetricKit 收集 SIGKILL 信号量、获取崩溃信息,基于 Code 的含义解析 SIGKILL 日志的过程。最后,也介绍了百度 App 常见的 SIGKILL 问题。 + +### 🐎 [Compiling Swift generics, Part I](https://forums.swift.org/t/compiling-swift-generics-part-i/60898) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是讲解 Swift 泛型如何工作系列文章中的第一部,并且提供了文档和源码。文中首先对 Swift 泛型背后的关键思想进行了总体概述,然后继续讨论对理解 Swift 编译器很重要的基础材料:编译管道、模块系统、请求评估器、类型和声明,最后深入探讨了泛型实现的细节:从泛型声明的 AST 开始,然后讨论泛型签名、替换映射、一致性和泛型环境。 + + +## 代码 + +### [推荐一个 Swift Concurrency 拓展库](https://github.com/ChimeHQ/ConcurrencyPlus) + +[@Cooper Chen](https://github.com/cjlcooper):这是一个轻量级的 Swift Concurrency 拓展库,在开发 Swift 并发相关方面提供了一些优秀的工具拓展。 +- 提供基于 FIFO 排队的 TaskQueue +- 提供 CheckedContinuation 扩展用于提升效率 +- 在桥接非异步代码时提升任务扩展的性能 +- 提供了安全的异步集成 NSXPCConnection 扩展 +- 提供 MainActor.runUnsafely 来解决不受控制的错误或注释不足的代码 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [上海] 拼多多 - 特效团队 - Android/iOS +- [上海] 七猫小说 - iOS/Android/前端/go/大数据 高级、资深工程师 +- [武汉] 微派网络 - 会玩app/青藤之恋 - iOS/Android +- [杭州] 手机淘宝 - 基础链路客户端团队 - iOS/Android +- [杭州] 淘宝 - 原生研发模式 - iOS/Android +- [杭州] 淘宝 - 跨端引擎与开放技术 - iOS/Android/C++ +- [北京/深圳/广州/三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#222-2022.11.07.md b/Reports/2022/#222-2022.11.07.md new file mode 100644 index 000000000..2c0e0775b --- /dev/null +++ b/Reports/2022/#222-2022.11.07.md @@ -0,0 +1,135 @@ +# 老司机 iOS 周报 #222 | 2022-11-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦 ~ 欢迎陈家黎 (Cooper Chen) 加入周报组织。家黎目前专注在 Mac 桌面应用开发和架构设计,同时对编译器、链接器以及 CI/CD 等方向均有研究。希望家黎的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [挑战上岛:适配实时活动和灵动岛](https://developer.apple.com/cn/accelerator/) + +实时活动用于在 iPhone 锁屏以及灵动岛上显示来自 App 的最新信息,帮助用户及时查看当前任务和事件的进展。参与此次活动,开发者将了解如何设计和开发的实时活动,以及如何利用灵动岛带来更出色的用户体验。 + +参与讲座的开发团队可在讲座当天报名参与实时活动和灵动岛适配挑战,通过审核后可获得一对一的咨询与深度辅导。参加挑战,并能够在 2022 年 12 月 20 日前完成适配和上线的团队,将有机会获得更多 App 的推广机会。请在 2022 年 11 月 8 日前报名参加。 + +### [第二期字节跳动技术 iOS 技术沙龙正式开放报名](https://mp.weixin.qq.com/s/KTobjj9B8vuEYPIKggfeKA) + +[@Barney](https://github.com/BarneyZhaoooo):第二期字节跳动技术 iOS 技术沙龙正式开放报名了! +本期沙龙将围绕**静态分析**、**视频播放品质优化**、**首页 Feed 重构**、**自动化服务**及**端智能技术探索**等 5 大技术方向 , **11 月 12 日下午 2 点**沙龙将以免费线上直播的形式与大家见面。 +以下是具体主题: + +- **抖音 iOS 从静态分析到准入体系:进击的“钟馗”** +- **抖音 iOS 视频播放品质优化实践** +- **抖音 iOS 首页 Feed 重构探索与实践** +- **抖音 iOS 自动化服务:工具链演进与优化实践** +- **机器学习技术在抖音 iOS 的探索与实践** + + +## 文章 + +### 🐢 [自动化测试在美团外卖的实践与落地](https://mp.weixin.qq.com/s/vLR1FqGi6TiICEcWzOnHfQ) + +[@EyreFree](https://github.com/EyreFree):随着美团到家业务的发展,系统复杂度持续增长,外卖各个页面的技术形态也很多,除了 Native 代码,还包括 Mach(外卖自研动态化框架)、React Native、美团小程序、H5 等,研发人员一半时间在开发、一半时间在模拟环境和自测。因此引入自动化测试就显得十分有必要,本文介绍了美团外卖在自动化测试方向做的一些探索和实践,包括可溯源的自动化测试、跨 App 回放用例、埋点的录制回放等,推荐正在从事相关领域工作的同学阅读。 + +### 🐢 [Towards the next generation of XNU memory safety: kalloc_type](https://security.apple.com/blog/towards-the-next-generation-of-xnu-memory-safety/) + +[@Damien](https://github.com/ZengyiMa):内存安全漏洞是最常见,最广泛利用的漏洞问题,并且当今几乎所有流行的用户设备都依赖于用 C 和 C++ 等被认为 “内存不安全” 的编程语言编写的核心系统代码,本文来自 Apple 官方安全工程与架构团队文章,向大众展示了苹果在解决内存安全漏洞方面的努力,本文会从以下几个角度为我们完整的介绍了新的一代内存分配器 kalloc_type + +* 对安全问题的介绍,包括目标、设计原理和必须克服的挑战。 +* kalloc_type 安全分配器的技术实现原理。 +* 安全分析和评估,包括优势和劣势。 + +本文是安全问题的系列文章内容的第一篇,感兴趣的同学可以订阅 Apple 官方 Blog。 + +### 🐕 [深入理解 virtual 关键字](https://mp.weixin.qq.com/s/fvgU5iBP9_0yZOsX0no_Cg) + +[@莲叔](http://aaaron7.github.io/):virtual 是 C++ 最常用的一个关键字,绝大多数同学可能对于 virtual 的理解还停留在表面,认为是如果我们需要覆写父类的方法,则需要将对应的方法标记为 virtual。虽然这个习惯不能说不对,但本质还是一种盲人摸象。这篇文章深入浅出的介绍了 virtual 为什么可以为我们解决继承中遇到的问题,有无 virtual 在集成中的区别,以及最后还简要的介绍了 virtual 的实现原理,非常适合平时需要书写 C++ 的同学阅读,ROI 非常高(收获 / 阅读时间)。 + +### 🐎 [聊聊 iOS 中的像素对齐](https://juejin.cn/post/7124658703088910350) + +[@Smallfly](https://github.com/iostalks):像素对齐是 UI 开发中比较基础的概念,像素不对齐可能会出现视觉效果不符合预期,还会导致一些额外的性能损耗。本文采用通熟易懂的方式,介绍 iOS 系统中像素不对齐会产生的效果,以及在不同场景下像素对齐的处理方式。 + +### 🐕 [Resolver for iOS Dependency Injection](https://www.kodeco.com/22203552-resolver-for-ios-dependency-injection-getting-started) + +[@JonyFang](https://github.com/JonyFang):Resolver 是一个依赖注入 / 服务定位框架,它的核心逻辑是服务定位的设计实现。Resolver 的核心主要包含三个部分:`ResolverRegistration`、`ResolverScope`、`Resolver`,它们各有各的职责,遵循了职责单一的设计原则,并且实现了一个扩展性很强的策略模式。本文是 RAYWENDERLICH.COM 提供的一篇入门教程,可以根据实例 Demo 了解 Resolver 的使用。 + +### 🐕 [美团高性能终端实时日志系统建设实践](https://mp.weixin.qq.com/s/BAcB_LQ1Nr00Y7RxjRDK1g) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了美团是如何从 0 到 1 搭建高性能终端实时日志系统 Logan,其服务于移动端 App、Web、小程序、IoT 等终端场景下的实时日志解决方案,旨在提供高扩展性、高性能、高可靠性的实时日志服务,包括日志采集、上传、加工、消费、投递、查询与分析等能力,其中落地成果如下: +- 核心链路还原 +- 内测阶段排障 +- 日志数据分析 + +希望能为大家带来一些帮助和启发。 + +### 🐕 [智能测试实践之路 - UI 遍历技术](https://mp.weixin.qq.com/s/wetQa8iiOnKySehtFpbPtQ) + +[@老峰](https://github.com/gesantung):UI 测试在大促断网演练、线上问题巡检、功能回归测试兜底、埋点覆盖、流水线质量门禁等许多场景下有重要作用,但传统 UI 遍历技术依赖 uiautomator 和 wda 框架获取页面 Dom 数据结构,在稳定性、性能、兼容性方面均有一定痛点,本文是京东结合传统 dump hierarchy 获取视图树和 openCV 页面分割两种技术手段在智能测试方向的探索实践,包含以下内容: + +- 智能分割识别获取页面元素 +- 利用图像视觉和 AI 识别处理遍历过程弹窗 +- 利用图像 Hash 和分割轮廓特征标识页面 +- 多端兼容的指定页面遍历方案 +- 多种借力于 AI OCR CV 技术的断言方式 + +### 🐕 [iOS 灵动岛开发实践](https://juejin.cn/post/7153236337074634788) + +[@水水](https://www.xuyanlan.com/): 本文作者通过电商常用的抢购商品案例出发,从基础概念、开发准备、项目构思、项目代码实践到最终结果展示的完整的描述了灵动岛的开发实践过程,是非常好的参考资料。如果对灵动岛开发有兴趣的朋友们可以了解看看哦 ~ +关键词: +- Max 系统版本、编译器及 iOS 系统版本:>=MacOS12.4、>=Xcode14.0+beta4、>=iOS16.1+beta +- ActivityKit +- SwiftUI +- Widget + +### 🐕 [盒马 iOS Live Activity & “灵动岛”配送场景实践](https://mp.weixin.qq.com/s/6M3jaVwgTAaQ0A0Fsjcs1Q) + +[@J_Knight_](https://github.com/knightsj):盒马团队将灵动岛技术落地到了盒马 30 分钟配送的场景,作为第一批适配的应用,获得了 Apple Store Today 的推荐。本文首先分享业务落地效果,并结合整体的技术方案分享了在开发过程中遇到的技术难点(比如实时更新,机型适配,过渡动画等)以及解决方案。 + +### 🐎 [基于优酷业务特色的跨平台技术 | GaiaX 开源解读](https://mp.weixin.qq.com/s/2LW4qS2Sk4SV23pAE2xhuw) + +[@xuyafei86](https://github.com/xiaofei86):[GaiaX](https://github.com/alibaba/GaiaX) 跨端模板引擎是在阿里优酷、淘票票、大麦内广泛使用的 Native 动态化方案。其采用自定义 DSL 搭建 UI,Native 原生 UI 组件进行渲染的技术形态。使用 json 和 css 描述 UI 元素、数据绑定和动态扩展信息。GaiaX 还具备动态化能力,并提供相关的开发工具,感兴趣的同学可以关注此系列文章。 + +### 🐕 [Swift Package Manager 工程实践](https://mp.weixin.qq.com/s/q7jolU99K7FI9JvAxjwRwg) + +[@AidenRao](https://weibo.com/AidenRao):本文详细介绍狐友团队在引入 Swift Package Manager 进行工程实践中,探索和累积的相关知识和实践经验,从结构设计、资源处理、链接方式的选择、编译与链接参数设置、异常处理,这五个方面展开详细介绍,每个小部分结尾都提供了最佳实践的总结。希望能够帮助其他想要尝试 Swift Package Manager 的开发者顺利过渡。 + +> 由 [kingnight](https://github.com/kingnight) 推荐收录 + + +## 摸鱼周报 + +[@摸鱼周报 #73](https://mp.weixin.qq.com/s/Om_1TOGKWkMiNneB6Ittrw):第 73 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple Search Ads 新增广告位,遭遇质疑;macOS Ventura 初体验,更像 iOS,功能更强大。 +* 本周学习:Swift 函数派发方式总结 +* 内容推荐:网络监控内容推荐,iOS 博主在新西兰找工作的心路历程 +* 摸一下鱼:多种脚本语言中优雅处理参数的三方库;原神助手 mac 版 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [北京/杭州/上海] 抖音 - 西瓜视频 - iOS +- [上海/北京] 小红书 - 客户基础架构技术团队 - iOS - P6/P7/P8 +- [北京] 字节跳动 - APM 客户端团队 - iOS + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#223-2022.11.14.md b/Reports/2022/#223-2022.11.14.md new file mode 100644 index 000000000..3ecd9f881 --- /dev/null +++ b/Reports/2022/#223-2022.11.14.md @@ -0,0 +1,131 @@ +# 老司机 iOS 周报 #223 | 2022-11-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [波报 | Pofat 的 Swift 中文电子报](https://pofat.substack.com) + +[@kemchenj](https://kemchenj.github.io/):波报是聚焦于 Swift 语言与其相关领域的技术周报,宗旨是为中文开发圈注入一些不同面向的资讯。 + +摘选的内容主要是国外 Swift 开发者社区的资讯,内容包含但不限于: + +- Swift 和 LLVM 官方消息 +- Swift 和 LLVM 论坛新鲜事 +- Swift (或其它相关)的底层原理探讨 +- Swift 程式语言设计的学习和思考 + +### [iOS 16.2 Beta 投屏崩溃](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3673) + +[@Leo](https://github.com/leomobiledeveloper):iOS 16.2 Beta 系统投屏会出现 Invalid parameter not satisfying: outputDevice 崩溃,对投屏有强诉求的同学可以暂时别升级。 + +##  Developer - 设计开发加速器 + +### [Ask Apple November 14 to 18](https://developer.apple.com/events/ask-apple/) + +继上次 10 月下旬的 Ask Apple 之后,苹果会再继续进行 2 轮新的 Ask Apple 活动,一轮是下周,另一轮是 12 月份。明年 WWDC23 之前,这可能是最后的两轮 Ask Apple 活动了。活动照旧需要提前注册并下载 Slack 。 +这一次依旧会有中文集锦的频道,这个频道中除了回顾各个英文频道的精华内容之外,也鼓励中国开发者直接中文提问,而且会比上一轮放开更多的技术话题。 + +## 新手推荐 + +### 🐎 [Refactoring Swift: Best Practices to succeed](https://www.avanderlee.com/optimization/refactoring-swift-best-practices/) + +[@极速男孩](https://github.com/ztlyyznf001):重构是每个项目都会面临的问题,本文简单介绍了在代码重构时候索要注意的事项,以及如何借助 Xcode 中的比如 async/await ,to-do ,if let shorthand 等功能来对你的代码更容易去进行重构。 + +## 文章 + +### 🌟 🐕 [探秘越来越复杂的 ImageIO 框架](https://mp.weixin.qq.com/s/nbPIScJEZ3ReMSFuvNLkzQ) + +[@JonyFang](https://github.com/JonyFang):本篇会介绍,自 iOS 13 时代之后,苹果在 ImageIO 上做的一系列优化(“机制变化”),以及对开发者生态带来的影响。内容结构: +1. WebP/AVIF 新兴图像格式支持 + - WebP + - AVIF +2. IOSurface 和硬件解码优化 + - 50% 内存开销的奥秘 + - IOSurface 和跨进程 Buffer + - 开发者的痛,Public API +3. 不再安全的 ImageIO + - 从一个崩溃说起 + - 崩溃的背后 + - Workaround 方案 + +早期的 ImageIO 和各种上层框架的设计,是针对 iPhone 的低内存的机型做深入优化,希望能尽量利用惰性解码,mmap 缓存,换取较低内存开消,并且对各种无硬件解码的开源格式完全不感兴趣。而最近几年,随着苹果芯片团队的努力,高内存,M1 的统一内存,以及高性能芯片的诞生,苹果已经有充足的能力能够通过软件解码,共享内存,越来越多硬件解码器技术来满足主流的多媒体图像支持,本身这是一件好事。 + +不过问题在于历史遗下来的 API,依旧保持了之前的设计缺陷,Apple 团队却一直在通过越来越 Trick 和 Hack 的方式解决问题,并没有给开发者可感知的新机制和手段来跟进优化(除开这一点吐槽,AppKit 上的 `NSImage` 的 `NSImageRep` 这种代理对象设计,比 `UIImage` 的私有类 `UIImageContent` 设计要适宜的多,也灵活的多). + +软硬件一体加之闭源,会导致开源社区的实现,永远无法及时跟上其一体的私有集成,最终会捆绑到开发者和用户(开发者越强依赖苹果 API 和 SDK,就会越强迫用户更新 OS 版本,进而捆绑硬件换代销售),这并不是一个好的现象🙃 + +### 🌟 🐕 [手把手教你写 Dart ffi](https://mp.weixin.qq.com/s/zmOH4p2932oaXzsF-MA5fA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 在 Flutter 开发中与 Native 层的 lib 交互 Channel 是最为大家所熟知的。但其性能历来饱受诟病,随后官方推出了更为高效的交互方式 ffi(foreign function interface), ffi 不但更高效,且可以直接跟 C/C++ 之类更为底层的 lib 进行交互。本文采用 step by step 的方式示例如何使用 dart-ffi 进行编程,比较适合新手学习,小编强烈推荐。 + +### 🐕 [Result builders in Swift explained with code examples](https://www.avanderlee.com/swift/result-builders/) + +[@Smallfly](https://github.com/iostalks):Swift result builders 是一种组合构建代码的方式,在构建闭包内,多个同类型返回值的表达式,执行结果将会被隐式组合,返回一个集合类型的结果。SwiftUI 利用该特性实现了 `@ViewBuilder` 用于组织 View。 + +Result builders 特性能够用来设计 DSL,简化代码逻辑,增加可读性。本文通过自定义实现 `AutoLayoutBuilder` 来简化 AutoLayout 的使用,推荐感兴趣的同学阅读原文。 + +### 🐎 [When does a SwiftUI Environment get retained?](https://tiagolopes.blog/2022/11/01/when-does-a-swiftui-environment-get-retained/) + +[@Cooper Chen](https://github.com/cjlcooper):Environment 是 SwiftUI 的独特功能之一,这是我们以前在 UIKit 中所没有的。本文介绍了在 SwiftUI 的开发过程中应该如何对 Environment 进行内存管理。其中核心的观点如下: +- 处理任何不再使用的 SwiftUI 视图变量 +- 处理不再使用的 UIHostingController 引用 + +同时需要注意以下方面的内存泄漏: +- SwiftUI 中使用的 UI 视图 +- UIView 和 Environment 对象之间的引用 +- UIViewController 显示 UIHostingController +- Environment 对象本身 + +### 🐕 [百度 APP iOS 端内存优化实践 - 内存管控方案](https://mp.weixin.qq.com/s/dETOGD3NYU2SdZhxGu0SZg) + +[@AidenRao](https://weibo.com/AidenRao):该方案重点解决的问题是在内存水位很高的情况下,保证 APP 稳定性又兼顾用户体验,延长 APP 使用时长同时避免 OOM。 + +- 针对不同机型制定了相应的内存水位可以更加从容地释放内存。本技术方案结合 Jetsam 机制和百度 APP 线上内存数据,制定了 iPhone 各机型允许使用的内存水位线,给业务和框架更大的空间释放和清理内存。 +- 实时内存监控和精细化页面内存预测,在实时内存监控的基础上,开发了页面级的内存度量方案,可以估算出用户在新开一个页面内存涨幅多少,在未来一段时间内存会不会达到危险水位。 +- 内存管控方案提供主动和被动通知两种方式获取内存水位状态,实现了各业务层根据手机内存情况实时降级,时效性更强,跟之前服务端降全量降级方案相比,更加灵活,性能更好。 + +### 🐕 [How Xcode 14 unintentionally increases app size ](https://www.emergetools.com/blog/posts/how-xcode14-unintentionally-increases-app-size) + +[@莲叔](http://aaaron7.github.io/):包 Size 是目前的移动开发者都不得不面对的一个问题。近期,Xcode 14 携带了众多新特性,其中一点值得开发者注意的就是将不会默认开启 bitcode,这将会导致潜在的包 size 增加。文章的作者团队进行了些初步的分析发现很多 APP 在切换使用 Xcode 14 打包以后都产生了 30%-60% 的 size 膨胀,这还是很惊人的。文章不仅分析了现状,还对膨胀的原因做了深入的分析。对于面临 Xcode 14 适配的开发者们不容错过。 + +### 🐎 [Should we manually call @StateObject initializer](https://sarunw.com/posts/manually-initialize-stateobject/) + +[@Damien](https://github.com/ZengyiMa):在 Swift 2.0 中苹果推出了属性包装器 @StateObject,当 View 发生更新时,@StateObject 修饰的对象不会进行销毁,但是能否在 init 方法方法中来手动调用 @StateObject 初始化器呢?答案是肯定,本文会进行深入的研究,并且指出了手动初始化 @StateObject 时应该注意的事项,对 @StateObject 感兴趣的同学不妨一读。 + +## 代码 +### [CSProgress](https://github.com/CharlesJS/CSProgress) +[@享耳先森](https://github.com/iblacksun):`CSProgress` 是一个高性能且易使用的 `NSProgress` 替代方案。 或许你对 `NSProgress` 并不熟悉,因为在业务开发中比较少用到,但还是建议你阅读下 `CSProgress` 项目的 READMEE,详细阐述了 NSProgress 性能问题及糟糕的 API 设计,对自己也是种警惕。 + +## 摸鱼周报 + +[@摸鱼周报 #74](https://mp.weixin.qq.com/s/lhhV0Qlc9NtFoM6nF7gZbA):第 74 期摸鱼周报来了,看下本期概要有没有你感兴趣的内容: + +* 本周学习:iOS NSDateFormatter 设置问题 & iOS 16 部分 pods 库签名问题 +* 内容推荐:SPM 工程实践以及性能优化好文推荐 +* 摸一下鱼:本期推荐一款跨平台的摸鱼网站、和两款坐姿监控 APP,摸鱼的时候也不要忘记保持正确坐姿;一个根据年历、地图、人物等生成文学图谱的网站;帮助从 intel 平缓过渡到苹果自研 M 系列芯片的软件检测 App。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考。 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#224-2022.11.21.md b/Reports/2022/#224-2022.11.21.md new file mode 100644 index 000000000..0500c3513 --- /dev/null +++ b/Reports/2022/#224-2022.11.21.md @@ -0,0 +1,120 @@ +# 老司机 iOS 周报 #224 | 2022-11-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift project in 2023](https://www.swift.org/blog/focus-areas-2023/) + +Swift 团队发布明年的开发路线图,今年新增了工作组机制: + +- **语言组**:负责编译器和标准库的开发 +- **网站组**:管理 swift.org 的网站内容 +- **文档组**:负责文档工具的开发 +- **C++ 交互组**:提高与 C++ 的可交互性,孵化相关提案 + +这里节选了一些亮点内容: + +- **宏系统**开始进行设计和实现,最快可能明年 WWDC 就能看到 +- 添加语法层面的功能让我们可以控制值的**所有权**,减少不必要的拷贝和引用计数 +- 优化**编译系统**和编译器的交互逻辑,让编译过程变得可靠 +- **编译器一部分使用 Swift 进行重写** + +## 文章 + +### 🐕 [云音乐 iOS 端代码静态检测实践](https://mp.weixin.qq.com/s/5ZcGBCnrUYwUA0RXyPJt9w) +[@水水](https://www.xuyanlan.com/): 随着项目的扩大,依靠纯人工 Code Review 来保障代码质量、防止代码劣化变得”力不从心“。此时有必要借助代码静态分析能力,提升项目可持续发展所需要的自动化水平。针对 C、Objective-C 主流的静态分析开源项目包括:Clang Static Analyzer、Infer、OCLint 等。 +本文基于可定制性最强的 OCLint 作为代码静态检测工具,从以下四点介绍了 OCLint 的实践应用过程: + +- OCLint 环境部署、编译和分析。 +- 自定义规则实现。 +- 静态检测耗时优化。 +- 利用静态检测能力持续对启动性能防劣化控制。 + +### 🐕 [三代终端容器 KUN 的首次大考【架构演进】](https://mp.weixin.qq.com/s/26SCEM6QPhAazydRUq9h3Q) +咸鱼自研的 KUN 容器框架,是一套用前端编写代码,用 Flutter 来做渲染,目前已经在闲鱼号上应用。本文同时对 KUN 框架、Weex、WebView 渲染做了对比,KUN 框架在体验、性能等方面均表现不错,同时,KUN 框架对双端渲染一致性问题也做了一定的优化,避免代码中大量 if-else 判断。 + +### 🐕 [HOME ARTICLES BOOK ABOUT When .animation animates more (or less) than it’ s supposed to](https://oleb.net/2022/animation-modifier-position/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI 中 animation 修饰符,在 iOS 16/macOS 13 中,其相对于非渲染修饰符的放置与决定是否对更改进行动画处理无关。作者在文中列举了自己测试的所有案例对此进行了说明。 + +### 🐎 [React 中的重新渲染](https://mp.weixin.qq.com/s/ADx8PuNvg4xVVLBeh265kw) + +[@Damien](https://github.com/ZengyiMa/):本文来自阿里巴巴终端技术团队文章,在客户端动态化方案中,React Native 是一个成熟且高效的解决方案,作为动态方案重中之重就是渲染,想知道 React 的重渲染为何如此高效吗?不妨来深入了解下本篇文章内容,本文会深入源码,为我们一步步揭露面纱。 + +### 🐎 [Binary Targets in Swift Package Manager](https://www.avanderlee.com/optimization/binary-targets-swift-package-manager/#the-upsides-of-binary-targets) + +[@Smallfly](https://github.com/iostalks):Swift Package Manager(SPM) 是苹果官方的 Swift 源代码管理工具,它负责自动化完成依赖库的下载、编译和链接。以源码的方式集成依赖库,会对集成和编译效率有较大的影响。 + +Binary Target 让 SPM 支持以二进制产物的方式集成依赖库,能有效节约集成时间,同时也适用于分发闭源库。不足之处是二进制格式不支持调试,而且只支持 XCFramework。 + +本文详细的介绍了 Binary Target 的优缺点,以及使用方式,最后还介绍了如何构建 XCFramework,以支持 Binary Target。 + +### 🐕 [Combining opaque return types with primary associated types](https://www.swiftbysundell.com/articles/opaque-return-types-primary-associated-types/) + +[@zoeGuo](https://github.com/zoeGuo):Swift5.7 引入了 Primary associated types 的概念,即可以在协议中使用 associatedtype 声明自定义类型。使用 some 声明包含 Primary associated types 的协议的返回值后,调用者可以不再需要使用强制类型转换和手动类型擦除,并且能够保证完全的类型安全。文章就使用 associatedtype 的优点,以及 associatedtype 结合 some、any 关键字的使用进行示例和介绍。 + +### 🐕 [Flutter 多引擎渲染,在稿定 App 的实践](https://mp.weixin.qq.com/s/fpbVBg-Usuu7I6lCbPhlsQ) + +[@老峰](https://github.com/gesantung):一直以来 Flutter 社区关于 multiple-flutters Flutter 多引擎实践的参考的资料比较少,本文作者介绍了利用脚本开发了一套 FGUIComponentAPI 工具链来链接 Native 与 Flutter UI,自动生成开发基类、宿主调用类、通信层 API、测试用例、开发文档的实践思路,以及在多引擎实践中踩到的坑。 + +### 🐕 [Stack unwinding](https://maskray.me/blog/2020-11-08-stack-unwinding#中文版) + +[@xuyafei86](https://github.com/xiaofei86):在 C++ 中抛出异常时,当前函数将暂停执行,通过函数调用栈查找匹配的 catch 子句。如果异常没有在抛出它的函数中被处理,就会退出当前函数,从函数调用栈中删除函数实体并释放栈上的局部变量,继续到调用栈上层查找,直到找到可以处理该异常的 catch,这个过程称为栈展开(stack unwinding)。其主要用于调试器、崩溃报告、垃圾回收器中。本文将带大家简单了解 Stack unwinding 的实现,感兴趣的同学可以阅读原文了解。 + +## 代码 + +### 🐕 [GitHub - ole/swiftui-layout-inspector: A tool for learning how the SwiftUI layout system works, and for debugging your own layout code.](https://github.com/ole/swiftui-layout-inspector) + +[@Barney](https://github.com/BarneyZhaoooo):对于学习 SwiftUI 布局的朋友们是一个福音,这款工具可以很好地帮助 debug 布局代码,方便大家学习理解 SwiftUI 布局。 + +A Swift library (and iOS/Mac app) for learning how the SwiftUI layout system works, and for debugging your own layout code. Inspect the layout behavior of SwiftUI views, i.e. what sizes views propose to their children and how a view determines its own size. + +## 音视频 + +### 🐢 [Standardizing build system using modern Swift Packages in LINE](https://attendees.bizzabo.com/417034/agenda/activity/1022649) + +[@kemchenj](https://kemchenj.github.io/):来自 LINE 的工程师介绍了他们使用 SPM 改造构建系统的过程。随着 LINE iOS 端的迭代,代码行数现在已经增长到了两百万以上,编译速度也就慢慢成为了一个“问题”。 + +他们自然而然也选择业界流行的方案 Bazel 来解决这个问题,整个构建过程分为两步: + +1. 所有依赖库都使用 Bazel 进行打包成二进制库 +2. 主工程 App 引用上一步的库,使用 Xcode 进行编译和调试 + +但使用 Bazel 的同时也带来了一些问题,学习成本高,维护成本高,缺乏依赖管理。付出如此高的代价,但实际带来的编译速度提升还不如 Apple Silicon(M1) 的升级。 + +最后他们将眼光投向了 SPM,打算直接使用它来替代 Bazel 打包二进制库,同时也为此开发了一个工具 [Scipio](https://github.com/giginet/Scipio),用于将 Swift Package 打包为 XCFramework,并且自定义了一套缓存策略。 + +## 摸鱼周报 + +[@摸鱼周报 #75](https://mp.weixin.qq.com/s/nguqKvkuzDBR9o-Yw6y3KQ):第 75 期摸鱼周报来了,一起来看下本期概要吧: + +* 本期话题:远程工作在国内的推行为什么困难重重?iPhone 14 / Pro 系列卫星 SOS 紧急求救服务已在美国和加拿大正式推出 +* 本周学习:iOS16 中的 3 种新字体宽度样式 +* 内容推荐:Ask Apple 2022 十月问答汇总;Swift 以及 SwiftUI 相关的好文推荐 +* 摸一下鱼:一个快速学习编程语言或开发工具的网站 Learn X in Y minutes、B 站 up 主开源的一套免费商用的字体得意黑、一个 SwiftUI 开发的开源单词游戏项目、Google 推出的能够模拟面试的网站 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#225-2022.11.28.md b/Reports/2022/#225-2022.11.28.md new file mode 100644 index 000000000..9075b3bdb --- /dev/null +++ b/Reports/2022/#225-2022.11.28.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #225 | 2022-11-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +[近期线上活动:在 iPhone 锁屏上扩展你的 App 体验](https://developer.apple.com/cn/accelerator/) + +内容简介:发现如何利用 iPhone 锁屏上的特性,进一步扩展你的 App 体验。学习如何利用锁屏小组件、实时活动以及通知,为用户创造更丰富的体验。感兴趣的同学可以在 12 月 7 日前进行报名。 + +## 文章 + +### 🌟 🐢 [当谈论协程时,我们在谈论什么](https://mp.weixin.qq.com/s/IO4ynnKEfy2Rt-Me7EIeqg) + +[@Leo](https://github.com/leomobiledeveloper):一篇关于协程的优秀文章,内容由浅到深,通过一些实际例子回答了以下四个问题: + +- 为什么需要协程? +- 到底什么是协程? +- 怎么实现协程 (库)? +- 使用协程时需要注意什么? + +### 🐕 [双十一|探索 KUN 的加载性能与增强体验](https://mp.weixin.qq.com/s/NWRCembLGrqPzelf7Evw-A) + +[@Crazy](https://github.com/jiyan135960):Kun 是闲鱼自研的终端渲染容器,从页面表现的结果来看已达到接近原生展开的性能。本文同时对如何处理 Kun 与 Web 兼容的问题进行了简单的阐述,并且在优化首屏模块渲染效率的问题上提出了一个完整的设计思路。本文中提到,在解决渲染速度慢的问题上,除去简单的资源预加载与接口预请求的方式外,还可以将将互动区域代码合并到页面渲染框架中来提升整体页面渲染速率。并且可以优化接口返回,实现本地与远端合并页面 ui 的方式,来达到近似于原生的加载速度。当然后面两项优化脱离不开整体 Kun 框架的帮助,对 Kun 感兴趣的同学可以更加关注 Kun 的开源动态,本文值得大家仔细阅读。 + +### 🐕 [淘宝拍立淘 iOS 相册架构设计小结](https://mp.weixin.qq.com/s/ldbwl9nLxWyyBmk3bgX82A) + +[@zoeGuo](https://github.com/zoeGuo):拍立淘相册作为拍立淘业务的基础功能,已经在线上运行多年。随着不断迭代发展,业务代码也不断增多,遇到了模块化能力与业务代码耦合、架构分层不清晰和一定的用户体验问题。文中详细介绍了相册整体架构的分层设计与实现: +- 接口层:相册的对外接口(适配层、API) +- 视图定制层:相册的展示链路(MVVM 架构) +- 逻辑管理层:相册的读取链路(包括读取 Asset 和获取源文件)、相册的变更链路(观察者模式)、相册的体验优化(预加载、缓存回收) + + +文章结尾还介绍了有关相册实现的几个细节:App 隐私报告、“ Limited Photo Library Access ” 、支持 iCloud 选取、多线程问题。文章对正在开发相册类功能或对相册类应用感兴趣的读者会有所帮助和启发。 + +### 🐎 [优先级反转那些事儿](https://mp.weixin.qq.com/s/kp6cdDrdQ4rhfdXH-_Q8IA) + +[@Damien](https://github.com/ZengyiMa):优先级反转,是指某同步资源被较低优先级的 进程/线程 所拥有,较高优先级的 进程/线程 竞争该同步资源未获得该资源,而使得较高优先级 进程/线程 反而推迟被调度执行的现象。本文是字节跳动终端技术团队基于线上卡死问题出发,从底层分析了出现的优先级反转的场景以及处理方案。对多线程相关感兴趣的同学值得一读。 + +### 🐕 [@dynamicCallable in Swift explained with code examples - SwiftLee](https://www.avanderlee.com/swift/dynamiccallable/) + +[@Barney](https://github.com/BarneyZhaoooo):本文用丰富的示例,对 @dynamicCallable in swift 进行了详细介绍。 + +- **Why does Swift provide dynamic interpolation?** +- **What is @dynamicCallable used for?** +- **How to implement @dynamicCallable** +- **Combining @dynamicCallable with @dynamicMemberLookup** + +### 🐎 [clipped() doesn’t affect hit testing](https://oleb.net/2022/clipped-hit-testing/) +[@Smallfly](https://github.com/iostalks):SwiftUI 提供 `clipped()` 函数对视图进行裁剪,但是该裁剪函数不会影响事件响应,被裁减区域依然支持点击。`contentShape(_:)` 用于定义视图事件响应区域,配合该函数可以屏蔽裁减区域的点击事件。 + +### 🐕 [Using complex gestures in a SwiftUI ScrollView](https://danielsaidi.com/blog/2022/11/16/using-complex-gestures-in-a-scroll-view) + +[@享耳先森](https://github.com/iblacksun):SwiftUI 因其高级的封装大大的简化了界面搭建复杂度,但在某些特定场景中显得能力不足。本文介绍了在 ScrollView 内部嵌套其他手势时遇到的问题以及可能的解决方案。 + + +## 工具 + +### 🐎 [LaunchAtLogin: Add “ Launch at Login ” functionality to your macOS app in seconds](https://github.com/sindresorhus/LaunchAtLogin) + +[@Cooper Chen](https://github.com/cjlcooper):`LaunchAtLogin` 是一个针对 Mac 桌面应用开发者,在 macOS13 以下系统,给程序快速添加登录自启动功能的三方库。相较于系统自带的 `SMAppService` 接口,`LaunchAtLogin` 在与系统旧版本的兼容性、API 设计方面以及对 SwiftUI 支持方面都有较好的实践。 + +## 代码 + +### [Xcode 14 打包,iOS 16 ,`-[AVPlayer replaceCurrentItemWithPlayerItem:]` 崩溃](https://github.com/Baseflow/XamarinMediaManager/issues/814) + +[@JonyFang](https://github.com/JonyFang): 一般使用场景是在画中画切换视频的时候需要用到(如果分辨率变了需要加一段黑屏的),适配了 ` 画中画 ` 的 APP 记得处理。对应的解决方案,可做参考。 + + +## 摸鱼周报 + +[@摸鱼周报 #76](https://mp.weixin.qq.com/s/UmXvtKYS6Z0a30yPRyIV9g):第 76 期摸鱼周报来了,一起来看下本期概要: + +* 本周学习:程序员如何有效提问 +* 内容推荐:SwiftUI 相关的一些博客推荐 +* 摸一下鱼:Combine 操作符辅助理解的图示总结;Token,Session,JWT 这些鉴权技术有哪些区别?Mac 版微信为何不断往电脑中写日志?;Github 开源两款字体;一个摸鱼小网站。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 - AliExpress -iOS/Android/FE + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#226-2022.12.05.md b/Reports/2022/#226-2022.12.05.md new file mode 100644 index 000000000..8dad40cc6 --- /dev/null +++ b/Reports/2022/#226-2022.12.05.md @@ -0,0 +1,90 @@ +# 老司机 iOS 周报 #226 | 2022-12-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [How to fix "The compiler is unable to type-check this expression in reasonable time" error](https://sarunw.com/posts/how-to-fix-the-compiler-is-unable-to-type-check-this-expression-in-reasonable-time/) + +[@zoeGuo](https://github.com/zoeGuo):"The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions" 可能是新手经常遇到的编译器报错,出现问题时,注释可疑代码可以快速定位问题,对问题代码中的表达式做出合理简化即可解决报错。文章提供了一些良好的分解、简化表达式的示例,对新手开发者会有所帮助。 + +## 文章 + +### 🌟 🐢 [C++ exception handling ABI](https://maskray.me/blog/2020-12-12-c++-exception-handling-abi#%E4%B8%AD%E6%96%87%E7%89%88) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):本文介绍的虽然是 C++ 的 Exception 处理,但其实 iOS 开发者非常熟悉的 NSException 其实也是由 ``objc_exception_throw()`` 方法中调用 ``__cxa_throw()`` 抛出的,而 ``__cxa_throw()`` 其实就是 C++ 的异常抛出。因此可以说 NSException 的抛出链路以及后续处理是与在 C++ 中直接 ``throw`` 是一摸一样的。之前我们也介绍过 [Stack unwinding](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2022/%23224-2022.11.21.md#-stack-unwinding) 相关的内容,大家可以先了解 unwinding 相关的内容再阅读本文,这对于我们加深对栈回溯以及如何实现 Exception handling 会有更深的理解,甚至也可以尝试 `` 捕获没有被 catch 的 NSException 防止崩溃并恢复到合适的调用栈让程序运行下去 `` 类似的线上兜底方案。本文大致内容如下: +- 介绍了简化版本的 exception 处理流程(从 throw 到 catch) +- Level 1 Base ABI,描述了语言无关的 Stack unwinding 部分,定义了 _Unwind_* API ,llvm 中也有 [libunwind](https://github.com/llvm-mirror/libunwind) 对应的实现 +- Level 2 C++ ABI,定义了 ``__cxa_*`` 开头的对应 API ,上文提到的 ``__cxa_throw()`` 就是在这一层定义的 + +### 🐕 [领域驱动设计四论](https://mp.weixin.qq.com/s/SMAycMJPWr018sU04kbfbQ) + +[@莲叔](http://aaaron7.github.io/):很多同学在学校中,学《软件工程》读《人月神话》,往往对复杂软件工程充满了幻想。但毕业投身互联网公司后,发现绝大多数项目的节奏、架构与实现似乎都与理论知识相去甚远。慢慢的我们不再关注那些伟大的设计思想,只剩满脑子的敏捷开发、动态化和热修复。这篇文章从略微偏理论的角度总结了领域驱动设计思想的几个方面,分别用于解决什么问题,怎么解决的。读完颇有一种如沐春风的感觉,不仅仅是对于这一理论的学习,更多的是从了解 DDD 如何解决软件工程复杂度获得启发,获得一个全新的视角去看待目前手头的业务与项目。推荐你耐心读完,会有启发。 + +### 🐎 [Testing async/await exceptions](https://arturgruchala.com/testing-async-await-exceptions/) + +[@Smallfly](https://github.com/iostalks):单元测试是保障代码健壮性的重要手段,Apple 先后提供了 `XCTAssertThrowsError(expression:)` 和 `@frozen enum Result where Failure : Error` 等异常检测方法,但对于 `async/await` 这样的协程来说并不友好。本文介绍了一种 `async/await` 风格的异常测试方法,能简化一些重复代码,推荐有需要的同学阅读。 + +### 🐕 [支付宝客户端体验度量与诊断](https://mp.weixin.qq.com/s/SC2DI2kWveSE1L3aBrP7og) + +[@Crazy](https://github.com/jiyan135960):本文是一篇针对性能监测设计方案讲解的佳作,写出了客户端现有的几种耗时类场景的监测方案与处理方案,虽然本文是以 Android 开发者视角来进行讲解,但其中的设计思路以及分析流程值得所有客户端开发者借鉴。本文通过以下四个方面来讲解了支付宝的性能监测是如何实现的: + +- 场景度量手段 +- 场景度量精度提升 +- 场景性能诊断 +- APM 性能平台 + +其中关于场景度量手段、场景度量精度提升与 APM 性能平台部分的讲解值得所有客户端开发者阅读,而关于场景性能诊断的讲解值得 Android 开发者仔细阅读。 + +### 🐕 [Stable Diffusion with Core ML on Apple Silicon](https://machinelearning.apple.com/research/stable-diffusion-coreml-apple-silicon) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):自 2022 年 8 月首次公开亮相以来,Stable Diffusion 已被充满活力的艺术家、开发人员和爱好者等社区采用,只需输入文本即可创建前所未有的视觉内容。苹果公司通过对 Apple Silicon 芯片的进一步优化,Core ML Stable Diffusion 模型可以更充分利用 M 系列芯片中的神经引擎和苹果 GPU 架构的优势。如要开始使用,可以访问[Core ML Stable Diffusion](https://github.com/apple/ml-stable-diffusion) 代码存储库以获取有关基准测试和部署的详细说明。 + +### 🐕 [一个 WebKit Bug 导致小程序页面跳转失败的问题的排查经历](https://mp.weixin.qq.com/s/Qif83v-b9MSae-a3D3IQAQ) + +[@水水](https://www.xuyanlan.com/):作者从收到一个小程序在调用 my.redirectTo() 之后,再调用 my.navigateTo() 时无响应,无法跳转下一个页面的线上问题反馈说起,到排查到是因为一个 WebKit Bug 导致的过程完整的进行了阐述。是一个比较少见的排查难度较高、问题根因较深的问题,文章将排查期间的思考记录下来,希望也可以为读者做参考。作者最后也提醒我们:人的固定认知,不一定就是对的 ~ + +## 音视频 + +### 🐢 [How to contribute a new feature to Swift?](https://www.youtube.com/watch?v=E1iMyjRpGHk) + +[@Cooper Chen](https://github.com/cjlcooper):众所周知,Swift 语言作为新一代的开发语言,其开源的特质使得开发者能够更加灵活高效的为其提供新的特性,本视频详细叙述了开发者如何为 Swift 贡献新的 feature ,其中针对开发者如何从提交一个提案到最终解决方案上线给出了详细的流程步骤解释。而对于想要为 Swift 社区提供建议和想法的开发者,视频也给出了如下建议: +- 定期阅读和浏览 Swift 表单 +- 积极在社区进行反馈,并及时了解社区正在寻找的功能是什么 +- 分享你的想法,并且将这个想法让更多人了解 +- 尝试自己动手或与其他开发者合作 +- 关注其他人的反馈 + +## 摸鱼周报 + +[@摸鱼周报 #77](https://mp.weixin.qq.com/s/yYdGO1kRcwQJ3-z-aavHYA):第 77 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:圣诞节将至,请为您的 App 做好准备; Developer 设计开发加速器|如何在游戏中支持手柄、在 iPhone 锁屏上扩展你的 App 体验 +* 本周学习:class_rw_t 与 class_ro_t 的区别,面向面试的知识总结 +* 内容推荐:Swift 优秀文章推荐,涉及协程,类型转换以及 `inlinable` 关键字讲解 +* 摸一下鱼:CSDN 上线的工具箱工具「猿如意」;Roadmap.sh 一个总结技术路线图的网站;email 是如何工作的,一张图来告诉你;正则表达式速查卡 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#227-2022.12.12.md b/Reports/2022/#227-2022.12.12.md new file mode 100644 index 000000000..29ae58bc0 --- /dev/null +++ b/Reports/2022/#227-2022.12.12.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #227 | 2022-12-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Foundation 将使用 Swift 重新实现](https://www.swift.org/blog/future-of-foundation/) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队宣布计划 Foundation 将使用 Swift 重新实现: + +- **不再基于 C 的实现进行封装**。不再基于 CoreFoundation,不会再有额外的性能消耗在桥接上。纯 Swift 实现,以便社区参与开发和讨论。 +- **拆分成多个模块,不再作为一个单一模块存在**。核心部分只保留 Swift 需要的功能(`Data`/`URL` 等),其余的按照功能分类拆分开,以便提升跨平台开发体验。 +- **统一 Foundation 的实现**。目前 Foundation 分为两个版本,一个是 Darwin 平台的版本,另一个是跨平台开源的 [swift-corelibs-foundation](https://github.com/apple/swift-corelibs-foundation),后续会统一并且开源。 + 其中 Objective-C 的基础功能和 Apple 平台的业务功能可能不会开源,在 Darwin 平台继续使用之前的版本。 + +目前还在计划阶段,**最终目标是将新版 Foundation 开源出来**,正在积极获取社区的反馈,初步拆分计划也可以看 [Swift 论坛的帖子](https://forums.swift.org/t/what-s-next-for-foundation/61939)。 + +一句话总结,Swift is the new Foundation! + +### [Apple 宣布 App Store 定价机制最重大升级,新增 700 个价格点](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3771) + +Apple 宣布对 App Store 进行问世至今最全面的定价机制升级,为开发者提供新增的 700 个价格点和全新定价工具,让开发者更轻松地针对不同国家和地区的 App Store 设定价格、管理外币汇率变化等。 + +##  Developer - 设计开发加速器 + +### [Ask Apple starts December 12](https://developer.apple.com/events/ask-apple/) + +今年最后一次 Ask Apple 在本周二正式开始,苹果在 周二中午 12 点-下午 1 点 特地为中文开发者开设了 App Review 相关的开放式问答机会,交流频道位于 " 集锦-简体中文 "。据悉本次 App Review 频道的内容只有中文频道会有,这是对于审核相关内容的直接交流途径,大家有相关问题可以直接在频道内进行提问,苹果会尽量回答每一个问题。 +同时本次 Ask Apple 也惯例会有其他主题的咨询,错过本次活动就得 WWDC23 才有更好的机会了。 + +## 文章 + +### [性能提升 2.5 倍!字节开源高性能 C++ JSON 库 sonic-cpp](https://mp.weixin.qq.com/s/ExKL8G-Tgx4sXW6a4NwY4w) + +[@anotheren](https://github.com/anotheren): JSON 作为一种可读性较高的数据交换格式,广泛使用于各种前后端数据交互的场景。本次字节开源的 [sonic-cpp](https://github.com/bytedance/sonic-cpp) 主要是作为服务端的性能优化方案推出。大部分情况下,客户端不会遇到这种性能/资源问题,更多考虑的是便捷程度以及和同网络组件的系统集成问题。如果你也面临大数据量的 JSON 读写,可以看看这个库。 + +### 🌟 🐕 [Flutter 的下一步, Dart 3 重大变更即将在 2023 到来](https://mp.weixin.qq.com/s/L4yMoTlAcVcBV58OdBIo8w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):在过去的四年里 Dart 已经发展成为一门高效、可移植的现代化语言. 下一个版本 Dart 3 将达到可靠的 null 安全语言. 同时也带来了一些新特性,比如 `patterns`。 Dart 开发团队同时也在努力支持将 Dart 代码编译为 Wasm ,Wasm 能让 Flutter Web 在浏览器中作为完整的原生代码运行。 + +### 🐎 [Metal 每日分享 - 系列专栏](https://juejin.cn/column/7168399660153831460) + +[@Damien](https://github.com/ZengyiMa): Metal 是 Apple 推出的一个和 OpenGL ES 类似的面向底层的图形开发套件,通过使用相关的接口可以直接操作 GPU,本专栏是基于 Metal 技术的系列文章,囊括了很多 Metal 实战相关的技术文章,并且更新频率较高,对 Metal 相关领域感兴趣的同学不妨收藏阅读。 + +### 🐢 [Flutter for Web 首次首屏优化 - JS 分片优化](https://mp.weixin.qq.com/s/aeI_64dT9nHMrHajeQctAw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter for Web 上线已久,国内在用的团队不多,所以本篇是一个不可多得的经验篇。使用 Flutter for Web 时有一个明显的问题:其编译产物 main.dart.js 较大,初始的 Hello world 工程编译后产物 js 大小为 1.2 MB,本文详细解讲解了如何通过 JS 分片优化编译产物加载提升首屏加载速速,感兴趣的同学可以参考一番. + +### [聚焦探索 In-App Purchase 新特性](https://mp.weixin.qq.com/s/zzeFoUKA7jXcCaKtcgaiiQ) + +[@iHTCboy](https://github.com/iHTCboy):本文主要聚焦于 In-App Purchase 内购商品的测试。在 Xcode 12 之前,App 内购买项目是不能在 Xcode 模拟器中进行购买,只能使用真机进行测试内购充值,因为模拟器无法连接到 App Store 服务器进行交易。苹果在 WWDC20 推出了 StoreKit Testing,通过 Xcode 12 创建 StoreKit 配置文件和搭建本地测试环境,实现本地 App 内购买和验证收据等测试流程,而无需依赖 App Store 服务器。而今年的 WDC22 苹果对 StoreKit 测试流程改进完善,包含 Xcode 14 中测试功能的优化,支持订阅商品更多场景的测试,还有 StoreKit 配置文件通过 App Store Connect 自动同步等等。 + +### [App Store Connect 中的新特性及最佳实践](https://mp.weixin.qq.com/s/ljMZXAhVZhxzoeMU7VAssw) + +[@chenjiamin1130](https://github.com/chenjiamin1130):本文对本次 WWDC22 中更新的三个 session:10043、10044、110404 进行了归纳整理,梳理了本次更新中 App Store Connect 的新特性,并对其中的重要更新功能:增强的 App Store 提交体验、应用基准测试工具、用户订阅状态即时获取,展开了最佳实践讨论。 + +## 工具 + +### 🐕 [实现无入侵式 C++ 代码 mock 工具](https://mp.weixin.qq.com/s/Kc16Q9Fh30sK9eFB8SfADQ) + +[@J_Knight_](https://github.com/knightsj): 本文作者基于开源 Hook 框架 Frida-gum 提供的 API,利用 C++ 模板进行封装,编写了一个可跨平台的(MacOS、Linux、Windows、Android、iOS 等) mock 工具。作者先结合代码介绍了该工具的主要功能(函数替换,mock 函数的调用次数,函数的回滚操作等等),然后再结合代码来讲解如何使用该工具来实现这些功能。 + +## 摸鱼周报 + +[@摸鱼周报 #78](https://mp.weixin.qq.com/s/27J4NguYRsxYWmff_6iDcg):第 78 期摸鱼周报来了,一起来看下本期有哪些有趣的内容: + +* 本期话题:用 ChatGPT 做点好玩的事:微信聊天机器人「wechat-chatgpt」和 VSCode 插件「ChatGPT 中文版」;App Store 定价机制最重大升级 +* 本周学习:解决 Mac Intel 转 Apple Silicon 开发环境配置问题 +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖 ChatGPT、SwiftUI、Swift 等方面的内容 +* 摸一下鱼:本期摸鱼带来可以无限生成配色组合的网站 **randoma11y**,听猫咪不同状态声音的网站 **purrli**,由前任天堂设计师的创意团队建立的像素风格的透明素材网站 **dotown**,以及在 Webstorm 中配置 Touchbar 的指南。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2022/#228-2022.12.19.md b/Reports/2022/#228-2022.12.19.md new file mode 100644 index 000000000..95f2d0ffc --- /dev/null +++ b/Reports/2022/#228-2022.12.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #228 | 2022-12-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [D2 脑图 | 第十七届 D2 终端技术大会](https://www.yuque.com/d2conference/17thd2map) + +上周末 D2 完成了所有的分享,内容干货满满,这是对所有 22 场分享的笔记,错过直播的同学可以快速查看浏览脑图整理。 + +## 文章 + +### 🐕 [How to manage build settings using Xcode configuration files](https://www.danijelavrzan.com/posts/2022/11/xcode-configuration/) + +[@享耳先森](https://github.com/iblacksun):相信大家的 App 都会遇到多环境构建的问题,比如 QA 、预发、Production 环境,一不小心在提审时候还容易搞错版本。本文介绍了利用 `xcconfig` 文件做环境配置,比如不同环境使用不 App Icon 或 App Name。 + +### 🐕 [从 Linux 零拷贝深入了解 Linux-I/O](https://mp.weixin.qq.com/s/j1KjR5bRQV6oGrU5tsyHgg) + +[@老驴](https://weibo.com/u/6090610445):腾讯技术出品的一篇介绍 Linux 零拷贝的文章。在 iOS 开发中,大家可能或多或少都接触过 mmap,但是可能知道 mmap 只是零拷贝其中一种的同学并不多,Linux 还有其他的零拷贝实现形式来优化数据的读写。 + +### 🐎 [Security Application Static Analysis applied to iOS and Gitlab CI](https://benoitpasquier.com/2022/07/security-application-static-analysis-applied-to-ios-and-gitlab-ci/) + +[@红纸](https://github.com/nianran):在本文中作者分享将安全测试工具([MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)) 集成进入 Gitlab Runner 中,以此来检测代码的安全性,并自定义脚本转换输出结果,产出可靠的分析报告。对于 CI/CD 感兴趣的同学可以做个参考。 + +### 🐕 [any Idea How to Use some Generics?](https://async.techconnection.io/talks/frenchkit-2022/antoine-van-der-lee-any-idea-how-to-use-some-generics/) + +[@AidenRao](https://weibo.com/AidenRao):一篇关于泛型的视频演讲。在你的实现中可能并不喜欢使用泛型,因为它看起来很复杂且难以编写。本篇演讲有丰富的代码实例,帮助你在 swift 中理解和使用泛型。如果你不喜欢看视频,也可以阅读这篇博客,它包含视频演讲里的所有内容:[Generics in Swift explained with code](https://www.avanderlee.com/swift/generics-constraints/) + +### 🐕 [哔哩哔哩 Android 打包优化与云编译](https://mp.weixin.qq.com/s/xls_AL9IyR3580zz8CfCOA) + +[@Crazy](https://github.com/jiyan135960):本文是一篇侧重于 Android 云编译方面的介绍性文章,讲解了云编译的流程与打包优化的方向。本文主要对 d8 的流程以及 hook 方案进行了分析与讲解,并且对编译的优化也提出了切实可行的方向性建议,值得有需要开发云编译平台或思考如何优化打包速度的同学进行学习与参考。 + +### 🐕 [Understanding SwiftUI view lifecycles](https://oleb.net/2022/swiftui-view-lifecycle/) + +[@EyreFree](https://github.com/EyreFree):作者编写了一个展示 SwiftUI 生命周期的应用,这个应用能让你观察不同的 SwiftUI 结构和容器如何影响视图的生命周期,包括它的状态的生命周期和 `onAppear` 什么时候被调用。应用的代码开源在 GitHub([ole/swiftui-view-lifecycle](https://github.com/ole/swiftui-view-lifecycle))上,可以在 iOS 和 macOS 平台编译,正在学习 SwiftUI 的同学可以试试,对理解视图树和渲染树以及视图生命周期和状态有一定的帮助。 + +### 🐕 [Testing Apps with an iPhone and the CarPlay Simulator](https://www.createwithswift.com/testing-apps-with-an-iphone-and-the-carplay-simulator/) + +[@Barney](https://github.com/BarneyZhaoooo):本文主要介绍了如何使用 Apple 全新独立 CarPlay 模拟器应用程序在 iPhone 和 Mac 上测试支持 CarPlay 的应用程序。 + +### 🐢 [利用 Virtualization 构建虚拟机,从未如此简单](https://mp.weixin.qq.com/s/t7WNfN4snPM70Q91rc-ScQ) + +[@mellow](https://github.com/midmirror): 本文介绍了平台虚拟化技术的方案类型,分析了 macOS 上的虚拟化方案。通过 Virtualization.framework 和基于这个框架的命令行工具,我们一起创建可用的 macOS 虚拟机、Linux 虚拟机(GUI)、Linux(CLI),感受现代虚拟机强大的性能。利用 Virtualization 打造属于专属自己的虚拟机,从未如此简单! + +## 工具 + +### 🐎 [iOS 代码规范工具 SwiftLint SwiftFormat](https://juejin.cn/post/7171725810544738317) + +[@zoeGuo](https://github.com/zoeGuo):文章简要介绍了 SwiftLint、SwiftFormat 两种代码格式工具的安装步骤以及使用技巧,读者也可以通过文中链接的各工具官网获取更多使用信息。 + +- SwiftLint:强制检查 Swift 代码风格和规定的工具,以 [Ray Wenderlich's Swift 代码风格指南](https://github.com/kodecocodes/swift-style-guide)为基础。 +- SwiftFormat :快捷格式化 Swift 代码的工具。 + +## 摸鱼周报 + +[@摸鱼周报 #79](https://mp.weixin.qq.com/s/HdEhmXt60853tzM6xiVUwA):第 79 期摸鱼周报来了,一起来看下本期概要 + +* 本期话题:iOS 16.2 发布,带来了无边记 App +* 本周学习:Xcode 僵尸对象 Zombie Objects +* 内容推荐:几篇 Swift 相关的文章 +* 摸一下鱼:再次解读灵动岛的定位;面相算法初学者的算法书「Hello 算法」;关于独立开发如何养活自己的讨论 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#229-2023.01.09.md b/Reports/2023/#229-2023.01.09.md new file mode 100644 index 000000000..036babfba --- /dev/null +++ b/Reports/2023/#229-2023.01.09.md @@ -0,0 +1,119 @@ +# 老司机 iOS 周报 #229 | 2023-01-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~欢迎慕牧(zoeGuo)加入周报组织。慕牧从事 iOS 开发多年,目前在做音视频、直播相关业务场景的开发,除了音视频相关的知识外,对 App 卡顿、稳定性也比较感兴趣。希望慕牧的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [AppCode 2022.3 发布以及停止销售和支持](https://blog.jetbrains.com/zh-hans/appcode/2022/12/appcode-2022-3-release-and-end-of-sales-and-support/) + +[@红纸](https://github.com/nianran):AppCode 是一款由 JetBrains 推出了 iOS 和 macOS 应用开发 IDE。由于没有达到官方希望的市场份额,官方近日宣布,在 AppCode v2022.3 发布后,将停用该产品。在 2023 年 12 月 31 日之前,官方将继续提供专门解决 Xcode 14 兼容性问题的技术支持和版本更新,以及必要的关键安全更新,更新的范围将仅限于这两个领域。 + +### [Flutter 深度用户,字节跳动如何落地实践?](https://mp.weixin.qq.com/s/s_91C-nSe3grUxOfKCvOJg) + +2023 年 1 月 14 日下午 2 点,字节跳动技术沙龙将作《深度解析 Flutter 技术探索与实践》主题分享,带来包括新一代渲染引擎 Impeller、Android 系统渲染线程 GLFunctor 的应用以及 HappinessX 开发套件强大功能等多个分享。此外,阿里集团 aliflutter 组织 Hummer 引擎技术专家也将作为特邀嘉宾带来精彩分享。对 Flutter 感兴趣的同学切勿错过! + +## 文章 + +### 🌟 🐕 [合集:SwiftUI 与 Core Data](https://www.fatbobman.com/tags/swiftui/) + +[@JonyFang](https://github.com/jonyfang): 合集共分4篇,依次介绍 SwiftUI 与 Core Data 的问题、数据定义、数据获取及安全地响应数据。 + +1. 第一篇 - [SwiftUI 与 Core Data -- 问题](https://www.fatbobman.com/posts/modern-Core-Data-Problem/): 列举了一些在 SwiftUI 中使用 Core Data 所遇到的困惑及期许。 +2. 第二篇 - [SwiftUI 与 Core Data -- 数据定义](https://www.fatbobman.com/posts/modern-Core-Data-Data-definition/): 从数据( 对应 Core Data 的实体、属性 )的定义谈起,尝试通过泛型、类型擦除等方式从定义中移除托管环境。 +3. 第三篇 - [SwiftUI 与 Core Data -- 数据获取](https://www.fatbobman.com/posts/modern-Core-Data-fetcher/): 介绍如何在视图从 Core Data 中获取数据的操作这一过程中实现与托管环境解耦,创建一个可以接受 Mock 数据的自定义 FetchRequest 类型。 +4. 第四篇 - [SwiftUI 与 Core Data -- 安全地响应数据](https://www.fatbobman.com/posts/modern-Core-Data-Respond-Data-safely/): 探讨如何在 SwiftUI 中安全地响应数据,如何避免因为数据意外丢失而导致的行为异常以及应用崩溃。 + +### 🐢 [Using C++ from Swift](https://github.com/zoecarver/swift/blob/docs/interop-roadmap/docs/CppInteroperability/ForwardVision.md) + +[@AidenRao](https://weibo.com/AidenRao):目前要在 Swift 中使用 C++ API,必须封装在 C 或 Objecive-C 桥接层中。这些桥接层通常是错误、性能问题和表达能力限制的根源,允许 Swift 直接使用 C++ API 将可以删除这些桥接层。 + +本文档阐述了 C++ 和 Swift 互操作性的开发愿景草图,它设定了推动项目设计决策的总体目标,概述了一些与 C++ 互操作性相关的高级主题,最后研究了一组特定的 API 模式,并为编译器导入它们提出了可能的方法。 + +### 🐎 [Prototyping SwiftUI interfaces with OpenAI's ChatGPT](https://www.createwithswift.com/prototyping-swiftui-interfaces-with-openais-chatgpt/) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了最近很火的 ChatGPT 可以根据给定的提示生成对应的可使用的 SwiftUI 代码。例如在文章中,用户要求 ChatGPT 创建一个显示所有心形表情的列表和表情的名称的 SwiftUI 应用程序,ChatGPT 能够快速地生成其实现代码。通过 ChatGPT 生成可用的 SwiftUI 代码,可以进行快速原型化或为复杂的界面生成代码,对于开发人员来说是一个比较有用的工具。 + +### 🐎 [一种大幅提升iOS In-App Purchases 内购测试效率的方法](https://juejin.cn/post/7173942907890565151) + +[@Smallfly](https://github.com/iostalks):大部分 App 都包含内购项,iPhone App 虚拟支付,只允许走 In-App Purchase。苹果推荐使用 TestFlight 包进行内购测试,然而生成该内购包流程需要经过构建上传机审等等,测试成本非常高。本文推荐了一种企业包重签名的方式,将生成内购测试包控制在 30s 内,大幅度提高内购测试效率。 + +### 🐕 [一文读懂 Xcode 代码索引原理](https://cloud.tencent.com/developer/article/2204613) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Xcode 代码索引的工作原理:SourceKit 与 Xcode 通过 XPC 通信生成 Index Store;同时也解析了 Index Store 的构成(包括 DataStore 和 UniDB)。然后分享了一种跨设备共享代码索引的方案,在企微落地后优化了90%的全量索引耗时。 + +### 🐕 [Announcing Lottie 4.0 for iOS. A new rendering engine with significant… | by Cal Stephens | The Airbnb Tech Blog | Dec, 2022 | Medium](https://medium.com/airbnb-engineering/announcing-lottie-4-0-for-ios-d4d226862a54) + +[@Barney](https://github.com/BarneyZhaoooo) : 本文主要介绍了 Lottie 4.0 for iOS 那些令人振奋的改变! +简单总结如下: +1、使用 Core Animation 使性能进一步提升,不再因主线程繁忙而丢帧。 +2、支持 [dotLottie 动画文件](https://dotlottie.io/) ,其大小比标准 JSON 文件小得多。 +3、新的动画解码实现,比之前基于 *Codable* 的实现快约 2 倍。 + +### 🐢 [How to manage your Flutter monorepos](https://medium.com/flutter-community/how-to-manage-your-flutter-monorepos-b307cdc9399a) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):源码管理在大型项目上历来都是一个老大难,近年来比较流行的一个解决方案便是 `Monorepos` 。本文即是阐述如何在 Flutter 项目上实施 `Monorepos` ,手把手级别的教程,并且对该方案做了优劣对比,有相关难题亟待解决的同学可以参考学习一下。 + +### 🐕 [Faster Apple Builds with the lld Linker](https://eisel.me/lld#integrating-lld) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):链接是增量构建的主要瓶颈之一,每年有成千上万的开发人员时间花在等待调试构建链接上,因此链接器优化是一个重要主题。这篇博文将讨论 Apple 平台链接器优化的过去、现在和未来。其中 lld 是更快链接 iOS、macOS 等调试二进制文件的绝佳选择,它的完成时间是 ld64 的 50-80%,不过虽然谷歌将它用于生产构建,但作者认为 lld 目前并不适用于发布版本,lld 缺失 ld64 的某些功能,例如 ld64 的链式修复尚未针对 lld 进行充分测试,不过很明确的是链接速度现在正在获得应有的关注。 + +### 🐕 [头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患](https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg) + +[@xuyafei86](https://github.com/xiaofei86):ARC 环境下在多线程中执行赋值代码可能会产生野指针,导致 EXC_BAD_ACCESS 崩溃。这种崩溃发生的概率很低,在开发和灰度阶段即使执行到相应代码也很难崩溃,因此容易遗漏到正式环境。在上亿级用户的 App 往往会成为 Top 问题,对指标造成影响,并且很难排查。 +今日头条在治理 Crash 的过程中彻底解决了数十个此类崩溃,发现其具有一定共性。本文详细分析崩溃发生的过程,以及总结了容易出现问题的场景,希望在大家遇到此类问题时能提供一些思路。 + +### 🐕 [Static vs Dynamic Frameworks on iOS — a discussion with ChatGPT](https://www.emergetools.com/blog/posts/static-vs-dynamic-frameworks-ios-discussion-chat-gpt) + +[@老驴](https://weibo.com/u/6090610445):这段时间 ChatGPT 挺火,很多人开始思考 AI 是不是真的已经到了可以替代人类完成一些技术类型的编码工作了。这篇文章用 ChatGPT 作为引子,给读者介绍了 iOS 开发中静态库和动态库从工作原理到性能影响的区别,介绍的非常深入,值得一度。不过最后,从 ChatGPT 的不完善的回答中,还是能看出现阶段 AI 还是有其一定局限性,还不能完全替代人类在编程上的作用。 + +### 🐕 [Swift 正则速查手册](https://onevcat.com/2022/11/swift-regex/) + +[@zoeGuo](https://github.com/zoeGuo):Swift 5.7 中引入了正则表达式的语法支持,笔者在文章开头提出:“构建一个正则表达式的方式,分为传统的正则字面量构建,以及通过 Regex Builder DSL 的更加易读的方式。后者可以内嵌使用前者,以及其他一些已有的 parser,在可读性和功能上要强力很多。”文中就常见字面量、Builder DSL、常用 Parser、匹配方式进行了示例和解释;文末还对 Swift Regex 优缺点进行了总结。对 Swift 正则表达式的使用有疑惑的读者也许可以从文中寻找到答案。 + +## 音视频 + +### 🐢 [2022 LLVM Dev Mtg: Implementing Language Support for ABI-Stable Software Evolution in Swift and LLVM](https://www.youtube.com/watch?v=MgPBetJWkmc) + +[@kemchenj](https://kemchenj.github.io):今年的 LLVM 大会苹果工程师 Doug 分享了 Swift 实现 ABI Stability 的过程和细节,整个演讲思路清晰,层层深入讲得非常简单易懂,让我感受到了高级开发工程师的深厚功力,其中让我印象最深的是关于 Resilience Domain 这个抽象的引入。 + +实现 ABI 稳定需要付出一些额外的性能成本,因为不同版本的库,对于同一个结构体可能有不同的实现,例如新版本增加了字段,导致内存布局产生了变化,此时为了抹平这些实现的 ABI 差异,就需要引入额外中间层,一般来说这种性能消耗不会太大。 + +但对于 iOS/macOS 来说,引入了 Swift 的所有 SDK 都需要保持 ABI 稳定,大量的 SDK 互相调用时中间层带来的性能消耗就变得非常大。仔细想想其实它们之间互相调用时并不需要中间层进行转发,因为它们是一起编译出来的,它们的 ABI 对于同一版本的其它 SDK 来说是确定的。 + +Swift 将这样的一个“作用域”抽象为 **Resilience Domain**,处于同一个 domain 里的库互相调用的代码不会经过中间层的转发,指定好 Domain 之后 Swift 编译器就会自动为你处理好这一切,在保证 ABI 稳定的同时又尽可能地减少性能消耗,真的是非常棒的一个设计! + +## 摸鱼周报 + +[@摸鱼周报 #80](https://mp.weixin.qq.com/s/eIQLuAIsRQ7eeEnsrL5QuA):摸鱼周报第 80 期来了,一起来看下本期概要: + +* 本期话题: Developer 设计开发加速器|在 SwiftUI 中管理数据模型 +* 本周学习:iOS 堆栈调用理论回顾 +* 内容推荐:SwiftUI 文章推荐 +* 摸一下鱼:一款个人知识管理工具 MindForger,通过渲染高质量的图像、视频和动画展示数学之美;LearnGPT 了解 ChatGPT 有趣的回答;洞悉开源趋势的网站:ossinsight.io + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#230-2023.01.16.md b/Reports/2023/#230-2023.01.16.md new file mode 100644 index 000000000..a21a2c72c --- /dev/null +++ b/Reports/2023/#230-2023.01.16.md @@ -0,0 +1,115 @@ +# 老司机 iOS 周报 #230 | 2023-01-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Design Priorities for the Swift 6 Language Mode](https://forums.swift.org/t/design-priorities-for-the-swift-6-language-mode/62408) + +[@kemchenj](https://kemchenj.github.io):Swift 5 发布到现在已经快要五年了,Swift 6 预计最快明年就会发布,此前关于 Swift 6 的开发计划也曾在周报里收录过,这次 Swift 团队又发布了另一份关于功能开发优先级的声明,包括: + +- **Data-race safety by default**。Sendable 和 actor-isolated 检查将会默认以最严格的级别执行。 +- **Performance predictability**。大概率会有 source-break 的修改,以便提高运行速度和编译速度,另外也有一部分编译器 bug 需要调整语义才能够修复。 +- **Package ecosystem scalability**。 + +虽然 Swift 6 会有 source-break,但这个版本也会提供源码兼容模式,可以用 Swift 5 的模式进行编译,所以大家也不用过多担心。 + +## 新手推荐 + +### 🐕 [iPad大屏&Flutter多引擎适配之路](https://mp.weixin.qq.com/s/lgW6nOzz3dyA_smxRD-9Pw) + +[@极速男孩](https://github.com/BarneyZhaoooo): 本文介绍了在大屏中如何适配分屏的几种方式,并简单介绍了在 Flutter 中如何通过修改 c++ 层的代码,实现一个多引擎的方案既能同时显示两个视图,也能让 isolate 以及图片字体等资源实现共享。 + +## 文章 + +### 🐢 [Swift Native method swizzling](https://www.guardsquare.com/blog/swift-native-method-swizzling) + +[@Cooper Chen](https://github.com/cjlcooper):本文对 Swift 原生的方法交换的原理进行了分析。其中 Swift 的运行时将动态函数分派的责任从调用者转移到被调用者。Swift 在进行方法交换时,使用全局数据结构取代了对中间 objc_msgSend 函数的需要,这种设计保证了动态函数更好的运行时性能,并且对没有使用此功能的代码没有性能影响。随着新的动态特性的加入,Swift 和 Objective-C 之间的差距变得更小。 + +### [iOS APP添加桌面快捷方式](https://mp.weixin.qq.com/s/z_CfthCni7m1mKtM0KzH6g) + +[@JonyFang](https://github.com/jonyfang): 诉求:APP 内的某些功能,能够把入口添加到桌面,点击桌面的入口可以直接跳转至 APP 对应界面。其实很多APP目前都已经实现了类似的功能,比如支付宝、云闪付等等,其中的每一个独立功能都可以单独添加到桌面,本篇做的是方案调研、整理及试错,有类似诉求的读者可以参考下。 + +### 🐕 [Rive · GitHub](https://github.com/rive-app) + +[@Barney](https://github.com/BarneyZhaoooo): Rive 是一款全平台轻量级动画库,官网描述比 Lottie 体积小 10 倍,运行更快。这又小又快的 Rive 还不快来试一试~ + +### 🐎 [Limit Swift Concurrency's cooperative pool](https://alejandromp.com/blog/limit-swift-concurrency-cooperative-pool/) + +[@EyreFree](https://github.com/EyreFree): 本文介绍了如何通过设置和修改环境变量 `LIBDISPATCH_COOPERATIVE_POOL_STRICT` 来调整并发线程数,可以强制 Swift 运行时将协作池限制为特定数量个线程,对于某些调试情况和学习目的很有用,有需要的朋友可以看看。 + +### 🐕 [Swift Concurrency – Things They Don’t Tell You](https://wojciechkulik.pl/ios/swift-concurrency-things-they-dont-tell-you) + +[@zvving](https://github.com/zvving):Swift Concurrency 宣称为并发编程带来安全性的同时,也带来性能提升和更易读易维护的代码表达,避免数据竞争/线程爆炸/代码难以维护等一系列问题。在理想情况下(比如规避如下所有问题的情况下),的确可以达到『卖家秀』的效果: + +- 主线程调用 async / Task 不能假设执行是在特定(主)线程,包括同一函数的挂起/恢复,前后线程也不一定一致 +- Swift 并发模型应避免与经典同步方法(锁、信号量等)混合使用 +- Actor 不意味着不存在数据竞争 +- Task 需要管理优先级比避免 UI 任务阻塞 +- 模拟器与真机并发行为不一致 + +作者整理了 Swift Concurrency 使用的典型问题,通过这些问题的理解&规避,可以帮助你更好的使用苹果提供的并发编程模型。 + +### 🐕 [How to build a Chrome extension with Flutter Web](https://medium.com/flutter-community/how-to-build-a-chrome-extension-with-flutter-web-6518f9845171) + +[@Crazy](https://github.com/jiyan135960):本文是一篇关于 Flutter Web 在 Chrome 插件领域的一种运用,这是对 Flutter 应用场景的一种新的拓展。本文详细的阐述了从配置 manifest.json 到最后构建 pipeline 发布到 Chrome Web Store 的全部流程。大家可以根据文章中的图文讲解自己进行实践,创建一个属于自己的 Chrome 插件。 + +## 工具 + +### 🐎 [Managing multiple versions of Swift locally](https://www.polpiella.dev/managing-multiple-swift-versions-locally) + +[@zoeGuo](https://github.com/zoeGuo):我们的本地的可能会有多个 Swift 版本:可能有 Swift 发布的正式版本、 Swift Development Snapshots,还有可能有为其他架构而下载版本(比如 [WebAssembly](https://github.com/swiftwasm/swift/releases/tag/swift-wasm-5.7.1-RELEASE))。那么当本地有多个 Swift 版本时用什么工具管理呢?文章介绍了两种工具和他们简单的用法: +1. 使用 [Xcode ToolChains 功能](https://www.swift.org/download/#snapshots)可以切换或者删除相应 Swift 版本; +2. 使用命令行工具 [swiftenv](https://github.com/kylef/swiftenv) 可以安装、删除还可以指定 Swift 版本的作用域为全局或者某个目录下。 + +关于这两种方式的更多解释和用法可以到对应官网进行深入了解。 + +## 代码 + +### [swift-dependencies](https://github.com/pointfreeco/swift-dependencies) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个灵感来自于 SwiftUI 环境启发的依赖管理库。依赖项是应用程序中与不受控制的外部系统交互的类型和功能,这可能会在你的代码库和开发周期中导致许多问题: +- 不受控制的依赖性使得编写快速、确定性的测试变得困难 +- 许多依赖项在 SwiftUI 预览中无法正常工作 +- 与第三方、非 Apple 库(如 Firebase、web socket 库、网络库等)交互的依赖项往往是重量级的,需要很长时间才能编译 + +由于这些以及更多原因,我们应该控制依赖项,但是控制依赖项仅仅是个开始,一旦控制了依赖关系,就会面临一整套新问题: +- 如何才能以一种比在任何地方显式传递它们更符合人体工程学但又比拥有全局依赖性更安全的方式在整个应用程序中传播依赖性 +- 如何只覆盖应用程序的一部分的依赖项 +- 怎么能确定覆盖了一个功能在测试中使用的所有依赖项 + +这个库解决了上述所有问题,可以通过[查看文档](https://pointfreeco.github.io/swift-dependencies/main/documentation/dependencies/)来探索这个库附带的所有工具。 + +## 摸鱼周报 + +[@摸鱼周报 #81](https://mp.weixin.qq.com/s/Ek6W0MTBDP6PN1uxWQ5M_A):第 81 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题: Developer 设计开发加速器|探索 iPad 最新技术,Apple 推出 Apple Business Connect +* 本周学习:基础知识回顾:iOS 中的 const 修饰符 +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖如何保护剪切板内容、SwiftUI 的视图风格、iOS 应用启动优化等方面的内容 +* 摸一下鱼:基于 MarkDown 的写作工具以及一文多发的工具 openwrite;从 TimeMachine 中移除开发依赖包的工具 Asimov;查看个人 Github 全年使用趋势的 Github Trends;一份开源软件使用指南;AI 辅助 Code reivew 的工具。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#231-2023.02.06.md b/Reports/2023/#231-2023.02.06.md new file mode 100644 index 000000000..3403ccecc --- /dev/null +++ b/Reports/2023/#231-2023.02.06.md @@ -0,0 +1,125 @@ +# 老司机 iOS 周报 #231 | 2023-02-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Flutter 3.7 稳定版发布](https://mp.weixin.qq.com/s/DOUELDqCD5MlgGfW7bMpEw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.7 稳定版本发布,为开发者带来了不少新功能的同时也对原有功能做了不少优化和改进. + +- 新功能 + - 增强对 Material 3 的支持 + - 菜单栏和级联菜单 + - Impeller 预览版在稳定版渠道发布 + - 自定义上下文菜单 + - 后台 isolate + - 文本放大镜 + - 废弃 Bitcode + - iOS 平台视图应用 BackdropFilter + - 将 toImageSync 新增至 dart:ui 中 +- 工具 & 工程 + - 开发者工具 DevTools 的更新 + - iOS 发布校验 + - 字体资源支持热重载 + - 放弃对 macOS 10.11 到 10.13 版本的支持 + - 插件代码迁移至 Swift + - 国际化工具和文档 +- 优化 & 改进 + - 内存管理优化 + - 滑动优化 + - 全局的选择优化 + - 自定义着色器支持的改进 + - 减少 iOS 设备上动画效果的卡顿 + +### [AFNetworking 官方宣布正式弃用](https://github.com/AFNetworking/AFNetworking) + +AFNetworking 终于也到了寿终正寝的一天,虽然十分不舍,但拥抱 Swift 是大势所趋,推荐大家可以切换到 Alamofire 继续进行 iOS 开发。 + +##  Developer - 设计开发加速器 + +[探索 iPad 最新技术](https://developer.apple.com/events/view/) + +探索新近发布的全新 iPad 和 iPad Pro 的最新特性。很多 App 已经充分利用了 iPad 硬件、iPadOS 和 Apple Pencil 的能力,并开发了出色的 App 体验。本次课程将通过一系列创新性 App 的演示,带领您充分了解 iPad 最新技术特性,学习如何利用功能强大的 API 来让您的 App 在 iPad 的体验更上一层楼。报名时间截止 2 月 15 日。 + +## 文章 + +### 🌟 🐢 [通向 AGI 之路:大型语言模型(LLM)技术精要](https://zhuanlan.zhihu.com/p/597586623) + +[@xiaofei86](https://github.com/xiaofei86):“ChatGPT 出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型(LLM,Large Language Model)效果能好成这样;惊醒是顿悟到我们对 LLM 的认知及发展理念,距离世界最先进的想法,差得有点远。我属于既惊喜又惊醒的那一批,也是典型的中国人,中国人善于自我反思,于是开始反思,而这篇文章正是反思的结果。” + +### 🐢 [序列化和反序列化](https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html) + +[@Cooper Chen](https://github.com/cjlcooper):在大型软件工程中,为了实现与上下游各系统进行良好的对接,序列化和反序列化的选型往往是我们做系统设计的一个重要考虑因素。本文针对这个问题在多个角度进行分析和讲解,并对比了当前流行的几种序列化协议,给出了有价值的选型建议。 + +### 🐢 [OC 局部变量未初始化的危险性](https://juejin.cn/post/7187664196492853308) + +[@莲叔](https://github.com/aaaron7):千万不要被文章的名字骗了,文章的内容比标题所描述的详实得多。变量未初始化导致的问题几乎是所有程序员的老朋友了,毕竟稳定 bug 并不可怕,就怕他一会儿有一会儿有没有。未初始化变量的行为会随着语言、编译器、系统架构的不同而不同,经常会导致非常隐蔽的问题。这篇文章从一次 OC 遇到的未初始化变量问题开始,分析了在ARM架构中,OC 对象和其他数据类型在不初始化的时候的表现, 并通过汇编拆解了表象背后的原因,相信你看完本文对于这个问题会有很多的收获。 + +### 🐕 [BSBackTracelogger 学习笔记](https://juejin.cn/post/6910791727670362125) + +[@AidenRao](https://weibo.com/AidenRao):于一个 app 来说,检测主线程的卡顿是性能优化的一个重点,而其中一个重要的操作就是当在子线程监控到主线程卡顿时需要抓取主线程的堆栈来进行后续的操作,这篇文章主要来探索一下 BSBacktraceLogger 的原理,能增加对于操作系统的一些认识以及对于 mach-o 文件的了解。 + +### 🐕 [How To Speed Up Swift By Ordering Conformances](https://www.emergetools.com/blog/posts/how-order-files-speed-up-protocols) + +[@zvving](https://github.com/zvving):Swift 类型转换涉及大量类型一致性检查,运行性能一致为开发者诟病。文章结合 iOS16 对一致性检查的改进,通过二进制重排来提升小部分场景的启动性能。受限于优化针对低系统版本及类型转换代码,整体启动时间优化不会太显著,但作者围绕 iOS16 公开新方案结合经验进一步整合的思路值得参考。 + +### 🐕 [Swift 之 struct 二进制大小分析](https://juejin.cn/post/7191406877819797561) + +[@J_Knight_](https://github.com/knightsj):本文来自京喜开发团队,介绍了 struct 对比 Class的一些优劣势,重点分析对包体积带来的影响及规避措施。文章首先从安全性,效率性和内存泄漏这三个方面对比了 class 类型和 struct 类型的区别。然后重点分享了 struct 类型的内存问题以及对包体积大小的影响问题。最后介绍了如何平衡安全,效率,内存,二进制大小这几方面的方法。 + +### 🐕 [百度APP iOS端内存优化-原理篇](https://mp.weixin.qq.com/s/6_FGFU7-X7URMms6-ucyZQ) + +[@老峰](https://github.com/gesantung):本文介绍了 Mach 虚拟内存的特点包括内存报警、Jetsam机制、 内存压缩技术;以及内存管理的数据结构和Mach内核提供的内存操作接口等基础概念,同时对 OC 内存分配核心函数 alloc 做了源码分析,此外对iOS 端内存报警机制做了详细的源码分析涉及整体报警流程,系统初始化,报警线程等。 + +### 🐕 [69 篇文章带你系统性的学习音视频开发](https://mp.weixin.qq.com/s/oFXvXb0Lr_wETmHn7GqJxA) + +[@JonyFang](https://github.com/jonyfang): 这是一篇 iOS、Android 客户端开发同学系统性学习音视频开发知识的指南,其中索引的几十篇文章,覆盖了音视频基础知识、工具使用、工程示例、实战经验等主题,这些文章基本上构成了入门音视频开发并做一些功能实现和指标优化工作所需要的知识框架。 + +## 代码 + +### [dotdrop](https://github.com/deadc0de6/dotdrop) + +[@Smallfly](https://github.com/iostalks):用户根目录下的隐藏文件如果不小心被覆写,将无法撤销。`dotdrop` 提供了点文件的备份能力,并支持在不同主机上自定义同步。 + +### [Docker-OSX](https://github.com/sickcodes/Docker-OSX) + +[@红纸](https://github.com/nianran):Docker-OSX 是一个使用 Docker 容器在 OSX-KVM 上安装 macOS 的项目。它提供了 macOS Big Sur、Monterey、Catalina 等多个版本的镜像。你可以使用其在 Windows、Linux 上做一些安全研究。 + +### [AttributedString Builder](https://github.com/objcio/attributed-string-builder) + +[@zoeGuo](https://github.com/zoeGuo):AttributedString Builder 是一个可以将不同类型来源转化为 AttributedString 的 Swift 实现的开源工具,可以支持的类型有:普通格式的文本、Markdown、图片、SwiftUI Views、表格和 PDF 文档。实现思路值得学习~ + +## 摸鱼周报 + +[@摸鱼周报 #82](https://mp.weixin.qq.com/s/ck4Jn4Cq-yOs_mjAO-WacA):第 82 期摸鱼周报,一起来看下本期概要: + +* 本期话题:设计开发加速器线下活动:女性开发者社区日 +* 本周学习:Python 如何调用 Swift 程序 +* 内容推荐:涵盖现代 SwiftUI 编程探讨、可变视图、NSTimer、Swift Charts 等方面的文章推荐 +* 摸一下鱼:去中心化社交软件 Damus;2022 年最后欢迎的 Chrome 插件;一款通过工作流驱动提效的办公工具 monday + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#232-2023.02.13.md b/Reports/2023/#232-2023.02.13.md new file mode 100644 index 000000000..8d2789db5 --- /dev/null +++ b/Reports/2023/#232-2023.02.13.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #232 | 2023-02-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 5.7 在 iOS 16 以下的系统创建 Task 时可能会发生 Bad access](https://github.com/apple/swift/issues/63420) + +Swift 团队在迭代的过程中删去了 Concurrency 相关代码的一个字段,内存布局产生变化,导致 iOS 16 以下的系统在创建 Task 时,部分情况下内存访问会出错,导致崩溃。 + +目前已经在主线分支完成修复,按照去年的发布节奏,可能会在三月份发布的 Xcode 里带上这个修复。遇到这个问题的同学如果着急的话,可以先回退到 Xcode 13.x 版本。 + +##  Developer - 设计开发加速器 + +### [在 App 或游戏内创造无障碍体验](https://developer.apple.com/cn/accelerator/) + +通过 Apple 操作系统内置的辅助功能、辅助功能 API 和开发者工具,开发者们可以为每个用户创建绝佳的无障碍体验。了解如何通过视觉设计和辅助功能技术适配,让你的 App 或游戏对每个人可用。报名截止 2 月 20 日。 + +## 新手推荐 + +### 🐎 [如何实现 iOS 16 带来的 Depth Effect 图片效果](https://mp.weixin.qq.com/s/9ITEbW1_EGu_2vrVfrZ9lA) + +[@zoeGuo](https://github.com/zoeGuo): iOS 16 系统为我们带来了比较惊艳的桌面锁屏效果:Depth Effect。它可以使用一张普通图片当背景,同时可以在适当的地方遮拦住部分桌面组件,形成一种景深的效果。那么我们可以在自己的 App 实现类似的效果吗?文章介绍了如何使用[苹果机器学习官网](https://developer.apple.com/machine-learning/models/)提供的机器学习模型 DeeplabV3 一步步实现 Depth Effect 效果的。虽然 DeeplabV3 模型在具体应用中还有一定的局限性,但作为尝鲜体验也是非常不错的~ + +## 文章 + +### 🐕 🌟 [夸克 iOS Top1 JSC 崩溃攻克之旅](https://mp.weixin.qq.com/s/0DidXWLDeqXpsjGBv69ITQ) + +[@Leo](https://github.com/leomobiledeveloper):Top Crash 的排查一直是 iOS 开发中的一个难点,尤其是内存相关的问题,往往会崩溃到系统符号里,排查起来经常一头雾水。这篇文章是夸克团队在排查 JSC 崩溃的实践,涵盖了 Crash 分析的整体思路、工具建设和崩溃原理,文章质量较高,推荐阅读。 + +### 🌟 🐢 [The evolution of Facebook’s iOS app architecture](https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Facebook for iOS (FBIOS) 是 Meta 最古老的移动代码库。自 2012 年该应用程序被重写以来,它已经由数千名工程师共同开发并交付给数十亿用户,它可以支持数百名工程师同时对其进行迭代。经过多年的迭代,Facebook 代码库已经不像典型的 iOS 代码库了,本文将阐明演变背后的技术决策及其历史背景: +- 2014,建立自己的移动框架:React +- 2015,减轻和改进启动所需的更改 +- 2016,动态库和模块化 +- 2017,重新思考 FBIOS 架构 +- 2018,生成代码的激增 +- 2020,Swift 和语言架构 +- 2022,架构演变完成了 1%,未来仍将继续 + +### 🐕 [iOS APP 虚拟内存用量初探](https://juejin.cn/post/7196931784328626234) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者先通过对不同设备测试 task_vm_info 中具体值发现了规律: + +- 同一种机型 max_address 是固定的,而 min_address 和 aslr 的偏移保持一致 +- 不同机型(内存容量)的 max_address 有所不同 + +接着通过对 XNU 代码的阅读证实了以上的结论,并进一步探讨了 `` 设置虚拟内存范围时机 ``,``Reserved region``,`` 虚拟内存总大小 `` 等内容。最后验证了开启 虚拟内存扩容(com.apple.developer.kernel.extended-virtual-addressing) 后虚拟内存的变化。阅读后会对虚拟内存有一个更加直观的了解。 + +一个应用场景就是当需要判断某一个指针是否为 malloc 出来的合法指针,除了可以用 ``malloc_zone_from_ptr`` ,还可以前置判断地址是否在 ``task_vm_info.min_address ~ task_vm_info.max_address`` 之间来提升效率。 + +### 🐎 [Prevent copy & paste into other iOS apps](https://blog.eidinger.info/prevent-copy-paste-into-other-ios-apps) + +[@Smallfly](https://github.com/iostalks):iOS 系统的封闭性给不同 App 之间的通信增加了门槛,而剪切板是为数不多的跨应用通信方案。为了保护用户的隐私,在 iOS 14 之后应用读取剪切板需要用户的授权,但在低系统或者用户误操作的情况下,依然存在剪切板数据被窃取的可能性。 + +本文介绍了两种保护剪切板数据安全的方法,一种是在 App 进入后台时,清空剪切板内容;另一种是强制使用 `custom pasteboard`,具体实现方案可参阅原文。 + +### 🐕 [Flutter 3.7 之快速理解 toImageSync 是什么?能做什么?](https://mp.weixin.qq.com/s/ziOCR-sudMGbE0iW3MKewQ) + +[@Crazy](https://github.com/jiyan135960):作者从 toImageSync 方法入手,详细的描述了 toImageSync 性能上带来的优势与副作用。 toImageSync 优势是生成的图像会在 GPU 中常驻,所以它的绘制速度会更快,并且可以重复利用,提高效率。并且 toImageSync 为同步方法,在方法调用上更加自由。作者更是通过对 Flutter 中 SnapshotWidget 的调用方式来详细分析 toImageSync 与标准动画的差别,并通过对比明显展示了 toImageSync 的副作用:“冻结” child 控件。 + +最后作者更是通过源码对比以及各版本之间的命名差异分析 toImageSync 的设计初衷与作用,这种对源码分析的严谨与执着更是值得开发者的学习。 + +## 摸鱼周报 + +[@摸鱼周报 #83](https://mp.weixin.qq.com/s/Ty95hGBIevHaJQ5TU774aQ):第 83 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:各大搜索引擎开始接入类 ChatGPT 功能 + +* 本周学习:Python 中的匿名函数与闭包 + +* 内容推荐:iOS 越狱检测、获取虚拟内存状态、使用 KeyChain 进行持久化等内容 + +* 摸一下鱼:Stable Diffusion 功能尝鲜;关于技术规划的思考;大厂复盘文档 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#233-2023.02.20.md b/Reports/2023/#233-2023.02.20.md new file mode 100644 index 000000000..f137d68b7 --- /dev/null +++ b/Reports/2023/#233-2023.02.20.md @@ -0,0 +1,130 @@ +# 老司机 iOS 周报 #233 | 2023-02-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3 Beta Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes) + +包含 Swift 5.8 以及 iOS/iPad OS 16.4 的 SDK。其中 Swift 5.8 的改动中包含了 [SE-0370](https://github.com/apple/swift-evolution/blob/main/proposals/0365-implicit-self-weak-capture.md) 等新特性。 + +```swift +class ViewController { + let button: Button + + func setup() { + button.tapHandler = { [weak self] in + guard let self else { return } + dismiss() // refers to `self.dismiss()` + } + } + + func dismiss() { ... } +} +``` + +##  Developer - 设计开发加速器 + +### [探索增强现实](https://developer.apple.com/events/view/9HU22DPP7P/dashboard) + +现在就是开始在 Apple 平台上使用增强现实的最佳时机,加入我们了解如何为数亿台支持 AR 的活跃设备构建 App。通过本次活动,您可以全方位的了解 Apple 提供的 AR 技术栈,包括 ARKit 和 RealityKit 等功能强大的框架,以及 Reality Composer 和 Reality Converter 等创意工具,从而在 AR 中将您的想法变为现实。报名截止 2 月 22 日。 + +## 新手推荐 + +### 🌟 🐕 [每天都在用,也没整明白的 React Hook](https://mp.weixin.qq.com/s/wpJvXYf4Q3jFQEEpICtoSg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 日常开发中不少同学也在做前端相关开发,本文小编和大家一起学习一下 React Hooks 的用法,重新认识常用的 useState、useCallback、useContext 等,甚至于那些不常用到的 hooks 的使用方法,[本篇](https://mp.weixin.qq.com/s/wpJvXYf4Q3jFQEEpICtoSg)由字节团队提供,强烈推荐正在使用 React 或者打算尝试的同学深入学习。 + +## 文章 + + +### 🐢 [我们是如何追逐元宇宙、XR 等“概念股”浪潮的?](https://mp.weixin.qq.com/s/Q9VNdOXGlsA4OXRUc5_-xw) + +元宇宙已经不是一个很新的概念,但是我们大多数人可能更多的是听过这个词,但是并没有真正体验过,很多元宇宙的产品也是在雏形状态。淘宝人生在过去一段时间完成了淘宝人生小屋项目的正式上线,也这让我们可以很方便的体验元宇宙的世界。从一个展示页面变成元宇宙,相信大家一定很好奇淘宝团队是如何做到的,这里面涉及对于端上而言大量新的技术,以及去落实这样一个项目,该如何分工等等,那就可以好好看一下这篇文章,相信可以有所受益。 + +### 🐕 [企业微信 Flutter 与大型 Native 工程跨四端融合实践](https://mp.weixin.qq.com/s/Fc6bdgKshZ8WFX1Pcr4LHg) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了在企业微信中实践四端 Flutter 与 Native 的跨平台使用。本文主要介绍了其在跨平台中遇到的困难与挑战并且是如何解决的: +- 企业微信代码复杂,业务模块中多,使用 add2app 的方式将 Flutter 工程集成到原生工程中。 +- 参考 grpc 的设计流程 , 设计了一套跨语言的 rpc 调用模型 , 通过 protoc 来生成 dart 端 和 c++ 端的代码。并且实现了一套相比 pigeon 更便捷的 channel 的自动化框架:rpc-channel。 +- 通过修改引擎代码,解决了部分在跨平台时 Windows 和 Mac 遇到的通信,UI,内存等问题。 +- 完善和统一导航栏,文字等基础组件在在不同端上的体验。 +- 对各个业务提供独立的 example application 运行的能力。通过 grpc 的远程调用宿主 APP 的服务的方式来和主工程进行解耦。 + +### 🐎 [Debouncing with Swift concurrency](https://sideeffect.io/posts/2023-01-11-regulate/) + +[@Cooper Chen](https://github.com/cjlcooper):本文简单介绍了 debouncing 在 Swift 多线程中如何进行定时执行和函数防抖,并通过简化任务次数提高了性能和效率,可以为有相似应用场景的开发同学提供一些有用的参考信息。 + +### 🐎 [iOS 内存优化之工具介绍](https://juejin.cn/post/7190296873373007931) + +[@老峰](https://github.com/gesantung):本篇文章主要介绍了 Xcode 内存图和 leaks 工具的使用,以及排查内存问题的流程与思路,涉及以下方面: +- 运行项目,测试覆盖场景 +- 使用内存图 / leaks 查看内存泄露情况 +- 针对场景检查是否有隐式间接持有场景 +- 根据情况修复问题 +- 回归 + + +### 🐎 [Swift Cookbook](https://www.kodeco.com/books/swift-cookbook) +[@Damien](https://github.com/ZengyiMa):Swift Cookbook 是 kodeco 团队整理的 Swift 入门书籍,汇集了常见的 Swift 语言特性的说明和使用最佳实践,以便可以在需要的时候可以提供参考。学习 Swift 的新手同学不妨收藏使用。 + +### 🐕 [跨端通信终结者|看我是如何保证多端消息一致性的 🔥 - 掘金](https://juejin.cn/post/7196970992576708663) + +[@Barney](https://github.com/BarneyZhaoooo):本文完整介绍了作者从问题出发,思考如何优雅地保证多端消息一致性的过程。 +- 以 iOS - Web 通信桥接为例,解释了当下方案难以维护的原因。 +- 介绍以 YAML 标准化语言定义组件的 DSL 解决方案。 + +### 🐎 [理解 Clang Module 和 Module Map 语法](https://juejin.cn/post/7195394554760003644) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 Clang Module 的功能特点,以及它的缓存机制,在 Xcode 中的使用方法,也结合代码讲解了如何制作一个模块的方法。另外还介绍了 Module Map 的作用以及它的声明方法。 + +### 🐕 [Text Buffer Reimplementation - VSCode](https://github.com/SwiftOldDriver/iOS-Weekly/issues/3843) + +[@红纸](https://github.com/nianran):本文是 VSCode 代码缓冲区的一次优化改造,基于传统的 piece table 数据结构来替代原有基于行的 ModuleLine 的 line array 。旧行数组结构需要耗费大量的构造时间,并占用大量内存。新的数据结构有着内存开支小、初始化快、插入和查询效率高等优势。如果对数据处理感兴趣的话,本文值得一读。 + +> 译文:[【译】重新实现 Text Buffer](https://macplay.github.io/posts/text-buffer-reimplementation/) +> 扩展阅读:[Piece Table 数据结构](https://zhuanlan.zhihu.com/p/268726520) + +### 🐢 [从大前端“穿越”到终端,开发者应该必备什么技能? | 解读终端的 2022](https://mp.weixin.qq.com/s/t0xLKrMF4al4cgAXeCwyow) + +[@享耳先森](https://github.com/iblacksun):现下裁员不断,新增招聘岗位越来越少,终端开发者何去何从?本文介绍了过去几年移动端领域技术发展;对比了现有跨端技术;同时,针对未来技术演化作者也给出了一些预测,希望对大家有帮助。 + +## 代码 + +### [ChatGPT Jailbreak](https://github.com/gayolGate/gayolGate/blob/index/ChatGPTJailbreak) + +[@老驴](https://weibo.com/u/6090610445):ChatGPT 这类的 LLM 模型,一般都会存在特殊 prompt 来越过系统限制。链接中的就是其中之一,可以让 ChatGPT 回答一些正常情况下不能回答的问题。大家可以试试看,权当娱乐。 + +## 摸鱼周报 + +[@摸鱼周报 #84](https://mp.weixin.qq.com/s/fKutqWAHfzkbbFgYCvPfIA):第 84 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:开发加速器:在 App 或游戏内创造无障碍体验 +* 本周学习:Any 和 AnyObject 以及 AnyClass +* 内容推荐:依赖注入、自定义 Button 外观与行为、正则表达式、创建 XCFramework 以及创建可配置的小组件文章推荐 +* 摸一下鱼:一个白噪音网站;ChatGPT 飞书机器人配置;在线 NodeJS 平台 AirCode;ChatGPT for stackoverflow 浏览器插件 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#234-2023.02.27.md b/Reports/2023/#234-2023.02.27.md new file mode 100644 index 000000000..4d2a413eb --- /dev/null +++ b/Reports/2023/#234-2023.02.27.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #234 | 2023-02-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [设计挑战(亚太) 演讲:探索卓越的导航流程设计](https://developer.apple.com/events/view/R67PUKP9H9/dashboard) + +与 Apple 设计布道师一起学习重要设计原理的实践方式,并在两项设计挑战当中展示您的设计技能。探索如何运用优秀的导航设计模式来创建更符合直觉的 App,并注册一对一咨询来和 Apple 设计布道师讨论您的设计概念与想法。 + +在挑战活动的最后,您还有机会和其他参与挑战的开发者进行交流,并与 Apple 设计布道师一起分享各自的想法、设计案例和洞见。 + +## 文章 + +### 🌟 🐕 [云音乐 iOS 跨端缓存库 - NEMichelinCache](https://mp.weixin.qq.com/s/jZ6QEuc0qoAn27lYzN1Yfw) + +[@JonyFang](https://github.com/jonyfang): 跨端缓存方案类似操作系统缓存模式中的回写模式,在缓存库方案设计过程中需要着重解决回写的缺点,如保证内存缓存、引擎、磁盘缓存数据一致性。基于目标做对应的方案设计,侧重如下几点: + +1. 业务接口层。减少接入的难度,还需使接口可控,不让业务方随意访问磁盘等; +2. 责任链模块。为后续日志模块、错误模块设计做准备; +3. 责任链 Runner。支持优先级队列能力、支持优先级高的链插队; +4. 解压 / 合并模块。可自定义配置解压缩库能力,同时减少对三方库依赖(可替换); +5. 数据库升级; +6. 多版本并存; +7. 本地 Bundle 缓存清理机制; + +新缓存框架设计整体的切入点和侧重关注点可供参考,也期待网易云后续放出 `NEMichelinCache` 对应的开源。 + +### 🐕 [Safely pinning SPM dependencies to exact versions](https://www.polpiella.dev/safely-pinning-spm-depedencies-to-exact-versions/) + +[@kemchenj](https://kemchenj.github.io):使用 Cocoapods 集成依赖时,我们通常会将 Podfile.lock 也加入到 Git 的文件追踪列表里,保证在每次运行 `pod install` 后就能能够导入一样的依赖库版本,让所有人都在同样的环境下开发。 + +但 Xcode 项目直接集成 Swift Package 时情况会稍微不同,它不会根据 lock 文件来决定导入的 Package 版本,而是会在**版本约束的范围内升级到最高版本**。 + +例如说 Xcode 项目里 Alamofire 的版本约束是 `2.0.0 - Next Major`(`~> 2.0`),我们在开发时本地使用了 2.0 版本,传到 CI 上打包时刚好 2.1 版本发布了,就会自动升级到 2.1,导致 CI 打出来的包跟本地不同。 + +这篇文章就介绍了相关的情况以及他们的解决方法,如果大家在工作中也遇到了类似的问题,可以参考这篇文章进行解决。 + +### 🐎 [Electron 的 GUI 和 Ruby 的 CLI 的一种交互实践](https://mp.weixin.qq.com/s/UmzeZip3KtHH44dkiijujg) + +[@红纸](https://github.com/nianran):本文探索了跨语言进程间的通信方案的实现,总结出文件、Unix Domain Socket 和管道这 3 种通信方式,并将其应用在基于 Ruby 的 CLI 和基于 Electron 的 GUI 在实际开发过程中,最后给出了开发调试的一些实用分析和建议。 + +### 🐕 [FlutterEngine 桌面端架构浅析](https://mp.weixin.qq.com/s/iKAHo8chgE85zix3ktHfUQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi):Flutter 作为一个跨端开发框架,在移动端可谓是遍地开花,其本身是完全支持桌面端开发的,但 Flutter 桌面端的资料相对少很多。本篇由钉钉开发团队在落地 Flutter 桌面端的同时对 Flutter 桌面端架构的研究,层层递进,对相关架构的同学可以深入学习。 + +### 🐕 [云音乐 Android 内存监控探索篇](https://mp.weixin.qq.com/s/tHndnmpxeDihYTIZmsafbg) + +[@Crazy](https://github.com/jiyan135960):内存泄漏问题一直是 Android 开发者最头疼的问题,本文介绍了网易云音乐技术团队在内存泄漏监控方案的探索与实践的思路。作者结合了 Android 主流的内存泄漏监控框架 LeakCanary 与 Koom 的功能,并针对自己软件的实际情况,设计了一套线上线下结合的内存泄漏监控框架。作者更是针对 Android 大图监控(分为线上大图监控与本地图片资源监控)与内存大小监控(分别为启动内存、运行内存和 Java 内存监控与线程监控)进行了详细的介绍,可以给在做内存优化的同学提供一个切实有效的思考方向。 + +### 🐕 [How to use macOS Assistive Technologies to test in the Simulator](https://www.basbroek.nl/cheating-the-system-for-fun-and-profit) + +[@EyreFree](https://github.com/EyreFree): 本文介绍了如何在无需处理 Accessibility Inspector 的情况下使用 macOS 的辅助技术,如 VoiceOver、Voice Control 以及 Hover Text 来更容易地在模拟器中检查和测试某些辅助功能(Accessibility),作者通过视频演示了相应测试方法,并且同时也提示应该始终以真机测试的结果为准,有需要的朋友可以看看。 + + +### 🐕 [使用 RoomPlan 扫描创建参数化三维室内场景](https://mp.weixin.qq.com/s/HCvy7MJJcBUANXt5y47mkA) + +[@ZibYang](https://github.com/ZibYang): 本文将主要聚焦于 Apple 的 AR/MR 新 API:RoomPlan 。全文共分为 3 个部分: + +- 第一部分是 Apple 的 AR/MR 技术发展回顾,以及 RoomPlan 和 Object Capture 技术背后的原理简介。 +- 第二部分是对于 RoomPlan 技术的介绍,包括如何使用官方 API 快速在相关 App 中使用 RoomPlan,以及如何通过数据 API 自定义 RoomPlan 的使用。 +- 最后一部分是关于 AR/MR 应用设计的相关建议。 + +### 🐢 [利用 Xcode 和设备上的检测工具排查卡顿](https://mp.weixin.qq.com/s/5sIJKDozsD1LSOh38hHYTg) + +[@WessonWu](https://github.com/WessonWu): 今年 Apple 在开发全链路过程中对于卡顿问题的排查分析工具上做了一次相对较完整的更新,借此机会笔者想将结合本次 WWDC22 的更新内容与大家一同探讨下日常卡顿的治理思路。本文篇幅有点长,大家可以先浏览下文章的思维导图,能够帮助大家提前梳理本文的主体脉络。 +![思维导图](https://mmbiz.qpic.cn/mmbiz_jpg/deSLfic6WeGV1vjuiaOVezFaosibTAdxcZ6FeHJ0N9CicGgPSJJI5kMSvBE4Q6Qk08o8OoI2ib00kiaNfppvZGfMjuFw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1) + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [上海] 小红书 - 社区客户端团队 - 基础体验方向 - iOS/Android +- [深圳] AirBrush - 美图海外事业部 - iOS 高级工程师 +- [上海] 七猫小说 - iOS / Android/ 前端 / go / 大数据 高级、资深工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#235-2023.03.06.md b/Reports/2023/#235-2023.03.06.md new file mode 100644 index 000000000..010b2ebe2 --- /dev/null +++ b/Reports/2023/#235-2023.03.06.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #235 | 2023-03-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [T 沙龙新官网(www.tsalon.tech)上线啦,欢迎大家关注!](https://www.tsalon.tech/) + +[@EyreFree](https://github.com/EyreFree): T沙龙,全称为 T 技术沙龙,是一个以促进开发者之间技术交流为目的的技术沙龙组织,成立后一直在定期举办各种面向开发者的线上 & 线下沙龙活动。从 2016 年 3 月份开始,在北京、上海、成都、杭州和深圳等地相继举办了 30 多场线下沙龙活动,同时也举办了多场线上活动。本次 T 沙龙官网更新,感兴趣的朋友可以关注,获取第一手活动资讯,🎉 + +## 文章 + +### 🌟 🐕 [淘宝 APP 网络架构演进与弱网破障实践](https://mp.weixin.qq.com/s/YomDksoRv_Chuw7oHBzzFA) + +[@JonyFang](https://github.com/jonyfang): 本文主要介绍手淘终端统一网络库 AWCN (Ali Wireless Connection Network) 演进的过程。讲述如何围绕体验持续构建南北向从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术/多协议择优调度手段,贴合厂商附能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。 + +文中针对网络库设计的理念及方案演进介绍的比较全,思路可做参考学习。 + +### 🐕 [QQ音乐高可用架构体系](https://mp.weixin.qq.com/s/G00cwGYAr6l2Px6-DiwXLA) +[@莲叔](https://github.com/aaaron7): 这是一篇服务端视角的高可用架构的介绍文章。如何处理故障是几乎所有分布式系统的最关键的一环。文章分享了 QQ 音乐在面向故障处理的思考以及演进出的一套行之有效的技术体系,从架构、工具链和可观测性三个角度来实现了优雅的处理故障的能力。虽然是服务端视角偏多,但整体行文比较浅显易懂,相信客户端同学也能够有所收获,尤其是在当下很多技术都是端到端的,所以具备一定的服务端视角也能帮助我们更好的设计技术架构,定义技术体系。 + +### 🐕 [SwiftUI views versus modifiers](https://www.swiftbysundell.com/articles/swiftui-views-versus-modifiers/) +[@Damien](https://github.com/ZengyiMa): SwiftUI 最有趣的方面之一是从本质上将视图相关的描述也视为数据。SwiftUI 视图不只是在屏幕上呈现的像素,也是定义了给定的 UI 应该如何工作、外观和行为,本文就是会通过几个例子来描述 SwiftUI 视图与修饰符的使用和介绍,对 SwiftUI 感兴趣的同学不妨一读。 + +### 🐢 [正则表达式是如何运作的?](https://mp.weixin.qq.com/s/i_C4ATnajxRDGlTA8dJDHg) +[@zoeGuo](https://github.com/zoeGuo):在日常的开发工作当中,我们必不可免的会碰到需要使用正则的情况。正则在很多时候通过不同的组合方式最后都可以达到既定的目标结果,而不同的撰写方式,匹配的效率也有很大的不同。文章从正则表达式与有限自动机(FA)开始,逐步深入描述:不确定有限自动机(NFA)及确定有限自动机(DFA)、正则如何替换成 NFA、NFA 转换成 DFA 及其简化;并解释了体现正则不确定性的“回溯”的相关概念。文章整体理论性很强,需要耐心好好阅读,相信认真阅读之后,会对正则表达式有一个更加具体,立体的认知。 + +### 🐕 [网易云音乐基于 C2D2C 的「无损」设计协同](https://mp.weixin.qq.com/s/ngQXWLhwV7wDyTMlr3QxmQ) + +[@J_Knight_](https://github.com/knightsj):本文首先介绍了传统设计协同(在设计师和开发的合作下,将产品需求转化成代码的过程)中存在的一些问题(比如沟通成本高,开发效率低等)。然后介绍了基于 C2D2C 的无损设计协同方案(C2D,全称是 Code2Design,也就是将代码转成设计稿;D2C,则是其逆过程,将设计稿转成代码)。并通过流程图以及设计和代码示例展现了其无损协同的几个优势: +- 首先,是维护成本低。因为只需在开发侧维护一套组件库即可。 +- 其次,是协作效率比较高。因为设计细节无损保存在元数据中,免去了反复确认。 +- 最后,是局部效率比较高。因为设计师可以利用 C2D 快速生成设计稿,开发者利用 D2C 快速还原 UI。 + +### 🐕 [Pattern matching on error codes – Ole Begemann](https://oleb.net/blog/2023/catch-error-code/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简单介绍了一个 error 匹配的小技巧,正如文章开头如下所说。 + +- Foundation overloads the pattern matching operator ~= to enable matching against error codes in catch clauses. + +### 🐎 [What is the default target queue for a serial queue?](https://forums.swift.org/t/what-is-the-default-target-queue-for-a-serial-queue/18094) + +[@xuyafei86](https://github.com/xiaofei86): GCD 通过目标队列来管理系统全局队列和各种自定义队列的任务调度。目标队列共享相同的线程池,受到线程池 64 条线程数量的限制。在这条 Swift 社区的提问中,作者思考了自定义串行队列是否遵循这种策略的问题。从 [GCD 源码](https://opensource.apple.com/source/libdispatch/libdispatch-1173.40.5/src/queue.c.auto.html) 中可以看到,苹果隐藏了 overcommit(过载)队列的概念,overcommit 队列创建线程时不受线程池线程数量的控制。系统全局队列是非 overcommit 的,而自定义串行队列是 overcommit 的。继续阅读原文了解关于此问题在应用层面的讨论。当我们手动设置目标队列和 Precondition 时,这也将有利于我们避免崩溃发生。 + +### 🐕 [Xcode Header Template for Swift Packages](https://samwize.com/2023/02/28/xcode-header-template-for-swift-packages/) +[@水水](https://www.xuyanlan.com):如果您使用 Swift Packages 时,每当您创建一个新文件,可能会出现两个令人讨厌的问题: + +- No header template :头部信息中缺少一些包名和组织名称等 +- No prompt for filename:没有文件名命名提示 + +本文针对这两个问题提出了解决方案,感兴趣的读者可以尝试看看~ + +## 代码 + +### 🐎 [ChatGPT App](https://github.com/chenxi92/ChatGPT) + +[@Cooper Chen](https://github.com/cjlcooper):目前 ChatGPT 持续火热,这是一套由 SwiftUI 开发并且可以与 OpenAI Api 交互的 Mac App 和 iOS App 代码,为想要了解和学习 ChatGPT 的同学提供了一个快速便捷的入口,同时使用方法也十分简单: +- Mac App:在 Release 页面下载 ChatGPT.dmg 文件即可 +- iOS App:下载源码,然后使用自己的打包证书即可 + +## 摸鱼周报 + +[@摸鱼周报 #85](https://mp.weixin.qq.com/s/Hhb7ZCDDqEcpIRTlUKiGTQ):第 85 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:在线讲座:与 App Store 专家会面交流;加速器线上活动:设计挑战(亚太) +* 内容推荐:本期将推荐近期的一些优秀博文,涵盖基于文本生成图像、SwiftUI 布局、Swift 静态代码检测、原生的 SwiftUI Markdown 渲染包等方面的内容 +* 摸一下鱼:ChatGPT 的 API 开发使用;Notion AI 体验;new bing 体验;针对程序员的智能搜索引擎 phind + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#236-2023.03.13.md b/Reports/2023/#236-2023.03.13.md new file mode 100644 index 000000000..28d4d6113 --- /dev/null +++ b/Reports/2023/#236-2023.03.13.md @@ -0,0 +1,114 @@ +# 老司机 iOS 周报 #236 | 2023-03-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store 的定价机制升级现已扩展至所有购买类型](https://developer.apple.com/cn/news/?id=dbrszv62) + +1. `` 增强全球定价机制 `` 的推出:在 5 月 9 日还未选择定价机制的 App ,默认会按照“全球定价”并以美元进行结算。开发者也可以即日起主动进行调整。 +2. 更新后的价格将根据金融数据机构提供的公开汇率信息做调整。 + +由此,通过汇率差或者切区充值的方式成为历史,如果开发者未选择上架的地区,用户即使通过切换地区也无法进行支付。 + +##  Developer - 设计开发加速器 + +### [在 iPad App 中支持多窗口](https://developer.apple.com/cn/accelerator/) + +多任务处理是让你的 iPad App 更加强大的方式。本次课程你可以学习如何轻松支持多窗口功能,了解如何创建、刷新和关闭窗口。你还可以了解如何利用高级手势创造更加出色的体验。报名时间截止 2023 年 3 月 15 日。 + + +## 文章 + +### 🐕 [SwiftUI + Core Data App 的内存占用优化之旅](https://juejin.cn/post/7207787191623335992#heading-0) + +[@Cooper Chen](https://github.com/cjlcooper):本文主要介绍了 SwiftUI 在图文混排等复杂应用视图情况下,如何进行内存占用进行优化的方案。通过视图 body 值优化、托管对象回归惰性状态、私有上下文、不持有托管对象等方式,大大提高了 SwiftUI 在复杂视图情况下的内存占用情况,为相关开发同学提供了许多优秀的建议,值得一读。 + +### 🐎 [Swift 5.7 / Xcode 14 incremental build time 10x slower than Swift 5.6 / Xcode 13](https://forums.swift.org/t/swift-5-7-xcode-14-incremental-build-time-10x-slower-than-swift-5-6-xcode-13/60568/2) + +[@zvving](https://github.com/zvving):如果你的项目在升级 Xcode14 后碰到增量编译时间大幅劣化的情况,大概率是 Swift 新版集成驱动的问题,不妨试试配置 `SWIFT_USE_INTEGRATED_DRIVER` -> `NO`,可能会有很好的效果。(配置后需要手动清空构建文件夹 `CMD+Shift+K`) + +### 🐎 [Xcode 编译加速之 Compile Asset Catalog](https://juejin.cn/post/7207848485856231482) + +[@anotheren](https://github.com/anotheren): 在项目规模变大后,资源文件也会不可避免的增多,导致生成 Asset.car 时占用大量时间进行图片压缩。这在 Release 时是必须的,但是在 Debug 时,我们可以跳过这个过程以优化编译时间。来看看具体如何操作。 + +> 推荐人:[gbfansheng](https://github.com/gbfansheng) + +### 🐎 [苹果:为了安全让 M2 吃灰](https://catcoding.me/p/apple-perf/) + +[@kemchenj](https://kemchenj.github.io/):macOS 本身有一个安全机制来防止恶意程序运行,在程序或脚本首次运行时会上传 checksum 到苹果服务器,与现有的恶意程序名单进行比对,如果没问题才会放行让程序执行,导致首次启动时需要较长的时间。 + +但在我们的日常开发中,可能会需要大量生成和运行一次性的程序,例如修改代码之后编译运行的程序,每次都是全新,意味着程序每次都需要到苹果服务器进行一次校验。 + +当程序达到一定数量的时候就会造成性能问题,例如文中提到的 rust 测试原本只需要 1 分 30 秒左右,受到这个安全机制的影响执行时间被拉长到 10 分钟,对于日常开发体验影响非常大。 + +文章观点可能有点偏激,但使用 macOS 的开发者确实有必要意识到这件事情,并且这个问题可以通过一些设置来解决,可以在系统设置里将开发用的 App 加入到白名单里绕过这个验证(例如 Xcode, VSCode, Iterm2 等等),解决上述的性能问题。 + +### 🐎 [iOS 底层之类的 cache 分析](https://juejin.cn/post/7206143969121943589) + +[@J_Knight_](https://github.com/knightsj):本文详细介绍了类结构体中的 cache 字段:具体从 cache 的数据结构、bucket_t 类型以及关键方法 insert 的源码讲解了缓存插入的逻辑,也介绍了缓存扩容的逻辑。最后在结尾处提供了 cache_t 的工作原理流程图,可以更直观地看到 cache_t 的机制。 + +### 🐕 [通过 Bazel 构建 iOS 应用](https://bazel.build/start/ios-app?hl=zh-cn) + +[@JonyFang](https://github.com/jonyfang): Bazel 是 Google 推出的一款开源的工程编译工具,类似于 Make、Maven 和 Gradle。Bazel 主要负责处理代码构建相关问题,如:大规模数据构建问题,共享代码库问题,从源代码构建的软件的相关问题。Bazel 支持多种语言并且跨平台,还支持自动化测试和部署、具有再现性(Reproducibility)和规模化等特征。这里主要是介绍通过 Bazel 构建 iOS 应用。 + +### 🐎 [迈向卓越 - 闲鱼终端场景 CI 能力体系化建设](https://mp.weixin.qq.com/s/1WaRRQXxsFZlWA1oT1jldA) + +[@xuyafei86](https://github.com/xiaofei86):“闲鱼从 2014 年创立,到 2022 年已经走过了 8 个年头,闲鱼 APP 也随之逐渐复杂。在这其中,我们也面临着大型 APP 共性的一些通病,例如:团队规模变大带来的研发效能瓶颈的问题,大量历史代码带来的代码腐化问题等。从解决实际问题出发,闲鱼终端团队和质量团队一起协作在 2022 财年进行了 CI 能力体系化建设,并已经通过在单测,代码质量,自动化测试 & 回归等方面的建设,形成了一整套的能力沉淀。通过这些能力,我们成功在闲鱼终端研发场景下实现了代码质量的稳步的提升,并在部分仓库现了向类主干开发模式的切换。本文将分享整个能力建设的过程以及我们在其中的思考,希望能给大家带去一些借鉴。” + +### 🐕 [这代码居然有差别?CPU 友好的代码该这样写](https://mp.weixin.qq.com/s/VXB4WqdN5ryc2TU7haxh_A) + +[@Crazy](https://github.com/jiyan135960):本文作者从循环效率入手,向大家简单的讲解了 CPU 的缓存机制,以及怎样写出优秀循环。作者通过一个矩阵相乘的三种不同的循环写法,用看似相同的代码,得到相同的结果,并计算这三种循环的效率。最后的结果却让人震惊,这三种循环方式其中的效率能够相差百倍之多。其中最大的问题就在于 CPU 的缓存命中率,利用先从左到右,再从上到下的循环方式读取数据,可以提升百倍效率。本文为开发者提供了一个少见却高效的性能优化的方向,了解一些硬件原理,顺应硬件的处理规则,才能写出更加行之有效的软件代码。 + +## 工具 + +### [ZMarkupParser](https://github.com/ZhgChgLi/ZMarkupParser) + +[@红纸](https://github.com/nianran):这个纯 Swift 的 GitHub 仓库使用正则表达式解析 HTML,并自动修正标签错误。它支持高度定制的 HTML 标签样式,比传统的 NSAttributedString.DocumentType.html 更高效,不依赖任何解析库。它的实现原理是使用 Tokenization 将 HTML 转换成抽象语法树,并使用 Visitor Pattern 将 HTML Tag 与抽象样式对应,得到最终的 NSAttributedString 结果。如果你需要一款快速、高效、准确的 HTML 解析器,这个仓库是一个不错的选择。 + +> 推荐人:[ZhgChgLi](https://github.com/zhgchgli0718) + +### [Swift Evolution proposals in Alfred](https://oleb.net/blog/2023/alfred-swift-evolution/) + +[@zoeGuo](https://github.com/zoeGuo): [Swift Evolution](https://www.swift.org/swift-evolution/) 记录了 Swift 主要或者次要版本的目标以及开发者对 Swift 的更改建议,还记录了这些想法是如何被提出、讨论、审查,并最终被接受到即将发布的版本中的。阅读 Swift Evolution proposals 可能在我们理解、使用 Swift 时起到关键性作用。那么 [Alfred](https://github.com/attaswift/alfred-swift-evolution) 就是一个能够帮助我们快速查找 Swift Evolution proposals 的工具,可以使用关键字或者 proposal id 搜索快速获取到对应文档的连接和相关 proposal 的状态等。之前已经用过的读者也可以去更新最新的 [v2.1.0](https://github.com/attaswift/alfred-swift-evolution/releases/tag/v2.1.0) 版本获得更好的体验。 + + +## 代码 + +### [buildbuddy-io / rules_xcodeproj](https://github.com/buildbuddy-io/rules_xcodeproj) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这个存储库包含了 Bazel 的规则,可以用来从工作空间中的目标生成 Xcode 项目。它包含了全面的 Bazel 规则支持、需要最少的配置等诸多特性,目前已有多个项目使用 rules_xcodeproj,可以根据[使用指南](https://github.com/buildbuddy-io/rules_xcodeproj/blob/main/docs/usage.md)进行构建。 + + +## 摸鱼周报 + +[@摸鱼周报 #86](https://mp.weixin.qq.com/s/y1_V0WKfdwsUL2WjP2zPyA):第 86 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 公布 iOS 16 的普及率已达 81% +* 内容推荐:继续推荐近期的一些优秀博文,涵盖 Swift 混编 Module、App Store 价格新政、内存优化、Xcode 命令行参数和构建配置等方面的内容 +* 摸一下鱼:一些新的基于 ChatGPT API 的工具如雨后春笋般产生,产品形态有这几个:移动端、watch 端、浏览器插件、网站等 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#237-2023.03.20.md b/Reports/2023/#237-2023.03.20.md new file mode 100644 index 000000000..ec4e91fde --- /dev/null +++ b/Reports/2023/#237-2023.03.20.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #237 | 2023-03-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [How to make an interactive picker for a Swift command-line tool](https://www.polpiella.dev/how-to-make-an-interactive-picker-for-a-swift-command-line-tool/) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 相较于 Javascript 等语言,处理用户输入的库总是不足,本文主要介绍了作者受 Javascript 工具 Nate Moore 的 clack 启发,如何为 Swift 命令行工具制作交互式选择器工具的思路和过程,另外作者将继续记录迁移该工具的过程,为有意向向 Swift 命令行增加更多能力的同学提供参考。 + +### 🐎 [淘宝 widget 链路方案总结](https://mp.weixin.qq.com/s/ZSt--YspkI4GHqbGCasvLQ) + +[@Damien](https://github.com/ZengyiMa):widget 是 Apple 推出的小组件功能,其意在希望 App 能一目了然地显示重要的内容,让用户可以快速访问你的 App 以获取更多详情,本文来自淘宝技术团队,阐述了从静态 widget -> 动态 widget -> 用户自定义布局完整的一套生态的演进过程,和各阶段的思考。 + +### [手工打造 HTML 解析器的那些事](https://medium.com/zrealm-ios-dev/%E6%89%8B%E5%B7%A5%E6%89%93%E9%80%A0-html-%E8%A7%A3%E6%9E%90%E5%99%A8%E7%9A%84%E9%82%A3%E4%BA%9B%E4%BA%8B-2724f02f6e7) + +[@红纸](https://github.com/nianran):ZMarkupParser 是作者开发的 HTML 转 NSAttributedString 仓库。本篇介绍了其实现过程,其中包括代码解析、语法标准化、转换抽象树、MarkupComponent 转换、解析 MarkupSyle、转换 NSAttributedString 等。文章提供了详细的代码实现和实例演示,对于 HTML 解析器实现由兴趣的读者来说,该篇文章可以作为入门参考资料。 + +> 推荐人:[ZhgChgLi](https://github.com/zhgchgli0718) + +### 🐕 [What's new in Swift 5.8](https://www.hackingwithswift.com/articles/256/whats-new-in-swift-5-8) + +[@zoeGuo](https://github.com/zoeGuo):文章对 Swift 5.8 更新的每个 proposal 分别做了简单解释和介绍。小编选出几个比较感兴趣的做了简单总结: +- SE-0373 Lift all limitations on variables in result builders:取消结果生成器中对变量的所有限制。 +- SE-0376 Function Back Deployment:增加了一个新的 @backDeployed 属性,一定条件下可以在旧版本的框架上使用新的 api。 +- SE-0365 Allow implicit self for weak self captures, after self is unwrapped:weak self 在 unwrapped 的情况下可以被捕获为隐式调用的 self,那这种情况下我们就可以将闭包中的 self 删除了。 +- SE-0274 Concise magic file names:看起来是只简化了文件名,但其实对于 Swift 编译器产生的二进制文件大小影响不容忽视,作者在这里建议大家仔细阅读 Swift Evolution 关于这一变化的描述。 +- SE-0375 Opening existential arguments to optional parameters :Swift 5.7 开始允许我们使用协议调用泛型函数,但只能使用不可选入参,在 Swift 5.8 中支持了可选入参。 + +文章中有代码示例以及更详细的说明,还提到一些其他的更新内容,有兴趣的读者可以阅读原文了解更多。 + +### 🐢 [All about LeakSanitizer](https://maskray.me/blog/2023-02-12-all-about-leak-sanitizer) + +[@老峰](https://github.com/gesantung):LeakSanitizer (LSan) 是一种内存泄漏检测器,它拦截内存分配函数,默认情况下在退出时检测内存泄漏。本文介绍了其用法:Standalone (-fsanitize=leak)、AddressSanitizer (-fsanitize=address)、AddressSanitizer (-fsanitize=address),实现原理概述,运行时选项,漏报,STW 以及其他类似工具等内容。 + +### 🐕 [网易云音乐开源全链路埋点方案-曙光埋点(dawn)](https://mp.weixin.qq.com/s/XRy4ajwAHGjOai7qERYjyw) + +[@JonyFang](https://github.com/jonyfang):曙光埋点是一套全链路埋点方案,从埋点设计、到客户端三端(iOS、Android、H5)开发、以及埋点校验 & 稽查、再到埋点数据使用,目前已经广泛应用于云音乐各个主要 APP,它集自动化埋点与全链路追踪等特点于一身,解决了传统埋点的痛点,兼顾了开发效率与埋点数据的高精度特点。好在是开源的,感兴趣的开发者可以通过源码细剖下实现细节。 + +### 🐕 [iOS 云音乐 APM 性能监控实践](https://mp.weixin.qq.com/s/nGLgQfq8k3pzxUaTZa8uNQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文详细介绍了云音乐 iOS APM 的实战经验,展现了较多细节与思考。 + +- **堆栈聚合** +- **监控** +- **CPU 高消耗** +- **Jank 卡顿** +- **ANR 卡死** +- **内存异常** + +### 🐕 [关于 App Store 苹果商店价格的那些事(历上最全版)](https://juejin.cn/post/7205562168358895671) + +@[ChengzhiHuang](https://github.com/ChengzhiHuang):本文内容详实,通过 App Store 价格的历史 、App 本地化的价格和购买限制、App Store 调价的影响和应对方案 三个方面来对苹果的定价策略等进行了阐述,十分推荐一看。 + +## 摸鱼周报 + +[@摸鱼周报 #87](https://mp.weixin.qq.com/s/TwugmMEiGoFKYQY9euhg6Q):第 87 期摸鱼周报,一起来看下本期概要: + +* 本期话题:App Store 的定价机制升级扩展;四位女性开发者与 App Store 的故事 +* 内容推荐:推荐近期的一些优秀博文,涵盖结构化并发、开发者故事、开发经验分享、Swift Builtin 函数等方面的内容 +* 摸一下鱼:Planning for AGI;GPT4 发布;stable-diffusion-webui 尝试;一个 Alfred 插件 AJTools;苹果新版定价解读 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#238-2023.03.27.md b/Reports/2023/#238-2023.03.27.md new file mode 100644 index 000000000..287459b88 --- /dev/null +++ b/Reports/2023/#238-2023.03.27.md @@ -0,0 +1,124 @@ +# 老司机 iOS 周报 #238 | 2023-03-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [使用 Xcode 14.1 提交的截止日期即将到来](https://developer.apple.com/ios/submit/) + +在 2023 年 4 月之后,所有新提交的 App 都将必须使用 Xcode 14.1 及之后的版本进行提交,还未迁移的同学需要加快进度啦。近期如果还在用老版本 Xcode 提交构建版本的同学应该也已经收到了 ITMS-90725: SDK Verison Issue 的警告。 + +## 文章 + +### 🌟 🐕 [bilibili-AVIF 图片格式落地](https://mp.weixin.qq.com/s/4HaVDdSCPgsRpT8HhWRsZA) + +[@JonyFang](https://github.com/jonyfang):在如今越来越看重体验的大环境下,对图片库的要求也日益攀升。从成本的角度来看,使用 AVIF 格式可以节省大量的网络带宽和存储空间,减少网站加载时间,并且可以改善用户体验,进而提高网站的效率和收益,从而节约大量的费用。本文介绍了 AVIF 图片格式在 bilibili 的落地,内容大纲: + +1. AVIF 图片格式研究 + - 图片格式编解码研究 + - AVIF 在 B 站落地的调研 +2. 分端实现 + - 服务端架构 + - Web 端实现 + - 移动端处理(解码器选择、请求策略、监控及降级策略、双端踩过的坑及怎么爬出来的) +3. 业务落地 + - Web 端 + - 移动端 +4. 数据监控 + - 服务端监控 + - 移动端监控 + - 带宽收益 +5. 推广过程中遇到的问题 + - 在线资源池容量 + - 负载不均导致利用率低 + - 研发资源不足问题 +6. 展望 & QA + +### 🌟 🐕 [Flutter Dart:泛型的协变与逆变](https://mp.weixin.qq.com/s/Vyl51PtpBQ_lCZR_uUMgZg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文对 Dart 范型体系做了详尽的讲解,深入浅出;每个讲解都有详尽的代码示例,对于不熟悉范型和不熟悉 Dart 范型体系的同学来说,是一个不错的学习资料,小编强烈推荐. + +### 🐎 [Keyboard shortcuts for Export Unmodified Original in Photos for Mac](https://oleb.net/blog/2023/photos-keyboard-shortcuts/) + +[@Cooper Chen](https://github.com/cjlcooper):本文针对 macOS 系统上的照片应用程序没有为“导出未修改的原始照片”命令提供键盘快捷键的情况,通过使用 shell 脚本的方式,可以为最多 20 个选定项目指定 Ctrl+Opt+Cmd+E 快捷键组合的方式来来导出未修改的原始文件。这为 Mac 桌面开发者提供了一些快捷键维护的思路,可以作为一些借鉴和参考。 + +### 🐎 [Wrapping functions in structs](https://paul-samuels.com/blog/2023/03/18/wrapping-functions-in-structs/) + +[@zvving](https://github.com/zvving):本文探讨了在特定场景下将函数包装到结构体中的合理性: + +1. 避免误传错误函数:使用结构体可以减少将错误函数传入的可能性,因为现在需要传递一个具体的类型。 +2. 提供命名空间:将函数包装到结构体中可以为其提供一个命名空间,便于组织代码。 +3. 提高代码可读性:使用结构体可以为函数参数添加标签,从而使函数调用更清晰易懂。 + +虽然将函数包装到结构体中并非在所有情况下都适用,但是它确实为开发者提供了一个有用的编程技巧,灵活选用可以提高代码的可维护性和可读性。 + +### 🐢 [苹果内购录:关于新定价规则的理解与思考](https://mp.weixin.qq.com/s/ZQlBFHuRoDYmYpMfgnsp2Q): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):2023 年 3 月,苹果发布了定价上的新能力 , 包括支持设定 App / IAP 所在区域及全球价格平衡、支持某地区自定义价格及禁止销售等能力。这些新能力给予了我们在定价上更多操作自由和风控能力,但同时新能力也给予了我们更多需要关注的点。对于普通开发者而言,后续需要做的主要是调整 App / IAP 基准地区。而对于中大型团队而言,除了更改基准地区,还可能涉及到风控策略、App Store Connect API 升级、监控工具链的升级等更多方面考量。想了解更多信息可详细阅读本文。 + +### 🐕 [Handling status bar color scheme and visibility in SwiftUI](https://danielsaidi.com/blog/2023/03/14/handling-status-bar-color-scheme-and-visibility-in-swiftui) +[@AidenRao](https://weibo.com/AidenRao):本文介绍了如何在 SwiftUI 中处理状态栏的颜色和可见性。作者开源了一个名为 ScrollKit 的开源库,该库提供了一些滚动视图包装器,使处理偏移跟踪、粘性头部等变得容易。作者还介绍了如何使用 .statusBarHidden() 视图修饰符来隐藏状态栏,并创建了一个 ObservableObject 来管理状态栏的可见性状态。最后,作者提供了一个自定义的视图修饰符,使状态栏的可见性自动更新。 + +### 🐎 [Removing Search Web from a context menu](https://vicegax.substack.com/p/removing-search-web-from-a-context) + +[@zoeGuo](https://github.com/zoeGuo):选中 UITextView 或者 WKWebView 中的文案时,会弹出一个 UIMenu,我们叫他 context menu。笔者遇到的问题是:不想要 menu 中的 Search Web 实现,因为这个默认实现仅支持了在 Safari 中搜索,用户如果在使用其他的浏览器作为默认浏览器,那么这个功能就不能使用了。解决方法是:重写 UIMenu 的 replacingChildren(_:) 方法,阻止其他的 item 被 Search Web 替换,之后再加入自定义实现的 item。文章中附有详细实现代码,有兴趣的读者可以进原文仔细阅读~ + +### 🐕 [为啥我的代码库那么大?聊聊 Git 使用坏习惯](https://mp.weixin.qq.com/s/6sC8evIQ7AZBWwJFRi6mww) + +[@Barney](https://github.com/BarneyZhaoooo):本文非常接地气的剖析了代码库越来越大的原因以及 Git 使用上的坏习惯,深入浅出,富有代表意义。 + +- 代码库变大的真实场景分析 +- Git 结构详解 +- 最佳实践 + +### [JVMTI 在手淘 Profiler 中的应用](https://mp.weixin.qq.com/s/_J8KaXmMy0yJ8vv5fiVLSQ) + +[@Crazy](https://github.com/jiyan135960):本文介绍了使用 JVMTI 监控线上版本状态的方法。作者通过修改 JDWP 和 Runtime 文件,介绍了如何绕过 JVMTI 只能在 Debug 模式下运行的限制,并提供了一些处理受限版本的方法。此外,本文还介绍了手淘封装的 TBProfiler 工具,它主要可以完成以下监控任务: + +- 运行监控:包括方法调用监控、线程和类监控、异常捕获以及主线程锁监控。 +- 内存监控 +- 内存 Dump:包括对象实例信息、JVMTI 生成的 Hprof 和 Mini Hprof。 + +从手淘使用的功能可以看出,JVMTI 提供的能力非常强大而且实用。当日志提供的信息不足以支撑我们分析线上问题时,JVMTI 可以让我们更接近 Runtime,获取更多运行时信息。因此,本文非常适合有线上监控需求的同学仔细阅读。 + + +## 代码 + +### [gptcommit](https://github.com/zurawiki/gptcommit) + +[@老驴](https://weibo.com/u/6090610445):最近几个月,是 AI 的集中爆发期。按照 NVIDIA 老黄的说法, AI 已经正式进入到了多年未见的科技行业的 "iPhone Moment" 。各路人才也在 AI 的各类应用上发挥各种创意。 + +对于很多同学来说,如何写一个 commit 的信息一直是个老大难问题,要在尽可能短的句子中覆盖到代码修改的核心并不是一件容易的事情。 gptcommit 就是通过 GPT-3 来自动生成 commit 信息,解放大家的脑细胞。虽然用的模型不是最新的 GPT-4,但是思路上值得大家学习。 + +## 摸鱼周报 + +[@摸鱼周报 #88](https://mp.weixin.qq.com/s/ex3aHSPjKj9woxQwHyRzZA):第 88 期摸鱼周报来了,一起来看下本期概要吧: + +* 本期话题:Xcode 14.3 RC 版本发布 +* 内容推荐:推荐近期的一些优秀博文,涵盖 CreateML 使用、Runtime 探索、XCTest 性能测试等方面的内容 +* 摸一下鱼:集成 GPT-4 的 Cursor;Github 推出 CopilotX;AI 工具使用提效,Prompt 编写模式 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#239-2023.04.03.md b/Reports/2023/#239-2023.04.03.md new file mode 100644 index 000000000..0ea63431b --- /dev/null +++ b/Reports/2023/#239-2023.04.03.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #239 | 2023-04-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3 正式版发布](https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes) + +Xcode 14.3 的正式版来了,除了大家关心的 iOS 16.4 与 Swift 5.8,部分开发者可能在使用 new 创建对象时遇到 ``new is unavailable`` 的报错。遇到的话需要检查下对应对象的默认 init 方法是否被标注为了 NS_UNAVAILABLE ,如果是的话进行修改即可(之前版本不会强制报错)。因为 new 本身就等价于 alloc + init ,在 init 被禁用的前提下让 new 也在编译阶段报错能够更好地暴露问题。 + +## 新手推荐 + +### 🐎 [Xcode Tip: filter to show modified files only](https://www.jessesquires.com/blog/2023/03/22/xcode-tip-filter-modified-files/) + +[@Smallfly](https://github.com/iostalks):在大型 Xcode 工程中,定位已修改文件的效率会降低。这篇文章介绍了使用过滤器来查找最近修改过的文件,并提供了一些快捷键和技巧来更好的使用 Xcode,开发人员能够更加轻松地管理最近修改的代码文件,提高代码开发和维护效率。 + +## 文章 + +### 🐢 [Custom Actor Executors](https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md) + +[@JonyFang](https://github.com/jonyfang):Actor Executors 是 Swift 中用于处理 actor 模型的并发机制。传统的模型在处理大量并发请求时可能会遇到一些问题。Swift 引入了自定义 actor executors,允许开发人员创建自己的 actor executors 对象,更好地管理并发操作。开发人员可以创建多个 actor executors 对象,并将它们分配给不同的线程或协程。此外,自定义 actor executors 还可以动态地创建或销毁 actor executors 对象,以适应应用程序的需求。 + +### [Working with percentages in SwiftUI layout](https://oleb.net/2023/swiftui-relative-size/) + +[@极速男孩](https://github.com/ztlyyznf001):本文介绍了如何在 SwiftUI 布局中使用百分比来控制子视图的大小。SwiftUI 的布局中通常不提供相对大小选项,例如“使此视图占其容器宽度的 50 %”。因此,我们可以在 Layout 协议之上构建自己的相对大小调整器。本文提供了一个名为 RelativeSizeLayout 的私有结构体,用于实现这一目的。同时,在 View 扩展中,我们添加了一个名为 relativeProposed 的公共 API,用于使用刚刚编写的布局。最后,文中还提供了实际使用的示例,展示了如何使用 relativeProposed 来控制聊天泡泡的大小,并说明了在使用相对大小时可能会遇到的一些问题。 + +### 🐎 [写给小白的 Midjourney 教程](https://mp.weixin.qq.com/s/nqnuqji0tK-4seuACtSjcw) + +[@Cooper Chen](https://github.com/cjlcooper):随着 AI 技术的持续大火,越来越多的机遇 AI 技术的产品或工具相继推出,而 Midjourney 应该是最近最火的 AI Image generator 了,作为一款可以用户通过文字描述,就可以绘制出图像的 AI 的应用,其生成的图像质量之高,令人叹为观止。然而由于 Midjourney 使用起来还有有一些门槛,所以本文写给完全没有任何编程基础的用户,你可以把本文当做一本 Midjourney 操作指南来使用。 + +### 🐎 [How the relative size modifier interacts with stack views](https://oleb.net/2023/swiftui-relative-size-in-stacks/) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇适合 SwiftUI 初学者的文章。笔者在 HStacks 中使用 .relativeProposed 和 .layoutPriority 对比几种情况下的视图的尺寸,分析出 HStacks 和 VStacks 在使用相对大小时视图尺寸计算的规则,得出结论:HStacks 和 VStacks 并没有将相对大小的修饰先整体计算出一组约束,而是根据子视图优先级的顺序,挨个计算子视图符合的尺寸,排在最后的视图的尺寸表现取决于最后剩余的空间大小。 + +### 🐎 [一个用在 Swift 中的模块管理框架](https://mp.weixin.qq.com/s/aFM_4OqDYcXPRIdF7x_41w) + +[@kemchenj](https://kemchenj.github.io/):在 OC 里,我们一般是可以通过 `__attribute((used, section("__DATA,"#sectname" ")))` 这种编译器提供的修饰符来将模块信息存到 Mach-O 的 section 去,等到运行时,在 `+load` 或其他时机取出进行注册,这种类似于自动注册的方式自然是很方便。 + +但是在 Swift 中,上面这种方式自然是不行的,本文作者封装了一套 Module Manager,通过扫描 Mach-O 中的 `__objc_classlist` 节拿到所有的 class,继而过滤出符合模块要求的 class 进行后续操作。 + +另外 Swift 官方在几个月前也提出过[一个草案](https://forums.swift.org/t/pitch-custom-metadata-attributes/62016)提供自定义注解 API,让我们可以通过类型安全的方式提供元数据,并且可以在运行时进行读取和操作,感兴趣的同学也可以查看。 + +### 🐎 [Flutter 小技巧之霓虹灯文本的「故障」效果的实现](https://mp.weixin.qq.com/s/VAF5IFsVvZMNikilckUcZg) + +[@Crazy](https://github.com/jiyan135960):这是一篇优秀的 Flutter 实践文章,介绍了如何制作霓虹灯特效。文章简短明了,首先讲解了如何使用 TextStyle 中的 Shadow 的 blurRadius 属性来制作发光文字特效,接着引出了利用 BackdropFilter 的 ImageFilter 制作发光图片的方法。之后,作者利用 ClipPath 和 Polygon 实现了文字撕裂效果,并提供了完整的效果对比。最后,作者通过变形闪动的技巧增强了撕裂效果的真实感。整体的代码实现简单易懂,没有任何难点。文章虽然简短,但在效果上表现出色,适合需要制作霓虹灯文本效果的同学参考。 + +### [降低网络延迟:让你的 App 变得更快](https://mp.weixin.qq.com/s/XoAm9OaXtzT3jE4LSBSpqw) + +[@dustturtle](https://github.com/dustturtle):如何打造更快的 App ,对于开发者来说是一个永恒的课题;原因无他,因为对于一个以网络交互为核心的现代应用来说,这是用户体验的核心所在:它意味着更流畅的音视频播放、低延迟的网络会议、快速加载的页面和资源、更少的游戏等待时间等等。2021 年,苹果通过 Session 10239: Reduce network delays for your app[2] 给大家分享了许多网络延迟优化相关的理论知识,并提出了 RPM (每分钟往返次数) 的概念和基于此概念的测试工具;而今年,苹果在去年的基础上,又为我们带来了这一篇实战性质颇强的分享,从客户端侧、服务端侧、网络协议侧三个方面入手提供一系列行之有效的建议,帮助开发者们更好的分析和改善应用的网络延迟状况,从而打造响应更加快捷的 App ,带来更好的用户体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#240-2023.04.10.md b/Reports/2023/#240-2023.04.10.md new file mode 100644 index 000000000..ee5c8764e --- /dev/null +++ b/Reports/2023/#240-2023.04.10.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #240 | 2023-04-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [SwiftUI 技术沙龙(上海站)](https://developer.apple.com/events/view/6DF4375B6R/dashboard) + +本次活动将在上海线下举办,在活动中你可以学习 SwiftUI 并与 SwiftUI 开发者社区建立联系。SwiftUI 借助 Swift 的强大功能,能帮助你用极少的代码在所有的 Apple 平台上构建外观精美的 App。我们将分享 SwiftUI 理念的核心原则,还会邀请多位社区内活跃开发者和大家分享 SwiftUI 实践经验。现在就加入我们,共同组建 SwiftUI 开发者社区吧! + +### [线上讲座:在你的 iPad App 中支持外接键盘](https://developer.apple.com/events/view/AS7D4BR8Y6/dashboard) + +通过熟悉和更具触感的体验,外接键盘可以使你的 iPad App 更易于使用,帮助用户更快地完成各种操作。此次课程中,你将学习如何在你的 iPad App 中支持键盘快捷键以及主菜单系统,并且探索如何使用外接键盘让你的 App 更容易导航和访问。 + +## 文章 + +### 🐢 [Overview of C++23 Features](https://mp.weixin.qq.com/s/4PKnoEDmYppYeJoh7oUVWg) + +[@xiaofei86](https://github.com/xiaofei86):从 C++11 开始,标准委员会每 3 年都会推出新的 C++ 版本。今年,C++23 也如期完成。相比 C++20 引入模块、协程、指定构造器等重要特性,C++23 主要在于“完善”。本文介绍了 C++23 25 个主要特性的基本用法,也会深入解析部分特性的原理。感兴趣的同学可以阅读原文了解。 + +### 🐕 [Using Critical Alerts in iOS applications - Igor Kulman](https://blog.kulman.sk/using-critical-alerts-on-ios/) + +[@Barney](https://github.com/BarneyZhaoooo):本文简单介绍了 2018 年 iOS 12 发布的 **Critical Alerts** 的使用方式,我们比较少接触到它是因为需要特别向 Apple 申请才能使用。 + +### 🐎 [Sharing content in SwiftUI](https://swiftwithmajid.com/2023/03/28/sharing-content-in-swiftui/) + +[@Cooper Chen](https://github.com/cjlcooper):本文作者介绍了如何通过 SwiftUI 中引入的 CoreTransferable 框架以声明的方式来共享和导出应用程序中的内容,其中着重对 ShareLink 视图进行了说明,通过 ShareLink 的实例,可以将指定的内容导出到一个普通的字符串中,同时也支持如图像、二进制数据或任何其他自定义格式的数据共享,对相关场景下开发的同学有很好的参考价值。 + +### 🐕 [Block 内调用 super 引发的循环引用](https://juejin.cn/post/7219189831775420472) + +[@JonyFang](https://github.com/jonyfang):介绍了两种较为少见的 Block 循环引用,并提供了解决方法。主要内容: + +1. 宏的替换在 Preprocessed 阶段,super 的变更在 compile 阶段,因此对 self 进行 weak/strong dance 并解决不了 super 导致的循环引用问题; +2. 同时通过 RewriteObjc 与 Disassembly 的方法从底层原理上分析了 super 与 Block 调用的本质,辅以内存实际情况与示意图方便加深理解。穿插了 objc_msgSend Stub 相关的知识; +3. 验证了在 Block 中调用 super 时,RewriteObjc 生成代码的一个 bug; + +### 🐕 [Network Extension Debugging on macOS](https://www.avanderlee.com/debugging/network-extension-debugging-macos/) + +[@nianran](https://github.com/nianran):文章简介绍了在 macOS 上调试网络扩展的方法。作者从项目设置到调试步骤进行了详细说明,特别是如何在 Xcode 中附加 Network Extension 进程,以及如何使用系统控制台查看相关日志。对于遇到网络扩展调试问题的开发者非常有参考意义 ~ + + +### 🐎 [App Store 新定价机制 - 2023 年最全版](https://zhuanlan.zhihu.com/p/615969005) + +[@J_Knight_](https://github.com/knightsj):2023 年 3 月 9 日苹果正式上线新的 App Store 的定价机制。本文通过自定义价格、全球均衡价格、基准国家和地区和地区性定价方案这几个方面详细介绍了新定价机制的配置和规则。新的 App Store 的定价机制的优点: + +- 为了给开发者提供更多的定价选择和灵活性,可以根据不同的国家或地区、市场需求和消费能力来设置合适的价格。 +- 为了让开发者更容易管理汇率波动、税率变化等因素,避免造成收入损失或不公平。 +- 为了让用户有更多的选择空间和体验,增加他们对 App 的兴趣和满意度。 + +### 🐎 [Group and sort Swift collections like a pro](https://danielsaidi.com/blog/2023/04/01/group-and-sort-swift-collections-like-a-pro) +[@水水](https://www.xuyanlan.com/):本文介绍了如何用 Swift 进行专业的排序和分组,Swift 中提供了对集合进行分组和排序的强大方法: +- 使用 Dictionary(grouping:by:) 按名字进行分组 +- 分组后可以使用 .map 和 .sorted 进行排序 +- 实现 sorted 方法则可以进行自定义排序 +对集合的一些具体使用方法感兴趣的读者可以参考参考文本 ~ + +## 摸鱼周报 + +[@摸鱼周报 #89](https://mp.weixin.qq.com/s/3B_R0j8dpXpR5G9bCRsyXw):第 89 期摸鱼周报来了,一起看下本期概要吧: + +* 本期话题:WWDC 23 全球开发者大会日期公布 +* 内容推荐:推荐近期的一些优秀博文,涵盖:通过 ReplayKit 录制屏幕、在 SwiftUI 中使用相对比例进行布局、保护小组件中的用户隐私等方面的内容 +* 摸一下鱼:AGI 元年;微软对于 GPT-4 的研究论文;可以自定义数据源的 ChatGPT 插件;国产开源模型 ChatGLM + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#241-2023.04.17.md b/Reports/2023/#241-2023.04.17.md new file mode 100644 index 000000000..0ff53c26e --- /dev/null +++ b/Reports/2023/#241-2023.04.17.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #241 | 2023-04-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Xcode 14.3: App built is not able to open on iOS 13.6](https://developer.apple.com/forums/thread/727680?login=true) + +苹果论坛有开发者反馈 Xcode 14.3 打出的包无法在 iOS 13 的部分系统上启动,报错在 [dyld3/Loading.cpp](https://opensource.apple.com/source/dyld/dyld-750.5/dyld3/Loading.cpp) 中:``Termination Description: DYLD, Assertion failed: (gotLocation), function applyFixupsToImage_block_invoke_3``,对于还需要兼容 iOS 13 的同学,此次 Xcode 的升级可以再稍微观望一段时间。 + +## 文章 + +### 🌟 🐎 [一些关于开发的杂谈话题 - 测试](https://onevcat.com/2023/04/dev-talk-testing/) + +[@JonyFang](https://github.com/jonyfang): 介绍了开发人员如何在编写代码时进行测试,以及测试对于软件质量和开发速度的重要性。首先解释了测试的概念和种类,然后详细讨论了单元测试和集成测试的区别以及如何运用它们来确保代码质量。接着,强调了测试的益处,例如避免代码回归、提高代码可读性和可维护性等。最后,分享了一些实用的测试工具和技巧,包括测试覆盖率、断言、模拟和持续集成等。整篇文章对于想要提高代码质量的开发人员来说是一篇很好的参考资料。整体内容结构: + +1. 为什么要写测试?你会给项目和代码写测试吗? + - 测试些什么 + - 不测试什么 +2. 测试的风格和测试框架 + - BDD, TDD 或者随心所欲? + - 关于 AI 在测试中的应用 + - Apple 平台的测试,XCTest 和其他框架 + - Unit Test、Feature Test 和 UI Test +3. 改善测试质量的方式 + - 注入、Mock 和 Stub + - 使用纯函数 + +### 🐕 [当我们说插件系统的时候,我们在说什么](https://mp.weixin.qq.com/s/mp4WL6Z2ESQTbK_B7ba8Fg) +[@kyo](https://github.com/KyoLi):本文其实属于前端的文章,文中所说的插件系统并非安卓的插件化,可以理解为类似于我们常说的组件化。当我们看到类似的名词,插件、组件、模块等等,他们都是对软件系统职责的划分,以达到降低工程复杂度,提高可维护性的目的。而我们常说的软件架构,其核心就是如何拆解、增加组件,所以,不要觉得这些名词很高深,其实都是系统架构本质要做的事情。 + +### 🐎 [macOS Network Metrics Using sysctl](https://milen.me/writings/macos-network-metrics-sysctl-net-rt-iflist2/): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 macOS 上如果观察系统的网络吞吐量,可以使用 sysctl() with NET_RT_IFLIST2:这提供了对 64 位指标的访问,它不会受到旧 API 的 32 位字段溢出的影响,获取的指标也不会受到截断的影响。 + +### 🐎 [iOS ReplayKit 与 屏幕录制](https://mp.weixin.qq.com/s/NbT1BE0CmYkyMXeVIekCpQ) + +[@Smallfly](https://github.com/iostalks):ReplayKit 是 iOS 系统提供的屏幕录制框架,随着系统的迭代,从最初只支持应用内录制到系统屏幕录制,再到 Loop Buffer 滚动剪辑,功能在不断地增加。本文介绍了云音乐 LOOK 直播录屏场景的实践,主要包括 Extension 和宿主 App 功能,以及两者之间的通信。此外,还介绍了如何在录屏过程中保护用户隐私,以及解决 Extension 50 M 内存限制的挑战。 + +### 🐎 [【开源推荐】 macOS 上的 ProcMon:Red Canary Mac Monitor](https://mp.weixin.qq.com/s/16SQfbl7YuHjumkKXDXtyA) + +[@Cooper Chen](https://github.com/cjlcooper):熟悉 Window 桌面开发的开发者对于 SysInternals Suite 都不会陌生,这是一款用于研究漏洞挖掘还是红蓝对抗的工具软件,多年以来 macOS 一直鲜有与之能对标的软件,而今天介绍的是来自安全公司 Red Canary, Inc. 的 Red Canary Mac Monitor,功能上类似 Windows 的 SysMon,基于系统的 Endpoint Security 框架,可以记录文件读写、进程创建等事件,这为 Mac 开发同学有很好的参考价值。 + +### 🐎 [The Power Of Plist](https://redsweater.com/blog/2083/the-power-of-plist) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 plist 的一些功能,如控制产品应该在哪些操作系统上运行(对应的 key 是 LSMinimumSystemVersion),而且还允许开发人员为特定操作系统考虑应用程序的哪些架构(对应的 key 是 LSArchitecturePriority)。另外还介绍了 plist 嵌入到应用的二进制文件的机制。 + +### 🐎 [When Matched Geometry Effect Doesn't Work](https://chris.eidhof.nl/post/matched-geometry-effect/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何使用 SwiftUI 中的 matchedGeometryEffect,在不同视图之间进行转换时,使它们的位置、大小和形状都流畅过渡。 + +## 工具 + +### [OrbStack](https://orbstack.dev/) + +[@邦 Ben](https://weibo.com/linwenbang):OrbStack 是一个可以在 macOS 上快速运行 Docker 容器和 Linux 虚拟机的工具,资源占用率低,高带宽,速度快。它主要有两个作用:替代 Docker Desktop、替代 Linux 虚拟机。官网所示,数据对比 Docker Desktop 在启动速度,CPU,Network,Memory 都有显著的数据提升。有需要的同学可以尝试一下,目前免费。 + +- 详细见:https://orbstack.dev/ + +## 代码 + +### [lexical-ios](https://github.com/facebook/lexical-ios) +[@kyo](https://github.com/KyoLi):Meta 最近开源了一个富文本编辑器,该编辑器依然是采用 JS 的方案。相比于其他的富文本编辑器,lexical-ios 具有轻量、高可扩展性的优点,它将编辑器的 UI 面板、工具栏、以及 markdown 等能力封装为类似于组件的形式,方便调用者自由扩展。具体的使用方式可以参考官方的文档 [Lexical Documents](https://facebook.github.io/lexical-ios/documentation/lexical/)。 + +## 摸鱼周报 + +[@摸鱼周报 #90](https://mp.weixin.qq.com/s/Bx8N9HqMP5HE9mzy6l3QVA):第 90 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:4 月 25 日起必须使用 Xcode 14.1 构建提交 App +* 内容推荐:推荐近期的一些优秀博文,涵盖:自定义 Swift Toolchain、软件测试、AI 应用、Dark Sky 设计经验等方面的内容。 +* 摸一下鱼:面向任务的 GPT 项目 Auto-GPT;把 GPT 模型融于模拟角色;把 AI 融于设计流程;Xcode 版本的 Copilot 插件 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#242-2023.04.24.md b/Reports/2023/#242-2023.04.24.md new file mode 100644 index 000000000..8c47f45c3 --- /dev/null +++ b/Reports/2023/#242-2023.04.24.md @@ -0,0 +1,107 @@ +# 老司机 iOS 周报 #242 | 2023-04-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Enabling the Inspection of Web Content in Apps](https://webkit.org/blog/13936/enabling-the-inspection-of-web-content-in-apps/) + +WKWebView 与 JSContext 在 iOS 16.4 SDK 中新增了属性 ``isInspectable``,只有开启了这个属性才会允许检查 Web 的元素,并且这个属性可以在任意时间修改(不需要重启 APP 或者重新创建 Webview 实例)。对于需要调试 Webview 的同学们需要对这个属性进行适配(开启)之后才能像往常一样通过 Web Inspector 进行查看。 + +##  Developer - 设计开发加速器 + +### [挑战:让你的 App 更加无障碍 2023 年 5 月 10 日](https://developer.apple.com/events/view/7F793DZPF3/dashboard) + +在本次线上讲座中,你将了解如何通过 Apple 操作系统提供的无障碍功能、无障碍 API 和开发者工具,来为每一个人打造卓越的用户体验。 + +参加线上讲座的开发团队,可在讲座当天报名参与无障碍适配挑战活动,通过审核后我们将邀请你参加 5 月 18 日在上海设计与开发加速器举办的无障碍宣传日线下活动,在线下你将了解到更多无障碍开发技术,以及与其他开发者进行交流和互动。我们还将邀请使用无障碍功能的用户来分享他们的故事,了解 App 是如何赋能他们的日常生活;以及有经验的开发者来分享他们的工程实践,看如何在产品内部推进无障碍适配。你还可获得一对一咨询和深度辅导,获得针对你 App 的无障碍优化建议。 + +### [线上讲座:探索 Vision 框架](https://developer.apple.com/events/view/93396BVQ5Y/dashboard) + +Vision 框架支持人脸检测、文本检测、二维码检测、图像配准、特征追踪等一系列能力。探索如何通过 Vision 框架,在你的 App 内应用计算机视觉相关能力,了解一系列 API,用来在图片和视频上执行不同的任务。 + +## 文章 + +### [抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%](https://mp.weixin.qq.com/s/MT5MHhZIlyrhuVNM3Ckteg) + +[@kemchenj](https://kemchenj.github.io/):抖音基础技术团队在这篇文章里分享了一个很有趣的编译问题: + +1. Swift 和 OC 混合的模块里,Swift 自动生成的 xxxx-Swift.h 文件里会 import 所有直接和间接依赖的模块。(这种行为也被称为 re-export) +2. 所以依赖了这个混合代码的模块的 OC 模块,它的所有间接依赖都会变成直接依赖。 +3. 而对于编译器来说,当一个模块直接依赖的模块 API 发生变化时,它的编译缓存就会失效,需要重新进行编译。 + +由于上述的三点,底层库的 API 修改很容易触发大面积的编译缓存失效,并且由于上层模块的直接依赖变多,导致缓存失效的判断逻辑也会变得更加复杂,最终导致编译时间增长。 + +Swift 这么设计的原因主要是**为了兼容 C/OC 头文件的行为**,[在 Swift 的论坛里开发组也曾经解释过具体的细节](https://forums.swift.org/t/exported-and-fixing-import-visibility/9415/36)。 + +但实际代码里很少会依赖这个行为,抖音的技术团队就尝试定制 Toolchain,增加更多选项去限制这个行为的生效范围,从而**最终实现编译提速 60%**。 + +### [PC GWP-ASan 方案原理 | 堆破坏问题排查实践](https://mp.weixin.qq.com/s/xipHtjHPVlyFQ6W-1HfUQQ) + +[@xuyafei86](https://github.com/xiaofei86):众所周知,与内存访问相关的崩溃是最难分析的崩溃类型之一。对于这种崩溃,线上采集到的崩溃日志能提供的有效信息十分有限。因为堆破坏的时间往往在发生崩溃很早之前,等到发生崩溃时,上下文早已丢失,而从崩溃的位置回溯堆破坏的源头,是一件非常有挑战性的工作。 + +GWP-ASan 是 Google 主导开发的用于检测堆内存问题的调试工具。它基于经典的 Electric Fence Malloc 调试器原理,概率采样内存分配行为,抓取内存问题并生成上传崩溃报告。其可以检测 Use-after-free、Buffer-overflow 和 free-invalid-address 等内存访问相关的错误。 + +本文介绍了剪映专业版接入字节内部 APM-PC 平台 GWP-ASan 功能的实践,包含对监控原理说明和 5 个线上实例。感兴趣的同学可以阅读原文了解。 + +### 🐎 [What I Learned Writing My Own CloudKit Syncing Library](https://ryanashcraft.com/what-i-learned-writing-my-own-cloudkit-sync-library/) + +[@Smallfly](https://github.com/iostalks):[CloudSyncSession](https://github.com/ryanashcraft/CloudSyncSession?ref=ryanashcraft.com) 是一个基于 CloudKit 框架的 Swift 库,旨在使编写支持同步和离线功能的应用程序更容易。作者通过一篇文章介绍了该库的开发背景,设计思路,以及使用姿势。 + +### 🐎 [Mastering Canvas in SwiftUI](https://swiftwithmajid.com/2023/04/11/mastering-canvas-in-swiftui/) + +[@享耳先森](https://github.com/iblacksun):SwiftUI 中,绘制图形可以使用高级的 `ShapAPI`,也可以使用 `Canvas` 直接绘制。本文介绍 `Canvas` 的基本用法,也介绍了如何使用 `Canvas` 绘制文本、图片,甚至给 `Canvas` 添加动画。 + +### 🐎 [3 mistakes to avoid with async / await](https://www.swiftwithvincent.com/blog/three-mistakes-to-avoid-with-async-await-in-swift) + +[@Cooper Chen](https://github.com/cjlcooper):本文作者在 Swift 中使用 async/await 要避免的 3 个错误,其中包括: +- 尽可能的不同时运行代码 +- 不能正确理解 Task 自动捕获 self 的原理 +- 在不需要的时候使用了 Task.detached + +### 🐕 [淘宝 iOS 拍立淘微距能力探索与实现](https://mp.weixin.qq.com/s/4tG4BTx54rXIdHbXKqI_cQ) + +[@EyreFree](https://github.com/EyreFree):在最近两年苹果发布的 iPhone13 Pro Max 和 iPhone14 Pro Max 系列的手机上,如果使用三方主流 App 进行近距离对焦,会产生画面模糊的问题。为了优化用户体验,拍立淘 iOS 端开发团队进行了摄像头切换(微距)问题的分析和解决。本文从原理开始分析,通过层层拆解,把「微距实现」这个命题划分成为三个主要的解决目标:变焦系数、光照水平、焦点位置的确定。并围绕链路实现、性能、适配三个层面进行可行性验证,完成微距能力的落地。建议正在研究相关问题的同学阅读。 + +### 🐎 [Using DWARF to find call sites of inline functions](https://margiolis.net/w/dwarf_inline/) + +[@Damien](https://github.com/ZengyiMa):DWARF 是一种调试信息文件格式,被许多编译器和调试器用来支持源代码级调试。它解决了一些程序性语言的要求,如 C、C++ 和 Fortran,并被设计为可扩展到其他语言。DWARF 是架构独立的,适用于任何处理器或操作系统。如果你对使用 DWARF 来查找内联函数的调用点有需要,不妨阅读下本文,这对你或许有很大的帮助。 + +### 🐎 [Reducing iOS app size using linker and why_load](https://asifmohd.github.io/ios/2023/03/30/reducing-ios-app-size-using-linker.html) + +[@Leo](https://github.com/LeoMobileDeveloper):why_load 是 Apple LD 提供的一个链接选项,通过这个选项我们可以了解到一个 Symbol 在链接形成最终产物的时候为什么被保留了下来。文中介绍了如何利用这个选项,来减少我们 App Extension 产物中保留的符号,进而优化包体积。当然,类似的方法也可以用于主二进制,不过对于主二进制的优化要更加的慎重,避免引入新的问题。 + + +## 摸鱼周报 + +[@摸鱼周报 #91](https://mp.weixin.qq.com/s/93YLa8ankkEVcp4pop2A6A):第 91 期摸鱼周报,一起来看下本期概要: + +* 本期话题:线上讲座:探索 Vision 框架;5 月 9 号,App Store 定价以美国价格为基准进行更新 +* 内容推荐:推荐近期的一些优秀博文,涵盖:App Clip、CloudKit、Swift ABI 稳定性等方面的内容 +* 摸一下鱼:建了一个交流 AGI 知识的社群;在 Vercel 上部署 ChatGPT 的聊天能力;一个把 AI 拟人化的网站;AI Talk 基于 GPT4 让马斯克和乔布斯进行对话;基于 Apple 健康数据分析的 App HealthGPT +* 岗位招聘:蔚来汽车 App iOS 研发 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#243-2023.05.08.md b/Reports/2023/#243-2023.05.08.md new file mode 100644 index 000000000..435b82025 --- /dev/null +++ b/Reports/2023/#243-2023.05.08.md @@ -0,0 +1,123 @@ +# 老司机 iOS 周报 #243 | 2023-05-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Foundation Package 预览版发布](https://www.swift.org/blog/foundation-preview-now-available/) + +[@kemchenj](https://kemchenj.github.io/):去年周报曾经提到 [Foundation 将使用 Swift 重新实现](https://github.com/SwiftOldDriver/iOS-Weekly/blob/9f5f9487a469fd33d0c39f3434107f77987946c0/Reports/2022/%23227-2022.12.12.md?plain=1#L10),近日 Swift 开发团队发布了预览版,日期相关的功能性能对比当前版本的 Foundation 提升 20%-150%,而 JSONDecoder/JSONEncoder 的性能提升甚至达到 200%-500%。 + +2023 年上半年会继续集中在核心 API 的实现和测试的补齐,下半年则会集中在导入现有的 Foundation API,例如 URL/Bundle 等,并且过程中也允许通过提案加入小部份全新的 API。 + +一句话总结,Swift is the new Foundation。 + +## 文章 + +### 🐕 [心遇 iOS 端会话页性能优化 — ReactiveObjC 实践篇](https://mp.weixin.qq.com/s/_nYM42vgSEqlJuoMlPdCUw) + +[@享耳先森](https://github.com/iblacksun):`ReactiveObjC` 是 `Objective-C` 下的响应式编程框架,可以将各种通知、代理等转换成事件流进行分发,`Swift` 下有 `RxSwift` 及 `Combine`。本文介绍了「心遇」团队如何使用 `ReactiveObjC` 解决项目中逻辑分散的问题。 + +> Tips: 开发者们在上手 `RAC` 类库前建议先评估学习曲线及维护、调试问题。 + +### 🐕 [Notifications: why less is more — how Facebook has been increasing both user satisfaction and app usage by sending only a few notifications](https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d): + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Facebook 的通知数据科学团队的成员,针对用户对通知的感受进行了调查。最终的结论我相信 Facebook 以外的其他数据科学团队也可以从中受益。他们发现,在更少的通知体验中,用户会更多的使用 Facebook,用户行为的转变需要很长时间,更少的干扰会导致更高的自然使用率,从高提高用户满意度和程序使用率。需要注意的是,长期试验可能会显示出与短期实验不同的结果,甚至结果截然相反,因为人们需要时间来适应变化。 + + +### 🐕 [十年“屎山”终重构,但 QQ 选用了微软 Teams 放弃的 Electron](https://mp.weixin.qq.com/s/f6M1w2kX0jhYgasIWwsawg): + +[@Damien](https://github.com/ZengyiMa):本文不是技术文章,主要介绍了 QQ 全新的 NT 技术架构,QQ 凭借 NT 架构实现了 QQ 多平台架构的统一,而 QQ NT 技术的一个重点就是使用 Electron 作为新版 QQ 桌面端 UI 跨平台解决方案。有意思的是,在同一时刻,微软 Teams 正在放弃的 Electron,对跨平台开发感兴趣的同学不妨一读。 + +### 🐎 [MainActor usage in Swift explained to dispatch to the main thread](https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/) + +[@J_Knight_](https://github.com/knightsj):本文介绍了 MainActor 的概念和使用方法。首先介绍了它的概念:它是 Swift 5.5 中引入的一个新属性,它提供一个在主线程上执行任务的执行器,使用 ``@MainActor`` 属性将帮助你确保你的 UI 总是在主线程上更新。MainActor 是一个全局唯一的 Actor,他在主线程上执行他的任务。它应该被用于属性、方法、实例和闭包,以在主线程上执行任务。然后结合代码示例介绍了它在不同场景下的使用方法。 + + +### 🐕 [开源图像模型 Stable Diffusion 入门手册](https://mp.weixin.qq.com/s/8czNX-pXyOeFDFhs2fo7HA) + +[@老驴](https://weibo.com/u/6090610445):最近大热的除了 ChatGPT 这样的大语言模型之外,Stable Diffusion 这样的图像模型也受到了广泛关注。而且因为图像模型相对来说比较容易在自己的机器上跑,所以很多同学都跃跃欲试,想要部署在自己的机器上来体验效果。 这篇来自腾讯技术的文章是个很不错的给初学者的入门文章,从零开始带你一步一步部署图像模型。有兴趣的同学可以来学习一下。 + +### 🐎 [veImageX 演进之路:iOS 高性能图片加载 SDK](https://mp.weixin.qq.com/s/JClQbL9D3PftGuw2H_KXXw) + +[@Smallfly](https://github.com/iostalks):本文主要介绍了 veImageX iOS 客户端图片加载 SDK,它的核心功能包括: + +- 网络加载:默认支持原生网络库与自研网络库,不仅做了一些网络相关优化,而且支持最新的网络协议 QUIC,也提供了精细粒度的网络监控; +- 图像解码:支持苹果原生图片格式,以及社区其它主流的图片格式解码,全系统支持 HEIF 格式; +- 图片处理与变换:图片加载完成后,除了对图片进行装饰,还支持超分,实现低分辨率传输,高分辨率显示; +- 日志上报:包含图片性能日志、用户感知日志、大图监控日志,配合工作台可以全方位监控图片各项指标。 + +除了基础的功能模块,该 SDK 还进行了一系列的性能和体验优化,提升图片加载体验,优雅控制内存,以及动图播放优化。目前该 SDK 以开放平台的方式提供收费服务。 + +### 🐕 [快手 Swift 历险记之 Clang Module 带来的“坑”](https://mp.weixin.qq.com/s/RarmJgRWiINE87feMAMaaA) + +[@老峰](https://github.com/Gesantung):本文主要介绍了快手接入 Swift 后开启 Clang Module 后所遇到的问题如编译错误、Module 编译慢、PCH 编译优化失效、Module 复用率低 & 过期导致编译失败等,以及对应的解决方案 Clang 关闭 Clang Module ,原理非常简单,主要是打破了接入 Swift 过程中的一些经验“误区”。 + +### 🐕 [Debug iOS app in Visual Studio Code](https://yrom.net/blog/2023/04/22/debug-ios-app-in-vscode/) + +[@JonyFang](https://github.com/jonyfang): 本篇主要介绍了在 VSCode 中调试 iOS app 的过程。主要内容结构: + +1. 使用 LLDB 远程调试程序,简述大概的原理。 +2. VSCode 调试 ios app 代码。必要的插件能力介绍及配置。 +3. 调试 XCTest。介绍了 vsc 的相关配置及原理。 +4. 调试带宿主 app 的 XCTest。通过反射或者 dlsym 直接调用 XCTestCore 等私有 Framework 的符号,创建 XCTestDriver 进而调用 XCTestCase。 + +通过本文,可以了解到 VSCode 如何自定义 tasks 和 launch configurations,跟着实践,也可以深入了解到 lldb 调试程序的原理。 + +### 🐕 [Yielding accessors in Swift](https://trycombine.com/posts/swift-read-modify-coroutines/) + +[@zoeGuo](https://github.com/zoeGuo):多任务协同在开发中会经常遇到,当多任务处理中遇到 copy-on-write types 和 dynamic properties 时,协同生成器就能起到很大的作用了。在 Swift 中协同生成器 _modify 和 _read 方法配合 yield 关键字,在多任务协同工作时体现出的显著性能优势,包括数据处理速度以及内存使用大小。文章详细举例验证了使用协同生成器后的性能提升,但 _modify 和 _read 两个方法还有 _ 标识,意味着还在 work-in-progress 的阶段,而 yield 关键字目前也只能在 nightly toolchains 中使用 , 期待尽快在 Swift 新版本中看到更新。 + +### 🐕 [链接器优化 : 相同代码折叠 ICF](https://zhuanlan.zhihu.com/p/484176002) + +[@AidenRao](https://weibo.com/AidenRao):ICF 是链接器的一项优化技术,在链接阶段把有相同实现的 C++ 方法合并链接到同一个地址。由于 C++ 模版会生成大量相同实现的方法,所以这个技术在 C++ 代码中有很好的安装包优化效果。 +相关阅读链接: +- [Safe ICF: Pointer Safe and Unwinding aware Identical Code Folding in the Gold Linker](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/36912.pdf) +- [LLD for Mach-O: The Journey](https://llvm.org/devmtg/2022-05/slides/2022EuroLLVM-LLD-for-Mach-O.pdf) + + +## 工具 + +### [ETTrace](https://github.com/emergeTools/ettrace) + +[@Leo](https://github.com/leomobiledeveloper):ETTrace 是 emergeTools 开源的用来分析代码耗时的工具。实现原理是在 App 内启动一个子线程定时获取主线程的函数堆栈,然后把这些堆栈生成 json 上传到网站以火焰图的方式供开发者分析。逻辑上这种方式比 Instrument 更精确,因为 iOS16 开始,dyld4 会进行预计算 protocol conformances 来优化启动耗时,但 Instrument 的实现方式是用 DYLD_INSERT_LIBRARIES,导致这个优化被禁用了。 + + +## 代码 + +### [Compose Multiplatform](https://github.com/JetBrains/compose-multiplatform/#readme) + +[@极速男孩](https://github.com/ztlyyznf001):Compose Multiplatform 是一个基于 Kotlin Multiplatform 的跨平台 UI 开发框架,旨在简化和统一 Android、iOS、桌面和 Web 应用程序的用户界面开发。它的核心概念源于 Jetpack Compose,这是 Google 推出的现代 Android UI 工具包,支持使用 Kotlin 编写声明式 UI 代码。在最近的 Alpha 版本中迎来了 iOS 的支持。 + +## 摸鱼周报 + +[@摸鱼周报 #92](https://mp.weixin.qq.com/s/AQaY2DA2h8S-XEYoQ0u7Ew):第 92 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Swift Foundation 预览版发布;App 无障碍功能线上讲座 +* 内容推荐:一些优秀博文,涵盖:Mirror API、网络可达性优化、SwiftLint 等方面的内容。 +* 摸一下鱼:最全 AIGC 工具集;AI 领域几个开源项目;HuggingChat 发布;陆奇演讲总结 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#244-2023.05.15.md b/Reports/2023/#244-2023.05.15.md new file mode 100644 index 000000000..a6ad49612 --- /dev/null +++ b/Reports/2023/#244-2023.05.15.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #244 | 2023-05-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub 的 Code Scanning 正式提供 Swift 的支持](https://forums.swift.org/t/beta-testers-wanted-get-a-sneak-peek-at-github-s-code-scanning-support-for-swift/64632) + +GitHub 的 Code Scanning 会扫描和索引项目的 Dependency 信息,并且提供: + +- **Dependency Graph**。 + - 这意味着开发者可以在 GitHub 上看到有哪些项目依赖了自己的 Swift 库。 + - 可以使用 [Dependabot](https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts),在依赖库更新时,自动提交 Pull Request 更新依赖库版本。 +- **安全漏洞警告**。如果一个代码库出现安全漏洞时,它可以在发布修复版本后使用 GitHub 内建的功能进行记录,此时 GitHub 就会通知所有依赖了这个库的下游项目,并且自动提交 Pull Request 将依赖更新到已修复的版本。 + +### **增强全球定价机制** 基准调整引发涨价 + +苹果在 3 月时就公告会进行 [增强全球定价机制](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23236-2023.03.13.md#app-store-%E7%9A%84%E5%AE%9A%E4%BB%B7%E6%9C%BA%E5%88%B6%E5%8D%87%E7%BA%A7%E7%8E%B0%E5%B7%B2%E6%89%A9%E5%B1%95%E8%87%B3%E6%89%80%E6%9C%89%E8%B4%AD%E4%B9%B0%E7%B1%BB%E5%9E%8B) 的调整,老司机技术也提醒过大家,希望大家都可以提前根据需要选择合适的基准。5 月 9 日凌晨已准时上线,但开发者们发现虽然已经提前将基准设置为了中国大陆,但却依旧有概率 **被** 涨价,例如:原本设置为 6 元的 IAP 物品变成了 8 元。问题在上午 10 点左右陆续恢复,部分开发者早上一醒来收到部分付费用户的投诉只能含泪处理了~ + + +## 文章 + +### 🐢 🌟 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g) + +[@Cooper Chen](https://github.com/cjlcooper):如何优化编译开发体验一直是开发者老生常谈的问题,而 Xcode 作为 Apple 开发者必须要使用的工具,其相对封闭的生态环境,让大多数开发者对它的编译优化都常常感到捉襟见肘。哔哩哔哩作为国内较早尝试 Bazel 作为 iOS 主力编译系统的团队,针对这些问题提出了使用 VSCode + Bazel 的方案来打造一套全新的开发环境。其中作者对编译优化最核心的思路包括: +- 尽量只使用 Code 本身,其他 Xcode 自带的例如 IB 等能力能不用则不同 +- 回归编译本身,尽可能多的关闭 xcodebuild 自带的 feature +- 全面拥抱 Xcode 的衍生研发工具链 + +根据以上思路,作者使用的是 VSCode + rules_bis 的自研方案,在研发体验和效率上实现了较大的提升。在发文时,B 站所有 Apple 项目已经切换至 vscode(bis) / rules_xcodeproj(bwb) / 双模式下。 + +[@Damonwong](https://github.com/Damonvvong):发布这篇文章的目的是一个全新的视角,希望大家可以有所了解,但是从我个人的技术判断来看,除非规模化的团队,不然 Xcode 依然是最好用的 iOS 开发工具。 + +规模化团队会因为团队特色、组织架构等各种原因出现不同的问题,因此团队内部配备一些对工程化有解决能力的同学是必须的,如果没有这方面的投入,一线同学会苦不堪言。 + +当然,也有一部分同学会考虑技术价值,但是技术价值在不同场景大小差异是不同的。 + +说个题外话,很多同学都喜欢搞组件化,但是不知道大家有没有考虑过,当工程能力不足的时候,组件化是否真的是一个合理的架构设计? + +### 🐕 [A Swift Spelling Corrector](https://airspeedvelocity.net/2015/05/02/spelling/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一篇基于 Peter Norvig 的博文《How to Write a Spelling Corrector》中的 Python 代码,使用 Swift 编写的拼写纠正器,下面是代码的一些说明: + +- edits1(word) 函数接受一个单词作为输入,并生成一组可能的拼写错误修正候选词 +- SpellChecker 结构体是一个拼写检查器,它用于训练和纠正单词 +- train(word) 方法用于训练拼写检查器,将单词添加到已知单词集合中 +- knownEdits2(word) 方法返回与给定单词距离为 2 的已知单词的集合 +- known(words) 方法接受一个单词序列作为输入,并返回已知单词集合中存在的单词 +- correct(word) 方法接受一个单词作为输入,并返回纠正后的拼写结果 + +这段代码演示了如何使用 Swift 编写一个简单的拼写纠正器。它使用了一些字符串操作和集合操作,以及一些基本的 Swift 语言特性。 + +### 🐕 [Behind-the-Design: Meet Copilot. When the system is the product; on … | by Microsoft Design | Microsoft Design | Apr, 2023 | Medium](https://medium.com/microsoft-design/behind-the-design-meet-copilot-2c68182a0e70) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要探讨了人工智能产品 Copilot 的设计理念、体验框架和开发原则,以及如何通过 AI 增强人类的能力。以下是几个要点: + +- **协作**:Copilot 设计以人为中心,将 AI 作为用户的协作伙伴,而非取代人的工具。 +- **用户控制**:在设计中,注重用户主导地位,强调用户对 AI 的控制和理解。 +- **多元体验**:Copilot 提供沉浸式、辅助和嵌入式三种体验,以满足不同的工作环境和认知需求。 +- **开放和学习**:微软坚持开放设计,积极寻求反馈,持续学习和改进。 + +总的来说,文章阐述了微软如何通过 Copilot 展示了 AI 的协作价值,同时强调了在设计和开发过程中保持以人为本,不断学习和改进的重要性。 + +### 🐎 [Double Protocol Conformance](https://alexanderweiss.dev/blog/2023-04-23-double-protocol-conformance) + +[@zvving](https://github.com/zvving):双重协议一致性是指一个类型多次声明遵循某个协议。当同一个 target 中的类型多次声明遵循相同协议时,Xcode 会抛出错误并停止编译,但是在不同 target 中声明同样的协议实现时,问题就变得难以发现。 + +作者还分享了一个更极端的情况,当涉及到三个 target,Xcode 不再显示警告信息,导致很难发现我们在设置协议一致性方面的错误。作者建议在多模块化代码库中工作的开发团队,确保为协议一致性设置规则,避免出现类似的极端情况。 + +### 🐕 [iOS 客户端动图优化实践](https://mp.weixin.qq.com/s/MW14R1JfXRmQvgN2NNi3iA) + +[@Smallfly](https://github.com/iostalks):在 App 内展示动图是非常常见的需求,本文介绍了 QQ 音乐 iOS 端在使用动图时,遇到内存不足引起的各种崩溃,经过一系列的优化,在性能以及稳定性方面取得较大的提升,主要包括: + +- 解决频繁崩溃问题; +- 首帧加载性能保持稳定; +- 图片内存命中率由 65% 上升至 76%; +- 对比业界开源方案,CPU 占用更少 , 内存使用更少 , 并且有更好的流畅度。 + +对具体优化措施感兴趣的同学可参阅原文。 + + +### 🐎 [文件名还是顶级域,傻傻分不清](https://mp.weixin.qq.com/s/Swzt7_O3vmgG_zukfCAkVg) + +[@Damien](https://github.com/ZengyiMa):Google 五月初放出来一波新的顶级域名,包括 .dad, .phd, .prof, .esq, .foo, .zip, .mov 和 .nexus 等域名,其中 .zip 和 .mov 最让人容易误解是文件地址,基于此容易引申出了一个 MacOS 的安全漏洞,对漏洞感兴趣的同学不妨阅读。 + + +### 🐎 [京喜 APP - 图片库优化 | 京东云技术团队](https://juejin.cn/post/7231735955794427960) + +[@J_Knight_](https://github.com/knightsj):本文介绍了京喜团队对图片框架上的两个优化方向:一方面是降低图片网络传输,提高图片加载速度。另一方面是减少图片内存消耗。在网络传输上,图片框架先对图片 URL 进行预处理,预处理包括域名统一,添加缩放参数,添加 webP 参数,添加降质参数的方式减少图片网络传输大小。在内存消耗上,使用了图片缩放以及限制缓存上限的方法来避免缓存使用过高。文章结尾还介绍了在 Flutter 中优化的几个方向。 + +### 🐢 [淘宝 APP 网络架构演进与弱网破障实践](https://mp.weixin.qq.com/s/NVhtEoWUJK87ADwjXC5K0w) + +[@AidenRao](https://weibo.com/AidenRao):本文将介绍淘宝 APP 统一网络库演进的过程,讲述如何围绕体验持续构建南北向(client-server 之间的流量)从监测到加速一体化的终端网络架构,通过构建 NPM 弱网诊断感知能力,落地原生多通道技术 / 多协议择优调度手段,贴合厂商赋能网络请求加速,实现去 SPDY 及规模化 IPv6/H3 协议簇的平滑过渡,为用户提供弱网更好、好网更优的 APP 加载浏览体验,支撑业务创造更多的可能性。 + +## 工具 + +### [AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围](https://juejin.cn/post/7226327556198744122) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):苹果派是一个可以便捷地管理所有 IAP 内购项目的工具,相比在 AppStore Connect 上一个个项目操作,在苹果派里的操作更加便捷,同时还支持了 基准国家和自定价格配置、销售范围配置、批量上传 等实用功能。同时工程代码全部 [开源](https://github.com/37iOS/AppleParty),Connect API 等调用方式也有相当的参考价值。 + +## 音视频 + +### 🐎 [微软开发者拆解 SwiftUI 优化秘籍,教你轻松提升百倍性能](https://www.bilibili.com/video/BV1uM41137An) + +[@EyreFree](https://github.com/EyreFree):作者用视频演示的方式总结了用两周时间优化公司 SwiftUI 项目得出的相关经验,其中结合了对基本 SwiftUI 控件布局和刷新机制的解释,在做 SwiftUI 开发的小伙伴们不要错过。 + +## 摸鱼周报 + +[@摸鱼周报 #93](https://mp.weixin.qq.com/s/ios0QYKmnYtJ8URvZLJ1TA):第 93 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:App Store 5 月 9 日增强全球定价机制已更新 +* 内容推荐:模块化架构、Deep Dish Swift 总结、TabularData 框架相关博文。 +* 摸一下鱼:最近利用 AI 技术做了一些尝试,开了一个 AI 绘图的小红书账号、开发了一个总结网页内容的浏览器插件;GPT 需求设想方案汇总;一个摘要总结插件 glarity;面向开发者的 ChatGPT Prompt 编写指南 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#245-2023.05.22.md b/Reports/2023/#245-2023.05.22.md new file mode 100644 index 000000000..9d7d9d0b0 --- /dev/null +++ b/Reports/2023/#245-2023.05.22.md @@ -0,0 +1,128 @@ +# 老司机 iOS 周报 #245 | 2023-05-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [2022 App Store Transparency Report(PDF)](https://www.apple.com/legal/more-resources/docs/2022-App-Store-Transparency-Report.pdf) + +苹果发布了 2022 年的 App Store 透明度报告,这也是首次发布类似报告,App Store 的透明对所有开发者与用户都是非常有益的事,我们在近几年看到越来越开放的苹果,这无疑是值得肯定的。 + +而这其中有很多很有参考意义的数据,大家可以自行翻阅,我们列举出其中几项: + +- 提交 Review 了 6,101,913 个 APP,被拒 1,679,694 个,被拒之后完成整改后通过 253,466 个。一次被拒可能会有多个原因,而频次最高的是 **Performance** 。 +- 共有 36,974,015 名开发者,2022 年封禁了 428,487 个,其中有 3338 名提起了上诉,最后申诉成功 159 个。封禁的最主要原因是 **欺诈行为** 。 +- 2022 年封禁了 282,036,628 个用户账号,避免了 $2,090,195,480 的损失。苹果不论对开发者还是用户都在付出努力保障安全。 + + +## 新手推荐 + +### 🐎 [Ranges in Swift explained with code examples](https://www.avanderlee.com/swift/ranges-explained/) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了 Swift 中 Range 的不同类型: ClosedRange、CountableClosedRange ,以及使用简易的操作符代替声明 Range 的使用方法和规则。并且演示了 Range 如何转化为 NSRange 使用和 Range 在字符串使用中如何处理特殊字符。文章适合 Swift 新手快速了解 Range 的使用方法。 + +## 文章 + +### 🐎 [file behavior change in Swift 5.8](https://sarunw.com/posts/file-behavior-change/) + +[@AidenRao](https://weibo.com/AidenRao):在 Swift 5.8 之前,`#file` 和 `#filePath` 都返回文件的完整路径,而这可能会泄露个人的敏感信息。 Swift 5.8 以后,`#file` 支持只返回文件名和它出现的模块。此功能默认禁用,可以通过在 Other Swift Flags 里添加 -enable-upcoming-feature ConciseMagicFile 打开。 + +### 🐕 [Parallax header effect in SwiftUI using CoordinateSpace](https://arturgruchala.com/parallax-header-effect-in-swiftui-using-coordinatespace/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了在 SwiftUI 中利用 CoordinateSpace 实现滚动视差效果。 + +- **Creating ParallaxHeader View:** 创造 ParallaxHeader 视图,包含坐标空间、内容和默认高度参数。 +- **Adding Blur Effect:** 为头部视图添加模糊效果。 +- **Offset Calculation:** 根据 GeometryProxy 和坐标空间的相对位置计算头部偏移。 +- **Height Calculation:** 计算头部视图的高度修饰符。 +- **Usage:** 展示了如何在 SwiftUI 视图中使用视差头部。 + +### 🐎 [How to Open using Rosetta in Xcode 14.3](https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/) + +[@Smallfly](https://github.com/iostalks):Rosetta 是 Apple 开发的软件转译工具,它能将基于 Intel 架构指令的应用程序在新的基于 Apple Silicon 处理器的 Mac 上进行转译和运行。 + +Xcode 14.3 之后,应用详情中开启 Rosetta 的选项被移除,集成到了模拟器选择列表中,方便在不同架构之间切换。 + + +### 🐎 [Accessing Security Scoped Files](https://useyourloaf.com/blog/accessing-security-scoped-files/) + +[@Damien](https://github.com/ZengyiMa):iOS App 的应用是无法直接访问其自身容器之外的文件,例如存储在 iCloud 中的文件,直接读取,将会收到权限错误提示。如果需要访问这些文件,那么就需要使用安全范围相关的 API 了。本文会详细介绍如何使用这些 API,感兴趣的同学不妨一读。 + +### 🐎 [Skip typing your login credentials manually with Xcode breakpoints](https://www.danijelavrzan.com/posts/2023/04/login-xcode-breakpoint/) + +[@anotheren](https://github.com/anotheren):文章以登录凭据为例,介绍了如何使用 Xcode 断点来自动输入调试内容。该方法对代码无入侵,是个非常有用的 Tips。 + +## 代码 + +### [swift-power-assert](https://github.com/kishikawakatsumi/swift-power-assert) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/): Power Assert 是使用 Swift 中宏功能创建的一个断言库,Swift 宏是一项实验性功能,因此需要预发布的 Swift 工具链。在编写测试时,我们需要使用不同的判断函数,Assertion API 有很多,不用死记硬背,只需要建立一个返回布尔值的表达式,Power Assert 就会自动显示丰厚的错误信息。 + +### [Canopy](https://github.com/Tact/Canopy) + +[@JonyFang](https://github.com/jonyfang): CloudKit 三方库推荐 Canopy,该库隔离了 CloudKit 相关的一系列外部依赖,使得代码更易于测试。 + +## 书 + +### [The Book of Modern C++](https://github.com/lkimuk/the-book-of-modern-cpp) + +[@kemchenj](https://kemchenj.github.io/):这是国内 C++ 开发者整理出版的一本书,内容搜集自网络上优秀作者编写的文章,本书包含了十大主题: + +- Basics +- Modern C++ +- C++23 +- Metaprogramming +- Concurrency +- Performance +- Algorithms +- Techniques +- Tricks +- Miscellaneous + +> 序:既致之以广大,又尽之以精微,合之以主题,以成本书内容之深广也。而每章独立,各有所论, 故本书针对高级开发者。饶是如此,新手亦可依此进阶,小大靡遗,纤悉洞了,查漏补缺,得窥其理。 + +## 音视频 + +### [App Marketing by App Masters](https://podcasters.spotify.com/pod/show/app-marketing-podcast) + +[@享耳先森](https://github.com/iblacksun):这个系列播客专注 App Store 发行与优化,如果你是独立开发者,或有做独立开发者的想法,建议关注或收藏,找到自己感兴趣部分收听。 + +## 摸鱼周报 + +[@摸鱼周报 #94](https://mp.weixin.qq.com/s/f2Z1VRpk4Ehh3KxuY_NrvA):第 94 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Apple 展示无障碍软件辅助新功能 +* 本周学习:从 Glarity 学习前端开发流程 +* 内容推荐:推荐近期的一些优秀博文,涵盖:#file 的行为变更、如何使用 @_exported 属性、In-App Purchase 实践总结等方面的内容 +* 摸一下鱼:跟自己和解、接受自己、做自己的人很酷 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#246-2023.05.29.md b/Reports/2023/#246-2023.05.29.md new file mode 100644 index 000000000..e70fb98c5 --- /dev/null +++ b/Reports/2023/#246-2023.05.29.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #246 | 2023-05-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [来 WWDC23 之夜深圳场,看直播!领 Apple 周边!](https://www.huodongxing.com/go/wwdc23sz) + +今年的 WWDC 有线下观影活动哟!6 月 5 日晚,由 T 沙龙主办的「WWDC 之夜(深圳场)」将在货拉拉深圳研发中心举行,在深圳(或附近)的朋友可以线下参加一起熬夜!点击周报下方外链可以直接报名。活动现场还邀请到了两位货拉拉的嘉宾进行精彩分享,分别是: + +- 涂育旺:内存问题步步查 +- 刘占峰:Swift 并发探索之旅 + +## 新手推荐 + +### 🐕 [Handling WebP Images When Using PHPickerViewController](https://swiftsenpai.com/development/webp-phpickerviewcontroller/) + +[@极速男孩](https://github.com/ztlyyznf001):在 iOS14 中苹果推出了 PHPickerViewController 来取代 UIImagePickerController,本身 PHPickerViewController 是不支持 WebP 格式的图片的。这篇文章介绍了如何通过给 NSItemProvider 添加扩展的方式来给 PHPickerViewController 增加 WebP 格式图片的支持。 + +## 文章 + +### 🐎 [SwiftUI under the Hood: Variadic Views](https://movingparts.io/variadic-views-in-swiftui) + +[@Smallfly](https://github.com/iostalks):这篇文章主要讲了在 SwiftUI 中的可变参数视图(Variadic Views)。它介绍了如何使用 `TupleView` 来构建多个视图,并展示了它在视图修饰符方面的透明性。文章还讨论了 SwiftUI 中的一些底层机制,如 `_VariadicView` 和 `_VariadicView.Tree`,以及它们与 `VStack` 和其它视图类型的关系。最后,文章演示了如何编写自定义的容器视图,类似于 `List` 和 `VStack`,以在视图之间插入分隔线。 + +### 🐕 [云音乐中 In-App Purchase 实践总结篇 - 掘金](https://juejin.cn/post/7233948883045941303) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要讨论了如何使用 StoreKit 库进行应用内购买 (IAP) 的开发,并提出了处理 IAP 中挑战和问题的方案。 + +- IAP 主要流程介绍以及目前存在的问题。 +- NEStoreKit 整体结构和票据结果的可靠性。 +- StoreKit2 介绍与展望。 + +### 🐕 [This Window Is Leaking](https://byla.lt/posts/this-window-is-leaking/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要关注了 macOS SwiftUI 应用开发过程中,在 `NSWindow` 上设置自定义 `NSWindowDelegate` 可能会引入内存泄漏,并且说明了作者如何发现问题到尝试解决问题的思路,作者建议在在设置自定义 Delegate 之前保存原有的 Delegate,并在窗口关闭之前恢复它。另外值得一提的是这个解决方案对于未来版本是否适配是未知的,因此引入这个方案需要较为谨慎。 + +### 🐎 [构建稳定的预览视图 —— SwiftUI 预览的工作原理](https://juejin.cn/post/7236009910147596343) + +[@J_Knight_](https://github.com/knightsj):文章由一个引发 SwiftUI 预览崩溃的代码为切入点,深入分析和介绍了 SwiftUI 的预览机制(比如生成预览衍生文件等等);也提示了为了提高开发效率需要注意的几个问题。 + +### 🐎 [饿了么开源自研多端框架 MorJS](https://mp.weixin.qq.com/s/XE6l7pMuj_0Vt9BWQG1XrQ) + +[@老峰](https://github.com/eleme/morjs):Mor 是饿了么开发的一款基于小程序 DSL 的可扩展多端研发框架,允许开发者编写一套小程序代码并通过转端编译在多个平台(如微信、支付宝、百度等)运行,从而提高开发效率并确保兼容性和一致性。特点包括: +- 多端编译:提供一码多端转换能力 +- 集成研发:提供复杂小程序解耦开发能力 +- 形态互转:提供小程序多形态转换能力 +- H5 同构:提供小程序 DSL 转 H5 能力 + +除此上述核心能力外,MorJS 还实现了对于多端或不同环境构建产出不同代码的能力,产物压缩,程序本地 JSAPI mock 能力。 + +### 🐎 [Using Layout protocol to align explicitly positioned views in SwiftUI](https://nilcoalescing.com/blog/AnchoredPositionInSwiftUI/) + +[@JonyFang](https://github.com/jonyfang): 介绍了在 SwiftUI 中定位视图的不同方法。`position()` 修饰符允许我们通过设置中心点坐标将视图放在其父容器内。然而,在某些情况下,我们不希望视图遮挡住其他标签,因此需要将视图和锚点右对齐或左对齐。 + +在 iOS15 及之前的版本中,通常的解决办法是使用 `GeometryReader` 来测量视图的大小并调整偏移量。然而,这种方法存在一些问题,如动画的不一致性等。 + +iOS 16 引入了新的 Layout 协议,它允许我们显式地放置视图,并在调用 `place()` 方法时指定一个锚点。Layout 协议有多种使用方式,但在只有一个标注的情况下,更简单的选项是每个标注都有自己的布局。 + +实例代码放在了 Github:[NilCoalescing/SwiftUI-Code-Examples +Public](https://github.com/NilCoalescing/SwiftUI-Code-Examples/blob/main/AnchoredPosition-Layout/AnchoredPosition.swift) + +### 🐕 [在 iOS 中使用 IdentifyLookup 进行短信过滤](https://juejin.cn/post/7237697495109845052#heading-5) + +[@AidenRao](https://weibo.com/AidenRao):垃圾短信是一个长期存在、令人困扰的问题,Apple 在 WWDC 2017(iOS 11) 推出了 IdentityLookup 框架,让开发者可以参与到过滤短信的过程中。本文将介绍如何阻止这些短信、设备端的检测以及服务器检测等。 + +## 代码 + +### 🐕 [Sparkle - Mac 应用更新框架](https://github.com/sparkle-project/Sparkle) + +[@水水](https://www.xuyanlan.com/):如果你的应用上了 App Store ,其中最大便利之一就是更新处理,苹果可以通过 App Store 进行应用程序的传播和更新。但是如果你在外部分发应用程序,你需要一种替代方法来进行更新通知和执行更新等操作,Sparkle 就是一个帮你的 Mac 应用进行外部更新的框架,Sparkle 框架功能非常全面。如果你也有这方面的需要,具体可以参考 [Sparkle 的实现和接入](https://troz.net/post/2023/sparkle/?utm_campaign=iOS%2BDev%2BWeekly&utm_medium=web&utm_source=iOS%2BDev%2BWeekly%2BIssue%2B606) 一文。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#247-2023.06.05.md b/Reports/2023/#247-2023.06.05.md new file mode 100644 index 000000000..35be2a2e1 --- /dev/null +++ b/Reports/2023/#247-2023.06.05.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #247 | 2023-06-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/247.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Upcoming changes to the App Store receipt signing intermediate certificate](https://developer.apple.com/news/?id=smofnyhj) + +对于 **本地** 校验支付凭证的 APP 来说,需要适配 SHA-256 校验,对于不支持 SHA-256 的 APP 将在 2023.08.14 之后拒绝提交。这项调整对使用 AppTransaction API 与 verifyReceipt(Web Service Endpoint) 等后端校验的 APP 不受影响。 + +同时 2023.06.20 之后,对于新版本的 iOS/iPadOS/macOS 等系统,沙盒环境都将强制切换为 SHA-256 校验。 + +## 文章 + +### 🌟 🐢 [百度 APP iOS 端包体积 50M 优化实践(一)总览](https://mp.weixin.qq.com/s/ANbFzg7X932o-iDpa8FcxQ) + +[@xuyafei86](https://github.com/xiaofei86):本文介绍了百度 APP 包大小优化的完整实践,包括百度 APP 的技术方案和各项优化的详细收益。此系列文章目前包括总览、图片优化和资源优化 3 章,详细讲述了各项优化的技术细节,感兴趣的同学可以持续关注。 + +* [百度 APP iOS 端包体积 50M 优化实践(二)图片优化](https://mp.weixin.qq.com/s/RR7sjhkuTFgUp7S5E8ECMw) +* [百度 APP iOS 端包体积 50M 优化实践(三)资源优化](https://mp.weixin.qq.com/s/FQWCX0wkK6ifHQ8RhmmPsg) + +### 🌟 🐕 [How the Raycast API and extensions work](https://www.raycast.com/blog/how-raycast-api-extensions-work) + +[@kemchenj](https://kemchenj.github.io/):Raycast 是 macOS 上新兴的一款快捷启动器软件,开发者友好的插件系统是他们的亮点之一,最近他们也在博客上分享了这个系统的开发经历,亮点很多: + +- 基于 Node.js 和 React 搭建了插件的接口,React 渲染出 Dom Tree 之后通过 XPC 传输回 Raycast 主 App 进行渲染,后续的 Dom Tree 通过 JSON Patch 协议进行增量更新 +- UI 控件全部都是原生控件渲染的,React 侧只能使用了 Raycast 提供的一套 Component,性能高内存占用少 +- 跟 Electron 套壳应用不同,没有将 Node.js 引擎打包进 App 里,而是在 App 启动后下载并且管理起来,每次更新都不需要重复下载 Node.js 的引擎 +- 插件商店 + +个人感觉这套系统设计得简洁优雅,对于 VSCode 进行了很多借鉴,并且在此基础上也有自己的创新,推荐大家进行阅读和品鉴。 + +### 🐢 [Pushing the limits of NSStatusItem beyond what Apple wants you to do](https://remotion.com/blog/pushing-the-limits-nsstatusitem) + +[@Cooper Chen](https://github.com/cjlcooper):NSStatusItem 是 Mac 开发中设置状态栏的属性,然而苹果的人机界面指南(HIG)在桌面开发中远远不如移动端那般灵活和先进,因此来自 Remotion 的工程师在最小屏幕利用率上决定超越 HIG 的指导,并突破菜单栏额外内容的极限。本篇文章详细讲述了如何使用 SwiftUI 来完成以上需求并且给出了最佳实践,为相关领域开发的同学提供了一个不错的参考。 + +### 🐢 [Apple-Silicon-Guide](https://github.com/mikeroyal/Apple-Silicon-Guide) + +[@Leo](https://github.com/leomobiledeveloper):一篇关于 Apple Silicon 设备的指南。内容非常的丰富,包含了每个芯片的特点和在这些芯片驱动的设备上有哪些好的应用软件、工具,也包含了像 Unity、Metal、CoreML 等在 Apple Silicon 设备上可以进行软件开发的框架学习材料。 + +- 推荐人:[XanderXu](https://github.com/XanderXu) + +### 🐎 [Skip code during debugging in Xcode](https://blog.eidinger.info/skip-code-during-debugging-in-xcode) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了三种在断点调试过程中使用 lldb 命令跳过一些执行代码的方式: + - th j -b (thread jump --by):跳过断点位置后的相对代码行数; + - th j -l (thread jump --line):跳至指定代码行数; + - 使用 expression 修改代码中条件判断的变量值,来跳过相应判断语句的执行。 + +利用好断点调试可以大大提高开发效率,有兴趣的读者可以移步 WWDC2018 session [Advanced Debugging with Xcode and LLDB](https://developer.apple.com/videos/play/wwdc2018/412/),这个 session 中演示了更多的断点调试技巧。 + +### 🐕 [Text Filters in Kaleidoscope 4](https://blog.kaleidoscope.app/2023/05/31/text-filters-in-kaleidoscope-4/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Kaleidoscope 4 中的文本过滤器是一项主要的新功能,它可以帮助您更轻松地比较和分析文本数据。以下是这篇文章中描述的主要内容: +- 文本过滤器的用途:文章介绍了使用文本过滤器的原因。文本过滤器可以帮助去除比较中的视觉噪音,使您更专注于重要的差异。 +- 使用内置过滤器:Kaleidoscope 4.0 提供了 7 个预定义过滤器,可以直接在现实世界中使用。通过单击工具栏中的文件处理工具栏项,您可以选择要应用的过滤器。文章中演示了如何使用内置的过滤器来过滤时间戳、对象地址、进程和线程 ID,以及 UUID。 +- 组合过滤器:您可以组合多个过滤器以获得所需的结果。文章中展示了如何同时选择多个过滤器,并清除选择以取消过滤。 +- 创建自定义过滤器:Kaleidoscope 4.0 还允许您创建自定义过滤器。通过打开文本过滤器窗口,您可以添加新的过滤器。文章详细说明了如何创建自定义过滤器,包括命名过滤器、定义搜索模式和替换规则。 +- 使用正则表达式:创建过滤器时,您可以使用正则表达式来定义搜索模式。文章提供了一个例子,并解释了如何使用内置提示和实时过滤样本数据来编写和测试正则表达式。 + +总结:Kaleidoscope 4 的文本过滤器功能使您能够更轻松地处理和比较文本数据。您可以使用内置过滤器或创建自定义过滤器,并使用正则表达式定义搜索模式。这个功能在处理生成的文本数据时非常有用,可以帮助去除与重要差异无关的内容。 + +### 🐕 [Using Upcoming Feature Flags](https://www.swift.org/blog/using-upcoming-feature-flags) + +[@AidenRao](https://weibo.com/AidenRao):从 Swift 5.8 开始,你可以使用新的编译器标志和编译条件,灵活应用下一个大版本的 Swift 功能。这样能按照自己的节奏,逐个特性、逐个目标地应用版本更改,提前做好代码迁移。 + +### 🐕 [使用 SwiftUI 开发 RSS 阅读器](https://mp.weixin.qq.com/s/8DFqljikD7FKvHTdZj2weA) + +[@享耳先森](https://github.com/iblacksun):本文是戴铭在苹果加速器活动的一次分享,介绍了如何使用 SwiftUI + CoreData 实现一个 RSS 阅读器,新手友好。 + + +## 代码 + +### [RegexHub](https://github.com/lukehaas/RegexHub) + +[@Smallfly](https://github.com/iostalks):细数那些程序员写起来很痛用起来很爽的工具,那正则表达式一定能排上号。[RegexHub](https://projects.lukehaas.me/regexhub/?) 汇集了程序员高频使用的正则表达式,并且作者把源代码开源在 [GitHub](https://github.com/lukehaas/RegexHub),接受 PR,欢迎你的添砖加瓦。 + +## 摸鱼周报 + +[@摸鱼周报 #95](https://mp.weixin.qq.com/s/hi8Dy2H_iBFWeO0V_tQ5xw):第 95 期摸鱼周报来了,一起来看下本期概要: +* 本期话题:WWDC23 定档;Xcode 14.3.1 RC 版本已修复打包导致的崩溃问题 +* 本周学习:Python 导入时运行时、跨文件引用、导入 C 语言库时的几个开发知识点 +* 内容推荐:关于在 App Store 推广应用的技巧、SwiftUI 预览的工作原理、离屏渲染等方面的内容 +* 摸一下鱼:WWDC23 内参招募;微软 Build 大会一些让人惊艳的 AI 产品;让 AI 玩 Minecraft;一个易使用的 AI 程序创建平台;Apple Design Awards 决赛名单公布 +* iOS 招聘:抖音外卖方向 - 北京 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#248-2023.06.12.md b/Reports/2023/#248-2023.06.12.md new file mode 100644 index 000000000..8ff492860 --- /dev/null +++ b/Reports/2023/#248-2023.06.12.md @@ -0,0 +1,130 @@ +# 老司机 iOS 周报 #248 | 2023-06-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/248.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [U4 5.0 内核正式发布](https://mp.weixin.qq.com/s/Yv5GO2FjXg6CPMf3tRsjDQ) + +[@莲叔](https://github.com/aaaron7): UC 是国内为数不多的在深度定制 Chromium 内核上持续投入的团队,近期发布了 U4 5.0 版本,在性能、稳定性和功能覆盖度层面相比 Chromium 100 版本都有大幅的提升。同时,文章从渲染架构、JS 引擎、通用能力和基础体验几个方面分享了新版本所做的具体工作。推荐对于浏览器内核优化有兴趣的同学阅读。 + +### 🐕 [There are so many cool new features in Swift and Xcode](https://www.swiftwithvincent.com/newsletter/there-are-so-many-cool-new-features-in-swift-and-xcode) + +[@AidenRao](https://weibo.com/AidenRao):文章作者第一时间安装了 Xcode 15,并分享他发现的比较酷的新功能: +- 当使用条件编译时,与当前环境不匹配的代码将被 Xcode 自动变灰。 +- 可以给代码添加书签 +- #Preview 现在也支持 UIKit 和 AppKit +- 对 Swift 宏的支持 + +## 文章 + +### 🌟 🐕 [通过 SIL 看 Swift 的方法派发](https://mp.weixin.qq.com/s/m8C_ShtAtLcgjQv9GRVObQ) + +[@JonyFang](https://github.com/JonyFang):在 Swift 语言和 LLVM IR 之间,swiftc 里加入了 SIL。通过 SIL,能够对 Swift 进一步的优化。SIL 相比汇编,更容易读懂。我们将其作为工具,了解和学习 Swift 语言的方法派发机制。也借助于 SIL 解释编码过程中遇到的问题。本文的内容主要介绍了 SIL 中关于方法调用的一部分: + +1. SIL 介绍 +2. 生成 SIL + - 声明和定义 + - 代码块 + - 函数表 +3. Swift 方法派发 + - 直接派发 + - 函数表派发 + - 消息派发 +4. 几个场景问题的解决 + - 场景一:Protocol Extension + - 场景二:父类未实现协议方法 + - 场景三:OC 混编 + +### 🐕 🌟 [移动端 APP 组件化架构实践](https://juejin.cn/post/7240333779222167608) + +[@Cooper Chen](https://github.com/cjlcooper):本文是京东的开发同学对于组件化在中大型 App 工程中实践的经验和思考,同时针对组件化过程中的一些问题进行了探讨,本文通过以下问题来介绍组件化这种开发架构的思想和常见的一些问题: +- 为什么需要组件化 +- 组件化过程中会遇到的挑战和选择 +- 如何维护一个高质量的组件化项目 + +可以为组件化工程架构需求的团队提供不错的经验分享。 + + +### 🐕 [iOS 17: Notable UIKit Additions | Swiftjective-C](https://www.swiftjectivec.com/ios-17-notable-uikit-additions/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讨论了 UIKit 在 iOS 17 中的新增功能和变化。主要介绍了以下新特性: + +- Unavailable Content 用于实现空数据视图。 +- Preview Syntax 让 Swift 新宏支持 UIKit 的 Xcode 预览。 +- Automatic Label Vibrancy 提供了标签自动支持动态效果。 +- Symbol Animations 让 SF Symbols 在按钮和图像中实现动画,增加了多种字体样式,以及用于增强自动填充功能的新文本内容类型。 + +### 🐕 [移动端浏览器性能优化探索](https://mp.weixin.qq.com/s/SKO3vZXTTYE2pRCFaT5H3A) + +[@莲叔](https://github.com/aaaron7): 现在移动端越来越多的业务会采用 App 内嵌 webview,然后由前端通过 H5 技术来承载。显然,受限于移动端设备的性能,在移动端上写 H5 的代码和传统面向 PC 的 H5 是有区别的,这篇文章就是主要介绍了在移动端写 H5 代码时需要关注的性能问题。文章首先从渲染的原理上分析了 H5 页面卡顿的原因,然后提出了衡量卡顿的指标,再结合浏览器的运行原理分析了潜在的优化方向,推荐和 H5 打交道比较多的客户端同学和前端同学阅读。 + +### 🐎 [自動將 asset 的圖片和顏色變成 ImageResource 和 ColorResource 的型別屬性 — Xcode 15 新功能](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E8%87%AA%E5%8B%95%E5%B0%87-asset-%E7%9A%84%E5%9C%96%E7%89%87%E5%92%8C%E9%A1%8F%E8%89%B2%E8%AE%8A%E6%88%90-imageresource-%E5%92%8C-colorresource-%E7%9A%84%E5%9E%8B%E5%88%A5%E5%B1%AC%E6%80%A7-xcode-15-%E6%96%B0%E5%8A%9F%E8%83%BD-3e321213a453) + +[@zoeGuo](https://github.com/zoeGuo):Xcode 15 开始可以用更方便的方式生成图片和颜色了。简单讲我们原来使用图片常用的方式为:``` UIImage(named: "peter") ``` ,Xcode 15 中我们可以直接这样使用:``` UIImage(resource: .peter) ```。在 Build Settings 中将 Generate Swift Asset Symbol Extensions 设置为 YES 后,Xcode 会自动将 Asset 的图片和颜色变成 ImageResource 和 ColorResource 的属性。这一新能力同时支持 SwiftUI 和 UIKit,并且支持旧的 iOS 系统版本!作者还介绍了生成的属性的一些命名规则:是以小写字母开头的驼峰命名;如果我们自己定义的名字中出现 color/image 产生的属性名中会移除 color/image;不要以数字开头否则生成的属性会被添加上下划线。(原文参考链接 : [Xcode 15 Release Notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes)) + +### 🐕 [使用 #Preview macro 定义预览画面](https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86/%E4%BD%BF%E7%94%A8-preview-macro-%E5%AE%9A%E7%BE%A9%E9%A0%90%E8%A6%BD%E7%95%AB%E9%9D%A2-ios-17-%E6%96%B0%E5%8A%9F%E8%83%BD-bc850b2c11fc) + +[@水水](https://www.xuyanlan.com/):从 Xcode15 开始,帮画面加上 preview 变得更方便了,它有以下三大改进: +- preview 的程序变得更精简了,使用 #Preview { } 即可定义 preview,旧版就比较冗长 +- SwiftUI 的 view 和 UIKit 的 view 和 view controller 都能快速加上 preview +- 方便预览 widget 不同时间点的样子 + +本文详细列出了上诉三点的具体使用方法和示例,感兴趣的朋友可以阅读或实践下哦 ~ + +### 🐕 [Demystifying SwiftUI Animation: A Comprehensive Guide](https://betterprogramming.pub/swiftui-animation-mechanism-a1adf2b9b417) + +[@Damien](https://github.com/ZengyiMa): SwiftUI 使用声明式语法来描述不同状态下的 UI 呈现,包括动画,本文全面介绍了 SwiftUI 的动画机制,并提供了大量的演示代码。概括而言,对于 SwiftUI 动画有如下几个总结: + +* 动画是从一种状态到另一种状态的平滑过渡。 +* 声明动画需要三个元素:时序曲线算法函数,将状态(特定依赖项)与时序曲线函数相关联的声明,依赖于状态(特定依赖性)的可动画组件 +* 掌握状态变化的结果。 +* 计时函数与其依赖的关系越精确,产生异常动画的可能性就越小。 +* 独特且稳定的视图标识符(结构的或显式的)有助于避免动画异常。 + +### 🐕 [Use Swift Macros to Initialize a Structure](https://betterprogramming.pub/use-swift-macros-to-initialize-a-structure-516728c5fb49) + +[@Smallfly](https://github.com/iostalks):本文主要介绍了如何在 Swift 5.9 和 Xcode 中使用 Swift 宏来自动生成 Swift 结构体的初始化代码。展示了如何在 Xcode 中创建、命名、实现和调试 Swift 宏,这对于实际应用非常有帮助。 + +需要注意的是,尽管这个功能很强大,但应适度使用,过度使用宏可能使代码变得难以理解和维护。总的来说,Swift 宏对 Swift 开发者来说是一个实用且强大的工具。 + +更多 Swift 宏内容可参考 [WWDC 23 Write Swift macros](https://developer.apple.com/videos/play/wwdc2023/10166/)。 + +## 摸鱼周报 + +[@摸鱼周报 #96](https://mp.weixin.qq.com/s/BM3SucfO9yhQChIPbnuwrA):第 96 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:Vision Pro 已经打开空间计算的大门 +* 内容推荐:WWDC 相关的新设备、新框架、新功能有关的博客文章 +* 摸一下鱼:可以总结 WWDC 视频的 AI 插件 SummarAI;从 Session 标题看 WWDC22 到 WWDC23 的变化;Learn about visionOS;少数派的《100 小时后 请加我苹果开发者》课程 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [杭州] 淘宝 - 终端平台 - iOS/Android/C++ +- [上海] flomo - 招聘 iOS 开发 +- [北京] TikTok - 招聘 iOS 开发 +- [深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - iOS / Android / PC / Web / C++ 工程师 / 算法 +- [上海 / 深圳] SHEIN - iOS/Android 开发 团队介绍 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#249-2023.06.19.md b/Reports/2023/#249-2023.06.19.md new file mode 100644 index 000000000..d66e114e9 --- /dev/null +++ b/Reports/2023/#249-2023.06.19.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #249 | 2023-06-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/249.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [WWDC23 讲座集锦 2023 年 6 月 29 日](https://developer.apple.com/events/view/962Y67Q743/dashboard) + +报名参加 WWDC23 讲座集锦,了解 Apple 平台的最新技术。 + +通过本次活动你可以了解 visionOS 在空间计算领域令人难以置信的新机遇,iOS、iPadOS、macOS 和 watchOS 中的最新功能,以及跨语言、框架、工具和服务的重大改进,从而为全球用户打造更为卓越独特的 App 体验。 + +本次活动包含线下场,欢迎大家来现场参加 ~~ 虽然没有 Vision Pro 体验 ~~。 + +## 文章 + +### 🐢 [What’ s new in Swift 5.9?](https://www.hackingwithswift.com/articles/258/whats-new-in-swift-5-9) + +[@anotheren](https://github.com/anotheren):一年两度的 Swift 大版本更新再次到来,让我们看看 Swift 5.9 有什么**全新**变化: + +- `if` 和 `switch` 表达式:[SE-0380](https://github.com/apple/swift-evolution/blob/main/proposals/0380-if-switch-expressions.md) 增加了我们在多种情况下使用 `if` 和 `switch` 作为表达式的能力。 +- 值和类型参数的配对:[SE-0393](https://github.com/apple/swift-evolution/blob/main/proposals/0393-parameter-packs.md)、[SE-0398](https://github.com/apple/swift-evolution/blob/main/proposals/0398-variadic-types.md) 和 [SE-0399](https://github.com/apple/swift-evolution/blob/main/proposals/0399-tuple-of-value-pack-expansion.md) 结合起来,形成了一系列 Swift 改进,使我们能够使用可变泛型。 +- 宏:[SE-0382](https://github.com/apple/swift-evolution/blob/main/proposals/0382-expression-macros.md)、[SE-0389](https://github.com/apple/swift-evolution/blob/main/proposals/0389-attached-macros.md) 和 [SE-0397](https://github.com/apple/swift-evolution/blob/main/proposals/0397-freestanding-declaration-macros.md) 结合起来将宏添加到 Swift 中,这使我们能够创建在编译时转换语法的代码。 +- 不可复制的结构和枚举:[SE-0390](https://github.com/apple/swift-evolution/blob/main/proposals/0390-noncopyable-structs-and-enums.md) 引入了无法复制的结构和枚举的概念,这反过来又允许在许多地方共享结构或枚举的单个实例——它们最终仍然拥有一个所有者,但现在可以在不同的地方访问你的代码。 +- 引入 `consume` 操作来结束变量绑定的生命周期:[SE-0366](https://github.com/apple/swift-evolution/blob/main/proposals/0366-move-function.md) 将使用值的概念扩展到局部变量和可复制类型的常量,这可能会使希望避免在数据传递时在幕后发生过多的保留 / 释放调用的开发人员受益。 +- 方便的 Async[Throwing]Stream.makeStream 方法:[SE-0388](https://github.com/apple/swift-evolution/blob/main/proposals/0388-async-stream-factory.md) 为 `AsyncStream`,`AsyncThrowingStream` 两者添加了一个新方法 `makeStream()`,它将 stream 本身连同其 continuation 一同返回。 +- 更多内容 / 代码请参见原文及对应的 Swift Evolution。 + +### 🐕 [On Endianness - 🪄 Technical Sourcery](https://www.technicalsourcery.net/posts/on-endianness/) + +[@Barney](https://github.com/BarneyZhaoooo):该文章详细探讨了大端序和小端序在计算机中的应用及其各自的优点。大端序和小端序是计算机存储多字节数据类型的两种方式,这两种方式在计算机系统中都有广泛的应用。 + +- 大端序优势:容易检测符号;符合网络协议约定;符合人类阅读数字的自然习惯;能对未知的无符号整数结构排序。 +- 小端序优势:便于检测奇偶性;重新转换指针更简单;对任意精度的整数和算术运算更有优势;在处理任意长度编码和变长编码时更为高效。 + +### 🐕 [云音乐低代码 + ChatGPT 实践方案与思考](https://mp.weixin.qq.com/s/jaIiVI636uJBOOKsXuHCpw) + +[@老驴](https://weibo.com/u/6090610445):最近生成式 AI 的持续爆火也让很多人开始尝试在真正的产品中去让 AI 落地。网易云音乐的这套在低代码平台中集成生成式 AI 的方案是最近看到过的比较好的落地场景,可以说把自己的平台和 AI 做到了真正有意义的结合,值得参考。 + + +### 🐎 [Swift 的可选值优化](https://mp.weixin.qq.com/s/aloL0oyFUYIukhaqE-YfTA) + +[@Damien](https://github.com/zengyima):本文讨论了 Swift 语言中的 nil 语义及其在内存中的表现,比较了不同数据类型如 Int、Bool、String、Class、Enum 在可选值情况下的内存占用及编译器的优化方法。对 Swift 感兴趣的同学不妨一读。 + +### 🐕 [UIKit rendering - Part 1、2、3](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-1) + +[@JonyFang](https://github.com/JonyFang): 三篇 UIKit 渲染的系列文章,从基础知识到异步绘制和性能优化策略。 + +- [UIKit Rendering - Part 1](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-1): 介绍 UIKit 渲染基础知识; +- [UIKit Rendering - Part 2](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-2): 通过代码实践,探讨 UIKit 渲染过程中的异步绘制机制; +- [UIKit Rendering - Part 3](https://fabernovel.github.io/2021-01-04/uikit-rendering-part-3): 介绍了 UIKit 渲染中的性能优化策略; + +如果对 iOS 应用程序的 UI 渲染感兴趣,这几篇可以查阅下~ + +## 工具 + +### [The unofficial WWDC app for macOS](https://github.com/insidegui/WWDC) + +[@zoeGuo](https://github.com/zoeGuo):这是一款 macOS 上获取 WWDC 资讯的应用,通过 Explore、Schedule、Videos 三个 Tab 可以获取到最新的 WWDC 资讯、日程和视频内容。此外还提供了对 WWDC 视频内容的片段分享、添加笔记、以及 iCloud 同步数据的功能和分享功功能,可以更好的记录自己观看学习 WWDC 的随想和进度。 + +### [SummarAI Chrome Extension](https://github.com/zhangferry/SummarAI) + +[@Crazy](https://github.com/jiyan135960):在 ChatGPT 横行的当下,利用 ChatGPT 来完成论文精炼的网站已经屡见不鲜,这种操作大大降低了大家获取知识的难度。但是对于精炼博客类型的文章,操作起来却还是有些繁琐,SummarAI 这款 Chrome 插件利用 ChatGPT 对网页进行分析并提取重要信息,缩短复杂文章的读取时间。这款插件安装简单,配置方便,可以很轻松的帮助大家完成对冗长且难度较高的博客进行精要分析。 + +## 代码 + +### [HookZzModules](https://github.com/jmpews/HookZzModules/tree/master/AntiDebugBypass) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):HookZzModules 是一个用于在 iOS 应用程序中进行动态函数钩子的开源库。它提供了一种便捷的方式来拦截和修改函数的执行,以实现函数级别的代码注入和调试。通过使用 HookZzModules,你可以在运行时动态地修改应用程序中的函数,包括系统函数和自定义函数,并提供了丰富的钩子选项和回调函数,以满足各种需求。 + + +## 摸鱼周报 + +[@摸鱼周报 #97](https://mp.weixin.qq.com/s/6HRxZXAJcTZKGZiNX2eBYQ):第 97 期摸鱼周报来了,一起看下本期概要: + +* 本期话题:智源大会线下参会体验 +* 内容推荐:WWDC 2023 相关的新产品与新技术 +* 摸一下鱼:OpenAI API 更新;面向国内的 OpenAI API Key 服务 API2D; 《Design for spatial user interfaces》 Session 总结;每个软件开发都应该知道的事;图解 QUIC 连接 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2021」,领取 2017/2018/2019/2020 内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#250-2023.07.03.md b/Reports/2023/#250-2023.07.03.md new file mode 100644 index 000000000..ed03edb0e --- /dev/null +++ b/Reports/2023/#250-2023.07.03.md @@ -0,0 +1,119 @@ +# 老司机 iOS 周报 #250 | 2023-07-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/250.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [GitHub 的 Dependency Graph, Dependabot Alerts 和 Advisory Database 现在正式提供 Swift 的支持](https://github.blog/changelog/2023-06-19-dependency-graph-dependabot-alerts-and-advisory-database-now-support-swift-advisories) + +[@kemchenj](https://kemchenj.github.io):之前[在 244 期周报](https://github.com/SwiftOldDriver/iOS-Weekly/releases/tag/%23244)里曾经提到过 GitHub 的代码扫描功能计划提供 Swift 的支持,现在这个功能已经正式上线了,感兴趣的朋友可以赶紧去尝试一下。 + +> GitHub 的 Code Scanning 会扫描和索引项目的 Dependency 信息,并且提供: +> +> - **Dependency Graph**。 +> - 这意味着开发者可以在 GitHub 上看到有哪些项目依赖了自己的 Swift 库。 +> - 可以使用 [Dependabot](https://docs.github.com/en/code-security/dependabot/dependabot-alerts/about-dependabot-alerts),在依赖库更新时,自动提交 Pull Request 更新依赖库版本。 +> - **安全漏洞警告**。如果一个代码库出现安全漏洞时,它可以在发布修复版本后使用 GitHub 内建的功能进行记录,此时 GitHub 就会通知所有依赖了这个库的下游项目,并且自动提交 Pull Request 将依赖更新到已修复的版本。 + +需要注意的是,这个功能只支持 SwiftPM,不支持 Cocoapods。 + +## WWDC23 内参 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10013 - Meet StoreKit for SwiftUI](https://xiaozhuanlan.com/topic/0579631284) + +Rickey:内购(IAP)的实现一直是一个复杂棘手的问题。不过最新的 StoreKit 为 SwiftUI 提供了一种非常简洁优雅的实现方式,本文将以实战为基础,由浅入深地进行介绍。 +如果你对 IAP 感兴趣,在做相关的工作,或者是独立开发者,那么都非常推荐你详细了解本文的内容。 + +### 🌟 [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130) + +Layer:通过 SwiftUI 的 ImmersiveSpace,我们能够轻松的在 visionOS 上创造完全沉浸式的体验。在 Space 中,我们可以使用 `RealityView` 、`Model3D` 等展示内容,可以使用 `scenePhase`、`GeometryReader3D`、`ImmersionStyle`等更好的管理 Space,此外,还有一些自定义功能也值得我们探索。 + +### 🌟 [WWDC23 10262 - 重新探索 Safari 开发者功能](https://xiaozhuanlan.com/topic/0356874192) + +Style 月月:本文主要是介绍 Safari 开发者功能及更新点,第一部分是介绍 Web Insepector 常规用法和新功能;第二部分介绍响应式设计模式的使用,并支持模拟器调试;第三部分是 xrOS 与 Mac 的配对杨演示;第四部分演示 WebDriver 实现自动化测试;第五部分介绍 Feature Flags 功能,方便开发者提前了解 Web 的未来发展方向。 + +### 🌟 [WWDC23 10184 - Meet ActivityKit/相遇实时小组件](https://xiaozhuanlan.com/topic/3186527094) + +小杰瑞:本文基于 Session 10184 的内容梳理,主要内容包含 Live Activities 是什么以及简要阐述它的生命周期,并辅以一个直播比分类的实时小组件来说明。并针对部分核心代码和实现方式做了代码说明。 + + +## 文章 + +### 🐕 [AppIntents for Widgets](https://alexanderweiss.dev/blog/2023-06-10-appintents-for-widgets) + +[@享耳先森](https://github.com/iblacksun):`AppIntents` 是 iOS 16 推出的 Swift only framework,用于开发 `App Shortcut` 以简化之前复杂的配置项。从 iOS 17 开始,`AppIntents` 也可用于 Widgets 开发了。 + +### 🐕 [Apple's Linker & Deterministic Builds](https://milen.me/writings/apple-linker-ld64-deterministic-builds-oso-prefix/) +[@AidenRao](https://weibo.com/AidenRao):[通用确定性构建](http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html)使构建更稳定,提升你对构建和测试过程的信心,能降低持续集成成本。本篇文章主要帮助你解决 OSO 绝对路径、 OSO 时间戳产生的值不确定性问题。 + +### 🐕 [Understanding mergeable libraries](https://www.polpiella.dev/understanding-mergeable-libraries/) + +[@Cooper Chen](https://github.com/cjlcooper):Mergeable libraries 作为今年 WWDC 较为重要的一项变革,在 Xcode15 引入了一种全新的库类型。它结合了动态库和静态库的优点,既不会过多的消耗构建时间,也不会影响启动速度,使得开发者在开发过程有能够高效的构建和调试自己的程序。本文针对 WWDC2023 的 session 10268 介绍了 mergeable libraries 的简单原理以及使用、调试等内容,能够为开发者快速上手这一新特性提供帮助。 + +### 🐎 [WWDC NOTES](https://www.wwdcnotes.com/) + +[@Smallfly](https://github.com/iostalks):WWDC NOTES 收集了开发者观看 WWDC 视频后整理的笔记,能够帮助你快速了解视频的内容,目前已经有数十篇 WWDC23 的相关文章。 + +### 🐢 [快手主播稳定性 - Mach Port 超限问题治理](https://mp.weixin.qq.com/s/hzKQZjQEp7Gpv6Uhl1xVSA) + +[@EyreFree](https://github.com/EyreFree):这篇文章分享的是快手客户端团队处理应用程序稳定性问题的经验,主要关注的是 Mach Port 超限问题,这是一个导致应用程序在 iOS 系统上出现异常退出的常见问题。本文首先介绍了 Mach 及 Mach Port 的基础知识,然后分析了 Mach Port 超限问题的两个主要原因:系统限制和 Port 泄漏。接下来讲述了如何通过获取 Port 信息、线上监控、线下监控、线下 Debug、阅读源码等手段逐步定位和解决问题的过程。 + +### 🐢 [How to Avoid Repeating SwiftUI View Updates](https://mobileappcircular.com/how-to-avoid-repeating-swiftui-view-updates-dcf0a65d3758) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何优化 SwiftUI 视图更新以提高应用性能。文章讨论了视图状态的构成,解释了驱动视图更新的"真理之源",包括使用属性包装器(如 @State 和 @StateObject )声明的变量、视图类型的构造参数和事件源等。深入讲解了符合 DynamicProperty 协议的属性包装器的工作原理,比如 @StateObject 和 @ObservedObject ,并指出理解这个协议对优化重复计算至关重要。文章还强调了避免不必要的声明,因为这会导致视图的不必要刷新。 + +### 🐢 [CADisplayLink 前世今生](https://mp.weixin.qq.com/s/I1fDj1GBHEr4x4Jg2u_GXA) + +[@老峰](https://github.com/gesantung):CADisplayLink 是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。本文介绍了 CADisplayLink 概念,常用属性 & 接口;CADisplayLink 与 NSTimer 使用区别以及 iOS 15 系统下底层驱动方式的变化。 + + +### 🐕 [Xcode Bookmarks: Save code landmarks & organize tasks](https://www.avanderlee.com/xcode/bookmarks-navigator/) + +@[水水](https://www.xuyanlan.com/):Xcode Bookmarks 是在 WWDC2023 中 Xcode 15 版本的一个重要的引入。 它是一项新功能,允许您保存要重新访问的代码的快速链接,这样做可以保存代码里程碑并组织必须完成的任务。本文详细介绍了 Xcode Bookmarks 的使用方法和效果示例,感兴趣的读者可以尝试。 + +### 🐢 [重要升级!btrace 2.0 技术原理大揭秘](https://mp.weixin.qq.com/s/WZ5JxCFv_FSOLqR-sRremA) + +[@Crazy](https://github.com/jiyan135960):应用开发中永远避不开的一个问题就是性能优化,而在想要进行性能优化,就一定要做好应用的数据采集与监控,字节团队开发的 btrace 2.0 很好的解决了 Android 端所需的数据采集与监控问题。btrace 2.0 相较于上一版本简化了用户操作,优化了内存,并增加了 synchronized 锁信息的记录。btrace 主要的工作流程依然是编译时插桩,运行时采集信息并通过 mmap 记录,最后配合桌面脚本将 apptrace 与 atrace 数据进行编码,并将它们与 ftrace 进行合并。btrace 2.0 的使用相对上一个版本简化了非常多,现在只需要 java 与 adb 环境就可以进行开发。并且当前版本还支持了精准插桩,大大减少了插桩量。该版本除了以前的基础监控外还增加了四种新的监控类型:渲染监控、Binder 监控、阻塞监控与线程创建监控。最后最重要的是源码已经开源,可以在字节的 GitHub 下找到。 + +## 代码 + +### [Swift-Macros](https://github.com/krzysztofzablocki/Swift-Macros) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Swift 宏带来了新一波的可能性 , 这个项目整理了社区创建的和宏相关的学习资源。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 摸鱼周报 + +[@摸鱼周报 #98](https://mp.weixin.qq.com/s/PNEYW71BfkQ2Y3n7uRdxsQ):第 98 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:visionOS 模拟器体验;Safari Technology Preview 173 发布 +* 本周学习:React Hooks 相关的几个概念介绍 +* 内容推荐:mergeable libraries、Swift on Server、Observation 框架、通过 ReviewKit 获得更多好评、Apple AR 技术全景等博客推荐。 +* 摸一下鱼:Diffusion Bee 2 发布,支持视频制作,致力于打造 Mac 端最优秀的 StableDiffusion 开源工具;GPT Engineer 项目来让 AI 来充当软件工程师;「三五环」一期关于投资、创业的播客分享 + + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#251-2023.07.10.md b/Reports/2023/#251-2023.07.10.md new file mode 100644 index 000000000..807d2d2db --- /dev/null +++ b/Reports/2023/#251-2023.07.10.md @@ -0,0 +1,144 @@ +# 老司机 iOS 周报 #251 | 2023-07-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/251.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift Package Index Supporting visionOS](https://blog.swiftpackageindex.com/posts/supporting-visionos/) + +Swift Package Index 宣布添加 visionOS 的支持,所有在这上面发布的库都会运行兼容性测试,并且在网站上展示: + +![visionos-build-results~light](https://github.com/SwiftOldDriver/iOS-Weekly/assets/11192474/c40e94dc-6060-47e2-88cd-65f9d4379754) + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 8 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐四篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10123 - 把你的游戏移植到 Mac 上(一)](https://xiaozhuanlan.com/topic/7036984215) + +JPlay:苹果今年在游戏上下了大力气,不仅提供了 Game Porting Toolkit 和 Metal Shader Converter 这样的重量级工具,让开发者更有动力来移植游戏,更是花了三篇篇幅来帮助开发者移植游戏。这背后体现了苹果怎样的布局呢?本文试图一一为您分析。 + +### 🌟 [WWDC23 10137 - Cinematic API 助你成为电影大师](https://xiaozhuanlan.com/topic/0691783452) + +bq:通过本文你将详细介绍电影效果模式以及最新的 Cinematic API,让电影效果模式的播放和编辑能力也能集成在你的 App 中。本文可配合官方 [Demo](https://developer.apple.com/documentation/cinematic/playing_and_editing_cinematic_mode_video) 一起阅读。 + +### 🌟 [WWDC23 10170 - Swift 结构化并发进阶](https://xiaozhuanlan.com/topic/3249081765) + +MiG:本文将基于 Swift 并发的取消和优先级传递,TaskLocal 绑定值,全链路并发性能调优等方面讨论结构化并发任务的各种优势。 + +### 🌟 [WWDC23 10149 - Discover Observation in SwiftUI](https://xiaozhuanlan.com/topic/5023861974) + +万圣(Khala-wan):Observation 是基于 Swift 5.9 宏系统推出的全新特性,它可以帮助开发者简化数据模型并提高应用程序性能,让 SwiftUI 的数据驱动 UI 体验更加出色。本文将介绍 Observation 的基础知识和实现原理,并通过一些案例来感受 Observation 的实际应用体验,以及了解如何将现有的 `ObservableObject` 迁移到 `@Observable`。 + + +## 文章 + +### 🐕 [SwiftUI Data Flow 2023](https://troz.net/post/2023/swiftui-data-flow-2023/) + +[@AidenRao](https://weibo.com/AidenRao):WWDC 2023 引入 Swift 宏,这使得 SwiftUI 团队能够减少数据驱动的属性封装器的数量,并删除大量模板代码。在本文中,作者将之前的 SwiftUI 数据驱动示例代码,使用宏进行重写,读者可以通过阅读新的示例,来了解 SwiftUI 管理数据流的变化。 + +### 🐎 [用 ChatGPT 搭建代码知识库,提升开发效率](https://mp.weixin.qq.com/s/MpF9xBHYjgnCHNkFn1AsOA) + +[@EyreFree](https://github.com/EyreFree):本文介绍了通过搭建搭建代码知识库,从而借助 ChatGPT 的自然语言生成能力快速检索代码信息,使程序员们能更加专注于业务逻辑的实现和优化的方法。从知识库搭建的需求分析,到方案选型对比,实施以及进一步迭代优化,向大家展示了整个项目开发过程,并进行了效果展示,正确率和可用率都满足了需求,同时从数据质量、测试评估方式、多维度和长篇幅知识整合、模型效果维护、数据安全等几个角度进行了一些思考。 + +### 🐕 [企业微信大规模组织架构性能优化实践](https://mp.weixin.qq.com/s/eK47AzCSSf8-W3wZdjrXXQ) + +[@Barney](https://github.com/BarneyZhaoooo):本文讲述了企业微信面临大规模组织架构性能问题的解决方法: + +- 问题:大规模组织架构处理耗时长,更新节点信息性能瓶颈。 +- 方案: + * 预加载优化:实行“本单位 + 骨架”的预加载,减少初始化加载时间。 + * 架构优化:引入大架构模块,用户只加载相关单位数据。 + * 双 DB 切换:采用新的数据库切换方式,提升响应速度。 +- 结果:耗时、CPU 和内存占用减少,用户体验显著提升。 + +### 🐕 [Monorepo 解决方案 — Bazel 在头条 iOS 的实践](https://mp.weixin.qq.com/s/ajkOP7yeSYCcE0MoUUmUZA) + +[@xuyafei86](https://github.com/xiaofei86):2015 年 Google 发布了其构建系统 Bazel,如今在其支持下 Google 的主仓库早已超过千亿行代码。不管是 Bazel 和 Buck,Google,Facebook,Twitter, Airbnb,Uber,Snapchat 等外企早已全面拥抱 monorepo,而国内客户端的工程实践则更多倾向于多仓库模式。 + +Bilibili 早在 2018 就已落地 Bazel,近期也分享了其 [最新实践](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g)。本周,头条也继续分享其 monorepo 实践。其在完成组件化后,迁移过程先后经历了业务组件源码化,podspec 到 BUILD 文件转换等过程,感兴趣的同学可以阅读原文了解其实现细节。 + +需要注意的是,国外对 monorepo 的应用可能来自于其对构建系统使用的延续性,以及 IDE 在线化的趋势。无端地引入复杂的工程架构,只会将糟糕的代码变成糟糕的基础设施。在学习前一定要参考其背景和动机,结合自己的业务现状,避免走向过度工程化的深渊。 + +### 🐕 [An In-depth Look at C++ Keyword: static](https://mp.weixin.qq.com/s/GEBi8sEjRLWeUlYu4kgDAA) + +[@老驴](https://weibo.com/u/6090610445):C++ 中的 static 关键词算是个挺复杂的概念,在不同的语境下有不同的含义。网上也比较难找到全面介绍 static 关键词的中文文章,但是这篇算是个不错的总结文章,基本涵盖了 static 的方方面面,值得一读。 + +### 🐕 [Weak 变量在对象释放时到底发生了什么?](https://juejin.cn/post/7252869090549628986) + +[@老峰](https://github.com/gesantung):作者结合实例通过汇编及源码一步步探究了访问 Weak 变量过程; objc_loadWeakRetained、rootRetain 源码分析;Dealloc 内部调用链路及机制,本文较深入的分析了 Weak 变量内存机制,感兴趣读者推荐阅读。 + +### 🐢 [Embracing CloudKit: Contents](https://dev.shoppingukapp.com/2023/05/01/embracing-cloudkit-for-data-sharing-contents.html) + +[@anotheren](https://github.com/anotheren):一个关于应用 CloudKit 的系列文章,主要包括了如何通过 CloudKit 在 iCloud 账号间进行数据共享以及可能遇到的问题。 + +### 🐎 [iOS 多语言解决方案全面指南](https://juejin.cn/post/7248811984748462141) + +[@J_Knight_](https://github.com/knightsj):文章介绍了一个可以实现多语言支持、语言切换以及翻译后文案处理的组件化库 HDTranslateModule 。这个库除了可以支持多语言配置以外,还支持在运行时切换语言,也支持翻译后的文案处理,以及扩展新的语言配置等等。文章中还介绍了如何搜索整个项目的中文字符串,生成语言配置文件以及如何编写使用谷歌翻译的 API 来批量翻译字符串的方法等等。 + +## 工具 + +### 🐎 [Little big improvements in Xcode 15](https://sarunw.com/posts/little-big-improvements-xcode15/) + +[@zoeGuo](https://github.com/zoeGuo):Xcode 15 有很多不错的改进。文章主要举例介绍了以下几个: + - 快速找到你想要的方法:当你要使用的方法在键入关键字后任有很多选择时,提供了更多的快捷键操作来帮助我们快速找到想要的方法。 + - 上下文感知:在你输入的时候,会结合上下文提供建议,相较 Xcode 14 更智能的改进体现在:不会再建议使用相同的修饰语。 + - 文档预览:代码注释会快速生成我们的代码文档,Xcode 15 在 Assistant panel 中提供了可以直接预览文档的入口,可以在编写代码注释时可即时看到文档效果。 + - 快速指令查找:Xcode 提供了很多快捷键操作,但是找不到或者不记得快捷键就成了另一个问题,Xcode 15 中使用 `command + shift + A` 快捷键,唤起 Quick Action 搜索框,键入关键字就能快速操作了。 + - 书签:这是 Xcode 15 引入的新的概念,借助对代码添加书签,可以快速帮你再定位到对应代码。 + - 代码格式化:Xcode 15 提供了快速将将一行含有多个参数的代码格式化为多行的快捷方式。 + + 以上改进都非常实用,可以浏览原文详细了解具体使用方式。 + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10159 - Beyond scroll views](https://xiaozhuanlan.com/topic/5138027649) + +喵星人:学习如何使用 SwiftUI 的最新 API,将滚动视图提升到一个全新的水平。本文会展示一些前所未有的自定义滚动视图的方法,包括如何处理安全区域和滚动视图边距之间的关系、如何与滚动视图的内容偏移进行交互、如何通过滚动来为内容添加炫酷的效果。 + +### 🌟 [WWDC23 10124 - 把你的游戏移植到 Mac 上(二):编译 Shaders](https://xiaozhuanlan.com/topic/0289537416) + +Andy Jiao:本文将重点介绍如何利用 Metal 编译器和 Metal 着色器转换器将着色器转换到 Mac 平台,并提高着色器的灵活性和速度。包括如何将着色器转换为 Metal IR 以及如何在游戏构建过程中通过 GPU 二进制文件避免设备上的编译。详细介绍了 Metal 着色器转换器的功能和使用步骤。 + +### 🌟 [WWDC23 10244 - 使用 Swift-DocC 构建丰富的文档](https://xiaozhuanlan.com/topic/5976024813) + +叶絮雷:通过 Xcode 15 提供的文档预览界面,我们可以更加方便的在 Xcode 15 中编写并预览文档。同时我们也可以通过 DocC 主题配置和指令功能,为文档添加更多的自定义内容,使文档更加丰富多彩。 + +### 🌟 [WWDC23 10107 - 在 App 中接入照片选择器](https://xiaozhuanlan.com/topic/5964728310) + +nuomi1:在 App 中使用 MVVM 架构接入照片选择器,对比 UIKit 与 SwiftUI 在实现上的异同点。 + +## 摸鱼周报 + +[@摸鱼周报 #99](https://mp.weixin.qq.com/s/0r-ni--4jEN4pnIHVajHqg):第 99 期摸鱼周报来了,一起来看下本期概要: + +* 本期话题:macOS Sonoma 体验,三大功能:新屏保、web app、桌面小组件 +* 内容推荐:Swift 宏、Core Data 新特性、SwiftData 介绍、自动生成 RESTful APIs、iOS 应用保护等内容 +* 摸一下鱼:Public Apple Frameworks;微软提供的面相前端初学者的课程;苹果 M2 Ultra:AI 大模型的新希望;AI 生成的艺术二维码 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#252-2023.07.17.md b/Reports/2023/#252-2023.07.17.md new file mode 100644 index 000000000..72ac06fcc --- /dev/null +++ b/Reports/2023/#252-2023.07.17.md @@ -0,0 +1,106 @@ +# 老司机 iOS 周报 #252 | 2023-07-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/252.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 7 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +### 🌟 [WWDC23 10055 - UIKit 中的新功能](https://xiaozhuanlan.com/topic/0651384792) + +Sharker:本文主要介绍了 UIKit 在 iOS 17 中的新功能、核心架构改进和 iPad OS 应用程序的改进,并且提供了多项常规增强功能,例如 Xcode 预览支持、自定义特征、交互式文本操作等。 这些增强功能为应用程序开发人员提供了更好的设计和用户体验,同时还改进了语言支持和性能。 + +### 🌟 [WWDC23 10197 - SF Symbols 5 使用指南](https://xiaozhuanlan.com/topic/6438257091) + +Mim0sa:为了更方便没有 SF Symbols 经验的读者理解,也将往年的 SF Symbols 相关内容归纳整理。本文从 SF Symbols 的特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些优点以及该如何使用。在这次 WWDC 2023 中,除了符号的数量增加到了 5000+ 之外,还有能让符号们 “动” 起来的新功能,让 SF Symbols 这把利器变得又又更加趁手和锋利了。 + +### 🌟 [WWDC23 10028 - 让你的小组件栩栩如生](https://xiaozhuanlan.com/topic/8965310274) + +Raydon:现小组件支持在 Mac 的桌面、iPad 的锁屏、iPhone 的 StandBy 以及 Apple Watch 的 Smart Stack 显示。小组件内容刷新时,添加 SwiftUI 的动画效果让内容变化更加流畅。利用 SwiftUI 和 AppIntents,可以在小组件上使用 Button 和 Toggle 交互组件,让你的小组件栩栩如生。 + +## 文章 + +### 🌟 🐕 [iOS 中的栈内存保护: ____stack_chk_fail 和 ARMv8.3 的指针验证机制](https://juejin.cn/post/7251849146004734008) +[@莲叔](https://github.com/aaaron7):栈溢出攻击是非常常见的攻击手段,攻击者通过覆盖函数的返回值来实现跳转到非预期的代码进行执行。本篇文章介绍了目前比较普遍应用的两种应对栈溢出攻击 ____stack_chk_fail 和指针认证,并且在 iOS 中构建出了针对 ____stack_chk_fail 的复现环境。感兴趣的朋友可以研究一下。 + +### 🐎 [轻量化的 iOS 动画框架](https://mp.weixin.qq.com/s/ABveMrA--3JWkpfb2d09lw) + +[@J_Knight_](https://github.com/knightsj):本文首先列举了几个常用动画库的优缺点,并抛出了动画串行和并行的实现场景。然后结合流程图和代码分享了一个针对动画回调嵌套问题的轻量化解决方案,让组合动画的代码结构更加清晰,方便开发和后续迭代修改。 + +### 🐕 [Flutter 小技巧之 InkWell & Ink 你了解多少](https://mp.weixin.qq.com/s/TL7bRp9f9BrAgiwGc1OXGw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文带你详细了解 Flutter UI 组件中点击事件水波纹效果组件系列,包含 InkWell 和 Ink 原组件,并且详细讲解了如何使用 Ink 系列组件给其他组件添加水波纹点击效果,Flutter 小白同学可以学习一下 👍 + +### 🐕 [百度 APP iOS 端包体积 50M 优化实践(四)代码优化](https://mp.weixin.qq.com/s/H9KtBPE67g3752OcnjXG7A) + +[@JonyFang](https://github.com/JonyFang): 本文依次介绍了 LinkMap 文件格式,及包体积瘦身中代码相关的优化方案(无用类优化、无用模块瘦身、无用方法瘦身、精简重复代码、工具类瘦身和 AB 实验固化)。 + +代码优化同样也是包体积优化的重头戏,但跟图片和资源优化相比较,代码修改影响范围大,再加上 OC 语言动态调用方式多种多样,这导致代码的删除操作更容易引起质量问题,所以优化收益落地难度比较大。百度 APP 在优化实践过程中挖掘出 20M 的收益,经过两个季度落地 8M 左右。如有包体积优化诉求,整体思路或许可以参考下。 + +iOS 包体积优化实践系列文章的回顾: +- [包体积优化(一)总览](https://mp.weixin.qq.com/s/ANbFzg7X932o-iDpa8FcxQ) +- [包体积优化(二)图片优化](https://mp.weixin.qq.com/s/RR7sjhkuTFgUp7S5E8ECMw) +- [包体积优化(三)资源优化](https://mp.weixin.qq.com/s/FQWCX0wkK6ifHQ8RhmmPsg) + +### 🐎 [@backDeployed to extend function availability to older OS releases](https://www.avanderlee.com/swift/backdeployed-function-back-deployment/) +[@Smallfly](https://github.com/iostalks):在过去苹果使用 `@available` 来标识高版本新增的 API,从而限制低系统版本使用,但是有些场景下,新增的 API 只不过是原有低版本 API 的封装,其实在低版本上依然可以使用。在 Swift 5.8 中新增了 `@backDeployed` 特性关键字,用于标记新 API 可以向前兼容。 + +### 🐎 [Introducing Swift HTTP Types](https://www.swift.org/blog/introducing-swift-http-types/) + +[@Damien](https://github.com/ZengyiMa):想尝试用 Swift 写服务端项目吗?Swift 官方近日宣布推出名为 Swift HTTP Types 的新开源软件包。该软件包旨在为 Swift 中的客户端 / 服务器 HTTP 操作提供一组共享的通用类型。Swift HTTP Types 提供了 HTTP 消息的核心构建模块的通用表示,包括 HTTPRequest 和 HTTPResponse。想利用 Swift 来完成服务端项目的同学不妨尝鲜使用。 + + +## 设计 + +### 🐎 [First Attempt at Designing for visionOS](https://www.david-smith.org/blog/2023/07/10/design-notes-39/) + +[@EyreFree](https://github.com/EyreFree):知名 iOS Widgets 应用 Widgetsmith 的作者分享了自己为应用适配 visionOS 的经历,对 visionOS 感兴趣的小伙伴不要错过。 + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10191 - 在 iOS 上使用 Object Capture](https://xiaozhuanlan.com/topic/8741092356) + +轻舟:今年,Apple 将 Object Capture 技术带到了 iOS 平台,利用这项技术,你可以随时随地使用你的移动设备为你身边的物体创建 3D 模型。它可以应用在项目中,在你的手机上预览,甚至是在新发布的 Apple Vision Pro 上查看。让我们一起来探索这项令人兴奋的技术。 + +### 🌟 [WWDC23 10188 - 使用 CKSyncEngine 同步 iCloud](https://xiaozhuanlan.com/topic/5379482610) + +LabLawliet:本文将结合多个实际基于 `iCloud` 的项目,带大家了解 `CKSyncEngine` 如何帮助您将人们的 `CloudKit` 数据同步到 `iCloud`。了解当您让系统处理同步操作的调度时,如何减少应用程序中的代码量。并分析 `CKSyncEngine` 接入现有项目的可行性。 + +### 🌟 [WWDC23 10121 - What's new in CSS](https://xiaozhuanlan.com/topic/5902738416) + +leejunhui:Web 上的发展日新月异,CSS 也不例外。Apple 今年在 Safari 上支持了许多的 CSS 新特性。本文主要介绍了四个维度的 CSS 新特性,分别是布局、颜色、选择器和字体排版。与此同时本文还介绍了 Safari Technology Preview 中可以体验到的 WebKit 新特性,以及全新改版的 Safari 开发者菜单。 + +### 🌟 [WWDC23 10105 - 打造响应更快的相机体验](https://xiaozhuanlan.com/topic/8534120679) + +Lion:iOS 17 提供了一些新的特性,通过延迟图片处理、快门零延迟、响应捕获等新特性,以及状态监听等措施,能大幅提高相机响应速度,创造更流畅的拍摄体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +[上海] B 站 - iOS 开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#253-2023.07.24.md b/Reports/2023/#253-2023.07.24.md new file mode 100644 index 000000000..2c554bc6c --- /dev/null +++ b/Reports/2023/#253-2023.07.24.md @@ -0,0 +1,138 @@ +# 老司机 iOS 周报 #253 | 2023-07-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/253.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Unity support for visionOS: What you need to know](https://blog.unity.com/engine-platform/unity-support-for-visionos) + +Unity 提供 visionOS 支持的 Beta 版本已经放出了[申请链接](https://create.unity.com/spatial),感兴趣的同学可以自行申请。 + +WWDC23 内参中也已经放出了多篇相关的内容,大家感兴趣的话可以自行查看: + - [WWDC23 10080 - 使用 RealityKit 构建空间体验](https://xiaozhuanlan.com/topic/8296735401) + - [WWDC23 10191 - 在 iOS 上使用 Object Capture](https://xiaozhuanlan.com/topic/8741092356) +- [WWDC23 10111 - 使用 ImmersiveSpace 让 SwiftUI 跃出屏幕](https://xiaozhuanlan.com/topic/2586749130) + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 6 篇内参,每篇质量都非常高,由于篇幅问题,开头先推荐三篇可能大家更感兴趣的,其他的放到周报最后了 ~ + +### 🌟 [WWDC23 10164 - What's new in Swift](https://xiaozhuanlan.com/topic/7306192458) + +冬瓜:这个 Session 涉及了 Swift 的新语法特性和 Swift Macro 的话题,这些功能对于编写更加灵活和健壮的 API 以及高质量代码起到了很大的帮助。此外,也深入探讨了在受限环境下使用 Swift 的优势,并讨论了 Swift 在适配多种平台设备和语言方面的灵活性。 + +### 🌟 [WWDC23 10167 - 初见 Swift 宏](https://xiaozhuanlan.com/topic/1403528796) + +方舟(WAMaker):Swift 宏是今年 Swift 5.9 的新特性,本文偏重于 Swift 宏基本概念的介绍,以及在使用方面需要注意的内容。 + +### 🌟 [WWDC23 10117 - App Store Connect 的新特性](https://xiaozhuanlan.com/topic/5304186279) + +iHTCboy:本文介绍了 App Store Connect 的新特性,包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中,仅限内部测试人员访问的 TestFlight 测试更早安全可控;按地区预购可以为现有 App 拓展新的市场;通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能,优化产品页面,激发用户的兴趣,获取更多用户。 + +## 文章 + +### 🐢 [Android 视角谈 Bazel 与 Gradle 构建系统](https://mp.weixin.qq.com/s/4AI7H428oSc4fWgcK3KOpQ) + +[@Crazy](https://github.com/jiyan135960):本文从构建系统对比的角度出发,从各个角度对比了 Bazel 与 Gradle 两种构建系统的差别。首先从理念上对比,对比了 Bazel 与 Gradle 产物的不同点,从而引出两者的并发能力对比,得出结论并发能力上 Bazel 的实现更为简单方便。接着从快速增量对比,引出二者在 DAG 设计上的差别,Bazel 的 DAG 设计在增量与配置阶段都要优于 Gradle 的设计。最后是对分布式编译与依赖管理两种能力的对比,Bazel 的分布式编译是他的核心能力,但对于 Java/Android 的编译来说,分布式编译并没有什么明显提升,而在 Java/Android 的依赖管理上 Gradle 可谓是占尽优势。作者在最后更是利用飞书的两种构建进行了对比,首次编译 Gradle 优势极其明显,而有缓存编译也没有落后 Bazel 很多。作者在整篇文章中尽可能的保持客观的态度为 Bazel 与 Gradle 在做着对比,为大家提供了选择的思路,是值得大家一看文章。 + +### 🐎 [How to Use Swift Package Manager to Save Gigabytes of Network Traffic and Disk Space](https://betterprogramming.pub/how-to-use-swift-package-manager-saving-gigabytes-of-network-traffic-and-disk-space-998bd148ad56) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何使用 Swift Package Manager(SPM) 将依赖关系存储在项目的代码库中。这样可以避免在每次切换分支时重新下载和解决依赖。作者创建了一个本地 package,并通过脚本将所需依赖最少文件复制到项目中。这样做减小了文件大小,优化了依赖的使用。最终,拷贝的文件目录大小仅需 4.7 MB,比 `.build` 目录小了 211 倍。文章提供了实现的示例代码,有兴趣请参阅原文。 + +### 🐎 [Bad practice: testing if a String is empty](https://www.swiftwithvincent.com/blog/bad-practice-testing-if-a-string-is-empty) + +[@JonyFang](https://github.com/JonyFang): 本篇主要讨论在 Swift 中通过使用 `string.count > 0` 来检测字符串是否为空的问题,并提出了更好的替代方法。 + +使用 `string.count > 0` 的问题在于 `count` 属性需要遍历整个字符串来计算可见字符的数量,因此对于长字符串或包含大量字符串的情况,执行时间会很长。如果想要执行速度快且不受字符串长度的影响,可以使用 `string.isEmpty` 来检测字符串是否为空。差异在于 `string.isEmpty` 只需要检查字符串是否包含至少一个字符。 + +日常开发过程中,尽量避免长字符串判空通过 `count > 0` 的方式,避免不必要的性能损耗。 + +### 🐎 [Convenience Property Wrappers vs Custom Data Access Layer in SwiftUI](https://azamsharp.com/2023/07/15/property-wrappers-vs-data-access-layer.html) + +[@AidenRao](https://weibo.com/AidenRao):作者以一个待办事项应用为例,分析使用 SwiftUI 的 `@Query` 属性包装器和自定义数据访问层的优缺点。若追求便利,可选择 `@Query` 属性包装器;若需要更大的灵活性,以便于未来更换数据访问层,那么自定义数据访问层更为合适。 + +## 工具 + +### [Developer Duck AI for Xcode](https://apps.apple.com/app/id1662283032) + +[@EyreFree](https://github.com/EyreFree):Developer Duck 是一款人工智能编程助手,可帮助完成包括代码建议、分析和重构等编程任务。 + +支持以下功能 & 特性: +- Xcode 集成和聊天窗口 +- 命令行支持 +- 支持包括 Swift 在内的 15 种编程语言 +- 将文档注释添加到文件 +- 粘贴代码块并快速重构 +- 通过聊天生成 MermaidJS 流程图 + +感兴趣的朋友可以试试。 + +## 代码 + +### 🐕 [DeckKit](https://github.com/danielsaidi/deckkit) +[@邦Ben](https://weibo.com/linwenbang/):DeckKit 是一个开源库,旨在帮助开发者在 SwiftUI 中创建基于卡片(Deck)的应用程序。DeckKit 可以自定义卡片的外观和行为,并提供了一些方便的功能,如卡片重排、卡片拖拽等。 + +- 创建和管理卡片 +- 自定义卡片的外观和行为 +- 支持卡片拖拽、重排等交互 +- 提供 Demo 应用程序以供参考 + +## 设计 + +### 🐕 [Invisible Details of Interaction Design](https://rauno.me/craft/interaction-design) + +[@水水](https://www.xuyanlan.com/):好的交互设计会让产品感觉像是我们自身行为的自然延伸,如何在形式和功能之间取得整体平衡、如何让用户根据上下文预测产品交互意图?本文通过 iOS 的一些交互设计来介绍优秀的交互设计是如何隐喻用户进行操作的。对交互或者设计感兴趣的朋友不防看看,也许会有收获哦 ~ + +## WWDC23 内参更新 + +### 🌟 [WWDC23 10156 & 10157 - SwiftUI 动画篇](https://xiaozhuanlan.com/topic/3165078924) + +zddhub(张东东):本文先以 SwiftUI 动画的基础知识为起点,逐步剖析了支撑 SwiftUI 动画效果的三大核心组成部分:Animation、Animatable 和 Transaction。同时,结合 SwiftUI 的视图渲染机制,旨在帮助读者更深刻地理解和有效地应用 SwiftUI 的动画功能。在文章的尾声,我们会介绍 SwiftUI 最新加入的两个高级动画功能。一起开启探索之旅吧! + +### 🌟 [WWDC23 10122 - 探索适用于现代 Web 的媒体格式](https://xiaozhuanlan.com/topic/1823954706) + +夏天:本文将介绍 Safari 支持的媒体格式,包括图像和视频,并介绍了 Safari 17 中的新技术。文章还会讨论网站视频演变历程和最新技术 Managed Media Source API,实现自适应流媒体视频,提供更好的控制和更高效的性能。 + +### 🌟 [WWDC23 10053 - What's new in privacy](https://xiaozhuanlan.com/topic/9504861273) + +胡军(Hummer):本文以概述的形式讲述了过去一年 Apple 在隐私方面的努力成果。主要涵盖三大方向: + +- 1.以隐私为中心设计的新的工具和 API ; +- 2.各平台与隐私相关的更新; +- 3.Vision Pro 平台的隐私保护设计范式。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳/广州/北京/三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#254-2023.07.31.md b/Reports/2023/#254-2023.07.31.md new file mode 100644 index 000000000..a54086a31 --- /dev/null +++ b/Reports/2023/#254-2023.07.31.md @@ -0,0 +1,113 @@ +# 老司机 iOS 周报 #254 | 2023-07-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/254.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [List of APIs that require declared reasons now available ](https://developer.apple.com/news/?id=z6fu1dcu) + +[@zoeGuo](https://github.com/zoeGuo):苹果在 WWDC23 上发布了应用程序(包括 SDK)的新隐私政策,并有 [Get started with privacy manifests](https://developer.apple.com/videos/play/wwdc2023/10060/) 的单独专题。7 月 27 日苹果发布了此则新闻,称:2023 年秋季开始,如果新上传的应用程序中使用了没有提供隐私清单的相关 API,那么你将会收到一封邮件通知;而从 2024 年春季开始,隐私清单会变成一个强制要求。涉及到的 API 以及使用原因可参考:[View list of APIs and approved reasons](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api),如果使用原因未在列表中列出也可直接提交具体使用理由:[Submit a request for a new approved reason](https://developer.apple.com/contact/request/privacy-manifest-reason/)。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 开发者实验室](https://developer.apple.com/cn/visionos/labs/) + +[@老峰](https://github.com/gesan):Apple 分别在库比蒂诺、伦敦、慕尼黑、上海、新加坡和东京设立了 Vision Pro 开发者实验室。开发者可申请参加为期一天的开发者实验室,体验在 Vision Pro 上运行的 visionOS、iPadOS 或 iOS App,并在 Apple 的支持下测试并优化你的 App 和游戏。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 5 篇内参,每篇质量都非常高,欢迎大家阅读。 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### 🌟 [WWDC23 10117 - App Store Connect 的新特性](https://xiaozhuanlan.com/topic/5304186279) + +@iHTCboy:本文介绍了 App Store Connect 的新特性,包括隐私保护、新增的数据类型、按地区预购、产品页优化和通过 API 实现自动化等方面。其中,仅限内部测试人员访问的 TestFlight 测试更早安全可控;按地区预购可以为现有 App 拓展新的市场;通过 API 实现自动化流程以节省时间。最后建议开发者尽早尝试新功能,优化产品页面,激发用户的兴趣,获取更多用户。 + +### 🌟 [WWDC23 10080 - 使用 RealityKit 构建空间体验](https://xiaozhuanlan.com/topic/8296735401) + +@郭介騵:本文会介绍如何使用 RealityKit 框架中的 Entities 和 Component 在你的 visionOS 应用中玩转 3D 模型,以及全新推出的 RealityView,结合 RealityKit 3D 能力和 SwiftUI 沉浸式空间,带给用户前所未有的体验。 + +### 🌟 [WWDC23 10165 - What's new in Xcode 15](https://xiaozhuanlan.com/topic/4731268095) + +@Noah:工欲善其事,必先利其器,Xcode 是每个 iOS 开发者必备的开发工具,因此每年的 Xcode 更新都与我们息息相关。本文主要从 Xcode 15 功能、性能上的更新与优化入手,辅以 Demo 演示,分享 Xcode 15 让人振奋的更新。本文将从智能、简洁、高效、其他功能更新以及开发者注意事项这五个角度详述 Xcode 15 更新点,相信通过对这些更新点的了解,能够让大家在日常的开发工作中使用 Xcode 更游刃有余。 + +### 🌟 [WWDC23 10141 - App Store server API 新特性](https://xiaozhuanlan.com/topic/6725091438) + +@yt:本文对 WWDC23 在 App Store Server API 提供的新特性进行梳理总结,并提供迁移到新的 App Store Server API 的升级指引,无论你是目前在使用 App Store Receipts 的 verifyReceipt 还是已经升级到 App Store Server API,相信本文都能给到你一些帮助。 + +### 🌟 [WWDC23 10119 - 在 Safari 上开发浏览器插件](https://xiaozhuanlan.com/topic/3290654871) + +@Gareth Ng:本文在介绍 WWDC 2023 关于 Safari Web Extension 的同时,也介绍了 Safari Web Extension 从 2020 年开始的更新和发展. + +## 新手推荐 + +### 🌟 [Flutter 的线程模型和异步原理](https://mp.weixin.qq.com/s/XvVD-yG79x8KX1U5LJgMvg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 做 Flutter 应用开发鲜少有像 Native 那样遇到各种多线程或者多进程的问题,这跟 Dart 语言使用 event-loop 机制有关,但实际上在 Flutter 体系下是有类线程能力的,那就是 isolate, isolate 与 Native 线程或者进程有相似之处,但也有不少差异点;本文由搜狐技术团队产出,详细为大家讲解了 isolate 的方方面面,同样延伸到了 Flutter 各类异步机制的原理 : event-loop、async/await、Future. 称得上是一篇干货满满的科普以及进阶的好文,小编强烈推荐正在使用 Flutter 的同学跟着学习或复习一遍. + +## 文章 + +### 🐕 🌟 [Precompiled headers](https://maskray.me/blog/2023-07-16-precompiled-headers) + +[@Leo](https://github.com/leomobiledeveloper):C/C++ 的工程可以用 precompiled headers 来提升编译速度。即使后来 C++ modules 出现了,precompiled headers 仍然有很多应用的场景。本文是一片关于 precompiled headers 的优秀文章,详细讲解了 pch 的生成、使用、性能优化等方方面面,讲解的非常详细,推荐阅读。 + +### 🐢 [Swift Package Plugins 初探](https://mp.weixin.qq.com/s/US6_4Yvs_XnUF1gELYiN6g) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文是 Swift Package 新特性 Package plugins 的介绍文章。Package plugins 可以做很多事情,比如代码格式化、代码扫描、自动生成多语言文件等。通过本文介绍什么是 Package plugins?Package plugins 能做什么?Package plugins 怎么用?让你对 Swift Package plugins 有个具体了解,可以上手开发自己的 Swift Package plugins。 + +### 🐕 [Building Peak](https://harshil.net/blog/building-peak) + +[@极速男孩](https://github.com/ztlyyznf001):"Building Peak"是一篇揭示 Peak 应用开发背后的博客。作者使用 SwiftUI 和 The Composable Architecture (TCA) 构建应用,设计了各种主题并混合使用了标准和自定义 UI 。应用中加入了一些有趣的元素,如 "jiggle mode" 和 "Slide to Delete/Restore" UI。为了简化开发流程,作者创建了三个辅助应用:PeakBuilder(自动化上传到 TestFlight)、PeakThemer(在设备上设计主题)和 PeakSnapshotter(生成宣传艺术和 App Store 截图)。 + +## 工具 + +### 🐎 [asciiflow](https://asciiflow.com/#/) + +[@水水](https://www.xuyanlan.com/):这个工具可以绘制简单的流程图,然后选中图形即可粘贴到你想要复制到的代码注释里,喜欢这种注释风格的读者们可以尝试下哦 ~ + +## 代码 + +### [UIGraphicsBeginImageContextWithOptions Deprecated](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4114) + +[@Smallfly](https://github.com/iostalks):`UIGraphicsBeginImageContextWithOptions` && `UIGraphicsEndImageContext` 图片绘制 API 在 iOS 17 上标记为废弃,在 Xcode beta 5 若绘制图片的 `width` 或 `height` 意外为零会触发 Assert,非零 size 暂时不受影响。建议尽快替换为最新的 `UIGraphicsImageRenderer` API。 + +### 🐕 [A collection of Metal Shaders](https://github.com/rafunderscore/metallurgy) + +[@Cooper Chen](https://github.com/cjlcooper):Metallurgy 是一个展示如何在 SwiftUI 上使用 Metal 的开源项目,通过这个项目可以更好的学习和了解 Metal 开发相关内容以及如何与 SwiftUI 结合,工程中着重对 Metal 的着色器部分进行了详细的说明,通过阅读代码可以了解着色器如何传递数据到视图并展示给用户,能够快速帮助开发者更多地了解 Metal 以及如何在 SwiftUI 中使用它。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#255-2023.08.07.md b/Reports/2023/#255-2023.08.07.md new file mode 100644 index 000000000..82e70cfce --- /dev/null +++ b/Reports/2023/#255-2023.08.07.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #255 | 2023-08-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/255.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Bad practice: capturing a method reference](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4137) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章讨论了在 Swift 中捕获方法引用的不良实践。文章指出,尽管在将方法引用作为参数传递给函数时不需要显式地使用 self 关键字,但实际上编译器会自动捕获对 self 的强引用,从而可能导致循环引用的问题,且编译器不会对此发出警告。 + +### 🐕 [Objective-C Internals](https://alwaysprocessing.blog/series/objc-internals) +[@Smallfly](https://github.com/iostalks):虽然 Swift 已经成为官方默认的编程语言,但在国内大部分大型应用依然由 Objective-C 主导,并且熟练掌握 Objective-C 对理解底层系统实现有较大的帮助。该博客分享了一系列剖析 Objective-C 内部实现的文章,涉及到类的实现、isa 指针、实例变量、以及内存管理等等。每一篇文章简短又不失深度,有需要的同学可以查漏补缺。 + +### 🐕 [How to Create Callback-like Behavior Using AsyncStream in Swift](https://swiftsenpai.com/swift/asyncstream-callback) + +[@Barney](https://github.com/BarneyZhaoooo):文章详细探讨了如何在 Swift 中使用 AsyncStream 实现类似回调的行为,尤其聚焦于跟踪下载操作。 + +* **Swift Concurrency Revolution**:概述了 AsyncStream 是如何革新异步代码处理的。 +* **Replacing Old Methods & Creating Example**:通过模拟下载操作示例,演示了 AsyncStream 如何替换基于闭包的传统方法。 +* **AsyncStream Implementation & Considerations**:深入解释了 AsyncStream 的实现细节,并强调了调用 finish() 方法的重要性。 +* **User Interface Integration**:描述了如何将下载进度与用户界面集成,并分享了完整代码的链接。 + +### 🐎 [Xcode 14 如何调试 iOS 17](https://mp.weixin.qq.com/s/9K6gH-owQC_Oi6ZzRo2cRQ) + +[@EyreFree](https://github.com/EyreFree):这篇文章记录了作者尝试使用 Xcode 14 调试 iOS 17 的过程,并最终给出了解决方案,作者亲测 Xcode 14.3 有效,有需要适配最新操作系统的同学可以看看。 + +### 🐎 [Smart Open Xcode](https://christianselig.com/2023/08/smartly-open-xcode/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文分享了如何在 macOS 上智能打开多个版本的 Xcode。作者习惯将 Caps Lock 键映射为超级键,用于快速切换到 Xcode。然而,由于不同版本的 Xcode 可能会导致硬编码的热键打开错误的应用程序,作者介绍了一个名为 Hammerspoon 的小型 Lua 脚本实用程序,以解决这个问题。另外,作者还分享了一个附加内容,允许将脚本扩展到模拟器。这样可以在需要时快速切换到模拟器,并在模拟器和 Xcode 之间进行便捷切换。 + +### 🐎 [​系统自带日志框架 os.Logger](https://mp.weixin.qq.com/s/On3vVRu_gQwT9eT7Do62BQ) + +[@Cooper Chen](https://github.com/cjlcooper):OSLog 是 Apple 在 WWDC2016 推出的一套日志系统,而在今年的 WWDC23 上 Apple 将其进行更新,本文介绍了统一日志框架的基本情况,以及在使用、隐私和日志导的具体使用场景,重点也提到了今年对 OSLog 的更新,为开发者在调试阶段提供了更多的便利。 + +### 🐕 [百度 APP iOS 端包体积 50M 优化实践(五) HEIC 图片和无用类优化实践](https://mp.weixin.qq.com/s/PU5rC0U0XZ1VYqLWSUBWLQ) + +[@xuyafei86](https://github.com/xiaofei86):在之前的百度 APP 的包大小优化系列文章中,介绍了图片优化和代码优化的几种方式,本篇文章重点介绍 HEIC 图片和无用类检测的优化实践。 +HEIC 是 High Efficiency Image Format(高效图像格式)的缩写,是一种新的图像文件格式,它是 2017 年苹果公司在 iOS 11 中引入,用于代替 JPEG 图像格式,以更高效地压缩图像并减少存储空间占用。HEIC 支持多帧图像、透明度和 16 位深度色彩,使得它成为高质量图像和动画的理想选择。 +本文重点探究 HEIC 图片在百度 APP 中使用的可行性和包体积收益,验证 HEIC 图片在 Bundle 和 Asset Catalog 的兼容性,重点研究了 Asset Catalog 管理图片的机制,记录了验证过程中发现的特殊问题和解决思路。无用类则是详细介绍了如何用静态分析和动态分析相结合的方式,精简代码体积。感兴趣的同学可以阅读原文了解。 + + +## 代码 + +### [TipKit-Examples](https://github.com/jordibruin/TipKit-Examples) + +[@zoeGuo](https://github.com/zoeGuo):TipKit 是 WWDC23 上发布的新的 UI 组件库:[Make features discoverable with TipKit](https://developer.apple.com/videos/play/wwdc2023/10229/),[TipKit-Examples](https://github.com/jordibruin/TipKit-Examples) 是一个不错的使用 TipKit 的示例代码,感兴趣的读者可以自行阅读源码。 + +## 设计 + +### 🐎 [A WWDC Design Lab Made My App So Much Better](https://chriswu.com/posts/wwdc/designlab2023/) +[@水水](https://www.xuyanlan.com/):WWDC Design Lab 可以与苹果工程师、设计师和专家进行交流,本文作者介绍了他在 WWDC Design Lab 中和苹果设计师一起就他的天气应用 App 进行了非常友好的交流,苹果设计师提供了一些非常好的建议和反馈,作者也非常用心的进行了改进,可以看出最后的改进结果很令人满意。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[广州] 微信支付 - 客户端开发 - iOS/Android + +[上海] B 站 - iOS 开发 + +[上海] 百度输入法 - 客户端开发 - iOS + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#256-2023.08.14.md b/Reports/2023/#256-2023.08.14.md new file mode 100644 index 000000000..887f85b9c --- /dev/null +++ b/Reports/2023/#256-2023.08.14.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #256 | 2023-08-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/256.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight Update Xcode 15 beta 6](https://developer.apple.com/news/releases/?id=08022023a) + +目前已经可以使用 Xcode 15 Beta 6 打包的 APP 上传 TestFlight 收集用户对一些新特性的反馈了,比较重要的例如 敏感内容检测(SCSensitivityAnalyzer) 等。 + +同时部分隐私收集的选项,如 Write-only 的日历权限申请,笔者亲测会被审核员要求提供使用的路径说明,可以提前准备好并提供录屏说明使用的必要性。 + +隐私相关内容可以查看 [WWDC23 10053 - What's new in privacy](https://xiaozhuanlan.com/topic/9504861273) 。 + +## [《WWDC23 内参》](https://xiaozhuanlan.com/wwdc23) + +本周我们又更新了 3 篇内参,每篇质量都非常高,欢迎大家阅读。 + +> 关注老司机技术公众号,回复「2023」,领取 2023 及往年内参 + +### [WWDC23 10187, 10195, 10189, 10196 - SwiftData 全知道](https://xiaozhuanlan.com/topic/4937125086) + +[@kukushi](https://kukushi.github.io/):SwiftData 是什么?SwiftUI 中要如何使用 SwiftData?SwiftData 能和 Core Data 能一起使用吗?诸多困惑,本文将逐一解答。 + +### [WWDC23 10103 - 探索 App Intents 的功能更新](https://xiaozhuanlan.com/topic/9860547123) + +王守楷、刘欢:本文主要是探索 App Intents 在 iOS17 中带来的新特性。包含以下三部分内容:Widgets 交互性和配置的新体验;对开发者体验改进。包含框架支持,以及对静态提取的增强;Shortcuts 与 App Intents 集成的更新。 + +### [WWDC23 10142 - 探索应用内购测试](https://xiaozhuanlan.com/topic/5180246739) + +Lin:主要简要介绍内购测试的三种方式,帮助你了解每种方式的适用场景和今年引入的新功能。 + +## 文章 + +### 🌟 🐕 [深入理解 Observation - 原理,back porting 和性能](https://onevcat.com/2023/08/observation-framework/) + +[@zvving](https://github.com/zvving):在 WWDC23 上,Apple 发布了新的 Observation 框架,该框架旨在重塑和优化 SwiftUI 的数据流更新机制,简化概念和应用方式,提供更细粒度的控制,并对性能进行优化。然而,需要注意的是,这些新特性只能在 iOS 17 或更高版本上使用,并且随着这些改变,可能会带来一些重大的调整,同时也需要投入一定的学习成本。 + +这篇文章深入地分析了 Observation 框架的实现原理,探讨了其设计思想和性能特性,并与 KVO 和 Combine 的使用场景进行了对比。此外,文章还介绍了一个易于与当前项目兼容,对未来迁移友好的框架 —— ObservationBP。全文内容详尽并富有洞见,对于想要深入理解和掌握最新 SwiftUI 状态管理的开发者来说,堪称必读之作。 + +### 🌟 🐢 [移动端性能挖掘:字节跳动 iOS 与安卓性能归因实践](https://mp.weixin.qq.com/s/12Co7Tbvw2PmIZPqFlxaHA) + +[@Leo](https://github.com/leomobiledeveloper):性能领域是移动端的几个有难度的方向之一,归因又是解决性能问题的最关键的一环,本文详细详解了字节在归因工具方面的实践,推荐阅读。主要包含了三部分内容: + +* 线下工具的发展史、目标和痛点 +* 各种常见的性能问题的解决思路 +* iOS 归因工具实现的底层原理 + +### 🐕 [Dependencies as a Package Author](https://www.massicotte.org/package-author-dependencies) + +[@Barney](https://github.com/BarneyZhaoooo):文章主要表述了针对转移性依赖问题,开源项目作者可通过下列三种策略来高效调整项目依赖结构: + +1. 引入协议(Protocol):提取一个协议,并让客户定义它如何运行。 +2. 使用函数(Function):用单个函数代替协议进行依赖处理。 +3. 直接依赖(Plain Dependency):让用户通过其他包或直接使用方法来实现某项功能。 + +### 🐕 [数据序列化工具 Protobuf 编码 & 避坑指南](https://mp.weixin.qq.com/s/xH9v4Al3B2vPbZIp2yqZpQ) +[@Smallfly](https://github.com/iostalks):Protocol Buffers 是 Google 开发的一种数据序列化协议,相比 XML 和 JSON 它具有更好的性能和向后兼容性,可以清晰的定义数据结构,以文件的形式呈现方便管理和维护。这篇文章分析了 Protobuf 的优缺点,并介绍了它的编码原理,为了减少数字的存储空间,采用了 Varints 和 ZigZag 编码。在文章的最后作者还总结了一些使用 Protobuf 的最佳实践。 + +### 🐎 [GitHub embraces Swift and provides code analysis, security alerts and dependency updates for Swift projects](https://blog.eidinger.info/github-embraces-swift-and-provides-code-analysis-security-alerts-and-dependency-updates-for-swift-projects) + +[@kemchenj](https://kemchenj.github.io/):之前周报介绍了[ GitHub 里的代码扫描功能给 Swift 项目增加了支持](https://github.com/SwiftOldDriver/iOS-Weekly/blob/a6da79a0300d5d99b2a270819f88f6be6ddf1785/Reports/2023/%23250-2023.07.03.md#github-的-dependency-graph-dependabot-alerts-和-advisory-database-现在正式提供-swift-的支持),这篇文章又补充了一些实操的例子,感兴趣的同学可以看看。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#257-2023.08.21.md b/Reports/2023/#257-2023.08.21.md new file mode 100644 index 000000000..4d58837ec --- /dev/null +++ b/Reports/2023/#257-2023.08.21.md @@ -0,0 +1,108 @@ +# 老司机 iOS 周报 #257 | 2023-08-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/257.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [SSWG 2023 Annual Update](https://www.swift.org/blog/sswg-update-2023/) + +[@kemchenj](https://kemchenj.github.io/):Swift 服务端工作组发布了今年的年度进度报告 + +**2022 年的成果:** + +- 加快 Concurrency 的适配进度 + - SSWG 孵化的项目全部都已经适配了 Concurrency 的 API,并且社区里新的项目也基本都是用了 Concurrency + - [自定义 Actor 调度器](https://github.com/apple/swift-evolution/blob/main/proposals/0392-custom-actor-executors.md)的提案从提出到正式实现 +- 优化提升工具链的使用体验 + - Swift for VSCode 插件 1.0 发布 + - Swift 插件在生态里的采纳率上升,从 formatter,linter 到 code generator 都大部分实现了 Swift 插件 + - 发布了 Swiftly,一个 Swift 版本管理工具,方便 Linux 上安装和管理 Swift 版本 +- 优化编译时间,针对服务端项目的一系列编译优化。 + +**2023 年的目标:** + +- 继续集中在社区生态建设 +- 促进 Structured Concurrency 的采纳和适配 +- 优化文档和指引 +- 优化提升工具链的使用体验 + +## 新手推荐 + +🐕 [ARM 汇编快速入门](https://mp.weixin.qq.com/s/-RQ_gtI0siCJ9cKO-hAFWg) + +[@xuyafei86](https://github.com/xiaofei86):本文主要分享如何快速上手 ARM 汇编开发的经验、汇编开发中常见的 Bug 以及 Debug 方法、用的 Convolution Dephtwise 算子的汇编实现相对于 C++ 版本的加速效果三方面内容。 + +## 文章 + +### 🐢 [Releasing Swift Transformers: Run On-Device LLMs in Apple Devices](https://huggingface.co/blog/swift-coreml-llm) + +[@zoeGuo](https://github.com/zoeGuo):随着大模型的持续火热,以及各路大模型的涌现,想必有很多开发者已经跃跃欲试。这是一篇由 Hugging Face 的工程师发布的指导 Swift 开发者在 Mac 上运行大模型的文章。文章主要有以下内容: +- 将模型转换为 CoreML 格式的几种常用方式:[transformers-to-coreml](https://huggingface.co/spaces/coreml-projects/transformers-to-coreml)、[exporters](https://github.com/huggingface/exporters)、[coremltools](https://github.com/apple/coremltools),还有模型转换的一些踩坑经验 +- 开发工具时关注的一些性能优化指标 +- [swift-transformers](https://github.com/huggingface/swift-transformers) 提供的丰富的功能:分词能力,分模型配置能力,生成算法,以及目前已经支持的模型 +- [swift-chat](https://github.com/huggingface/swift-chat) 一个使用 [swift-transformers](https://github.com/huggingface/swift-transformers) 的 Demo + +文末作者还写了一些后续会完善更新的内容。总之这是一篇干货满满的文章,感兴趣的读者可以阅读原文。 + +### 🐕 [Adapting an App to visionOS](https://varrall.substack.com/p/adapting-an-app-to-visionos) + +[@EyreFree](https://github.com/EyreFree):这篇文章描述了作者如何将他的板球应用从 SwiftUI 迁移到 Vision Pro 设备。首先,因为 iPad 应用不支持 visionOS,所以作者在 Xcode 中为 visionOS 创建一个全新工程并将现有代码复制了过去。然后作者还提到了一些其他具体的细节,例如添加 WindowGroup、调整背景和颜色以适应 visionOS 的特性等。同时作者发现 visionOS 上的彩色文字难以阅读,建议其他开发者注意此问题。在文章的最后,作者表示在几个小时内完成的进展令自己非常满意,看起来整体迁移的体验还是很不错的。建议有在做 visionOS 开发 / 适配的朋友阅读本文。 + +### 🐎 [Build performance analysis for speeding up Xcode builds](https://www.avanderlee.com/optimization/analysing-build-performance-xcode/) + +[@Cooper Chen](https://github.com/cjlcooper):在开发过程中,缓慢的构建通常会分散我们的注意力并影响效率,本文从通过 Xcode 建立 Build 耗时基线开始,使用 Build Timing Summary 进行 Build 时间分析,并且提供了一些 Build 加速的小技巧,作者主旨是在提醒开发者重视项目构建时间,这对于大型工程已经多团队开发有着至关重要的影响,通过本文也可以为相关领域的开发同学提供一些优化的思路。 + +### 🐎 [Dead Code Detection With Reaper](https://www.emergetools.com/blog/posts/dead-code-detection-with-reaper) + +[@老峰](https://github.com/gesantung):很多大型项目在长时间的维护迭代过程中会产生很多无用代码如无调用的、不会执行的分支等。本文介绍了 iOS 新框架 Reaper,其大致原理是 OC 中所有类在第一次使用时都会发送一个 +initialize 方法(Swift 需特殊处理),只需接入 SDK 运行时检测无用代码并生成报告,它还可以获得每个类的使用时间,也可以用作启动优化,感兴趣的朋友可以尝试。 + +### 🐢 [swiftui-cookbook](https://www.kodeco.com/books/swiftui-cookbook) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftUI Cookbook 是由 Kodeco 团队提供 , 在 SwiftUI 中创建用户界面的常见模式的参考,涵盖了使用 SwiftUI 开发用户界面时必须解决的常见问题 , 可以在编码时快速参考。SwiftUI Cookbook 适合任何编写 SwiftUI 代码并需要快速刷新特定语法或技术的人。 + +### 🐎 [AppKit vs SwiftUI: Stable vs Shiny](https://milen.me/writings/appkit-vs-swiftui-stable-vs-shiny/) + +[@水水](https://www.xuyanlan.com/):在编写原生 macOS 应用程序时,开发人员需要决定在哪个 UI 框架中编写新代码,是选择 AppKit 还是 SwiftUI ?在 2022 年 WWDC 上 Josh Shaffer 阐述了未来平台的愿景说构建应用程序的最佳方式是使用 Swift 和 SwiftUI ,但 SwiftUI 并不是当今 AppKit 的完全替代品,尤其是在 MacOS 上的表现上。很多开发人员表述了使用 SwiftUI 并不如现象中简单,会遇到的各种问题。虽然比不过 AppKit 在 30 年的稳定和成熟,但是 SwiftUI 正在多个维度上解决一个更加困难的问题:声明性、跨平台、重写,而且很显然苹果重心是放在 SwiftUI 上。所以如何选择 UI 框架: + +- 为了对 UI 框架做出明智的决策,我们需要了解是什么推动了决策,用例和优先级是什么。 +- 如果你想玩一个崭新的 API,或者用一个新的模式写一个应用程序,那么 SwifUI 显然是赢家, 你将获得重要的技能,你将能够在未来发挥作用。 +- 要支持旧版本的 macOS,请使用 AppKit。 +- 对于长格式文本编辑或数千条记录,请使用 AppKit。 +- 对于现有的 AppKit 应用程序,请逐步添加 SwiftUI。 +- 对于其他一切,请从 SwiftUI 开始,并根据需要包含 AppKit。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 — 内容终端技术团队 — 手淘首页 & 信息流方向 — iOS/Android + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#258-2023.08.28.md b/Reports/2023/#258-2023.08.28.md new file mode 100644 index 000000000..097104150 --- /dev/null +++ b/Reports/2023/#258-2023.08.28.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #258 | 2023-08-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/258.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [Flutter 3.13 更新](https://mp.weixin.qq.com/s/4zM6hwGKsR0X7E6n2VlCXA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 季度更新来啦 !!!本次更新依然在 3.x 系列之下,也就是说还是持续的修复和优化,那么本次带来了哪些有意思的能力呢 : + +- 优化了 Impeller 在 iOS 上的性能,同时 mac OS 已经可测试 +- 折叠屏设备获得支持 +- Material 3 持续增进支持,下一个版本讲默认 M3 选项 +- 应用生命周期监听改进 +- TwoDimensional,新的滚动机制 +- New slivers,支持组合使用 + +## 新手推荐 + +### 🐎 [Applying metal shader to text in SwiftUI ](https://augmentedcode.io/2023/08/07/applying-metal-shader-to-text-in-swiftui/) + +[@Cooper Chen](https://github.com/cjlcooper):今年的 WWDC23 引入了用于将 shaders 着色器应用于 SwiftUI 视图的视图修改器,同时因为着色器还符合 ShapeStyle 协议,这意味着开发者可以直接将着色器传递给 foregroundStyle 视图修改器,然后 SwiftUI 就使用着色器计算视图的像素颜色值,本篇文章通过简单的例子,可以了解如何将着色器应用于文本,对于新入门相关开发的同学是一个不错的参考。 + +## 文章 + +### 🐕 [Swift ’ s closure capturing mechanics](https://www.swiftbysundell.com/articles/swifts-closure-capturing-mechanics/) + +[@JonyFang](https://github.com/JonyFang):尽管 Swift 的自动引用计数管理了内存,虽然我们常常听到过于简化的规则,比如“在闭包中始终使用弱引用”,但理解闭包的捕获方式以及如何引用对象和值很重要。日常开发中,需要深入了解这些机制,并根据实际情况进行合理应用。 + +1. 隐式捕获。在定义逃逸闭包时,它会隐式捕获内部引用的对象、值和函数。为了防止在稍后执行时被释放,这些闭包需要保持对所有依赖项的强引用。举例说明了如何使用 GCD 延迟显示 UIAlertController,并提到了这种捕获方式可能导致一些棘手的错误和内存问题。同时,也提到了对于已被从视图层次结构中移除的视图控制器,需要谨慎处理以避免问题。 + +2. 捕获列表。通过在闭包内部使用捕获列表,可以指定对象是以弱引用还是默认的强引用被捕获。通过弱引用捕获对象,可以避免潜在的保留循环问题,特别是在需要引用 `self` 时。通过示例展示了在闭包中使用捕获列表的具体应用场景,以及如何避免保留循环的问题。总体而言,捕获列表是解决闭包中引用问题的有效方式,能够更加精确地控制对象和值的引用关系。 + +3. 使用捕获列表避免保留循环。弱引用不是所有情况的最佳解决方案。不同情况下应谨慎考虑如何使用 self,以及闭包在内存中的寿命。在短暂的闭包中,如 UIView 动画,捕获 self 通常没问题,而且代码易读。但在闭包中访问实例方法和属性时,需要明确引用 self,以明确捕获决策。有些情况下需要长时间保留 self,例如当当前对象在闭包中的工作是必要的时。同时,捕获列表能够让我们直接捕获闭包的依赖项,而无需引用整个 self。在仅需要访问少数属性而不是整个 self 时非常有用。 + +4. 捕获值。值类型在闭包捕获中较复杂。值类型在闭包中被传递时是以副本的形式进行传递,这使得 Swift 的值类型非常强大,但在特定情况下可能会出现意外 case。例如,在给按钮分配处理闭包时,捕获 `sender` 和 `message` 属性可能会导致值的不一致。对于可变值,解决方法是在闭包中只捕获 `self`,然后将该值直接映射到发送方法。然而,对于常量,将这些属性添加到闭包的捕获列表中没有问题。 + +5. 无主引用(unowned)。闭包捕获中 unowned 引用与弱引用一样,也是通过捕获列表指定的,只能应用于引用类型。使用 unowned 与使用强制解包的可选项实际上会得到相同的结果,即将弱引用视为非可选项,但如果在引用释放后尝试访问它,会导致崩溃。使用 unowned 虽然让我们摆脱了可选项,有时可能非常方便,但它会在引用释放后引发崩溃,除非我们绝对确定给定的闭包在其中一个依赖项被释放后不会意外触发。然而,与其使用 unowned,我们可以通过断言来实现完全相同的效果。虽然这会导致一些额外的代码,但在失败时会提供更具可操作性的错误消息,并且不会在生产环境中引发崩溃。 + +理解闭包的捕获方式以及如何引用对象和值很重要,日常开发中需要合理应用。 + +### 🐕 [Deterministic builds with clang and lld](http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html) + +[@老峰](https://github.com/Gesantung):可重现构建(英语:Reproducible builds)也被称为确定性编译(英语:Deterministic compilation),即使用确定性编译编译的源代码在任何路径,时间,环境将始终输出相同的二进制文件。本文主要介绍了 Deterministic compilation 基本概念,以及如何使用 LLVM 创建确定性构建。 + +### 🐕 [How to Automate Memory Leak Detection in Your Swift Code with XCTest](https://qualitycoding.org/swift-memory-leak-detection-xctest/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何使用 XCTest 自动检测 Swift 代码中的内存泄露:使用 XCTestCase 中的 addTearDownBlock 方法,在测试方法结束时,通过断言检查对象是否正确释放。 + +### 🐎 [How to check if you use a required reason API](https://blog.eidinger.info/how-to-check-if-you-use-a-required-reason-api) + +[@J_Knight_](https://github.com/knightsj):我们在调用某些 API 的时候,需要我们向苹果官方告知使用的原因(比如一些可以用于标识设备的一些系统参数),本文作者把这类的 API 叫做 “ Required Reason API ”。作者简单介绍了这些 API 的类型,也提供了一个脚本用于在代码中查找出这类 API + +## 代码 + +### **[SwingAnimation](https://github.com/TopWidgets/SwingAnimation)**:一份价值 500 的代码 + +[@卓同学](https://twitter.com/bestlacklock):事情的起因是[自力 hzlzh]( https://twitter.com/hzlzh/status/1692205775928836405?s=20)在推特上“悬赏” 500 元想要知道小组件如何能做位移动画的秘密。苹果官方并不支持小组件做动画,因此要做到这个动画肯定是找到了一个特别的实现方式。悬赏发出来不到一天,就有一位开发者成功获得了悬赏。 + +我把这件事告诉了我们一位不愿意透露姓名的编辑后,这位编辑有着强烈的求知欲,于是也花了 500 获得了这个秘密。并在社交网络上分享:“昨天花了 500 买了一份代码,挺划算的”。与此同时我也在朋友圈说到:“彪子你太爱学习了”。 + +正当我们沉浸在一个价值 500 的秘密分享给另外一个人,等于白赚了 500 ,等于当时没花钱的喜悦的时候,某知名小组件开发者[树](https://twitter.com/_Octree)开源了这个方案。所以这是一份实打实价值 500 的代码了,如果有需要做小组件位移动画的欢迎前往了解学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 阿里巴巴 — 内容终端技术团队 — 手淘首页 & 信息流方向 — iOS/Android + +[上海] - 完美世界 电竞 - iOS + +[北京 / 杭州] - 抖音投屏 - Android/iOS + +[北京] - 百度网盘 iOS/Android/FE/Server 研发工程师 + +[深圳 / 广州 / 北京 / 三亚] 字节跳动 - 剪映 - 招聘客户端开发 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#259-2023.09.04.md b/Reports/2023/#259-2023.09.04.md new file mode 100644 index 000000000..0ab22e956 --- /dev/null +++ b/Reports/2023/#259-2023.09.04.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #259 | 2023-09-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/259.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [一文入门最热的 LLM 应用开发框架 LangChain](https://mp.weixin.qq.com/s/bYzNNL3F0998Do2Jl0PQtw) + +[@zoeGuo](https://github.com/zoeGuo):LangChain 是一个用于开发由语言模型驱动的应用程序的框架。笔者认为 Langchain 解决了现在开发人工智能应用(以 GPT 模型为例)的一些切痛点:数据滞后、token 数量限制、不能进行联网、不能与其他数据源链接。文章逐一介绍了 LangChain 以下组件的使用:Models(模型)、Prompts(提示词)、Indexes(索引)、Chains(链)、Agents(代理)。简单示例了用 LangChain 加载 OpenAI 的模型,完成一次问答、通过谷歌搜索并返回答案、对超长文本进行总结、构建本地知识库问答机器人等几个 LangChain 实战。 + + +### 🐕 [Adding teachable moments to your apps with TipKit](https://bendodson.com/weblog/2023/07/26/tipkit-tutorial/) + +在今年的 WWDC 中,苹果推出了 Tipkit,开发者可以通过 Tipkit 快速向应用中添加例如新手引导、新功能介绍等功能,并且 Tipkit 可以通过 iCloud 跨设备显示。本文是 Tipkit 使用的一个实战教程,想要了解这个新功能的同学,可以跟着示例快速实践并掌握如何使用。 + + +### 🐕 [Mastering Thread Safety in Swift With One Runtime Trick](https://betterprogramming.pub/mastering-thread-safety-in-swift-with-one-runtime-trick-260c358a7515) + +[@莲叔](https://github.com/aaaron7):作者首先简单的介绍了多线程开发中最典型会遇到的问题,然后介绍了在苹果平台中性能最好的锁:os_unfair_lock,同时介绍在了 Swift 中如何使用它。之后作者演示了如何通过 propertyWrapper 来更通用的实现原子化的变量,并搭配一个比较冷门的 _modify 方法来规避常见赋值可能因为 get+set 组合不原子化的坑。 + +### 🐕 [Improve the build times of your SPM Packages and your apps](https://mdb1.github.io/2023-08-18-improve-build-times-in-spm-packages-and-in-your-apps/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文主要涉及如何缩短 SPM(Swift Package Manager)包和应用程序的构建时间,以提高开发效率。以下是主要要点: +- 测量和改进构建时间:文章开始强调了测量构建时间的重要性,并建议在测试前 / 测试后使用相同的环境来进行测量。它区分了两种构建类型: + - Clean Builds(干净构建):完整重新编译整个代码库,无论是否有更改 + - Incremental Builds(增量构建):仅编译自上次构建以来发生更改的代码 + +- 使用时序摘要和最近的构建时间线:文章介绍了 Xcode 提供的两个工具,用于测量编译时间和构建时间线,以帮助识别需要优化的区域 +- 改进 Xcode 项目中的编译时间:文章提供了一些建议,包括启用警告以标识编译时间过长的代码、明确指定类型以减少编译时间等 +- 改进 SPM 包中的编译时间:文章介绍了如何通过在 SPM 包中应用相同的优化来减少构建时间,以及如何使用自定义规则来规范代码以提高编译效率 +- SwiftLint 规则:文章提到了一些 SwiftLint 规则,如 explicit_init 和 explicit_type_interface,可以帮助简化代码并可能减少构建时间 + +总的来说,这篇文章提供了关于如何提高 SPM 包和应用程序构建效率的详细指南,包括测量、警告启用、类型明确指定等技巧和建议。通过实施这些优化,开发团队可以更快地构建和测试他们的代码。 + +### 🐕 [为现有 App 及 API 架构实现 End-to-End Testing 的可能性验证](https://medium.com/zrealm-ios-dev/poc-app-end-to-end-testing-local-snapshot-api-mock-server-5a5c4b25a83d) + +[@EyreFree](https://github.com/EyreFree):本文记录了作者实验在现有的 App / API 架构之上使用 Proxy Server 录制 API Request & Response 并回放作为 Mock Server API 给 End-To-End Testing 测试时使用的做法试探,同时尝试了基于 Mitmproxy 套件自行撰写 API 录制和回放脚本,有在做相关工作的同学建议阅读。 + +### 🐕 [解析 SwiftUI 中两处由状态更新滞后引发的严重 Bug](https://www.fatbobman.com/posts/serious-issues-caused-by-delayed-state-updates-in-SwiftUI/) + +[@Damien](https://github.com/ZengyiMa):SwiftUI 是一个响应式框架,当数据源发生变化时,框架会自动更新视图。本文解析了 SwiftUI 中两个由于未能贯彻响应式编程原则而导致的严重错误: +* 通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 +* 当视图正在滚动时返回上一层视图会导致应用崩溃 + +同时作者也提供了对应的解决方案,如果读者有遇到类似的问题,不妨一读。 + +### 🐕 [腾讯 QQ 桌面版架构升级:内存优化探索与总结](https://mp.weixin.qq.com/s/REHP26sx-8HjDIvGM63kJw) + +[@Leo](https://github.com/leomobiledeveloper):桌面版应用相比 Web 端具有停留时间长的特点,如果没有控制好内存,会导致交互响应慢或者崩溃。在这篇文章中,QQ 相关团队和大家分享新版 QQ 在内存优化方面的探索和阶段性优化进展。虽然本文的讨论主要集中在 Windows 平台,但由于 Electron 的跨平台特性,大部分优化措施也同样适用于 macOS 和 Linux 平台。 + +### 🐎 [SwiftUI Tips:如何收起键盘](https://juejin.cn/post/7268592310040199223) + +[@享耳先森](https://github.com/iblacksun):文章列举了 `SwiftUI` 中多种收起键盘的方式,适合刚入 `SwiftUI` 的同学们。 + +### 🐎 [Flutter 小技巧之 3.13 全新生命周期 AppLifecycleListener](https://mp.weixin.qq.com/s/wrWTklYNwLlTMBZJHxaudA) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了 Flutter 在 3.13 版本中的新的生命周期类 AppLifecycleListener 的使用方法,新的 AppLifecycleListener 类不用再如之前一样选择 mixin 的处理方案,可以直接在类中进行初始化,使用起来更加方便并且有利于全局统一的处理。新的生命周期回调方法更多也更加直观。本文对 hidden 的由来也做了简单的讲解,有利于各位开发者更好的理解 hidden 与 show 方法。 + +## 工具 + +### [Arc on Windows projects: swift-build](https://github.com/thebrowsercompany/swift-build) + +[@kemchenj](https://kemchenj.github.io/):Arc 是一款在产品体验上做了很多革新的浏览器,除了产品之外,技术选型也非常激进,选择了 Swift 作为它们主要的编程语言,但 Arc 需要支持 macOS 之外的桌面系统,而 Apple 在 Windows/Linux 平台上的投入很少。 + +所以 Arc 团队找到了 LLVM 团队的工程师 Saleem Abdulrasool,出钱资助他去帮助搭建 Swift on Windows 的工具链,后来他甚至进入了 Swift 的核心团队专门负责这件事情,并且今年也正式加入了 Arc 团队的公司。 + +如果你也钟情于 Swift 并且需要在 Windows 上使用,可以关注这个项目了解 Swift on Windows 的最新进展。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#260-2023.09.11.md b/Reports/2023/#260-2023.09.11.md new file mode 100644 index 000000000..87467d78c --- /dev/null +++ b/Reports/2023/#260-2023.09.11.md @@ -0,0 +1,92 @@ +# 老司机 iOS 周报 #260 | 2023-09-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/260.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Hidden feature: static properties](https://www.swiftwithvincent.com/blog/hidden-feature-static-properties) + +[@极速男孩](https://github.com/ztlyyznf001):Swift 的静态属性具有一项隐藏特性:它们是隐式懒加载的,只在首次访问时初始化。这意味着,即使应用中有许多静态属性,它们也不会在应用启动时全部初始化,从而优化性能。若尝试显式地用 lazy 关键字声明静态属性,Swift 会报错,因为静态属性已经是懒加载的。 + +## 文章 + +### 🐕 [C++ 知识体系总结:语言核心与代码工程](https://mp.weixin.qq.com/s/lQoH4UF36_zKrw-Jbp2ylw) +[@莲叔](https://github.com/aaaron7):这篇文章初看下属于谁看了必然会收藏但大概率不会看的文章。但看完后又给我很不一样的体感,虽然文章较长而且涉及的点比较多,但并不是单纯追求大而全,而是围绕 C++ 一些常用的新特性进行了介绍,根据我的经验在现代 C++ 的项目里几乎都会用到里面介绍的特性,同时每个特性都包含示例代码帮忙理解,大幅提高了学习的效率。对于工作中需要和 C++ 打交道的同学来说是很不错的资料。 + +### 🐎 [The new Swift section in binaries built with Swift 5.9 and Xcode 15, \_\_TEXT/\_\_constg_swift](https://twitter.com/sond813/status/1699822345471541415) + +[@kemchenj](https://kemchenj.github.io):Swift 在运行时经常需要遍历查询类型的元信息,但 Swift 编译链接后的二进制产物里,类型的元信息是各自分散的,导致启动时会频繁触发 page fault,并且 CPU 缓存命中率也会下降。 + +在即将发布的 Swift 5.9 里,编译器会将这些信息集中存放到各自的 Section 里,改善前面提到的问题。 + +### 🐕 [一线大厂程序员的考公上岸心得](https://mp.weixin.qq.com/s/dlOEngLD150RaTkAlAVkww) + +[@老驴](https://weibo.com/u/6090610445):一篇和我们之前推荐的很不一样的文章,是一位之前在微软的 Edge 的同学,后来如何考公务员的访谈。在大家都不容易的时间里,算是比较有意思的经验分享。当然,这不代表老司机的立场,只是做一个分享,能让大家看到一些不一样的视角。 + +### 🐕 [Xcode 15 iOS 17 小组件适配必看:Widget needs to adopt container background](https://www.craft.me/s/UOcc5BqYFazbL2) + +[@anotheren](https://github.com/anotheren):在使用 Xcode 15 后,如果你的项目代码包括了小组件,那么就会收到 "Widget needs to adopt container background" 的提示,要求进行相关适配。本文介绍了相关适配的要点,推荐阅读。 + +### 🐕 [Develop and test OpticID for Vision Pro](https://blog.eidinger.info/develop-and-test-opticid-for-vision-pro) + +[@EyreFree](https://github.com/EyreFree):Optic ID 是一种全新的安全生物识别系统,用于对用户进行身份验证,它的调用方式和在 iOS App 中使用 FaceID 类似。在这篇博文中,作者解释了开发者应该如何利用 Optic ID 进行身份验证以及如何在 Vision Pro 模拟器中测试 OpticID,感兴趣的同学可以阅读原文进行了解。 + +### 🐕 [实战总结|抽丝剥茧,记一次神奇的崩溃](https://mp.weixin.qq.com/s/vMlK7oIQH62VV6qHSPHnQQ) + +[@xuyafei86](https://github.com/xiaofei86):本文详细回放了一个崩溃案例的分析过程,感兴趣的同学可以阅读原文了解。 +1. 回顾了 C++ 多态和类内存布局相关知识,了解原理后查看内存让我们看到了更多代码内部的细节。 +2. 回顾了 pc 指针的含义并了解了更多 arm 异常处理机制,解释了一些日常认为理所当然的结论背后的原理。 +3. 回顾了内存屏障相关知识,并构造了 demo 对理论分析进行了实践验证。 + + +## 工具 + +### 🐎 [京东京喜 iOS 包体积分析工具](https://juejin.cn/post/7273740834201600063) +[@Damien](https://github.com/ZengyiMa):一款用于分析 iOS IPA 包的脚本工具,使用此工具可以自动扫描发现可修复的包体积问题,同时可以生成包体积数据用于查看。工具京东京喜团队内部已经使用很长一段时间,希望可以帮助到更多的开发同学更加效率的优化包体积问题。 + +## 代码 + +### 🐎 [add a label to the outer loop and use break with the label](https://twitter.com/lee_kah_seng/status/1696795033033208151?s=43&t=Oi5pq1Y0PftkjDmJadkvxQ) + +[@zoeGuo](https://github.com/zoeGuo):在 Swift 中使用嵌套循环的时候,你可能会有这样的需求:同时跳出内部和外部的循环;这个时候就可以为外层循环添加一个标签,在需要 break 的时机,选择 break 这个标签。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#261-2023.09.18.md b/Reports/2023/#261-2023.09.18.md new file mode 100644 index 000000000..11012436f --- /dev/null +++ b/Reports/2023/#261-2023.09.18.md @@ -0,0 +1,106 @@ +# 老司机 iOS 周报 #261 | 2023-09-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/261.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store submissions now open for the latest OS releases](https://developer.apple.com/news/?id=khzvxn8a) + +Xcode 15 RC 版本已经正式发布,目前 AppStore 已经可以接受使用 RC 版 Xcode 构建的产物了,同时苹果预告将在 2024 年 4 月起禁止使用 Xcode 14 提交新的产物。 + +## 文章 + +### 🐎 [网易云音乐 Tango 低代码引擎正式开源!](https://mp.weixin.qq.com/s/X_F2JMY3rUm_mH-NP1FmEA) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了网易云开发的一款快速构建低代码平台的低代码设计器框架 Tango,该框架主要用于简化前端系统的搭建流程。相较于基于私有 Schema 的低代码搭建方案,Tango 的基于源码 AST 转换方式可以做到面向以源码为中心的应用搭建场景,并且具有更好的扩展性,原有组件亦可以无缝低成本接入。现今 Tango 已经开源,大家可以去 GitHub 直接查看源码以及应用文档。 + +### 🐎 [Symbolicating SwiftUI (and any Apple Framework)](https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework) + +[@邦Ben](https://weibo.com/linwenbang):Apple 为大多数系统框架(UIKit,AVFoundation 等)提供了符号,但其他如 SwiftUI,Combing 等则没有提供,那么依赖这个进行符号化的工具,这无法正确的显示。文中作者通过参考 Libc 中开源的代码 backtrace.c 中的实现,并且改进了方法进一步实现了获取完整符号的方法,在做相关内容的同学,可以参考一下。 + +### 🐎 [Understanding Container Background for Widget in iOS 17](https://swiftsenpai.com/development/widget-container-background/) + +[@享耳先森](https://github.com/iblacksun):在即将发布的 iOS 17 中,Apple 扩展了 Widget 的使用范围,为了适应这一变化,引入了 `containerBackground(for:alignment:content:)` 这一 API。如果使用 Xcode 15 编译项目而 Widget 没有适配这一 API 将会报错,文章解释了这一 API 的作用及用法。 + +### 🐢 [A Day in the Life of a SwiftUI View](https://chris.eidhof.nl/presentations/day-in-the-life/) +[@Smallfly](https://github.com/iostalks):这篇文章是 SwiftConf.to 大会上的演讲稿。主题是关于作者所理解的 SwiftUI 背后的思维模式。作者通过演示如何将 SwiftUI 代码转化成视图树(View Tree)和渲染树(Render Tree)的方式来分享他的理解。 + +演讲内容包括以下要点: +- 如何将 SwiftUI 的代码转化成视图树和渲染树。 +- 视图树是短暂的,而渲染树是持久的,它们之间的区别和重要性。 +- 如何处理异步加载数据,以及在渲染树中使用任务(task)来实现数据加载。 +- 对 SwiftUI 布局系统的讲解,包括如何使用 `resizable` 和 `aspectRatio` 来控制视图的大小和比例。 +- 使用环境(Environment)和偏好设置(Preferences)在视图树和渲染树中传递信息的方法。 + +文章中提到了一些 SwiftUI 的内部工作原理和技巧,以及如何更好地理解和利用 SwiftUI 进行应用程序开发。这篇文章可能对希望深入了解 SwiftUI 的开发者有所帮助。 + +### 🐎 [我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash](https://mp.weixin.qq.com/s/salgoWNYfqjhNwu30aHRnA) + +[@JonyFang](https://github.com/JonyFang):因键盘 Crash 问题,通过逆向分析定位到 iOS16 系统键盘 `tryLock` 时的系统 Bug,提供了一套可修复的方案。借助 `+(void)load` 方法在 App 启动时执行的特点实现对 `-[UIKeyboardTaskQueue tryLockWhenReadyForMainThread]` 方法的 Hook,仅在 iOS 16 的 Arm64 架构上生效。 + +## 工具 + +### [Introducing swiftly, a new Swift toolchain installer and manager](https://forums.swift.org/t/introducing-swiftly-a-new-swift-toolchain-installer-and-manager/67254) + +[@kemchenj](https://kemchenj.github.io):Swiftly 是一个 Swift 的版本管理器,类似于 nvm,rvm,rustup,可以用来快速安装各个版本的 toolchain 并且进行切换,作为 SSWG 的项目正在孵化当中,以后有望成为官方首选的 Swift 安装方式。 + +## 代码 + +### [SwiftDataKit](https://github.com/fatbobman/SwiftDataKit) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftDataKit 是 SwiftData 的扩展库,它使 SwiftData 开发人员可以访问 SwiftData 元素背后对应的 Core Data 对象。由于 SwiftData 框架功能尚不完善,开发人员仍需通过调用 Core Data 的方法来实现一些高级功能。使用 SwiftDataKit,可以让开发人员在某些场景下避免重复创建 Core Data 版本的 Data Model 和 Stack。更多详情可参阅 [SwiftDataKit:让您在 SwiftData 中使用 Core Data 的高级功能](https://www.fatbobman.com/posts/use-Core-Data-features-in-SwiftData-by-SwiftDataKit/)。 + + +## 音视频 + +### 🐎 [Introducing a Memory-Safe Successor Language in Large C++ Code Bases - John McCall - CppNow 2023](https://www.youtube.com/watch?v=lgivCGdmFrw) + +[@老峰](https://github.com/gesantung):视频主要讲了 Apple 生态过去的编程语言(C/C++/Objective-C/Objective-C++)存在内存安全的问题,以及后继者 Swift 如何解决这些问题,为什么要使用 Swift 等。 + +### 🚧 [Swift TO](https://www.swiftconf.to/) +[@zvving](https://github.com/zvving):Swift TO,一个源自加拿大的 iOS 社区组织,尽管面临严峻的运营挑战并[即将结束运营](https://www.swiftconf.to/swift-to-is-closing-down/),但依旧保持开放性,将最近的技术分享视频公开,欢迎感兴趣的朋友通过视频参与交流学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 百度网盘 - 基础架构/业务 - iOS/Android/FE + +[上海/杭州/北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#262-2023.09.25.md b/Reports/2023/#262-2023.09.25.md new file mode 100644 index 000000000..01f50fbf2 --- /dev/null +++ b/Reports/2023/#262-2023.09.25.md @@ -0,0 +1,132 @@ +# 老司机 iOS 周报 #262 | 2023-09-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/262.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [WebP 堆缓冲区溢出 安全漏洞](https://github.com/advisories/GHSA-j7hp-h8jx-5ppr) + +23 年 9 月 12 日 Libwebp 公布了一个高危漏洞 [CVE-2023-4863](https://nvd.nist.gov/vuln/detail/CVE-2023-4863),评级为 **Critical(8.8)** 。受影响方众多,包括 Chrome,Firefox 等浏览器;集成 libWebP 的客户端 APP,以及包括部分版本的 Electron、flutter 。列举部分受影响的组件: + +- webP(< [1.3.2](https://chromium.googlesource.com/webm/libwebp/+/refs/heads/1.3.2)),推荐直接升级至 1.3.2 +- Electron(< 26.2.2/25.8.2/24.8.3/22.3.24) +- flutter(< 3.13.4) + +由于漏洞已被公开,有被利用后攻击的风险(具体攻击方式不便展开),大家可以视项目情况进行升级。 + +## 文章 + +### 🐕 [iOS 点九图 NinePatch 解析](https://mp.weixin.qq.com/s/angyJag7AZntt2FLNCOuXw) + +[@Barney](~https://github.com/BarneyZhaoooo~):文章主要介绍了 iOS 点九图的应用实战。有原理介绍也有代码,是非常具体的实践,值得学习。 + +- 点九图制作生成。 +- PNG 文件格式介绍和代码实践。 + + +### 🐕 [开箱即用-移动网络 IPv6 浓度检测工具](https://juejin.cn/post/7278899547828224039) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文介绍了一款移动网络 IPv6 浓度的检测工具,旨在推动 IPv6 技术的广泛应用。本文详细说明了该工具的背景、使用方法,以及如何通过抓包和数据分析来评估移动应用的 IPv6 流量占比,进而指导网络改进工作。此外,本文还提供了其他诸如手机抓包、Safari 调试等检测方法,以帮助读者更好地理解和推广 IPv6 技术在移动网络中的应用。 + +### 🐎 [Shake to undo in a SwiftUI app](https://blog.thomasdurand.fr/story/2023-09-04-shake-to-undo-swiftui/) + +[@zoeGuo](https://github.com/zoeGuo):这篇文章介绍了如何在 SwiftUI 应用中实现"摇一摇撤销"的功能。作者从怎么在 SwiftUI 中使用 UndoManager ,到具体如何在 SwiftUI 中实现"摇一摇"手势,给予用户适当的提示保证数据不会被误操作丢失,以及监听 undo 操作的发生来正确处理逻辑,提供了使用 SwiftUI 实现"摇一摇撤销"功能的详细步骤和思路。作者最后展示了将所有这些逻辑和 UI 实现封装至一个可重用的修饰符中,整个功能的使用代码变得极其简洁。 + +### 🐢 [How to build an iOS Live Activity](https://medium.com/kinandcartacreated/how-to-build-ios-live-activity-d1b2f238819e) + +[@anotheren](https://github.com/anotheren):这是一篇新手向的文章,从创建、UI 展示、数据更新等各方面给出了如何构建你的第一个“ Live Activity ”(实时活动) 的全流程指导,是时候将实时活动加入你的应用了。 + +### 🐕 [Swift Macro: Revisited - The Strengths and Essence](https://wezzard.com/post/2023/08/swift-macro-revisited-the-strengths-and-essence-a5a4) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章详细探讨了 Swift 宏的优势和本质。 + +- 通过在编译时转换程序员的代码来生成代码。具备类型检查和语法树检查能力,能够限定宏的使用场景,还可以明确宏接受的参数类型。 +- 对于独立宏,它们可以影响使用处的控制流并共享词法范围。 +- 对于附加宏,它们可以将现有成员变量,转换成另一种形式来扩展该类型,并通过添加访问器来重写属性。扩展内容不仅带来新的行为,而且共享扩展点的”命名空间”。还值得注意的是,向存储属性添加访问器也会将其语义从存储属性更改为计算属性。 + +相比 Swift 中现有的代码重用方法,Swift Macro 通过拥抱不同的设计理念,提高了语言的代码可重用性。 + +### 🐕 [Swift Macro: Revisited - Traps and Pitfalls](https://wezzard.com/post/2023/08/swift-macro-revisited-traps-and-pitfalls-1034) + +[@邦Ben](https://weibo.com/linwenbang): + +该文章对 Swift 宏使用过程中会出现的一些陷阱问题进行了示例说明,例如: +- 宏里面如果包含了 return,在 for 循环里用,展开会直接 return 而不是继续执行 +- 定义命名冲突,其他框架的 propertyWrapper 导致的冲突,或者是 lazy 都会冲突,重复访问等 +- 语义冲突 + +解决方案文中也给了建议: +- 宏名字清晰,如果不允许在某个场景使用的话,可以写清楚 +- 将宏扩展放在闭包内进行保护 +- 引用其他库的时候尽量保证命名唯一 +- 宏内部不进行定义变量 +- 提供重命名的方法 +- 提供 ignore 方法 +- 提供对应的使用说明文档 + +展开后的问题和你在 OC 中用到宏也是会遇到类似的场景,大规模以及复杂场景使用的时候,尤其需要注意这类异常 case + +### 🐎 [iPhone 15 Screen Sizes](https://useyourloaf.com/blog/iphone-15-screen-sizes/) + +[@ChenghzhiHuang](https://github.com/ChenghzhiHuang):本文总结了 iPhone 15 系列的屏幕信息,包括 StatusBarHeight、SafeArea、屏幕分辨率等。需要适配的同学可以自行翻阅。 + +## 工具 + +### 🐎 [Flutter 最优秀动画库「完全商业化」,Rive 2 你全面了解过吗?](https://juejin.cn/post/7275155682051145787) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Rive 动画在 Flutter 领域类似于 Lottie 在 iOS 和 Android 上的地位,同样提供了在线编辑器;当然了,Rive 也是支持全平台的,本文带你详细入手 Rive 动画,从制作到代码联动。 + +## 代码 + +### 🐎 [ExampleKit](https://github.com/toph42/ExampleKit) + +[@Cooper Chen](https://github.com/cjlcooper):这个开源工程提供了在 Swift Playgrounds 中创建自己的库并进行发布管理,其中详细介绍了如何创建模板、源控制等操作,这对于需要进行相同代码不同平台开发的开发者来说是一个实用的工具。 + +### 🐎 [SnapshotTesting](https://github.com/pointfreeco/swift-snapshot-testing) + +[@J_Knight_](https://github.com/knightsj):提供了一个开源的用于 Swift 开发的快照测试(Snapshot Testing)框架。除了支持对 UIView 进行快照以外, 还支持其他数据类型以及在不同设备型号上的快照。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 百度网盘 - 基础架构 / 业务 - iOS/Android/FE + +[上海 / 杭州 / 北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#263-2023.10.16.md b/Reports/2023/#263-2023.10.16.md new file mode 100644 index 000000000..7ff6a0c67 --- /dev/null +++ b/Reports/2023/#263-2023.10.16.md @@ -0,0 +1,110 @@ +# 老司机 iOS 周报 #263 | 2023-10-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/263.png?raw=true) + +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [ICP 备案上线](https://developer.apple.com/cn/help/app-store-connect/reference/app-information/) + +国庆节前夕,苹果审核商店也正式上线了 ICP 备案。目前新 APP 需要填写备案号才能提交审核;老 APP 目前不填备案号也能正常提审(预计是明年 4 月强制执行)。 + +> 中国工业和信息化部(MIIT)要求 App 必须具备有效的互联网信息服务提供者(ICP)备案号。此外,游戏 App 必须取得网络游戏出版物号。图书和报刊杂志 App 必须持有中国国家新闻出版署(NPPA)颁发的《网络出版服务许可证》。包含宗教内容的 App 必须持有中国国家宗教事务局(NRAA)颁发的《互联网宗教信息服务许可证》。新闻 App 必须持有中国国家互联网信息办公室(CAC)颁发的《互联网新闻信息服务许可证》。如果你已经或计划在中国大陆的 App Store 中提供上述类型的 App,则必须提供相关信息和证明文件。 + +### [Xcode 15.1 Beta Release Note](https://developer.apple.com/documentation/xcode-release-notes/xcode-15_1-release-notes) + +Xcode 15.1 Beta 版本发布,除了常规的新 SDK 发布,这次一条相对重要的信息是,从 15.1 开始,X86/64 的 芯片组(也就是 Intel CPU)不再能够开发 VisionOS ,必须使用 silicon 系列芯片组(俗称 M 系列),15.0 的时候还是支持 X86/64 的,此次放弃 X86/64 令人担忧苹果后续对老机型的支持。 + +## 文章 + +### 🐕 [Migrating Ice Cubes to the SwiftUI Observation framework](https://dimillian.medium.com/migrating-ice-cubes-to-the-swiftui-observation-framework-821f90deebee) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了作者将他的开源 Mastodon 客户端 Ice Cubes 迁移到了新的 Observation framework 的过程。作者分享了一些关键点: + +- 迁移并不复杂,作者只花了几个小时就完成了。 +- 迁移修复了一些 bug,并不会引入新的问题。 +- 性能改进明显,值得投入。 + +作者认为 Observation framework 是 SwiftUI 的一项重大改进,它简单易用,并且消除了以前数据流中的许多令人头疼的问题 + +### 🐕 [Dismiss keyboard when return is pressed in a multiline SwiftUI TextField](https://danielsaidi.com/blog/2023/09/15/dismiss-keyboard-when-return-is-pressed-in-a-multiline-swiftui-textfield) + +[@Smallfly](https://github.com/iostalks):这篇文章主要介绍了在 SwiftUI 中如何实现多行文本框的回车键提交和键盘自动收起功能。作者使用 `FocusState` 和 `onChange` 修饰符来监听文本变化,实现了多行文本框的提交和键盘自动收起功能,并将其封装为了一个可重用的自定义 view modifier。如果你正在开发 SwiftUI 应用,并且遇到了类似的问题,这篇文章可能会对你有所帮助。 + +### 🐕 [Interoperability: Swift ’ s Super Power](https://browsercompany.substack.com/cp/137231709) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 作为现代的语言,在设计选择上使其展示了灵活性和兼容性且不需要以可用性为代价的特性,而使 Swift 专注于与其他语言的本地互操作性,成为 Swift 构建丰富的本地应用的一个重要目标。同时 Swift 的互操作性工具库使其成为在现有平台上构建丰富的本地应用程序和库的有力语言,并以其改进的内存安全性和强大的易用性为 C 和 C++ 提供了一个很好的替代方案。本文介绍了在 Swift 中使用 C++ Interop 和 C Interop 在 Windows 平台支持 COM 模式,同时也改进了 COM 对于 Swift 的支持,通过在 Windows 平台以及对 Swift 互操作性方法的探索,为开发者提供了一个良好的基础,让我们了解 Swift 的互操作性工具如何允许我们构建可以访问平台 API 的跨平台应用程序。 + +### 🐢 [深入理解 iOS Jetsam 机制,助力提升 Flotsam 召回率](https://mp.weixin.qq.com/s/vUMmQvZ1I91fhf8kFXY_mA) + +[@xuyafei86](https://github.com/xiaofei86):本文将深入介绍 iOS 系统中的 Jetsam 机制,探讨其原理和作用。Jetsam 机制负责在内存不足时终止进程以释放内存资源,了解 Jetsam 的工作原理和相关策略,可以帮助开发者优化应用程序的内存使用,提高 Flotsam 召回率。 +Flotsam 是快手定义的指标,是指 iOS 上未被监控捕获到的前台异常退出,包括但不限于由于内存溢出引起的退出。与 Jetsam 不同,Flotsam 更多地关注那些零碎、尚未明确归因的异常退出。了解 Jetsam 的工作原理和相关策略,对开发者来说,不仅有助于优化应用内存使用,还能显著提高 Flotsam 召回率,进一步提升应用的稳定性和用户体验。 + +### 🐎 [Swift 中闭包底层原理探索](https://juejin.cn/post/6935797942435446791) + +[@J_Knight_](https://github.com/knightsj):本文作者使用代码实例并利用导出的 SIL 和 LLVM 文件内的代码(附上了详细的代码注释)详细介绍了在 Swift 中闭包捕获单个值和多个值的原理。 + +### 🐢 [The Absolute Minimum Every Software Developer Must Know About Unicode in 2023](https://tonsky.me/blog/unicode/) + +[@水水](https://www.xuyanlan.com/):本文介绍了作者认为 2023 年每个软件开发人员需要知道的关于 Unicode 的一些基本知识点如下 +- 什么是 Unicode +- Unicode 有多大 +- Unicode 目前分配情况 +- Unicode 作为私人用途的有哪些 +- UTF-8 是什么 +- 为什么显示 �、Emoji 长度是怎么计算的 + +...... 等一系列的问题进行了整理和解释 ~ + +## 代码 + +### 🐕 [@Model for CoreData](https://www.alwaysrightinstitute.com//managedmodels/) + +[@极速男孩](https://github.com/ztlyyznf001):Apple 在 2023 年 WWDC 上发布了 Swift 数据持久化框架 SwiftData。本文主要介绍了 ManagedModels 这个库,他为 CoreData 提供类似 SwiftData 的 API ,但不需 iOS 17+ 版本。主要区别包括:ManagedModels 中的类需明确从 NSManagedObject 继承,使用 @FetchRequest 而非 SwiftData 的 @Query 。文章提供了使用 ManagedModels 的代码示例,以及两个示例程序。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海 / 北京] 西瓜视频 - iOS + +[北京] 百度网盘 - 基础架构 / 业务 - iOS/Android/FE + +[上海 / 杭州 / 北京] TikTok - 短视频 - iOS/Android/TL + +[广深] TikTok 直播 - 社交互动团队 - iOS/Android + +[杭州] 淘宝 - 终端平台 - iOS/Android/C++ + +[广州] 微信公众号 - iOS + +[北京] 快手 - 本地生活 - iOS + +[上海 / 北京] MiniMax - iOS + +[北京] 知乎 - 会员业务 - iOS + +[上海] 扫描全能王 - iOS + +[深圳] 手机 QQ - 终端架构 - iOS - T10/T11 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#264-2023.10.23.md b/Reports/2023/#264-2023.10.23.md new file mode 100644 index 000000000..358d30ed7 --- /dev/null +++ b/Reports/2023/#264-2023.10.23.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #264 | 2023-10-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/264.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [云音乐如何「搭」出新首页](https://mp.weixin.qq.com/s/rZzpXrU3T_0gbKhpM0M4dA) + +[@JonyFang](https://github.com/JonyFang):本文介绍了云音乐如何通过可视化搭建系统支撑新版首页这样的核心场景,提出一套基于性能、动态化和精细化运营角度的解决方案。文章还探讨了动态化能力的重要性、各种动态化方案的能力和性能表现、针对不同业务诉求做出合适选择的必要性。 + +### 🌟 🐕 [【iOS】一段防护代码引发的内存风暴](https://mp.weixin.qq.com/s/zgwciJibBxyrA_wT2-w3QQ) + +[@Cooper Chen](https://github.com/cjlcooper):本文详细描述了腾讯音乐在一次防护代码导致的 OOM 问题上进行排查的过程,不仅详细解释了内存分析问题从基建到详细手段的步骤,也从另一个侧面说明了 Runloop 和 Autoreleasepool 的关系。值得一提的是,这个 OOM 问题的原因是 CF 不同版本在 __CFRunLoopDoObservers 里面遍历 observer 的实现方式不同导致,采用数组方式的高版本系统会出现上述的 OOM 问题,这对于安全气垫相关需求开发同学有着极高的参考价值。 + +### 🌟 🐢 [Swift Parameter Packs](https://paul-samuels.com/blog/2023/09/29/swift-parameter-packs/) + +[@享耳先森](https://github.com/iblacksun):Swift 5.9 已经发布,除了广为人知的 `Macros`,还有一项比较少人提到的是 `Parameter Packs`,本文介绍了 `Parameter Packs` 的三种使用场景,如想更深入的理解 Swift 5.9 的更新,建议阅读另一篇:[What’s new in Swift 5.9?](https://www.hackingwithswift.com/articles/258/whats-new-in-swift-5-9) + +### 🐕 [Xcode 15以下版本调试 iOS 17 设备](https://developer.apple.com/forums/thread/730947?answerId=758061022#758061022) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是在 Apple 开发论坛上讨论的,关于无法使用 Xcode 14.x 版本调试 iOS 17 设备的问题。最终找到一个行之有效的可行路径。先在终端中运行 `defaults write com.apple.dt.Xcode DVTEnableCoreDevice enabled`,然后重新启动 Xcode 14.x,iOS 17 设备将显示在 Xcode 中,进而可以像往常一样运行和调试应用程序。 + +### 🐎 [Changes to URL string parsing in iOS 17](https://augmentedcode.io/2023/10/02/changes-to-url-string-parsing-in-ios-17/) + +[@Damien](https://github.com/ZengyiMa):在 iOS 17 系统中,URL 类中的 init(string:) 方法的行为和 URLComponents 的解析 URL 方法进行了对齐,使其解析行为发生了变化,新版本将会产生对无效字符进行编码,然而这一行为在 iOS 17 以下是不存在的,如果大家对 URL 类中产生的结果较为敏感,建议确认一下变化是否对当前的 App 是否有预期之外的影响。 + +### 🐎 [A New Approach to Testing in Swift](https://forums.swift.org/t/a-new-approach-to-testing-in-swift/67425) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队于近日发布了 swift-testing 预览版,旨在替代 XCTest 成为新的官方测试框架,将 Swift 的特性以及这些年测试框架的发展应用到这个新的库里。 + +XCTest 作为 Apple 平台的测试框架,最早在 1998 年编写并且大量使用 Objective-C 的动态特性,包括动态消息传递,NSInvocation 和 Objective-C Runtime 等。 + +当 Swift 诞生时,也顺理成章地继续沿用 XCTest,对 XCTest 进行了一系列拓展以便支持 Swift,但这始终是一个 1998 年编写的框架,并且与 Objective-C 重度耦合,很多功能与 Swift 天生冲突,所以需要一个全新的框架作为继任者。 + + +### 🐎 [直播流⻚⾯内存优化⽅案](https://mp.weixin.qq.com/s/RzOpU_50WIZjUUNuKOBShA) + +[@JonyFang](https://github.com/JonyFang):上下滑过程中高清直播背景图带来的内存问题相关优化,有类似诉求,解决方案可做参考。 + +### 🐎 [Android 和 iOS 渲染架构差异对比,孰胜孰负?](https://mp.weixin.qq.com/s/5s11skxtI5FHVTa3ZuqQ7g) + +[@Crazy](https://github.com/jiyan135960):本文是一篇科普类文章,主要对比了 Android 与 iOS 两个系统在绘制原理上的区别。文章开篇先简单的讲解了 SurfaceFlinger 和 backboard 的区别,通过对比两种渲染方法后引出 OpenGL 与 Metal 和 Vulkan 的区别,并简单的介绍了关于 OpenGL 的实现与缺点。文章的内容相对简单,没有很多的实现逻辑与长篇大论的代码,只是让大家简单的了解下双端绘制逻辑上的不同。 + +## 代码 + +### 🐕 [SwiftUIViewDebug](https://github.com/Kyle-Ye/SwiftUIViewDebug#swiftuiviewdebug) + +[@老峰](https://github.com/gesantung):SwiftUIViewDebug 是 SwiftUI 调试工具库,可以使将调试信息编码为 Swift.Data,然后转换为 Swift.String,最后以可读的 JSON 格式来展示视图信息。 + +### [swift-macro-testing](https://github.com/pointfreeco/swift-macro-testing) + +[@kemchenj](https://kemchenj.github.io/):由 PointFree 开发的一款 macro 测试库,对比 SwiftSyntax 提供的测试函数提供了更多功能,例如更丰富的诊断信息,自动填充测试用例的 fix-it 等等,对于 macro 的编写和测试都有非常大的帮助。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#265-2023.10.30.md b/Reports/2023/#265-2023.10.30.md new file mode 100644 index 000000000..5b71de145 --- /dev/null +++ b/Reports/2023/#265-2023.10.30.md @@ -0,0 +1,72 @@ +# 老司机 iOS 周报 #265 | 2023-10-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/265.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS & iPadOS 17.2 Beta & Xcode 15.1 Beta 2 Release](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17_2-release-notes) + +上周苹果发布了 [iOS & iPadOS 17.2](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-17_2-release-notes) 、[watchOS 10.2](https://developer.apple.com/documentation/watchos-release-notes/watchos-10_2-release-notes) 、[Xcode 15.1](https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-15_1-release-notes) 等系列 Beta 版本的更新。较为重要的信息如下: + +- SwiftUI 新增了 API ``_logChanges()`` 方便开发者在 Debug 下打印 SwiftUI 的变更。与 ``_printChanges()`` 区别仅在于 ``_logChanges()`` 会将日志也打印到系统控制台中。此 API 对所有 iOS/iPadOS/watchOS 等都有效。 + +- 对使用 Xcode 15.0 构建包含 swift 代码的 App 会较老的 MAC 版本 (10.13) 启动时崩溃,workaround 方案是添加 ``$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/macosx/libswiftAppKit.dylib`` 到 Other Linker Flags 中,此问题在 15.1 Beta 中已修复。详见:[swift/issues/68163](https://github.com/apple/swift/issues/68163)。 + +## 文章 + +### 🐎 [Bad practice: not using Phantom Types](https://www.swiftwithvincent.com/blog/bad-practice-not-using-phantom-types) + +[@Damien](https://github.com/ZengyiMa):这篇文章讨论了在 Swift 编程中使用虚类型(Phantom Types)引发的错误。作者首先构造了 2 个示例对象,使用虚函数并且导致了错误的行为。随后提出了改进的方案,从而避免了错误的代码行为,想了解 Swift 虚函数感兴趣的同学不妨一读。 + +### 🐎 [Designing for spatial computing: from iOS and iPadOS to visionOS](https://www.createwithswift.com/designing-for-visionos-shifting-from-ios-and-ipados/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了苹果的 visionOS 以及它在空间计算领域的重要性。文章强调了设计师和开发人员需要了解空间设计的基本原则,以及如何将应用程序从 iOS/iPadOS 平稳地过渡到 visionOS。文章还介绍了 visionOS 应用程序的核心结构,包括窗口、体积、标签栏、侧边栏、装饰、菜单和弹出窗口、以及模态视图。最后,文章强调在从 iOS/iPadOS 过渡到 visionOS 时,需要考虑应用程序的核心功能,并将其适应空间计算范式,而不仅仅是简单地将应用程序移植到新平台。 + +### 🐎 [Being a good citizen in the land of SwiftSyntax](https://www.pointfree.co/blog/posts/116-being-a-good-citizen-in-the-land-of-swiftsyntax) + +[@zvving](https://github.com/zvving):作者使用 SwiftSyntax 依赖管理的实例,详细解释了如何制定更加灵活的主版本依赖声明,从而规避由与第三方库的依赖关系引起的冲突。同时,他建议通过将核心库和可选库分拆,来防止不必要的编译开销。这些思路为 Swift 库的开发者提供了有益的参考。 + +### 🐎 [Apple ’ s use of Swift and SwiftUI in iOS 17](https://blog.timac.org/2023/1019-state-of-swift-and-swiftui-ios17/) + +[@JonyFang](https://github.com/JonyFang):通过 iOS 内置应用程序使用的编程语言,分析到 iOS17 的版本过程中 Swift、SwiftUI 的覆盖比例。通过分析结果可以看到:Objective-C 仍然是 iOS 的核心,并被大多数应用程序直接或间接使用。Swift 和 SwiftUI 的采用持续增长,而 Objective-C、C 和 C++ 的份额逐渐减少。 + +### 🐎 [The Care and Feeding of Developer ID](https://developer.apple.com/forums/thread/732320) + +[@水水](https://www.xuyanlan.com/):这个链接集中记录了对于开发者 ID 签名身份方面会遇到的问题,以及一些注意事项和 Tips。这里还介绍了如何备份你的私钥以及如果你没有独立备份你的开发者 ID 签名身份,如何从 Mac 的常规备份中恢复它。读者可以收藏此链接,可以作为后续关于签名方面的问题参考 ~ + +## 工具 + +### 🐎 [Apparency - The App That Opens Apps](https://www.mothersruin.com/software/Apparency/) + +[@J_Knight_](https://github.com/knightsj):介绍了一个可以查看 Mac 应用信息的 Mac 应用:Apparency。具体可以查看的信息是:使用的 framework,Info.plist,macOS version info,identifiers,document types 和 URLs 等等信息。 + +## 音视频 + +### [Matthew Massicotte - The Bleeding Edge of Swift Concurrency](https://www.youtube.com/watch?v=HqjqwW12wpw) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个探讨 Swift 并发编程主题的视频,并发编程是一个涉及异步操作和并行处理的领域。该视频将介绍 Swift 中的 async/await 机制和 actor 模型,并讨论如何避免在引入这些机制时可能出现的竞争条件和死锁等陷阱。它的目标是帮助观众了解如何在编写并发代码时避免常见的陷阱和错误,从而编写出更可靠、高效的代码。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#266-2023.11.06.md b/Reports/2023/#266-2023.11.06.md new file mode 100644 index 000000000..719d85571 --- /dev/null +++ b/Reports/2023/#266-2023.11.06.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #266 | 2023-11-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/266.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [2023 年每个软件开发者都必须知道的关于 Unicode 的最基本的知识(仍然不准找借口!)](https://blog.xinshijiededa.men/unicode/) + +[@xuyafei86](https://github.com/xiaofei86):本文使用风趣幽默的语言和生动的配图介绍了字符串编码的发展和 Unicode / UTF-8 的 “基本知识”,可以帮助读者更深入的理解 Swift 中字符串的设计。感兴趣的同学可以阅读原文了解。 + +## 文章 + +### 🐕 [视频号直播:如何进一步降低功耗占用?](https://mp.weixin.qq.com/s/LKoGJylYfyk8iTXlvoW0gA) + +[@莲叔](https://github.com/aaaron7):这篇文章从一个简单的问题出发:同样的直播间,在有点赞动画时的帧率和 gpu 占用显著高于无动画时,一步步讲解了 iOS 系统渲染的原理以及推导了问题的原因,给出了解决办法(通过 iOS 15 提供的新的 CAAnimation 的 API)。之后进一步分析了系统方案的原理,并且给出了将动画帧率控制从 CAAnimation 动画扩展到 UIView block 动画以及 UIScrollView 动画中,实现整体更稳定的帧率,方案很完整。另外,解决问题是一方面,文章更有价值的点还是对于 ios 的渲染原理做了比较详实的描述,推荐大家阅读。 + +### 🐕 [深入理解 MachO 结构与运行时系统](https://joey520.github.io/2020/01/30/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3MachO%E7%BB%93%E6%9E%84/%23%E5%89%8D%E8%A8%80) + +[@Barney](https://github.com/BarneyZhaoooo):本篇文章详细介绍了 MachO 的结构。前半段主要是结构分析,后半段着重描述 OC 相关数据。理解这些有助于日常写出更高性能的代码,可以反复仔细阅读。 + +1. **LINK EDIT、符号表、Fishhook 原理介绍。** +2. **OC 相关数据的详细介绍** +3. **探究这些的意义** + +### 🐎 [Switching Build Systems, Seamlessly](https://engineering.atspotify.com/2023/10/switching-build-systems-seamlessly/) + +[@Smallfly](https://github.com/iostalks):本文主要分享了 Spotify 团队无缝切换构建系统到 Bazel 的过程。随着移动应用程序的规模越来越大,他们的代码库年均增长率超过 30 %,开发者的幸福感和生产力显著下降。通过迁移到 Bazel,一个超大工程原本使用 Xcode 构建耗时超过 45 分钟,迁移后时间缩短到少于 10 分钟。这个过程经历多套构建系统并存以及层层的验证,最后实现能完全由 Bazel 构建 iOS 客户端。 + +### 🐢 [How async/await works internally in Swift](https://swiftrocks.com/how-async-await-works-internally-in-swift) + +[@EyreFree](https://github.com/EyreFree):文章主要探讨了 Swift 中 async/await 的内部工作机制。开头解释了 Swift 的内存安全目标,及并发问题如何影响这个目标。随后,文章深入探讨了 GCD 如何处理并发,以及它的局限性。文章强调了 Swift 引入 async/await 的重要性,例如用以改善并发管理,减少未定义行为等。最后,概述了 async/await 的历史,以及如何利用它来简化并发代码的编写,推荐阅读。 + +### 🐢 [Working With UIViewRepresentable](https://chris.eidhof.nl/post/view-representable/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章中,他探讨了在 SwiftUI 中使用 UIViewRepresentable ,NSViewRepresentable 或 UIViewControllerRepresentable 来实现 SwiftUI 和 UIKit/AppKit 之间状态通信的几个挑战和解决方案。主要点包括: +1. 根据 SwiftUI 状态变化更新 UIView 时,只更改必要的 UIView 属性。 +2. 对于 UIKit 变化影响的 SwiftUI 更新,应异步执行以避免运行时警告。 +3. 通过创建一个 MapView 包装器和一个 NSTextView 包装器为例,解释了如何在更新方法中仅在必要时更新视图,以及如何缓存并比较值以避免不必要的更新。 +4. 如何通过修改绑定或调用闭包来从 NSView 向 SwiftUI 通信事件。 + +### 🐕 [Fatbobman ’ s Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-001) + +[@老驴](https://weibo.com/u/6090610445):Fatbobman 在结束了 100 期的摸鱼周报之后新开了个新坑,叫 Fatbobman ’ s Swift Weekly,目前已经出到了第三期。Fatbobman 的周报和老司机的周报比较类似,会推荐一些 Swift,iOS 开发的相关内容,但是提供了双语内容。有兴趣的话可以关注或者订阅一波。 + +### 🐕 [记一个诡异的 TCP 挥手乱序问题](https://mp.weixin.qq.com/s/vX0C-AmJ_tIddWbsWeizJA) + +[@Crazy](https://github.com/jiyan135960):本文是一篇网络底层的讲解文章,内容有一定深度,并且给大家提供了很多解决这种疑难问题的思路。作者从一个挥手乱序问题开始,告知了大家问题出现的原因:四次挥手中,由于 fin 包和 ack 包乱序,导致等了一次 timeout 才关闭连接。之后又从这个结果开始介绍解决问题的思路与过程,其中包括问题复现试验,内部源码分析,修改内核配合测试,最后确认问题位置。本文最后更是讲解了 close() 下的 tcp 状态转移问题。本篇文章涉及了许多 TCP 的源码与底层知识,读起来会偏久,重要的是学会作者处理这种疑难问题的思路与方法。 + +## 音视频 + +### 🐕 [Swift Connection 2023 - Hidde van der Ploeg - How to Make Your App Look Like You've Hired a Designer](https://www.youtube.com/watch?v=tlk9BRvIbq4) + +[@Cooper Chen](https://github.com/cjlcooper):这个视频是 Swift Connection 2023 关于普通开发者如何在没有设计师的情况下,遵循一些设计规范来保证 App 的设计感,其中包含以下几点: +- 定义明确品牌(Define a clear brand) +- 设计是一种感觉(Design is how it feeling) +- 保证设计的一致性(Consistence) +- 保证用户的关注点(Keep focus) +- 使用层次结构(hierarchical) +- 给 UI 保留空隙(Give sapce to breath) + +这个视频对于独立开发有着很好的参考价值,能帮助开发者更好的设计自己的 UI 界面。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#267-2023.11.13.md b/Reports/2023/#267-2023.11.13.md new file mode 100644 index 000000000..a8fe2356d --- /dev/null +++ b/Reports/2023/#267-2023.11.13.md @@ -0,0 +1,89 @@ +# 老司机 iOS 周报 #267 | 2023-11-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/267.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 挑战赛](https://developer.apple.com/events/view/98ZM6WUVR4/dashboard) + +挑战赛地点在上海,分为两场,分别是 11 月 21、22 日,12 月 5、6 日,还没有亲自体验过 Vision Pro 的同学可以报名尝试参加,苹果会培训 空间计算 相关的知识。 + +## 文章 + +### 🐢 [深入浅出 MachO](https://evilpan.com/2020/09/06/macho-inside-out/#mach-o-101) + +[@JonyFang](https://github.com/JonyFang): 本文通过对 MachO 文件的文件格式研究,介绍了 MacOS 和 iOS 中可执行文件的加载过程,从内核中的处理一直到动态连接器 dyld 的代码分析。可以看出 MachO 与 ELF 相比实现方式各有优势,但是在内核中原生增加了对代码的签名和加密,其实 ELF 也很容易实现类似的功能,但开放系统需要更多考虑兼容性的问题,不像苹果可以大刀阔斧的改动。对于 MachO 的深入理解其实也有助于日常的相关优化,比如 Apple Store 的加密实现以及代码签名的大致原理,还有针对 dyld_cache 的处理等,其中每一项都值得去深入挖掘。 + +### 🐎 [Calculating a Smooth Clock Hands Animation](https://david-smith.org/blog/2023/11/06/design-notes-46/) + +[@Smallfly](https://github.com/iostalks):这篇文章分享了作者在 Widgetsmith 应用中解决时钟指针旋转角度计算问题的经历。开始是发现在 iOS17 下旋转动画问题,于是进行了多次调整,尝试通过考虑每天的开始角度和连续旋转的方案,不过依然存在问题。最终,作者采用了一种基于天数计算的方法,考虑了每天时钟指针的完整旋转次数,并通过测试验证了这一解决方案的有效性。作者提供了方案的 Demo,有相关需求的读者不妨一读。 + +### 🐕 [Bad practice: not using multiline strings](https://www.swiftwithvincent.com/blog/bad-practice-not-using-multiline-strings) + +[@Barney](https://github.com/BarneyZhaoooo):本次推荐是一篇博客,简单介绍了 Swift 对多行字符串的支持,尽量避免主动在字符串中加入 \ 使得代码越来越难以维护。文章浅显易懂还附带视频,一分钟时间就可以掌握一个小知识,值得一看。 + +### 🐕 [iOS Crash 治理:淘宝 VisionKitCore 问题修复](https://mp.weixin.qq.com/s/pmnrDbIeueGS_7Sck-83qQ) + +[@Cooper Chen](https://github.com/cjlcooper):本文详细介绍了手淘技术团队定位 iOS 16.0 ~ iOS 16.2 WKWebView 的系统 bug 的过程,文章详细介绍了如何通过堆栈特征分析、版本对比等方式进行问题原因分析,到最终提出了详细的解决方案,并进行线上验证的过程,其中涉及的 Crash 排查思路值得开发者学习和借鉴。 + +### 🐕 [iOS libMalloc 源码分析](https://juejin.cn/post/7290817530415775804) + +[@老峰](https://github.com/GesanTung):libMalloc 作为内存分配器,研究相关机制,对于理解操作系统内存管理有较大价值。本文作者针对 iOS 底层堆内存分配器 libMalloc 的开源版本(libmalloc-409.40.6)结合源码分析了 NanoZone、ScalableZone(tiny、small、medium、large )不同的内存机制。 + +### 🐕 [Progress toward the Swift 6 language mode](https://forums.swift.org/t/progress-toward-the-swift-6-language-mode/68315) + +[@AidenRao](https://weibo.com/AidenRao):该文章介绍了 Swift 6 的发展和计划,目前的重点在于默认情况下避免数据竞争。[逐步采用即将到来的语言](https://github.com/apple/swift-evolution/blob/main/proposals/0362-piecemeal-future-features.md) 对于迁移到 Swift 6 至关重要:可以一次启用一项即将推出的功能,以逐步将代码库迁移到 Swift 6。 + +### 🐎 [Things I wish someone would have told me about configuring VSCode](https://www.bryanbraun.com/2023/08/10/things-i-wish-someone-would-have-told-me-about-configuring-vscode/) + +[@anotheren](https://github.com/anotheren):本文介绍了一些 VSCode 设置的小技巧,包括: +* 使用 `.gitignore_global` 来全局忽略 `.vscode` 文件夹; +* 工作区级别的插件设置; +* 内建终端的使用; + +推荐使用 VSCode 的同学一看。 + +### 🐎 [Hierarchical background styles in SwiftUI](https://nilcoalescing.com/blog/HierarchicalBackgroundStyles/) + +[@Damien](https://github.com/ZengyiMa):本文内容主要讲述了如何在 SwiftUI 中获取和使用系统背景颜色。在 iOS 17 之前,我们通常需要从 UIColor 转换来获取这些颜色。但从 iOS 17 开始,可以直接通过 ShapeStyle 的实例来获取,例如 secondary,tertiary 等属性。这些背景颜色取决于当前的操作系统和颜色方案(启用了浅色或深色模式)。 + +### 🐎 [Why Curiosity Is Better Than Being Smart?](https://durmonski.com/life-advice/curiosity-is-better-than-being-smart/) + +[@水水](https://www.xuyanlan.com/):为什么好奇心比聪明更重要?这篇文章作者从自己出发来告诉读者为什么好奇心很重要,聪明人的思维过程是怎样的、好奇心为什么可以让人变聪明甚至可以变的更聪明、以及如何提高好奇心。好奇的读者可以看看本文哦 ~ + +## 开源库 + +### 🌟 [Grape](https://github.com/li3zhen1/Grape) + +[@Leo](https://github.com/leomobiledeveloper):一款 swift 编写的支持力模拟和可视化绘制的开源库,兼容 iOS/macOS/vision OS/watch OS. 开发者可以直接利用可视化能力绘制 Force Directed Graph(力导向图),也可以用力模拟模块来自定义实现一些能力。 + +## 音视频 + +### [NSSpain XI (2023)](https://vimeo.com/showcase/10672108) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):NSSpain 是一个知名的 iOS 开发者会议,在 NSSpain XI (2023) 中,涵盖了包括应用程序设计、性能优化、新的开发工具、Swift 编程语言的最新进展以及与 Apple 生态系统相关的多个主题,这个会议为开发者提供了与同行建立联系和交流的绝佳机会。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#268-2023.11.20.md b/Reports/2023/#268-2023.11.20.md new file mode 100644 index 000000000..114012983 --- /dev/null +++ b/Reports/2023/#268-2023.11.20.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #268 | 2023-11-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/268.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### [Generating Random Numbers Elegantly in Swift ](https://www.swiftjectivec.com/swift-randomnumbergenerator/) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了在 Swift 中使用 RandomNumberGenerator 实现产生随机数的方式。写法优雅,可以产生自己任意范围的随机数,线程安全,还会根据 Swift 运行的平台来决定实现随机数的 api。 + +## 文章 + +### 🐎 [Reasoning about protocols](https://www.swiftindepth.com/articles/reasoning-about-protocols/) + +[@J_Knight_](https://github.com/knightsj):本文作者结合代码实例介绍了在 Swift 中面向协议编程的几个应用场景(动态派发,类泛型,编译期约束和实现合成)。 + +### 🐕 [在 Airbnb 爱彼迎解锁 SwiftUI](https://mp.weixin.qq.com/s/AokW7NZvjBT76iaRnEnsOA) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了 Airbnb 在 iOS 应用中采用 SwiftUI 替代原有的 UI 框架 Epoxy 的实践。 也解释了为什么他们决定在 Airbnb 中使用 SwiftUI,并详细介绍了如何将 SwiftUI 集成到 Airbnb 的界面设计中。一个很好的实践,可以作为大家引入 SwiftUI 的参考。 + +### 🐕 [The complete guide to iOS & macOS development in Neovim](https://wojciechkulik.pl/ios/the-complete-guide-to-ios-macos-development-in-neovim) + +[@Smallfly](https://github.com/iostalks):使用 Xcode 开发大型项目的体验一言难尽,这篇文章手把手教你如何在 Neovim 搭建 iOS&macOS 开发环境。支持的功能主要有: +- 代码补全(Code Completion) +- 代码检查与格式化(Linting & Formatting) +- 构建、运行与测试(Build, Run & Test) +- 调试(Debugging) + +所有这些一起至少覆盖了 90% 以上的开发时间,还有少部分功能还是需要依赖 Xcode,例如性能跟踪、调试 UI、管理签名证书等。如果你是一名 vim 党,推荐一试。 + +### 🐎 [An early look at the future of testing with swift-testing](https://www.polpiella.dev/swift-testing/) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队在前一段时间推出了 swift-testing 的 beta 版本,旨在替代 XCTest,让开发者可以用更加现代化的语法编写测试。 + +这篇文章用一个简单的例子介绍了 swift-testing 的接入和用法,可以看到跟 XCTest 对比提供了更简洁的语法,更好的 async 支持以及更加清晰的诊断信息。 + +### [百度 APP iOS 端包体积 50M 优化实践(七)编译器优化](https://mp.weixin.qq.com/s/fmiccOgRx9_wopX9QmZiEA) + +[@JonyFang](https://github.com/JonyFang): 本文介绍了百度 APP iOS 端包体积优化的编译器优化方案。涉及到的点有:GCC 语言编译优化、Swift 编译优化、LTO 优化、剥离调试符号、剥离符号表、剔除未引用代码、Asset 优化、C++ 虚函数优化、三方 SDK 编译器方向瘦身、指令集架构优化、Xcode 升级优化、Swift 内置动态库优化等。 + +## 工具 + +### [SwiftBar](https://github.com/swiftbar/SwiftBar) + +[@xuyafei86](https://github.com/xiaofei86):SwiftBar 是一款使用 Swift 编写,用来在 MacOS 菜单栏上展示自定义功能的开源工具。可以使用 Homebrew 安装,只需编写一个 Shell 脚本并将其添加到 SwiftBar 即可使用。你还可以从其插件仓库安装别人编写的脚本,比如展示 CPU 和内存占用、处理文本等。 + +## 设计 + +### 🐎 [Ensure Visual Accessibility: Glyphs, Icons and Shapes](https://www.createwithswift.com/ensure-visual-accessibility-glyphs-icons-and-symbols/) + +[@水水](https://www.xuyanlan.com/):了解如何正确使用应用程序 UI 上的视觉元素,同时保持其可访问性,包括字形、图标和形状,这些是传达信息、指导我们行动和塑造我们感知的基础。在苹果生态系统中鼓励正确的使用象形文字以及其组合来设计你的视觉元素,需要保证其具有清晰、一致性并且支持辅助功能标签。这篇文章还给了很多相关设计上的具体建议,感兴趣的可以参考。 + +## 音视频 + +### 🐢 [SwiftUI + Metal – Create special effects by building your own shaders](https://www.youtube.com/watch?v=EgzWwgRpUuw) + +[@Cooper Chen](https://github.com/cjlcooper):视频介绍了基于 SwiftUI + Metal 的形式,通过构建自己的着色器来创建特殊效果,包括如何重新着色、如何实现动画渐变、如何进行形状转换等内容,对于从 c++ 过渡到 SwiftUI 开发 Metal 相关内容的开发者有着很好的参考价值。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#269-2023.11.27.md b/Reports/2023/#269-2023.11.27.md new file mode 100644 index 000000000..74059fd51 --- /dev/null +++ b/Reports/2023/#269-2023.11.27.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #269 | 2023-11-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/269.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐢 [Flutter 3.16 + Dart 3.2 发布](https://mp.weixin.qq.com/s/vbkhjPNboqK1oDy_J5pzeA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 常规季度更新发布了,本次发布为 Flutter 3.16 + Dart 3.2; 一如既往,本次更新还是以稳定性和性能优化为主,其中值得关注的是 Android Impeller 和 Material 3 成为新的默认主题, 当然了在组件和工具链上也做出了不少改进和更新,感兴趣的同学可以在文中注意查看;[另一个值得关注的点是 Dart 3.2 发布,该版本在 Dart Web 和 Wasm 做了较多更新](https://mp.weixin.qq.com/s/UA5MQLzdf_ZPS56EdNLf2A),从这里可以看到 Flutter 团队对于浏览器端的努力一直在持续,可预见的是 Flutter 在浏览器端的未来可期 + +## 新手推荐 + +### 🐎 [Swift strings look identical but aren't](https://damian.fyi/swift/2023/11/13/swift-strings-look-identical-but-aren't.html) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了两个看起来相同的字符,因为当中包含一个 '\u{FEFF}' 字节顺序标记导致他们出现不相等的情况,作者用了 String 扩展和 'trimmingCharacters(in: .controlCharacters)' 的方式来移除这个标记。 + +## 文章 + +### 🌟 🐢 [What Every C Programmer Should Know About Undefined Behavior #1/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html) [#2/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html) [#3/3](https://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html) +[@Smallfly](https://github.com/iostalks):这是探讨 C 系语言未定义行为的系列文章。在系列的第一部分中,作者解释了 C 语言中的未定义行为,并展示了一些案例,说明了它使 C 语言比「安全」语言更具性能的原因。在第二部分,探讨了未定义行为导致的令人惊讶的错误,以及许多程序员对 C 语言存在的一些广泛误解。在最后一部分,探讨了编译器在提供陷阱警告时面临的挑战,并讨论 LLVM 和 Clang 提供的一些功能和工具,以实现性能提升的同时减少一些意外情况发生。 + +### 🐕 [Debugging SwiftUI views: what caused that change?](https://www.avanderlee.com/swiftui/debugging-swiftui-views/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了调试 SwiftUI 的关键技巧。使用 Self._printChanges 或 Self._logChanges 静态方法可以帮助我们找到引起重绘的根本原因。将视图单一化简单化往往是排查复杂问题的关键,文章分下面五个步骤娓娓道来。 + +- **What is a dynamic SwiftUI View?** +- **The problem of a Massive SwiftUI View** +- **Using LLDB to debug a change** +- **Solving redraw issues in SwiftUI** +- **Debugging changes using code** + +### 🐎 [Custom Traits and SwiftUI](https://useyourloaf.com/blog/custom-traits-and-swiftui/) + +[@Damien](https://zengyima.github.com/):本文主要讲述了在 iOS 17 中,开发者可以添加自定义 Traits 到 UIKit Traits 环境中,并与 SwiftUI 环境进行互操作。在 iOS 17 中,Traits 的处理方式发生了重大变化,Traits 现在可以从 UIScreen、UIWindowScene、UIViewController、UIView 等流向任何子视图控制器。此外,还介绍了如何创建一个自定义 Traits,并给出了一个实际的例子。 + +### 🐎 [Revealing and explaining package scores](https://blog.swiftpackageindex.com/posts/revealing-and-explaining-package-scores) + +[@EyreFree](https://github.com/EyreFree):这篇文章主要介绍了 Swift Package Index 中的一个新功能:Package 评分,并解释了这个分数是如何计算的。得分系统基于多个特征来评估软件包,包括:软件包是否被存档、是否拥有与 App Store 兼容的开源许可证、发布次数、Star 数量、依赖数量、最近活动、文档和贡献者数量、是否有测试代码和是否有 README 文档等,可以作为大家选择开源库的参考。 + +## 代码 + +### [MachOView](https://github.com/gdbinit/MachOView) +Mach-O 相信很多同学或多或少已经接触过或者有所了解,它是 Mach Object 文件格式的缩写,是 mac 以及 iOS 上的可执行文件。MachOView 这个工具可以快速查看 Math-O 格式的文件,简单易用,同时工具在今年迎来了 3.0 版本的大更新。对于经常需要分析静态库等文件的同学可以下载使用 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#270-2023.12.04.md b/Reports/2023/#270-2023.12.04.md new file mode 100644 index 000000000..ba40ec45f --- /dev/null +++ b/Reports/2023/#270-2023.12.04.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #270 | 2023-12-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/270.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 即将迎来圣诞审核高峰,各位开发者调整好提交时间 + +苹果预告将在 12 月 22~27 日 迎来圣诞假期,期间审核会相对变慢,根据惯例加急也会照常开放,有期间发版需求的同学需要早做安排。根据往年经验在 20 日提审大概率可以在高峰来临前通过审核。 + +## 文章 + +### 🐕 [建立个人学习观|地铁上的自习室](https://mp.weixin.qq.com/s/azyF-y5jPIy5trOpZFf0pA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/): 本文旨在帮助初入职场或陷入迷茫的读者建立个人学习观,强调在日常生活中保持学习心态,在不同空间和阶段中收获额外的东西,让学习成为一种习惯,丰富自己的知识和人生。 + +### 🐎 [Missing Xcode run test buttons](https://paul-samuels.com/blog/2023/10/24/missing-xcode-run-test-buttons/) + +[@Barney](https://github.com/BarneyZhaoooo):Xcode 运行测试按钮缺失恢复的小技巧、复制测试类名到导航器面版的过滤器中然后在该面板中点击播放按钮。 + +### 🐎 [Apple’s use of AppKit, Catalyst, Swift and SwiftUI in macOS Sonoma](https://blog.timac.org/2023/1128-state-of-appkit-catalyst-swift-swiftui-mac/) + +[@Smallfly](https://github.com/iostalks):这篇文章对 macOS 的开发组件和语言的演变提供了深入洞察,涉及了二进制数量、编程语言选择以及 UI 框架采用等方面。Sonoma 总共有 7884 个二进制文件,其中 Objective-C 仍然是核心语言,Swift 使用率不断增加。 + +SwiftUI 在 Sonoma 中得到显著应用,文章还观察到 Swift 在安全区域处理器中的使用,展示了 Swift 在受限环境中的适用性。总体而言,Swift 和 SwiftUI 的采用不断增长,而 Mac Catalyst 则呈下降趋势,标志着这项技术已进入过渡期。 + +### 🐕 [Observable Architecture Beta!](https://www.pointfree.co/blog/posts/125-observable-architecture-beta) + +[@zvving](https://github.com/zvving):Swift 5.9 引入的 `@Observable` 标志着数据驱动 UI 方式的重大转变。随着这种变化,The Composable Architecture(TCA) 项目推出了重要的升级——集成 Observable 并向后兼容至 iOS 13 的新版本。目前,TCA 项目在 GitHub 上的关注已度突破了一万星标。 + +值得指出的是,TCA 是一种有较高学习和应用成本,但同时又提供大量示例和教程的重量级框架。如果你对 TCA 感兴趣,可以通过[TCA - SwiftUI 的救星?系列文章](https://onevcat.com/2021/12/tca-1/)、[聊一聊可组装框架(TCA)](https://fatbobman.com/posts/the_Composable_Architecture/)或阅读[官方教程](https://pointfreeco.github.io/swift-composable-architecture/main/tutorials/meetcomposablearchitecture/)来深入了解。 + +### 🐎 [《产生式元编程》第三章 替换蓝染概念纤悉](https://mp.weixin.qq.com/s/V5LRUPhSCagSI5W3lj9hbw) + +[@J_Knight_](https://github.com/knightsj):本文作者结合代码介绍了宏被替换的过程:如果是有参数的宏。会先替换参数;如果是无参数的,则直接扫描。系统会将扫描一直循环进行下去,而扫描停止的条件是触发了蓝染。蓝染的概念是:一次扫描中,若是替换的 token 引用了其自身,该 token 就会被标记为不可处理状态。这个标记动作就称为 Painted blue。然后作者讲解了蓝染的触发机制,以及剖析了 C 预处理器不支持递归的原因。 + +### 🐎 [初探 SwiftUI Link](https://kyleye.top/posts/explore-swiftui-link/) + +[@kemchenj](https://kemchenj.github.io/):本文从 `Link` 在 watchOS 上无法成功打开链接开始探究,先是逆向出 `Link` 的实现,接着是私有 API `_openSensitiveURL` 的调用,`OpenSensitiveURLActionKey` 的实现细节,最终将研究的内容汇总得到最合理的解决方案。 + +### 🐎 [iPhone 加入游戏,但 USB-C 的乱纪元还没有完结](https://sspai.com/post/84508) + +[@老驴](https://weibo.com/u/6090610445):来自少数派的一篇科普向的文章,主要是给大家梳理下 USB-C ,Thunderbolt 和传输协议之间的各种交错复杂的关系。不过,即便你没有能完全搞懂也没关系,因为大多数情况下不影响基本的充电,而更多的是影响数据传输速度。 + +## 工具 + +### [devv.ai](https://devv.ai/) + +[@zoeGuo](https://github.com/zoeGuo):[devv.ai](https://devv.ai/) 自称“最懂程序员的新一代 AI 搜索引擎”。你可以用它来搜索某个技术名词,可以获得比较完善的技术摘要,还有引用原文。可以在上一问题上追加提问,因为接入了搜索引擎的数据,回答结果也都比较新,程序员可以试试用它学习一些新的概念。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#271-2023.12.11.md b/Reports/2023/#271-2023.12.11.md new file mode 100644 index 000000000..ce2b8d948 --- /dev/null +++ b/Reports/2023/#271-2023.12.11.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #271 | 2023-12-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/271.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [25 hours of Xcode Cloud now included with the Apple Developer Program](https://developer.apple.com/news/?id=ik9z4ll6) + +从 2024 年 1 月开始,每个付费开发者都将免费获得每月 25 小时的 Xcode Cloud 服务。使用 Xcode Cloud 服务可以方便得完成打包上传提审 TF 这一系列操作,对于独立开发者来说不用花费时间精力研究 AppStore Connect API 还是很有吸引力的。 + +## 新手推荐 + +### 🐎 [Play an animation in RealityKit](https://www.createwithswift.com/play-an-animation-in-realitykit) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇介绍使用 RealityKit 在 3D 模型上实现动画的入门级文章。文章简单介绍了 RealityKit 为 3D 模型提供的默认动画如何使用,以及自定义动画的几种方法:定义 transform 变量,通过 move 方法做动画;定义对象的起始位置,使用 FromToByAnimation 方法做动画; OrbitAnimation 可以使对象从指定点开始做平滑的圆周运动;BlendTreeAnimation 可以将多个动画合并执行。 + +### 🐕 [AsyncStream in the real world: wrapping an Apple Photos callback](https://damian.fyi/swift/2023/12/03/asyncstream-in-the-real-world-wrapping-an-apple-photos-callback.html) + +[@Barney](https://github.com/BarneyZhaoooo):本文以获取相册照片为例,具体讲述了如何使用 **AsyncStream** 优雅地包装相册获取回调。 + +- 普通写法展示 +- 进阶写法展示 +- 小问题解决 + +## 文章 + +### 🐢 [现代 CPU 技术发展](https://juejin.cn/post/7309061655094837283) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章深入探讨了现代 CPU 技术的多个方面。首先,它详细描述了提升 CPU 性能的各种方法,如增加晶体管数量、优化流水线微架构等。其次,文章强调了模块化设计在现代 CPU 设计中的重要性,以及如何通过组合基础指令集和扩展指令集来满足不同场景的需求。此外,文章也指出了功耗墙对 CPU 性能提升的限制,并探讨了未来可能通过新增 DSA 模块和使用 Chiplet 技术等方式来克服这些限制。在指令集架构方面,文章比较了不同指令集对 CPU 性能和能耗的影响,尤其关注了 x86 和 ARM 平台之间的差异。最后,文章还展望了未来 CPU 可能的发展趋势,包括提高 IPC 和时钟频率、增强多线程并行能力、优化内存技术以及采用大小核异构架构等。总之,这篇文章为读者提供了一个全面而深入的现代 CPU 技术概览,既回顾了当前的技术现状,又展望了未来的发展趋势。 + +### 🐎 [Introducing Swift MMIO](https://forums.swift.org/t/introducing-swift-mmio/68525) + +[@AidenRao](https://weibo.com/AidenRao):swift-mmio 是一个为嵌入式 Swift 生态系统设计的库,旨在为嵌入式固件开发提供安全、可靠的 API,例如读取和写入内存映射寄存器。swift-mmio 从 C++ 和 Rust 等语言的 mmio 库中汲取灵感,专注于提高与 MMIO 交互的代码的正确性。swift-mmio API 仍在不断发展,作者欢迎大家在 Swift 论坛、GitHub 上提供反馈, + +### 🐎 [2024 年 Kotlin Multiplatform 发展路线图 | 官方博客](https://mp.weixin.qq.com/s/IANDWuYiLlE_f2TSTPukaw) + +[@Crazy](https://github.com/jiyan135960):本文是官方推出的一篇关于 Kotlin Multiplatform 在 2024 年开发计划的文章,主要介绍了 Kotlin Multiplatform 团队在 2024 年的整体规划。首先确认了 Compose Multiplatform 在未来的核心地位,ComposeUI 在 Android 端逐渐进入大家的视野,就像当年 Java 切换为 Kotlin 一样,CompseUI 也会逐渐替换 XML 的页面构建形式成为 Android 开发的主流,毕竟 XML 的弊端实在太多,虽然近几年有了 ViewBinding 和 DataBinding 的辅助以后已经好了很多,但是对比于 Flutter 这种简单且快速的构建方式来讲差了很多。在工具方面 Fleet 已经可以开发 Kotlin Multiplatform 并且文章中介绍后续会快速迭代完善开发体验.对于 Multiplatform 核心的研发主要还是提升全平台开发者的开发体验,比如提升编译速度,在 IDE 与构建系统中即成 Swift Export 等。最后是对库生态的介绍,总结一下就是虽然稳定,但还需努力,改动一定很大,但是会兼容。让我们共同期待 Kotlin Multiplatform 可以像 Flutter 一样,在某个时间给我们一个惊喜。 + +### 🐎 [Upcoming third-party SDK requirements](https://developer.apple.com/cn/support/third-party-SDK-requirements/) + +[@Damien](https://github.com/ZengyiMa):在 2024 年春季,苹果商店即将开启 Privacy manifests 清单的审核,届时,在上传 App 的时候,我们需要提供隐私清单和 SDK 签名,此外苹果也给出了最新的 SDK 名单列表。请大家一定尽早准备,以免在审核期间被拒审。 + +### 🐕 [MusicKit and App Clips](https://www.polpiella.dev/musickit-and-app-clips/) + +[@anotheren](https://github.com/anotheren):[MusicKit](https://developer.apple.com/documentation/musickit) 是一个与 Apple Music 交互的 Apple 官方框架,这是开发者最方便获取 Apple Music 内容的方式,但是它在 App Clips 中工作不正常。作者介绍了如何通过 URLSession 直接构造 [Apple Music API](https://developer.apple.com/documentation/applemusicapi) 请求,来直接获取相关数据。 + +## 代码 + +### 🐎 [Pow: Delightful SwiftUI effects for your app](https://movingparts.io/pow) + +[@zvving](https://github.com/zvving):Pow 是一款基于 SwiftUI 的动画库,其官网详细提供了各类内置动画的预览和上手指南,能方便地为你的 App 注入精美的动画效果。最近,Pow 宣布开源,为那些寻求深入理解 Pow 动画实现的开发者们提供了便利,强烈推荐大家尝试使用和学习! + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#272-2023.12.18.md b/Reports/2023/#272-2023.12.18.md new file mode 100644 index 000000000..909b609ec --- /dev/null +++ b/Reports/2023/#272-2023.12.18.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #272 | 2023-12-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/ios-weekly.png?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Flutter 小技巧之 3.16 升级最坑 M3 默认适配技巧](https://mp.weixin.qq.com/s/SIEYjZn0gKNMCGlPeg1rGw) + +[@Crazy](https://github.com/jiyan135960):本文是一篇介绍如何在升级 Material 3 后,适配原有 Material 2 控件的文章,本文虽然读起来会很快,但是会为开发者减少大量的时间去解决系统级的适配问题。本文主要介绍了以下几个控件在 Material 3 升级后的变化,以及如何适配 Material 2 的方法。 + +- AppBar: 背景的颜色,icon 的颜色,字体的颜色,都会被修改。文章中介绍通过修改 AppBarTheme 的 backgroundColor 来设置背景颜色,然后在 AppBarTheme 里配置 iconTheme 来修改 icon 的颜色与大小,最后通过 titleTextStyle 来修改字体的大小。 +- Card: 升级后的 Card 会在设置完颜色后仍然有浅蓝色的效果,文章中介绍通过在 ColorScheme 下设置 surfaceTint 为透明色就可以解决这个问题。 +- FloatingActionButton: 升级后此控件变化极大,不仅颜色变化,就连形状也发生了变化。文章中介绍首先通过修改控件中 floatingActionButtonTheme 属性里面的 backgroundColor 与 shape 两个属性完成背景颜色与形状的修改,然后通过修改 floatingActionButtonTheme 的 foregroundColor 属性来修改 icon 的颜色。 +- primarySwatch: 文章中提到如果之前使用了 primaryColorDark 和 primaryColorLight 作为配置,升级后会发生改变,只要在 ThemeData 中为 primarySwatch 参数赋值为 color as MaterialColor 即可解决。 + +### 🐢 [Hummer 引擎优化系列 - PlatformView 的演进历史与优化探索](https://mp.weixin.qq.com/s/R3UUlgEPVR909NB_Jz6o-w) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): PlatformView 是 Flutter 中插入 Native 组件的唯一方式,自诞生以来经历了多次迭代和优化;本文由 U4 内核技术组分享,沿着 PlatformView 方案的演进历史,剖析各个方案的实现原理和优缺点,给出最佳实践,帮助读者理解和正确选择 PlatformView 的渲染模式;小编强烈推荐各位在用 Flutter 技术的同学详细阅读本文。 + +### 🐕 [SFSafariViewController in SwiftUI: Open webpages in-app](https://www.avanderlee.com/swiftui/sfsafariviewcontroller-open-webpages-in-app/) +[@享耳先森](https://github.com/iblacksun):`SFSafariViewController` 常用于在 App 内打开外部链接,但目前并没有 `SwiftUI` 版本。本文深入浅出,开始使用 `UIViewRepresentable` 简单封装 UIKit 使其在 `SwiftUI` 可用,之后再结合 `View Modifier` 等特性优化。 + +### 🐕 [网易云音乐 RN 新架构升级实践](https://mp.weixin.qq.com/s/tAf0SnW2M7Sp0E72YLJP5w) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文介绍了网易云音乐从 ReactNative 0.33 版本到 0.70 版本的升级历程,以及新架构升级的背景和收益。随着 RN 作为主要跨端方案建设的推进,业务对页面打开效率和使用体验的要求越来越高,跨端使用场景进一步扩大受阻。经过对比新老架构的性能、Bundle 包大小、客户端包大小、内存占用等多角度数据,新架构 Hermes 引擎预编译后性能得到了提升显著。 + +## 工具 + +### 🐕 [Marin's Side Projects 2023](https://trycombine.com/posts/marin-side-projects-2023) + +[@EyreFree](https://github.com/eyrefree):这篇文章是 Marin 对自己 2023 年进行的几个业余项目的分享与总结。介绍了包括一个实时从项目源文件中追踪 `TODO:` 和 `FIXME:` 注释的问题追踪器 Breadcrumbs、可视化显示 `Package.swift` 的 PackageView、使用 Swift 并发进行解压的 Unxippity、基于 Markdown 的应用程序演示制作工具 MarkWalkthrough、半 Markdown 编辑器半开发者控制台的 MarkPlayground、将文档作为 Markdown 文件处理的 PDFDoc 以及读取 Mac 控制台日志的 LogRider 在内的一些列应用程序,并提供了部分项目的代码,感兴趣的朋友可以看看。 + +### 🐕 [Flutter 上了 Apple 第三方重大列表,2024 春季 iOS 的隐私清单究竟是什么](https://mp.weixin.qq.com/s/Z5rc2ud3hJ2k7hN7EItyPA) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2023 年 WWDC 后宣布的隐私政策更新,对 Flutter 产生了重大影响。这些更新引入了第三方 SDK 的隐私清单,目的是提高数据收集和使用的透明度。Flutter 及其不少插件被苹果列为具有重大隐私影响,引发了对其数据实践的关注。这些更新要求开发者提交详细的隐私报告,包括数据收集类型、与用户的关联、跟踪用途和收集原因。此外,它们还要求声明跟踪域名,特别是在应用跟踪透明度 (ATT) 框架下,并要求对第三方 SDK 进行签名以防篡改。这些发展为 Flutter 开发者带来了挑战,特别是在适应 iOS 17 方面。 + +## 代码 + +### [MLX: An array framework for Apple Silicon (Made by Apple)](https://github.com/ml-explore/mlx) + +[@老驴](https://weibo.com/u/6090610445):Apple 也来赶最近的 AI 浪潮了。 Apple 发布了一个 为 Apple Silicon 特别优化的 Machine Learning 的框架,API 参照了 Numpy 和 PyTorch 进行设计,甚至写范例 port 了 LLaMA 这些热门的大语言模型。如果你最近也在玩大模型,尤其是想部署在本地的话,一起来学习下 Apple 的这个框架吧。 + +### [Async Algorithms 1.0 Released](https://github.com/apple/swift-async-algorithms) + +[@kemchenj](https://kemchenj.github.ion/):异步编程在避免堵塞的同时让我们失去了 control flow,但相对应的在异步的极致 Rx 里,我们也获得了 throttle/combineLatest 这些时间魔法。 + +Swift 新加入的 async/await 消除了同步编程和异步编程之间的差异,让我们可以在异步编程里也用上熟悉的 control flow,并且我们也没有失去时间魔法,它以 AsyncSequence 的形式存在于 Swift Concurrency 的世界里。 + +但 throttle/combineLatest 这些上层的操作符并没有直接在标准库里实现,而是在 Async Algorithms 这个库里探索实现,现在这个库发布了 1.0 版本宣布 API 的稳定。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2023/#273-2023.12.25.md b/Reports/2023/#273-2023.12.25.md new file mode 100644 index 000000000..424e8efe3 --- /dev/null +++ b/Reports/2023/#273-2023.12.25.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #273 | 2023-12-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/273.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [独立开发提高产品定位成功率:找到 3 个对标产品](https://juejin.cn/post/7312640704404832283) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇独立开发者从自身经验中总结出的关于怎么找到产品方向,以及怎么提高产品定位成功率的文章。作者通过几个例子分别描述了“大池小鱼”原则,分别找到目标用户正在用的产品、同样卖点的产品以及你的参照产品,来快速定位你的独立开发产品。有多少读者是独立开发者或者正跃跃欲试独立开发呢?这篇文章也许会打开你的独立开发的思路哦~ + +### 🐕 [货拉拉 iOS 模块化路由框架:TheRouterSwift](https://juejin.cn/post/7281889329584275471) + +[@EyreFree](https://github.com/eyrefree):这篇文章介绍了货拉拉团队开发的 iOS 模块化路由框架 TheRouterSwift,这是 TheRouter 系列的 Swift 版本,旨在提供给 Swift 开发者一个高效的路由框架,用于模块间解耦和通信。它支持页面导航跳转、路由自动注册、路由映射文件导出、服务自动注册、动态化能力、链式编程、Objective-C 的适配、本地和远程服务调用等功能,还支持异步获取注册类和路由本地缓存能力,以优化性能和提高灵活性。文章详细介绍了 TheRouterSwift 的功能和使用方法,感兴趣的同学可查看原文获取更多信息。 + +### 🐢 [苹果 iOS 分发和安装 App 的那些趣事](https://juejin.cn/post/7315260397371490319) +[@享耳先森](https://github.com/iblacksun):本文介绍了苹果 iOS 应用分发和安装的一些有趣的事。讨论了不同的开发者计划和分发方式:包括企业签名、超级签名、TestFlight 签名和 MDM 超级签名,还提到了开发者模式、企业账号、设备注册限制以及自定 App 和非公开 App 分发的解决方案。最后,讨论了欧盟的《数字市场法》对苹果的影响和可能改变苹果软件生态的可能性。 + +### 🐎 [云音乐自研客户端 UI 自动化项目-Athena](https://mp.weixin.qq.com/s/CX9j63Wxe8qlvqVMjyRhpg) + +[@老峰](https://github.com/gesantung):本文介绍了云音乐在 UI 自动化测试上的一站式解决方案 Athena,其采用了录制的方式解决传统自动化方案录制门槛高、效率低下的问题,在回放过程中前置准备用例执行环境以及结合曙光埋点提升用例执行的稳定性,并且会保留执行过程中的现场信息以便后续溯因。最后通过私有云部署,在云端即可统一调度 Android 和 iOS 设备来执行任务。 + +### 🐎 [Symbolicating SwiftUI (and any Apple Framework)](https://www.emergetools.com/blog/posts/symbolicating-swiftui-and-any-apple-framework) + +[@Damien](https://github.com/ZengyiMa):这篇博客文章介绍了如何使用 Emerge Tools 的开源 ETSymblication 库和 symbolicator 来符号化 SwiftUI 等 Apple 框架。这个过程包括使用 Framework 选择器和两个步骤:线程和偏移量来提取符号。然后,将这些符号以 CSV 格式存储在数据库中,以便在 symbolicator 中引用。文章还详细解释了如何下载和理解崩溃报告,以便从中提取和解释信息。对符号化感兴趣的同学不妨一读。 + +### 🐕 [Trigger property observers from initializers in Swift](https://nilcoalescing.com/blog/TriggerPropertyObserversFromInitializersInSwift/) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了几种 workarounds 使得 property observers 在 initialization 阶段也可以被触发。 +简短实用,大家可以选择适合自己的方式。 + +- Set properties after initialization +- Separate property setup method +- Create a defer closure +- Manually trigger side effects + +## 工具 + +### [MacSymbolicator](https://github.com/inket/MacSymbolicator) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个用于符号化 macOS/iOS 崩溃报告的 Mac 应用程序,可以方便快捷的符号化 crash 和 ips 文件。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#274-2024.01.08.md b/Reports/2024/#274-2024.01.08.md new file mode 100644 index 000000000..935e4269a --- /dev/null +++ b/Reports/2024/#274-2024.01.08.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #274 | 2024-01-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/274.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [The Art of the Corner Radius](https://david.y4ng.fr/the-art-of-the-corner-radius/) + +[@Barney](https://github.com/BarneyZhaoooo):本篇文章简单介绍了 swiftUI 中 **Corner Radius** 的基础使用,浅显易懂,图文并茂,只需 3 分钟就可以领略“圆角”的艺术。 + +## 文章 + +### 🌟 🐢 [微信业务开发方法与实践](https://mp.weixin.qq.com/s/we4LCGAwDC6bS7rQNztWMQ) + +[@xuyafei86](https://github.com/xiaofei86):在当前竞争激烈的商业环境中,深刻理解业务流程对于开发复杂软件系统至关重要。微信团队万字长文带你拔开迷雾,直达本质,深入理解业务是什么,以及如何挖掘业务价值。 + +本文详细阐释了业务建模的核心概念和方法,并通过支付业务的具体案例进行演示。你将从文中学到如何理解构建的业务系统背后所服务的目标组织,深入其业务流程,找出改进机会。感兴趣的同学可以阅读原文了解。 + +### [尾调用以及如何规避](https://r3zpy9khqv.feishu.cn/docs/doccnCwMGwhIDmMi4miM7VfHqpe) + +[@老峰](https://github.com/gesantung):尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的基本概念以及通过使用 OS_NOT_TAIL_CALLED 规避尾调用的代码优化方式。 + +### [浏览器内核创新技术演进及实践 - U4 5.0](https://mp.weixin.qq.com/s/5xIJIN2nUBN2h6McYFg2FQ) + +[@莲叔](https://github.com/aaaron7):U4 是 UC 基于 Chromium 内核二次开发的浏览器引擎,在阿里内部被广泛的使用。本篇文章介绍了在介绍 U4 的 5.0 新版本特性的同时,也科普了很多浏览器内核相关的技术,比如性能提升的关键模块:渲染引擎与 JS 引擎。移动端目前越来越多的业务通过 H5 来实现,作为客户端的同学多了解一些浏览器引擎的技术对于协助前端做出更优化的体验是很有帮助的。推荐阅读。 + +### [哥伦布即时设计平台 ChatGPT 落地实践](https://mp.weixin.qq.com/s/5BuX1m_GDHQzuW_Kj2siOw) + +[@水水](https://www.xuyanlan.com/):本文介绍了 ChatGPT 在哥伦布即时设计平台应用以及实现原理,通过设计 ChatGPT 交互 DSL、Prompt 与 Function 实现 Ai 智能交互、提高平台搭建效率。即让 AI 通过 DSL 了解即时设计能力,同时输出 DSL 解析执行,设计平台具备以下能力: +1.画布编辑能力:提供了丰富的画布编辑功能,包括添加、删除、复制、调整层级等操作,可以灵活地编辑页面的结构和布局。 +2.样式配置能力:支持对页面元素的样式进行配置,包括字体、颜色、大小、边框等,可以根据需求进行自定义的样式设置。 +3.数据接口配置能力:支持与数据接口的绑定,可以通过配置数据接口来实现页面内容的动态展示,提高页面的灵活性和可扩展性。 +4.交互事件配置能力:支持对页面元素的交互事件进行配置,包括点击、滑动、弹窗等,可以实现页面的交互效果,提升用户体验。 +5.预览和下载能力:提供了在线预览和下载代码的功能,可以实时查看页面效果,并将设计的页面代码下载到本地进行进一步开发和调试。 + +## 工具 + +### [Unxippity](https://trycombine.com/posts/an-app-experiment-about-unxipping-xcode-goes-to-github/) + +[@Smallfly](https://github.com/iostalks):这是一款 [unxip](https://github.com/saagarjha/unxip) 的可视化开源工具,用于加速下载和解压 Xcode。 + +## 代码 + +### [swift-retry](https://github.com/fumoboy007/swift-retry?tab=readme-ov-file) + +[@AidenRao](https://weibo.com/AidenRao):该项目是一个 Swift 语言的重试库,旨在提供合理的默认设置和强大的灵活性。 + +- 合理的默认设置:默认选择[指数退避](https://en.wikipedia.org/wiki/Exponential_backoff)算法,适用于大部分场景,避免对资源进行 DDoS。 +- 强大的灵活性:该库提供了多个自定义选项以适应不同的使用场景,包括自定义关闭、重试配置、退避算法选择以及时钟替换等。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#275-2024.01.15.md b/Reports/2024/#275-2024.01.15.md new file mode 100644 index 000000000..27b300fa3 --- /dev/null +++ b/Reports/2024/#275-2024.01.15.md @@ -0,0 +1,57 @@ +# 老司机 iOS 周报 #275 | 2024-01-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/275.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [@Observable Macro performance increase over ObservableObject](https://www.avanderlee.com/swiftui/observable-macro-performance-increase-observableobject/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要介绍 WWDC 2023 中首次公开的 @Observable 宏,这是一个设计精良的工具,旨在优化 SwiftUI 视图并提升应用性能。通过使用 @Observable 我们能有效地防止不必要的视图重绘 , 并更流畅地观察状态变化。尽管使用 @Observable 宏让我们无需再使用 @ObservedObject,ObservableObject 和 @Published,但为了确立模型数据来源仍需依赖 @State。 + +### 🐎 [Perception: A back-port of @Observable](https://www.pointfree.co/blog/posts/129-perception-a-back-port-of-observable) + +[@Smallfly](https://github.com/iostalks):Swift 5.9 引入了强大的观察者工具 @Observable 宏,但仅适用于 iOS 17、macOS 14、tvOS 17、watchOS 10 等新平台。由于少于 50% 的设备运行在 iOS 17 上,大多数开发者需要等待数年才能使用这些工具。[swift-perception](https://github.com/pointfreeco/swift-perception) 提供了在低版本中使用 @Observer 的能力,并且在高于 iOS 17 上会自动使用系统的实现。有需要的读者可以一试。 + +### 🐕 [Adapting your App Icon to visionOS](https://www.createwithswift.com/adapting-your-app-icon-to-visionos/) + +[@享耳先森](https://github.com/iblacksun):Apple Vision Pro 即将发售,如果你的 App 准备适配 visionOS,本文介绍了如何将现有的 App Icon 进行修改已完美匹配 visionOS 规范。 + +### 🐢 [iOS Availability 编译器实现机制解析](https://juejin.cn/post/7316202786173829146) + +[@JonyFang](https://github.com/jonyfang): 文章探讨了 iOS 开发中的 Availability 机制,这是 iOS 编译器提供的一个用于处理不同 iOS 系统版本之间 API 兼容性问题的功能。该机制允许开发人员声明 API 的版本约束,并进行可用性检查来防止在旧版 iOS 系统上调用不存在的新 API,从而避免应用崩溃。然而,作者通过研究 Clang 和 Swift 编译器源码指出,Availability 的检查只局限于方法内部的直接调用,不能保证完全的运行时安全性。 + +### 🐕 [Encrypted Portals between Macs – built in Swift and Rust](https://github.com/build-trust/ockam/blob/develop/examples/app/portals/README.md) +[@水水](https://www.xuyanlan.com/):Portals 是一款 Swift 开发的 Mac 应用程序。它使用 Ockam Rust 库在 Mac 上与任何人、任何地方私下共享服务。该服务通过端到端加密的 Ockam 门户进行安全共享。你的朋友将可以在他们的本地主机上访问它! + + +## 代码 + +### 🐎 [Missing compiler warning](https://github.com/apple/swift/issues/70630) + +[@Cooper Chen](https://github.com/cjlcooper):在 Swift 中,当 override 函数 / 方法具有相同名称但有更多参数,并且这些参数获得默认值时,理论上编译器会对这样的写法产生一个 waring,但是实际开发中并没有出现预期的警告,这个 issue 解释了以上行为的 root cause,并且提出可以使用 `let _ = Printable.init(from:as:)("Sebastian")` 这样的写法,同时也可以对 init 方法增加 `@_disfavoredOverload` 关键字的写法,但需要提醒的是,并不推荐这样的用法,但这为有类似 case 的开发者提供很好的思路。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#276-2024.01.22.md b/Reports/2024/#276-2024.01.22.md new file mode 100644 index 000000000..897dd62d2 --- /dev/null +++ b/Reports/2024/#276-2024.01.22.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #276 | 2024-01-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/276.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Bad practice: using "YYYY" to format a Date](https://www.swiftwithvincent.com/blog/bad-practice-using-yyyy-to-format-a-date) + +[@极速男孩](https://github.com/ztlyyznf001):文章讲述了在 Swift 编程语言中关于日期格式化的一个常见错误。"YYYY" 实际上表示的是该周开始的年份,这会导致新年初几天的日期显示不正确。例如,2023 年 1 月 1 日会错误地显示为 2022 年。这个错误通常在新年开始时才被注意到。正确的年份格式化方法应该使用 "yyyy" ,以确保准确表示日历年份​​。 + +## 文章 + +### 🐕 [在微信小程序里运行完整的 Flutter,我们是怎么做到的?](https://juejin.cn/post/7324923422295670834) + +[@邦 Ben](https://github.com/linwenbang):MPFlutter 是一个跨平台 Flutter 开发框架,可用于各种小程序、H5、原生应用开发。这类跨平台开发,在一些中小型的开发场景来说,可以提高比较大的效率。本文主要介绍一下在微信小程序上实现的原理,通过裁剪 Skia 生成符合微信小程序分包要求的 CanvasKit,使用 Flutter Web + W3C BOM + WebGL Canvas 跑通渲染流程,通过字体内置、智能分包的方式很好地解决了微信包体积限制。选型的过程也有介绍,有兴趣的同学可以仔细看看,也可以基于官网流程体验尝试。 + +参考链接:[官网](https://mpflutter.com/zh/) + +### 🐢 [Swift for C++ Practitioners, Part 1: Intro & Value Types](https://www.douggregor.net/posts/swift-for-cxx-practioners-value-types/) + +[@AidenRao](https://weibo.com/AidenRao):这个系列主要是通过将 C++ 的习惯用法、模式和思维模型映射到 Swift 中来帮助 C++ 开发学习和使用 Swift。如果你是一位 C++ 背景的开发,阅读 [Swift 入门指南](https://www.swift.org/getting-started/) 中有比较多的困惑,那可以尝试一下该系列,能帮助你更好的理解和应用 Swift。 + +### 🐕 [VisionPro News](https://developer.apple.com/news/?id=8fppguuh) && [Q&A: Building apps for visionOS](https://developer.apple.com/news/?id=prl6dp5r) + +[@EyreFree](https://github.com/EyreFree):在这两篇文章中,Apple 专家回答了关于 visionOS 的常见问题,涵盖了如何与实体互动、选择窗口组或沉浸式空间、可视化碰撞形状、在沉浸式空间中定位 SwiftUI 视图、编程定位窗口、用户关注点追踪、onHover 和 onContinuousHover 动作、自定义沉浸式环境纹理、视频格式转换、RealityKit 照明和材料自定义等方面。介绍了 Apple Vision Pro 的 App Store,Algoriddim 公司为 visionOS 设计的适应无限画布的 App djay,以及 Apple Vision Pro 工程师的常见问题解答。文章还提及了重塑企业应用、提供开发实验室和 App Review 咨询服务,以及 visionOS 的示例应用、SwiftUI 教程和音频性能更新资源。 + +### 🐎 [AnyView ’ s impact on SwiftUI performance](https://martinmitrevski.com/2024/01/02/anyviews-impact-on-swiftui-performance/) + +[@东坡肘子](https://github.com/fatbobman):本文探讨了在 SwiftUI 中使用 AnyView 对性能可能造成的影响。AnyView 作为一种类型擦除视图,使得开发者无需明确指定视图层次结构中各个视图的具体类型,从而简化了代码的复杂度,避免了泛型的频繁使用。然而,这种方便性可能以牺牲性能为代价。 + +作者 Martin Mitrevski 通过精心设计的测试代码,直观地展示了 AnyView 在 SwiftUI 中所造成的性能影响。文章特别指出,在包含大量子视图的滚动列表等场景中,应谨慎使用 AnyView,以避免不必要的性能下降。 + +> 介绍摘自 [Fatbobman's Swift Weekly](https://fatbobman.substack.com/p/fatbobmans-swift-weekly-014),推荐订阅! + +### 🐎 [闲话 APPLE 的 APP REVIEW 趣事](https://sketchk.xyz/posts/secret-of-app-review-team) +[@Smallfly](https://github.com/iostalks):这篇文章探讨了一些 iOS App Review Team 内部的运作机制,展示了 App 常见的拒审原因,并为审核申述提供了一些思路,推荐给提交 App Store 审核遇到问题的开发者阅读。 + +### 🐎 [std:: versus ::std::](https://mp.weixin.qq.com/s/QwhBdUZbmGFiUP_ssomXUQ) + +[@老驴](https://weibo.com/u/6090610445):最近一段时间原生鸿蒙开发的热度在升温,而开发原生鸿蒙主要用 C++,而 C++ 这么多年下来也一直热度不减。C++ 开发中,作用域这个概念一直对新手不是很友好,尤其是怎么理解在什么情况下用哪种作用域。这篇文章就可以很好的帮你理解作用域这个概念。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#277-2024.01.29.md b/Reports/2024/#277-2024.01.29.md new file mode 100644 index 000000000..ecd07970d --- /dev/null +++ b/Reports/2024/#277-2024.01.29.md @@ -0,0 +1,59 @@ +# 老司机 iOS 周报 #277 | 2024-01-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/277.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Update on apps distributed in the European Union](https://developer.apple.com/support/dma-and-apps-in-the-eu/) + +[@老驴](https://weibo.com/u/6090610445):iOS 17.4 beta 上周上线了,其中最大的变化是因为欧盟 DMA 政策,苹果在欧盟再次做出重大让步,做出了 “违背祖宗” 的决定。 具体来说,有几个重大变化: + +1. 第三方应用商店:在欧盟,苹果将允许 App 通过第三方商店进行分发. +2. Webkit 外的浏览器内核:长期以来,苹果限制 iOS 上的第三方浏览器必须使用 Webkit 内核,从 17.4 开始,这会在欧盟成为过去式。 +3. NFC API 和支付的开放:欧盟开发者有更多的 NFC 相关的 API,包括很多人期待的模拟 NFC 卡。 +4. App Store 多种支付方式:App Store 将不再限制支付方式. + +这里面其实有很多改变是很多人一直期盼但是却一直不得的。这些改变将让 iOS 在欧盟成为更开放的移动操作系统。当然,仅限欧盟,目前还不知道其他地区的用户是不是可以模拟成欧盟用户,但是按照传统,应该不容易。 + +PS:工信部是不是该出手了?! + +### [Apple introduces new options worldwide for streaming game services and apps that provide access to mini apps and games](https://developer.apple.com/news/?id=f1v8pyay) + +苹果放开了对于串流 APP 的限制,利好 Xbox Cloud Gaming / Nvidia GeForce NOW 上架单独的串流 APP ;同时苹果对于 mini-games / mini-apps / chatbots 类型的应用开放 iAP 内购渠道,相较之前的态度还是略有放宽,也可能是顺应 GPT Shore 的潮流。 + +同时苹果为开发者准备了 50 多个新的的可视化图表以及分析报告,可以查看 用户的参与度,下载销售相关的收益,安装卸载程序时的附加信息等。同时这些信息预计在 3 月上线,届时还可以通过 API 向第三方授权这些分析报告。 + +## 文章 + +### 🐎 [A new access modifier in Swift: package](https://blog.eidinger.info/a-new-access-modifier-in-swift-package) + +[@AidenRao](https://weibo.com/AidenRao):在 Swift 5.9 中,苹果引入了一个新的访问级别:package,在软件包内的模块之间共享代码,同时不将该代码分享给软件包外部。目前 package 只支持源代码构建的软件包,对于二进制框架有望在未来支持。 + +### 🐢 [Exploring object file formats](https://maskray.me/blog/2024-01-14-exploring-object-file-formats) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章的主要内容是关于目标文件格式的探讨。作者从自己在 LLVM 项目中的经历出发,深入研究了 lld 和二进制实用程序,并在此过程中对目标文件格式产生了浓厚的兴趣。文章介绍了目标文件格式的核心组件,如符号、节和重定位,并回顾了几种主要目标文件格式的历史和演变。通过了解不同格式的特点和限制,可以更好地理解它们在软件开发和部署中的作用。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#278-2024.02.26.md b/Reports/2024/#278-2024.02.26.md new file mode 100644 index 000000000..a28a8822e --- /dev/null +++ b/Reports/2024/#278-2024.02.26.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #278 | 2024-02-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/278.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect upload requirement starts April 29](https://developer.apple.com/news/?id=fxu2qp7b) + +预计在 4 月 29 日,App Store Connect 就将限制必须使用 >= Xcode 15.0 进行提交,并支持最新的系统。还未升级的同学们需要尽快切换并进行适配啦。 + +### 🐢 [Flutter 3.19.0 系列更新](https://mp.weixin.qq.com/s/JRdT4vJutvNZ66uqqjYEPg) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 国内新年假期期间 Flutter 团队发布了 2024 一季度的更新:Flutter 3.19.0 ;按照惯例随着一起发布的还有 Dart 3.3 ;此次更新除了功能迭代、性能调优、工具优化之外,有几个点值得开发同学们着重关注: + +- Gemini Dart SDK: 可以更方便地让 Dart 开发人员在 App 里集成 LLM 的 AI 能力 +- Impeller Android Preview: 意味着 Flutter 彻底抛弃 Skia 的进程迈出了很大一步 +- 弃用 Window 7 & 8,弃用 iOS 11 以前的版本 +- Dart 对于 JS interoperably 支持增强 +- Dart Macros 支持 + +其他相关博文: +- [Flutter 3.19.0 ReleaseNote](https://medium.com/flutter/whats-new-in-flutter-3-19-58b1aae242d2) +- [Dart 3.3](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491174&idx=2&sn=b6c236e48e2f5d0032387293f7e90bb6&chksm=cec64803f9b1c1159f6d720883df2ff202ab52cb8820682a65bc4ce6aba1a9488f33f18fae61&cur_album_id=1968809591672979459&scene=189#wechat_redirect) +- [2024 Impeller:快速了解 Flutter 的渲染引擎的优势](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491190&idx=1&sn=dcb726e2ace120fb2285e82a5befb007&chksm=cfbf4d3126192986e2bb5255ee55f4b5fff1a3e2949b15321b3ea264929aedec30dc76fda824&scene=132&exptype=timeline_recommend_article_extendread_samebiz&show_related_article=1&subscene=189&scene=132#wechat_redirect) +- [Flutter 2024 路线规划](https://mp.weixin.qq.com/s?__biz=Mzg3NTA3MDIxOA==&mid=2247491174&idx=1&sn=5ceb5e8fce90f11dc051a9305d4ed109&chksm=cec64803f9b1c1154cd1a684a34d03e0189e9e85bbdf8f67983ea3940c4ecf8dd062de1347ac&cur_album_id=1968809591672979459&scene=189#wechat_redirect) +- [Dart 宏(Macros)编程开始支持](https://mp.weixin.qq.com/s/WoamljZJeNN9huMdIb_Ycw) + +## 文章 + +### 🐕 [通过 Headphone Motion 访问 AirPods 的头部跟踪数据](https://github.com/LLLLLayer/Headphone-Motion) + +[@EyreFree](https://github.com/EyreFree):本文介绍了如何利用 Core Motion 框架访问 AirPods 的头部跟踪数据。介绍了在 iOS 应用中如何设置和获取用户授权,以及如何通过 CMHeadphoneMotionManager 类开始和停止设备运动数据更新,接收头部跟踪数据,并通过 CMDeviceMotion 类解析这些数据,最后说明了如何处理连接和断开耳机的事件。并且提供了完整 Demo 工程,推荐感兴趣的同学阅读。 + +### 🐕 [On-device ML research with MLX and Swift](https://www.swift.org/blog/mlx-swift/) + +[@JonyFang](https://github.com/JonyFang): Swift 编程语言因其易用性和高性能,配合 MLX 库,为 Apple 芯片上的机器学习研究提供了强大支持。MLX Swift 将 MLX 扩展到了 Swift 语言,简化了机器学习在 Apple 芯片上进行实验的复杂度,并提供了相应的 Swift API、高级的神经网络和优化器包,以及文本生成和 MNIST 训练的示例。所有这些都在 MIT 许可下发布,旨在利用 Swift 的高性能和易用性,为机器学习研究者提供一个友好的实验框架。文中提供了文档和示例,API 覆盖的能力可以具体看下文档,感兴趣可以研究下 Examples ~ + +### 🐕 [Code Injection with Dyld Interposing](https://www.emergetools.com/blog/posts/DyldInterposing) + +[@Cooper Chen](https://github.com/cjlcooper):众所周知 Objective-C 运行时的动态性可用于多种用途,例如我们熟知的 Method swizzling,然而 Method Swizzling 不能用于 C/C++ 函数的交换,这对于需要在 C/C++ 下进行逆向的时候并不能如人所愿,本篇文章介绍如何使用 dyld 动态绑定的特性进行插入方法,从而达到对 C/C++ 语言进行替换绑定的目的,同时也建议与 Fishhook 进行异同点比较来达到最佳的阅读体验。 + +### 🐎 [The SwiftUI Field Guide](https://www.swiftuifieldguide.com) + +[@zoeGuo](https://github.com/zoeGuo):这个网站直观地解释了 SwiftUI 布局系统的工作原理。可以通过改变属性或参数数值动态看到布局上的变化,更有利于理解 SwiftUI 参数、属性的含义。 网站目前更新了 [Alignment](https://www.swiftuifieldguide.com/layout/alignment)、[HStack](https://www.swiftuifieldguide.com/layout/hstack)、[Aspect Ratio](https://www.swiftuifieldguide.com/layout/aspect-ratio) 和 [Padding](https://www.swiftuifieldguide.com/layout/padding) 四个模块,推荐给正在学习 SwiftUI 的读者。 + +### 🐕 [云音乐 RN 新架构升级之 iOS 灰度方案](https://mp.weixin.qq.com/s/jZ3wfbFf2xey8aTK16MU4A) + +[@Smallfly](https://github.com/iostalks):文章主要介绍了网易云音乐在升级 React Native(RN)架构时,iOS 侧采用的灰度方案。阐述了实现渐进式升级的思路和挑战,包括静态链接和动态链接两种方案的优缺点,以及他们最终采用的双动态库方案。这个方案通过引入一个中间层(NEReactNative)来解决静态链接过程中的符号引用问题,并在运行时动态加载新旧版本的 RN 代码。 + +文章适合对 React Native 架构升级、iOS 灰度发布策略、以及 Objective-C 运行时特性感兴趣的资深 iOS 开发者阅读。 + +## 代码 + +### [armhf-swift-toolchain](https://github.com/CmST0us/armhf-swift-toolchain) + +[@kemchenj](https://kemchenj.github.ion/): +1. 可以学习如何使用源码编译 Swift +2. 学习如何使用 SPM 进行交叉编译 +3. 对嵌入式 32 位 Linux 平台,可以使用 Swift 编码。例如作者已在 fpga 上运行 Swift [Run Swift On Zynq petalinux](https://forums.swift.org/t/introducing-my-armhf-swift-5-9-toolchiain/69524/2) + +由:[CmST0us](https://github.com/CmST0us) 自荐 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#279-2024.03.04.md b/Reports/2024/#279-2024.03.04.md new file mode 100644 index 000000000..abfd325f2 --- /dev/null +++ b/Reports/2024/#279-2024.03.04.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #279 | 2024-03-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/279.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### [How to make a completionHandler much safer ](https://www.swiftwithvincent.com/blog/how-to-make-a-completionhandler-much-safer) + +[@zoeGuo](https://github.com/zoeGuo):我们经常会用 completionHandler 来处理异步事件,但是很难保证所有逻辑下都能执行到 completionHandler 的逻辑。那么在 Swift 语法中可以使用 defer 关键字,defer 可以确保 completionHandler 在方法返回之前一定被调用,编译器会检查在每个可能的代码路径中都能顺利执行到 completionHandler。原文有更详细的代码示例说明,还有视频讲解。 + +## 文章 + +### 🐕 [从入门到精通:如何解决 C++ 模板代码膨胀问题](https://mp.weixin.qq.com/s/aRqKGoVNcf8yzRhIHbmoBA) + +[@老峰](https://github.com/gesantung):C++ 模板是一种强大的编程工具,它允许我们编写通用的、可重用的代码,本文介绍了通过模板函数提取通用部分;模板类抽象出通用部分到基类,合理使用模版等优化策略提高编译速度,减少二进制文件大小解决代码膨胀问题。 + +### 🐎 [Swift 6.0 Release Process](https://forums.swift.org/t/swift-6-0-release-process/70220) + +[@AidenRao](https://weibo.com/AidenRao):Swift 社区公布了 Swift 6 的发布流程及预期时间表。2024 年 3 月 15 日,将从 Swift 主分支中切出 release/6.0 分支开启发布流程,正式版本预计将于今年下半年与新版 Xcode 同步发布。 + +### 🐎 [ImGui 在长桥跨端图表组件中的探索与应用](https://mp.weixin.qq.com/s/-_NLEbonjEl1F2kyA0yx_A) + +[@Smallfly](https://github.com/iostalks):长桥技术团队在 iOS App 中升级 K 线图表组件,面临业务复杂度高、两端重复开发等问题。在对比各种成熟跨端方案之后,他们选择了 ImGui 作为跨平台解决方案,利用其 GPU 渲染和简单 API 实现高性能图表。它使用各平台支持最好的渲染框架,有着完善的图表绘制能力,即使加载大量数据,在多个平台上依然有流畅体验。 + +### 🐢 [天美引擎工程师:如何使用移动端硬件特性提升游戏上限?](https://zhuanlan.zhihu.com/p/587988966) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 Unreal Open Day 2022 上,腾讯天美工作室的引擎工程师王烁分享了如何使用移动端硬件特性提升游戏渲染效果。他提出,利用硬件特性如 VRS(可变着色率渲染)等可以有效解决移动端渲染中的常见问题。将渲染分为应用图形学算法、渲染管线、图形 API 层和 GPU 驱动层四层,并强调了了解这些层级对于手游开发的重要性。了解硬件特性如 Vulkan 中的 VRS 和 Hidden-surface removal 等可以帮助开发者针对目标机型选择适当的特性,从而提升游戏渲染效果。通过利用这些硬件特性,游戏开发者可以在保证游戏性能的同时,提高游戏画面质量,从而提升游戏体验。王烁的分享为游戏开发者提供了一种新的思路和方法,对于提升游戏上限具有重要的指导意义。 + +### 🐕 [try catch 失效排查 - 探索异常处理机制的迷雾](https://mp.weixin.qq.com/s/MK26EcuVS2GFOjocgvvetA) + +[@xuyafei86](https://github.com/xiaofei86):C++ 异常处理机制 try catch 在快手 App 内突然失效,引发大量未捕获异常导致的崩溃。本文介绍稳定性团队排查此次问题的过程,问题的根本原因以及修复规避方案,最后梳理异常处理流程,知其然,知其所以然,方能在问题出现时冷静应对。感兴趣同学可以阅读原文了解。 + +### 🐕 [How the Swift compiler knows that DispatchQueue.main implies @MainActor](https://oleb.net/2024/dispatchqueue-mainactor) + +[@Barney](https://github.com/BarneyZhaoooo):文章讨论了 Swift 编译器如何识别 DispatchQueue.main 为 `@MainActor`,这是通过检查源代码实现的。当使用 DispatchQueue.main.async 时,系统会自动将其视为 `@MainActor`,这使得在主线程上执行并发任务变得方便。然而,这种行为并未在 Xcode 等 IDE 中明确显示出来,作者希望能直观显示 `@MainActor` 和相关并发信息,以便更好地理解和学习 Swift。 + +### 🐎 [ARM 汇编系列](https://www.lyldalek.top/6cd918093215420e8e980db08e9a8ba0) + +[@Crazy](https://github.com/jiyan135960):汇编是客户端开发人员很少接触的一个方面,一般在 Android 开发人员也只有 ndk 开发者会接触到,汇编看似无用,但却是性能优化最底层的核心,了解汇编是程序员非必备,但是很需要的技能。本次推荐的博客是一个系列,在这个汇编中文博客很少的当下,这个系列可以说是很好的解决了大家入门困难的问题。本系列从环境搭建开始,到各种指令的介绍,把汇编基础用图片加代码整合起来,简单明了的讲解给大家,有需要汇编入门的同学可以仔细学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#280-2024.03.11.md b/Reports/2024/#280-2024.03.11.md new file mode 100644 index 000000000..87c66c82c --- /dev/null +++ b/Reports/2024/#280-2024.03.11.md @@ -0,0 +1,101 @@ +# 老司机 iOS 周报 #280 | 2024-03-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/280.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Privacy updates for App Store submissions](https://developer.apple.com/news/?id=3d8a9yyh) + +[Privacy manifests and signatures](https://developer.apple.com/support/third-party-SDK-requirements/) 的 deadline 来了,5 月 1 日。目前大部分知名第三方库都已经完成了适配,例如:[SDWebImage](https://github.com/SDWebImage/SDWebImage/blob/master/SDWebImage/Resources/PrivacyInfo.xcprivacy)、[FMDB](https://github.com/ccgus/fmdb/blob/master/privacy/PrivacyInfo.xcprivacy)、[Protobuf](https://github.com/protocolbuffers/protobuf/blob/main/PrivacyInfo.xcprivacy)、[SnapKit](https://github.com/SnapKit/SnapKit/blob/develop/Sources/PrivacyInfo.xcprivacy) 等,但也有部分如:MBProgressHU、Starscream 等年久失修可能得自己处理下。 + +##  Developer - 设计开发加速器 + +### [Apple Vision Pro 开发者实验室 与 探索《人机界面指南》](https://developer.apple.com/events/view/upcoming-events?q=Shanghai) + +上海的 Vision Pro 的开发实验室即将迎来多场活动,[3 月 27 日](https://developer.apple.com/events/view/U56UR4S32Y/dashboard) 与 [4 月 24 日](https://developer.apple.com/events/view/H44MV68G45/dashboard) 的线下实验室,以及 4 月 10 日的 [1 on 1 线上咨询](https://developer.apple.com/events/view/NLYY4Q2N6Y/dashboard)。 + +4 月 2 日还有[探索《人机界面指南》](https://developer.apple.com/events/view/5758Q34VL9/dashboard) 的活动。 + +还没有亲自体验过 Vision Pro 的开发者千万不要错过本次活动。 + +## 新手推荐 + +### [The power of inout parameters](https://danielsaidi.com/blog/2024/02/18/the-power-of-inout-parameters) + +[@zoeGuo](https://github.com/zoeGuo):Swift 函数参数是常量,这意味着不能在函数内部修改入参的值。将参数标记为 inout 实际是将入参值引用,从而实现在函数内更改其值。文中举例了富文本 context 跟随 textView 的各属性值变化的例子说明使用 inout 参数可以减少重复表意的代码、使代码更简洁。 + +## 文章 + +### 🐕 [Why Ollie is moving away from SwiftUI to UIKit](https://medium.com/goodones/why-ollie-is-moving-away-from-swiftui-to-uikit-cfdefe918d1c) + +[@JonyFang](https://github.com/JonyFang): 本文描述了该团队在 SwiftUI 应用过程中经历了一系列关于 SwiftUI 和 Swift 并发的问题,最终决定从 SwiftUI 迁移到 UIKit。他们指出 SwiftUI 的抽象和不确定性给开发带来了更多的开发成本,在处理复杂的业务逻辑和多线程时问题更为明显。SwiftUI 的"魔法"和 AttributeGraph 的不确定表现让 debug 变得困难。开发过程中 Swift 并发的死锁问题也让开发者头疼,而其异步执行的顺序问题使得调试变得复杂。 + +作者强调了 SwiftUI 可能正在经历第二系统效应(second-system effect),第二系统效应可能造成软件专案计划过度设计,产生太多变数,过度复杂,无法达成期待,并因而失败。他们解释了在使用 SwiftUI 和 Swift 并发时的一些错误实践,包括对 MVVM 和对 SwiftUI 内部属性的误用。他们还提到了对 Combine 的迁移以及将重型操作移到显式调度队列的决策。 + +为了解决问题,团队决定迁移到 UIKit,并举例说明了一个使用 UIKitCollectionView 的案例在性能上远远超过 SwiftUI 版本。 + +### 🐕 [How to determine where tasks and async functions run in Swift?](https://www.donnywals.com/how-to-determine-where-tasks-and-async-functions-run-in-swift/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文解释了 Swift `Task` 和异步函数的运行规则,以及它们和 GCD 心智规则的不同之处。作者首先介绍了不同的 `Task` 类型 - 分离 Task 和非结构化 Task,其次重点解释了 Swift 对于不同 Task 的调度规则。 + +如果上下文被 `@MainActor` 或其他全局 `Actor` 关联或隔离,则创建的非结构化 `Task` 会在对应 `Actor` 的 `executor` 中执行,否则会被调度到默认的全局 `executor` 中执行。 + +注意某些协议也可能携带 `@MainActor` 约束以及我们可以在测试代码中使用 `MainActor.assertIsolated(_:)` 来进行运行时的 `@MainActor` 隔离检查。 + + +### [C++ 常见避坑指南](https://mp.weixin.qq.com/s/ivmOl-qGALnHEVbwKANiug) + +[@莲叔](https://github.com/aaaron7):腾讯是大厂中 C++ 使用度最高的公司,很长一段时间几乎所有的后端服务都是用 C++ 开发完成的。本篇文章介绍与总结了 C++ 在大规模工程开发中最常见的问题,非常有价值。新手使用 C++ 往往很容易被淹没在无数的语言细节里,同样的逻辑也会有多种写法,这个时候如果有一个身经百战的前辈出来给你划重点,那练级效率必然会事半功倍。这篇文章就给我这样的感觉,推荐给需要在工作中使用 C++ 的技术同学阅读。 + + +### 🐎 [Everything you need to know about Swift 5.10](https://www.donnywals.com/everything-you-need-to-know-about-swift-5-10/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):伴随着 iOS 17.4 和 iPadOS 17.4 的发布,Apple 推出了 Swift 5.10,这一版本在并发性方面取得了显著的进步。Swift 5.10 主要针对 Swift Concurrency 的数据安全功能进行了改进,特别是在严格并发检查方面。通过增强并发检查,Swift 5.10 现在能够更准确地识别并标记出不安全的代码,从而帮助开发者在编写并发代码时避免数据竞争和其他线程安全问题。Swift 5.10 还引入了 SE-0412 提案,该提案限制了全局变量的并发访问,进一步提高了 Swift 在编译时防范数据争用的能力。这意味着开发者在编写涉及共享状态的代码时,需要更加明确地考虑其并发安全性。 + + +### 🐢 [The power of self-sufficient features](https://www.swiftindepth.com/articles/self-sufficient-features/) + +[@享耳先森](https://github.com/iblacksun):一个功能最好是相对独立,尽量减少对外部的依赖,本文介绍了 `self-sufficient features` 的几个原则: +1. 自身加载必须的数据,而不靠外部传入 +2. 内部处理各种错误,而不向外传递 +3. 不要依赖或修改堆栈 + +### 🐕 [How to use VariadicView, SwiftUI's Private View API ](https://www.emergetools.com/blog/posts/how-to-use-variadic-view) + +[@Cooper Chen](https://github.com/cjlcooper):本文介绍了 SwiftUI 中私有视图 API 称为 VariadicView,,通过枚举 _VariadicView 是这个类的入口,它包括其他类型,例如_VariadicView_MultiViewRoot 和_VariadicView. tree 等等,文章介绍了如何使用 VariadicView 以及其安全性,对于 SwiftUI 相关开发有不错的实用性。 + +### 🐕 [High Performance Swift Apps](https://jacobbartlett.substack.com/p/high-performance-swift-apps) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者从自己的 App 入手,详细讲述了如何着手优化 App 的性能,其中包含了问题分析、Instruments 的简单使用说明以及最终的代码实践,非常适合新人入门。其中作者的一个观点也是非常令人赞同:应该先找到问题,聚焦在真正的瓶颈上,避免在琐碎的点上投入太多精力。 + +## 代码 + +### 🐢 [ConcurrencyRecipes](https://github.com/mattmassicotte/ConcurrencyRecipes) + +[@AidenRao](https://weibo.com/AidenRao):作者表示 Swift Concurrency 很难用,所以整理和记录了一些使用 Swift Concurrency 遇到的问题和解决方案,并欢迎大家一起共建。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#281-2024.03.18.md b/Reports/2024/#281-2024.03.18.md new file mode 100644 index 000000000..320d782d1 --- /dev/null +++ b/Reports/2024/#281-2024.03.18.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #281 | 2024-03-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/281.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Swift Predicate: 用法、构成及注意事项](https://fatbobman.com/zh/posts/swift-predicate-usage-composition-and-considerations/) + +[@JonyFang](https://github.com/JonyFang): 文章详细介绍了如何有效利用 Swift Predicate,包括谓词的构建技巧、全局函数和实例方法的限制、支持创建多种泛型参数的谓词、线程安全和序列化等。通过具体代码示例,展示了 Swift Predicate 在不同场景下的应用,如如何处理可选值、实现线程安全的数据处理等,同时对比了 NSPredicate 与 Swift Predicate 的不同之处,强调了 Swift Predicate 在 Swift 开发中的好处和优势。 + +### 🐎 [Third-party libraries acknowledgments using a Settings bundle](https://www.avanderlee.com/workflow/third-party-libraries-acknowledgments-swift-packages/) + +[@Damien](https://github.com/ZengyiMa): 三方库可以帮助开发者更快地构建应用,但通常会包含开源协议 License,如 MIT License 等,本篇文章介绍了如何在你的应用中添加三方库致谢和开源协议的展示信息,而不需要花费太多的工作,作者介绍了一个开源项目:swift-package-list,并且提供了一键集成脚本,推荐各位 iOS 开发者也集成致谢模块,这将会让您的 App 更加合规。 + +### 🐕 [What you should know about visionOS volumes before using them in an app](https://www.lunarskydiving.com/blog/volume-limitations/) + +[@EyreFree](https://github.com/EyreFree):这篇文章讨论了 visionOS 中使用 volumes 时的一些限制。作者列出了 15 个问题,包括 volumes 创建后无法改变大小,最大尺寸限制为 2 立方米,以及受用户 Window Zoom 设置的影响而改变大小。还提到了 volumes 的初始位置无法设置,手势追踪和射线投射功能不支持,且 volumes 可能无法与系统控件或评分提示交互。文章建议,如果这些限制影响到应用设计,开发者可以考虑使用 immersive space。感兴趣的朋友可以看一下。 + +### 🐕 [Debug for visionOS using Xcode simulator visualizations](https://www.createwithswift.com/debug-visionos-using-xcode-simulator-visualizations/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讲解了如何通过使用 Xcode 的 visionOS 模拟器中的六种主要调试模式(锚定、轴向、边界、碰撞形状、遮挡网格和表面模式)进行应用开发。这些模式有助于完成空间定位、理解定向、增强空间认知、事件检测、实现虚实交互以及精确实体定位。文章还指出了额外资源,以便于更好地运行和交互应用。掌握这些调试模式对于开发出富有交互性的空间计算应用并充分利用诸如 Apple Vision Pro 等设备至关重要。 + +### 🐢 [Modding Plugins back into Xcode](https://bryce.co/xcode-plugin-loader/) + +[@享耳先森](https://github.com/iblacksun):因 macOS 安全机制升级导致 Xcode 老的插件体系被废弃,本文写了与此相关的一些 Xcode 插件背景知识,以及提供了一些 ` 黑魔法 ` 让新版 Xcode 也可以加载老的插件,如果对 Xcode 插件开发敢兴趣,建议阅读。 + +### 🐎 [If you ’ ve created a visionOS app with a volume, you probably did it wrong](https://www.lunarskydiving.com/blog/volume-window-zoom/) + +[@Smallfly](https://github.com/iostalks):文章讨论了 visionOS 应用开发中的 volume 内容剪裁问题,指出 Apple 官方示例代码在用户更改 Window Zoom 设置时可能导致异常。Apple 工程师说是符合预期的,并提出使用 GeometryReader3D 来动态调整内容以适应 volume 大小的解决方案,文档中未充分说明这一点请开发者关注。 + +### 🐎 [Vision Pro Connectivity](https://buttondown.email/varrall/archive/vision-pro-connectivity/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章探讨了如何通过连接多个设备,特别是 iPhone 和 Apple Watch,来增强使用苹果 Vision Pro 的体验,以及如何利用 Multipeer Connectivity 和 Watch Connectivity 框架实现这一目标。作者同时还讨论了一些可能的应用场景,例如使用苹果铅笔进行更精确的输入、利用 Apple Watch 上的触觉反馈来反映 Vision Pro 上的操作,以及设计需要多个设备协同合作的游戏等。 + +### 🐎 [Shattered Glass: Customizing Windows in visionOS](https://blog.overdesigned.net/posts/2024-02-29-visionos-window-basics/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了如何在 visionOS 的开发中自定义视图的样式,详细讲述了几种视图常用的 modifier,每种样式都有给出相关的图片示例,简单易懂。 + +### 🐎 [`__inline__` 是否会改变 local static variable 的行为?](https://juejin.cn/post/7345692979075039247) + +[@kemchenj](https://kemchenj.github.io):本文介绍了为什么不能将 `__inline__` 的作用理解为宏展开: + +- `__inline__` 并不会改变局部 `static` 变量原本的行为,因为编译器将最终决定是否进行 inline ,编译器自然应该抹平区别。当然你如果还添加了 `__attribute__((always_inline))` 就一定会内联。 +- 尽量不要在 .h 中声明 `static` 函数(包括 `NS_INLINE` 函数),除非你很清楚你在做什么。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#282-2024.03.25.md b/Reports/2024/#282-2024.03.25.md new file mode 100644 index 000000000..c1c73f5b7 --- /dev/null +++ b/Reports/2024/#282-2024.03.25.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #282 | 2024-03-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/282.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +[Cocoapods 之版本号问题](https://mp.weixin.qq.com/s/ghSD_wbfRuYse64m9TmBKw) + +[@zoeGuo](https://github.com/zoeGuo):文章是一篇关于 Cocoapods 版本号使用的一个建议:要注意使用标准化的版本号,不要在主干分支使用 prerelease 版本号。原因是 Podfile 中强指定一个库的版本号,如果是一个 prerelease 版本号,最终依赖的不一定是这个版本,这其中的不确定性便来于 Cocoapods 底层对 prerelease 版本的处理策略。文中解释了 Cocoapods 如何判断 Source 里面的版本是否满足依赖要求的,可以配合[语义化版本号规范](https://semver.org/)一起阅读。 + +## 文章 + +### 🌟🐕 [Apple 也在用的 Benchmark 框架](https://www.swift.org/blog/benchmarks/) + +[@kemchenj](https://kemchenj.github.io/):这篇文章介绍了一个专为 Swift 编写的 Benchmark 包,除了支持追踪常用的 CPU 时间和内存占用情况,还支持了 ARC 相关的数据,swift-foundation 之类的 Apple 官方开源项目也都在使用。 + +另外 [Benchmark 的文档](https://swiftpackageindex.com/ordo-one/package-benchmark/1.22.4/documentation/benchmark/gettingstarted)也写得非常好,手把手教你生成 baseline,生成可视化图表,甚至连 GitHub CI 的 workflow 都教你怎么写,直接评论到 PR 上看对比结果。 + +### 🐢 [A Gentle Introduction to LLVM IR](https://mcyoung.xyz/2023/08/01/llvm-ir/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文由浅入深地介绍了 LLVM IR 的一些基本常识和概念,并给出了相关例子。 + +- % 和 @ 的在 LLVM IR 中的含义 +- LLVM IR 的类型表示 +- CFG 和不可达优化等 + +了解 LLVM IR 的主要用途是,在进行性能优化时,介于源代码和汇编代码之间的 LLVM IR 可能会是更方便的选择。 + +### 🐎 [Swift Tooling: Windows Edition](https://speakinginswift.substack.com/p/swift-tooling-windows-edition) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 Arc 公司所推动 Swift on Windows 的最新进展和一些他们的开发体验分享 + +- 🔨 开发环境 : VSCode 是 Swift on Windows 上的首选开发环境。 +- ✍️ 代码编辑 : VSCode IDE 目前已提供了代码补全、导航和错误显示功能等功能。 +- 🧪 构建和测试 : 支持通过 Swift Package Manager 和 CMake 进行构建和测试。 +- 🐛 调试能力 : LLDB 调试和命令行调试目前都已支持。 + +### 🐢 [Nerdy internals of an Apple text editor ](https://papereditor.app/internals) & [ 9 years of Apple text editor solo dev](https://papereditor.app/dev) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):作者作为一位全栈 Web 开发者,出于对 Mac 上独特应用程序生态系统的热爱,踏上了制作 Mac 原生文本编辑器的旅程。经过两年的努力,成功推出了名为 Paper 的 Mac 应用程序,随后又将其扩展到了 iOS 平台。作者尤其注重用户体验和应用程序的稳定性,因此选择了开发本土应用,充分利用了 Xcode、AppKit 和 Objective-C 等技术的优势。 + +正是作者的坚持和追求,使得 Paper 文本编辑器得以诞生并逐渐完善。而当我们深入了解 Paper 背后的工程细节时,不禁为作者的专业素养和技术实力所折服。Paper 的核心组件 TextView,通过 NSTextStorage、NSTextContainer 和 NSLayoutManager 等旗舰类的协同工作,实现了流畅而高效的文本编辑体验。这些技术细节不仅展示了作者的精湛技艺,更是他对用户体验极致追求的体现。 + +### 🐕 [lsregister: How Files Are Handled in Mac OS X](https://krypted.com/mac-security/lsregister-associating-file-types-in-mac-os-x/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要讲述了如何使用 lsregister 命令管理 Mac OS X 中的 Launch Services 数据库,这个数据库决定了文件的默认打开方式。文章详细介绍了如何查询、导出、强制重新注册文件类型、取消应用程序的注册等操作,以及如何关闭文件类型默认被隔离的功能。同时,文章也指出了清理和重建大规模数据库的方法,以及如何指定某应用打开特定文件类型或网络协议。 + +### 🐕 [Sending trial notifications with provisional authorization on iOSX](https://nilcoalescing.com/blog/TrialNotificationsWithProvisionalAuthorizationOnIOS/) + +[@享耳先森](https://github.com/iblacksun):Push 是很好的吸引用户注意的方式,但难点是如何获取用户的授权,本文介绍了 `provisional notifications` 这一通知机制。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 淘宝 - Meta 技术团队 - iOS 工程师 / Vision Pro 工程师 (校招) + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#283-2024.04.01.md b/Reports/2024/#283-2024.04.01.md new file mode 100644 index 000000000..5d8b61604 --- /dev/null +++ b/Reports/2024/#283-2024.04.01.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #283 | 2024-04-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/283.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [DylanYang](https://github.com/Dylan19Yang) 加入老司机技术,目前就职于字节跳动,参与音乐相关客户端开发,业余喜欢看看番、打打游戏。 + +欢迎 [Kyle-Ye](https://github.com/Kyle-Ye) 加入老司机技术,他是 Swift Documentation Workgroup 成员,独立开发者,专注于 OpenSwiftUI / Swift 相关研究。 + +**希望 DylanYang 与 Kyle-Ye 的加入也能为大家带来更多元化的内容输出!** + +## 文章 + +### 🐎 [A better pull request](https://blog.developer.atlassian.com/a-better-pull-request/) + +[@Smallfly](https://github.com/iostalks):在使用 Git 时,执行 `git diff master...alice/master`,「三个点」查看当前分支与远端分支的差异,清楚的了解将要拉取的内容,然而当远端分支有提交时,新的提交无法在 diff 中显示,这么设计有其合理性。本文作者认为不太方便,在 Bitbucket 中使用「两个点」展示与最新分支的 diff 会更清晰。对实现感兴趣的同学可阅读原文了解。 + +### 🐎 [SwiftUI Previews-based architecture](https://blog.thomasdurand.fr/story/2024-03-15-preview-based-architecture/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过一个简单的 demo 阐述了如何实现基于 SwiftUI Previews 框架的开发流程。同时作者也借此引入了他认为实现代码灵活性和解耦的两个工具:接口(Interface)和依赖注入(Dependency Injection),并在 demo 中进行了实践。接口在 Swift 中以原生的 Protocol 呈现而依赖注入则可以凭借 SwiftUI 中的环境变量(Environment Values)来实现。此外借助 `@Observable`、`ObservableObject` 和环境变量等能力,整个框架在渲染性能、内存和数据同步方面都非常优秀。 + +### 🐕 [Using a Swift macro to generate an EnvironmentKey](https://www.swiftwithvincent.com/blog/using-a-swift-macro-to-generate-an-environmentkey) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了如何使用名为 `@EnvironmentStorage` 的 Swift 宏来简化 SwiftUI 中 Environment 的使用,自动生成 EnvironmentKey 和相关的 EnvironmentValues 代码,减少样板代码,提高开发效率。通过引入 SwiftUIMacros 包并应用该宏,开发者只需定义属性名、类型和默认值即可快速创建环境存储,从而节省时间并减少错误。 + +### 🐕 [Be Careful When You Initialize a State Object](https://jaredsinclair.com/2024/03/14/state-object-autoclosure.html) + +[@AidenRao](https://weibo.com/AidenRao):在这篇文章中,Jared Sinclair 谈到了在使用 @StateObject 时需要注意的一些最佳实践:如果你必须显式地初始化 @StateObject,请密切注意属性包装器的初始化参数是一个名为 thunk 的转义闭包,而不是一个名为 wrappedValue 的对象。请在闭包内部完成所有封装对象的初始化和预处理,否则就会损害性能优势,而性能优势很可能正是你使用 @StateObject 的初衷。 + +### 🐕 [Unrestricted View Replication](https://bryce.co/replicating-views/) + +[@JonyFang](https://github.com/JonyFang): 本文讨论了在 iOS 应用中单 UIView 实例多副本场景的处理。首先介绍了使用私有 API `_UIPortalView` 来实现复制视图的方法,但指出这不符合苹果的规定,因此需要寻找其他解决方案。 + +接下来,引出 `CAReplicatorLayer` 来实现复制视图的方法。`CAReplicatorLayer` 可以创建多个视图的副本,并对每个副本应用递归变换。文中也讨论了使用嵌套的 `CAReplicatorLayer` 来创建复杂布局的方法,但指出这种方法会导致视图复制的复杂性和性能问题。 +最后,提到了 `CAReplicatorLayer` 的 `instanceDelay` 属性,该属性可以在复制的视图实例之间创建动画延迟。 + +### 🐎 [How to run asynchronous code in Swift Playground correctly?](https://antran.app/2024/swift_playground_async_execution/) + +[@zoeGuo](https://github.com/zoeGuo):Swift Playground 是快速试验 Swift 代码的绝佳工具。默认情况下,Swift Playground 从程序的顶部到底部同步执行代码。当运行异步代码时,会遇到代码执行不会结束的问题。引入 `PlaygroundSupport` 库,配合使用 `needsIndefiniteExecution`、`finishExecution()` 两个 API,即可在 Swift Playground 中编写异步代码并顺利执行,文中例举了在 Swift Playground 中使用 dispatchGroup 完成异步逻辑的操作。 + +### 🐎 [Make Your iOS App Smaller with Dynamic Frameworks](https://www.emergetools.com/blog/posts/make-your-ios-app-smaller-with-dynamic-frameworks) + +[@Leo](https://github.com/LeoMobileDeveloper):iOS 的 Widget 和 ShareExtension 是独立的 target,sandbox 和主 App 是独立的,如果多个独立的 Target 采用静态链接的方式来构建,那么某些基础库的的代码和资源会被在多个 Target 之间拷贝多份。本文提出了一种解决多 Target 之间共享代码和资源的方式,即用 Dynamic Framework,可以显著优化包大小。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#284-2024.04.08.md b/Reports/2024/#284-2024.04.08.md new file mode 100644 index 000000000..5693b1a4f --- /dev/null +++ b/Reports/2024/#284-2024.04.08.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #284 | 2024-04-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/284.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Generate and read analytics reports from the App Store Connect API](https://www.polpiella.dev/analytics-reports-api-app-store-connect) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了苹果公司最近推出的 50 多种新的分析报告,这些报告包括应用商店参与度、应用商店商务、应用使用情况、框架使用情况和性能等方面的数据。虽然这些新数据提供了很多洞察力,非常有价值,但它们仅通过 App Store Connect API 独家提供,而且获取数据的方式并不直观。文章中介绍了如何使用 App Store Connect Swift SDK 来访问这些新的指标。如果对该方式感兴趣,值得一读。 + +### 🐕 [Swift Isolation Intuition](https://www.massicotte.org/isolation-intuition) + +[@DylanYang](https://github.com/Dylan19Yang):本文详细介绍了 Swift 并发框架中的隔离(Isolation)概念,作者通过一系列的例子阐述了如何判断当前代码上下文的隔离状态。关于隔离,作者总结了三条规律: +1. 隔离状态是在方法、数据结构、变量等声明时就确定的 +2. 隔离状态只会被 async 改变 +3. protocal 也可以声明隔离状态 + +同时应当牢记隔离状态是一个编译时的声明,运行时的状态并不重要,即使一段代码在运行时只会跑在主线程上也不代表它是一段主线程隔离(MainActor-isolated)的代码。 + +本文在书写过程中假设读者已经对 swift 并发的基础概念(Actor、Task 等)有了一些了解,建议未接触过 Swift 并发的读者可以简单了解下这几个概念后再阅读此文。 + +### 🐢 [Near real-time UI code generation on iPad](https://otaku.codes/uni/dissertation/dissertation.pdf) + +[@BluesJiang](https://github.com/BluesJiang): 本论文展示了如何利用 YOLO 模型实现从草图到 SwiftUI 代码的流程。详细说明了从数据收集处理、模型训练以及利用 CoreML 实现单机完成部署投放。这里利用 iPad 强大的绘画、机器学习、SwiftPlayground 的能力,可以充分的展示这种可能性。具体展示的效果可以查看 [Demo 视频](https://www.youtube.com/watch?v=SKGdZ3H9eyY)。这篇论文很好的展示了机器学习实践的完整流程,值得学习。 + +### [理解 C++ 的六种 Memory Order](https://lancern.xyz/2021/07/07/cpp-memory-order/) + +[@老驴](https://weibo.com/u/6090610445):本文详细介绍了 C++11 中引入的六种内存顺序(memory order)的概念,目的是解决多线程环境下的数据一致性和可见性问题。内存顺序包括: + +Relaxed:不保证顺序性的最宽松内存顺序。 +Consume:保证读操作能看到数据依赖的写操作。 +Acquire:确保读操作可以看到在相应 release 操作之前的所有写操作。 +Release:确保写操作之前的所有操作对其他线程可见。 +Acquire-Release:同时包含 acquire 和 release 语义。 +Sequential Consistent:所有线程看到一致顺序操作的最严格内存顺序。 + +想要了解 C++ 内存的话,值得一读。 + +### 🐕 [Using @_silgen_name to forward declare functions in Swift and improve build times](https://swiftrocks.com/using-silgenname-to-call-private-swift-code) + +[@Cooper Chen](https://github.com/cjlcooper):文章介绍了使用 `@_silgen_name` 属性在 Swift 中前向声明函数以及改善构建时间的方法。作者强调了谨慎使用这一技巧的重要性,并解释了其工作原理和潜在风险。通过示例和技术细节,文章展示了如何使用该属性来提高 Swift 应用程序的构建效率,尽管牺牲了一些类型安全性。最后,作者呼吁 Swift 支持更多类似的功能,以满足开发者对更多控制和灵活性的需求。这对于需要提升 Swfift 编译速度相关内容的开发者有一定的参考价值。 + +### 🐕 [lldb remove randomness](https://bryce.co/lldb-remove-randomness/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何使用 LLDB 调试器去除调试第三方应用时的随机性。通过一个示例程序,演示了生成随机数据并打印出来的过程。文章重点在于展示如何通过设置 LLDB 断点和特定命令,强制 randomData 函数返回固定长度和内容的数据,从而消除随机性。作者分步骤说明了如何先返回固定大小的数据,然后是动态大小但固定数据,最终是动态大小且看似随机但实际一致的数据。这一技巧在需要调试包含随机元素的程序时非常有用,能够提高调试的效率和准确性。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#285-2024.04.15.md b/Reports/2024/#285-2024.04.15.md new file mode 100644 index 000000000..4770d0098 --- /dev/null +++ b/Reports/2024/#285-2024.04.15.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #285 | 2024-04-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/285.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS 17.4/17.4.1 新安装的用户首次启动 IDFA 权限获取失败,以及 workaround](https://forums.developer.apple.com/forums/thread/746432?answerId=784610022#784610022) + +首次新安装 APP 的用户会在通过 ``ATTrackingManager.requestTrackingAuthorization()`` 申请 IDFA 的时候自动失败(即使用户还没有手动点击拒绝),这会对依赖 IDFA 归因或者正在投放的 APP 造成一定影响,论坛也已经有同学给出 workaround(通过 IDFA 弹窗在关闭时会触发 ``UIApplication.didBecomeActiveNotification`` 进行再次判断)。 + +## 文章 + +### 🌟 🐕 [五年沉淀,微信全平台终端数据库 WCDB 迎来重大升级!](https://mp.weixin.qq.com/s/RWCqLD0M_WGCrCcz0oQIcQ) + +[@JonyFang](https://github.com/JonyFang):在接口层面,新版 WCDB 全面支持了 C++、Java、Kotlin、Swift 和 ObjC 这五种主要的终端开发语言,覆盖了 Android、iOS、Windows 、macOS 和 Linux 这五大终端平台。同时,还对 Winq 进行了重写和强化,使开发者能够在各种语言中使用原生语法编写任意 SQL。 + +在功能层面,新版 WCDB 推出了全新的数据备份和修复方案,大幅提升了数据修复率,同时将数据备份的性能消耗降至可忽略不计。此外,还重点推出了数据迁移和数据压缩这两个新功能,让开发者仅通过简单的配置,就能高效处理复杂业务中的数据过度聚集和数据过度膨胀这两大难题。新版 WCDB 还推出了 FTS5 优化和可中断事务等新特性,使开发者在特定场景下可以实现更极致的性能优化。 + +### 🐕 [How to avoid using AnyView in SwiftUI](https://tanaschita.com/swiftui-how-to-avoid-using-anyview/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章讨论了在 SwiftUI 中避免使用 AnyView 的方法。AnyView 是一种类型擦除视图,用于包装其他 SwiftUI 视图,但它会降低 SwiftUI 的性能。文章提出了三种替代方案: +1. 使用 @ViewBuilder 属性:通过在属性或函数上添加 @ViewBuilder 属性,可以将多个视图组合成单个返回类型,而无需使用 AnyView。 +2. 使用 Group 类型:Group 类型允许将多个视图组合成一个视图,而不会影响布局。使用 Group 可以避免使用 AnyView,并可以根据需要组合不同类型的视图。 +3. 使用泛型:当需要存储不确定类型的视图时,可以使用泛型来代替 AnyView。通过使用泛型参数,可以灵活地存储和使用视图,而无需使用 AnyView。 + +### 🐕 [In Search of a Smooth Scroll](https://byla.lt/posts/in-search-of-smooth-scroll/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文记录了作者由于对更平滑滚动的追求而将 LazyVGrid 替换为 NSTableView 的过程,可以见到结果是 NSTableView 确实会有更丝滑的效果,不过作者并不是希望大家认为 SwiftUI 很慢而 AppKit 很快,或者 macOS 上的 SwiftUI 还没有为重要的应用程序做好准备,事实上作者重写过程中 SwiftUI 已经解决了部分问题。最后作者聊了对 AppKit 的非官方见解和反思,也希望大家对两种技术都有着同样的热爱。 + +### 🐎 [Exploring ABI stability, @frozen, and library evolution mode](https://digitalbunker.dev/understanding-frozen-in-swift/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过 `@frozen` 关键字,引申出 Swift 的 ABI 稳定和 library evolution mode。其中 `@frozen` 关键字确保了 `enums` 和 `structs` 的接口不再改变,因此也保证了内存布局的固定,带来了更好的性能。ABI 稳定则使得面得不同的语言版本,swift 库不再需要每次重新编译就可以兼容高版本。而 library evolution mode 是一个编译器能力,开启它后使得编译器会产出额外的用于描述关于库的数据结构、方法等的元数据,确保在不同的语言版本下,这些数据依然保持一致。这三者共同确保了 Swift 库在不同语言版本、不同操作系统版本下的兼容性,并最终带来了更好的的开发体验。 + +## 工具 + +### 🐕 [Mac OS X Debugging Magic](https://web.archive.org/web/20101206131250/http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html) + +[@Cooper Chen](https://github.com/cjlcooper):在 MacOS 开发中,Apple 提供了许多调试工具,以协助开发者针对特定场景进行开发和调试。这些工具中的许多被保留在发布的系统中,供开发者使用以调试其代码。下面列举了一些在 Mac OS X 中的“秘密”调试工具,包括环境变量、首选项、可从 GDB 调用的例程以及特殊文件等。若你正致力于 Mac OS X 软件开发,这个调试工具集合列表将极具帮助。 + + +## 代码 + +### 🐕 COW Macro Package + +[@Kyle-Ye](https://github.com/Kyle-Ye):Swift 的大量标准库内的 struct 出于性能等因素考虑都进行了 Copy On Write(后简称 COW)优化(如 String、Array、Set、Dictionary),但是对于业务自定义的 struct 默认没有此类优化。 + +因此如果业务定义了一个巨大的 struct,在此 struct 作为参数传递过程中,容易产生较大的包大小并且有一定性能影响。 + +对于每个希望开启 COW 的 struct 进行手写优化较为繁琐,下面是本期推荐的两个相关 COW Macro 的开源库,可以帮助我们快速 opt-in 此项优化。 + +- https://github.com/wezzard/COWMacro +- https://github.com/Swift-CowBox/Swift-CowBox + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#286-2024.04.22.md b/Reports/2024/#286-2024.04.22.md new file mode 100644 index 000000000..546bbfdad --- /dev/null +++ b/Reports/2024/#286-2024.04.22.md @@ -0,0 +1,72 @@ +# 老司机 iOS 周报 #286 | 2024-04-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/286.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐕 [Xcode Bookmarks](https://useyourloaf.com/blog/xcode-bookmarks/) + +[@Barney](https://github.com/BarneyZhaoooo):Xcode 15 引入了一种新的代码注释和搜索查询书签功能,用户可以通过选择代码行并使用上下文菜单来创建书签,还可以对书签添加描述、分组和标记完成状态,以及保存搜索查询。这项新功能提高了代码注释和搜索结果的管理效率。 + +## 文章 + +### 🐎 [How to define a custom file header for a Swift Package](https://danielsaidi.com/blog/2024/03/21/how-to-define-a-custom-file-header-for-a-swift-package) + +[@zoeGuo](https://github.com/zoeGuo):开发过程中代码的文件头可以包含一些必要信息,Xcode 一般会为我们生成默认的文件头,想要自定义文件头,应该怎么做呢?文章描述了如何为 Swift 包定义一个自定义的文件头,在本地 ` /.swiftpm/xcode/package.xcworkspace/xcshareddata` 目录下添加一个 `IDETemplateMacros.plist` 文件即可,文中例举了 IDETemplateMacros 文件写法。 + + ### 🐕 [Actor reentrancy in Swift explained](https://www.donnywals.com/actor-reentrancy-in-swift-explained/) + +[@Cooper Chen](https://github.com/cjlcooper):本文深入解析了 Swift 中的 actor 重入性,这是管理 actor 内并发任务的关键概念。虽然 actor 确保单线程执行,但异步函数带来的挑战在于它们不总是 atomic 地执行。作者通过示例,说明了同时从本地和远程源读取数据可能导致意外结果的原因,而解决方案涉及管理任务以防止冗余网络调用。作者重点提及了在 actor 的异步方法中考虑重入性以避免错误的重要性,因此理解和解决重入性相关问题对于有效地管理并发至关重要,同时作者强调需要谨慎考虑并采用个性化的解决方案来处理重入性问题。 + +### 🐎 [Splitting Up a Monolith: From 1 to 25 Swift Packages](https://ryanashcraft.com/splitting-up-a-monolithic-swift-package/) + +[@Smallfly](https://github.com/iostalks):这篇文章分享了作者如何将一个大型 Swift 包重构为 25 个较小的包。这个过程中,他解决了对 iCloud 的依赖、代码共享的复杂性、SwiftUI 预览和编译时间问题。通过创建抽象层和依赖注入,成功解耦了核心模型和 CloudKit。 + +重构后,他将包分为纯可重用和特定于 Foodnoms 的两类,提高了代码的模块化和可测试性。虽然面临日志记录的挑战和应用包大小增加,但整体性能提升,SwiftUI 预览也变得更实用。重构思路具有一定的借鉴意义。 + + ### 🐕 [Fetching OSLog Messages in Swift](https://useyourloaf.com/blog/fetching-oslog-messages-in-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何在 iOS 应用程序中使用 OSLog 框架实时检索日志。文章通过导入 OSLog 框架和创建 Logger 对象来开始,并说明了如何在应用的不同区域生成日志。关键部分涉及使用 OSLogStore 以及如何设置起始位置和使用 NSPredicate 进行日志过滤,以提高性能。文章还讨论了使用 OSLogStore 时遇到的一些限制,如检索速度慢,并推荐了 Apple 的 SwiftLog 作为替代方案。最后,提供了一个展示日志的 SwiftUI 视图示例,说明了如何异步获取并显示日志。 + + +### 🐎 [Bar Chart creation using Swift Charts](https://www.avanderlee.com/swift-charts/bar-chart-creation-using-swift-charts/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了 Swift Charts 的一些基础用法, Swift Charts 能够帮助开发者更便捷的呈现图表数据。作者以 Xcode 的编译数据作为示例,展现了如何通过 Swift Charts 构建一个柱状图,并能够调整柱状图的展示范围。同时通过 `foregroundStyle`、`chartForegroundStyleScale` 等 modifier, 我们也能轻松的对柱状图进行分组、改变柱状图颜色等操作。 + + +### 🐕 [QQ 9 “傻快傻快”背后的技术秘密](https://mp.weixin.qq.com/s/nVXE0iSllZ3rFei4t7bR7g) + + [@JonyFang](https://github.com/JonyFang):本篇介绍了 QQ 9 丝滑背后的技术实现,从启动速度,页面刷新,差异算法,预加载和回收,异步布局和渲染等方面介绍了手 Q 在性能方面做的全流程优化,并介绍了几个用户体验提升的场景表现。每一项优化点深入后内容相对复杂,都可以单独拎出来展开说明,文中也提到后续会慢慢分享出来。 + + +## 工具 + +### 🐎 [Mac App 原生内置 Debug 菜单](https://mjtsai.com/blog/2024/03/22/_eventfirstresponderchaindescription/#comment-4059578) + +[@BluesJiang](https://github.com/BluesJiang):这个是开发 Mac App 的隐藏 Debug 菜单。使用 `UserDefaults.standard.setValue(true, forKey: "_NS_4445425547")` 开启。 +开启后会在菜单栏里出现一个 🐞 菜单。这个菜单不依赖 Xcode,跟随 App 启动而启动。它提供了很多方便的辅助,比如 Responder 打印、View Bounds 展示、改变 Appearance 等。推荐尝试。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#287-2024.04.29.md b/Reports/2024/#287-2024.04.29.md new file mode 100644 index 000000000..383844fa8 --- /dev/null +++ b/Reports/2024/#287-2024.04.29.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #287 | 2024-04-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/287.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [RxSwift 6 更新了什么](https://juejin.cn/post/7345687862530113546) + +[@zoeGuo](https://github.com/zoeGuo):这是一篇 [What's new in RxSwift 6 ? +](https://dev.to/freak4pc/what-s-new-in-rxswift-6-2nog) 的译文,文章介绍了 RxSwift 6 的新特性和重要更新,如将 `Binder` 从 RxCocoa 迁移到 RxSwift、使用 `@dynamicMemberLookup` 自动建立 Binders、新的 `withUnretained` 运算符,以及一些运算符重命名 +等。无论你是 RxSwift 的新手还是老手,这篇文章都能提供给你大量有价值的信息,帮助你更好地利用 RxSwift 提升开发效率。 + + +### 🐕 [SwiftUI: Custom View Transition(Navigation) With Matched Geometry](https://blog.stackademic.com/swiftui-custom-view-transition-nav-with-matched-geometry-032552356fc5) + +[@Damien](https://github.com/ZengyiMa):文章主要讨论了如何在 SwiftUI 中使用 matchedGeometryEffect 来自定义视图转换。例如,如何动画化文本的位置,如何以不同的方式动画化多个视图,如何创建一个放大效果等等动画。文章还详细介绍了如何在视图上使用 matchedGeometryEffect 来替换当前的 NavigationStack,这篇文章为那些希望在 SwiftUI 中自定义视图转换的开发者提供了一种新的可能性。 + +### 🐕 [Swift 6 upgrade Preparation](https://medium.com/jamf-engineering/swift-6-upgrade-preparation-0941fbea2db6) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何在 Xcode Project 项目和 Swift Package Manager 项目中如何逐步采用 Swift 6 模式的部分功能,以便为即将到来的 Swift 6 做好准备。除此之外,本文也介绍并讨论了如何处理一些常见的迁移问题,如 Actor 相关的各种报错。 + +完整的 Swift Features 清单可以通过以下 Gist 中提供的脚本获取: + +- https://gist.github.com/ole/478874632fca61869928a0cc0a956972#file-swift-list-features-sh + +## 工具 + +### 🐎 [Periphery](https://github.com/peripheryapp/periphery) +[@Smallfly](https://github.com/iostalks):Periphery 一款专门用于识别 Swift 项目中未使用代码的工具。通过分析项目的源代码,帮助开发者发现并删除那些在项目中没有被引用的代码部分,从而精简代码库,提高代码的可维护性。 + +### 🐕 [Copilot For Xcode](https://github.com/intitni/CopilotForXcode) + +[@Cooper Chen](https://github.com/cjlcooper):Copilot for Xcode 是一个 Xcode 源代码编辑器扩展,为 Xcode 提供 GitHub Copilot、Codeium 和 ChatGPT 支持,包括以下功能: +- 代码建议(由 GitHub Copilot 和 Codeium 提供支持)。 +- 聊天(由 OpenAI ChatGPT 提供支持)。 +- 提示代码(由 OpenAI ChatGPT 提供支持)。 +- 自定义命令将聊天和提示扩展为代码。 +建议开发者都可以尝试使用这个拓展工具,能够大大提高工作效率。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#288-2024.05.13.md b/Reports/2024/#288-2024.05.13.md new file mode 100644 index 000000000..bde234474 --- /dev/null +++ b/Reports/2024/#288-2024.05.13.md @@ -0,0 +1,89 @@ +# 老司机 iOS 周报 #288 | 2024-05-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/288.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [AppStore Connect 提交失败 Workaround](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4537) + +上周陆续有读者在老司机的 App Review 群中反馈提交审核时遇到了奇怪的问题,也有群友提供了解决方案,我们再次汇总如下: + +1. 当遇到 **2.0.0 二进制文件无效** 的问题,可以等待一会,换一个小版本号重新上传,可以解决。 +2. 当遇到 **无法添加以供审核** 的问题,需要在 ICP 备案的输入框中在正常输入备案号后,再额外增加一个空格。即可进行后续流程。 + +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/7585173a-d8ed-431b-b4e5-2b195b0d3350) +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/2a8fb6a0-8706-42b3-982a-d7615cb79f44) + + +## 新手推荐 + +### 🌟 [戴铭的 Swift 小册子](https://github.com/ming1016/SwiftPamphletApp) + +[@AidenRao](https://weibo.com/AidenRao): 小册子是一个使用 Swift、按照声明式 UI 和响应式编程范式开发的开源 macOS 程序,上面的内容主要面向 Swift 零基础的同学,包括 Swift 的知识点、直接可用的小例子和知识点相关的其它资料,推荐 Swift 新手及感兴趣的同学学习使用。 + +### [Safely unwrap optional values in SwiftUI bindings](https://www.polpiella.dev/safely-unwrap-optional-value-in-swiftui-binding/) + +[@zoeGuo](https://github.com/zoeGuo):在 SwiftUI 中 , `$` 符号用于创建一个绑定到可观察对象的引用。但一个可选对象用 `$` 后得到的是一个不可选的对象。那么在这种场景下可以使用 `Binding` 将对象包装,`Binding` 的初始化方法 `init?(_ base: Binding)` 会解包绑定的可选值,并提供一个非可选值,这样就又可以对原来的可选值进行安全解包了。文章中有简洁明了的代码示例,感兴趣的读者可以阅读原文。 + +## 文章 + +### 🐎 [iOS 依赖库版本一致性检测:确保应用兼容性](https://juejin.cn/post/7358011504967925812) + +[@BluesJiang](https://github.com/BluesJiang):本篇主要介绍了一种检测系统库最低版本依赖的方法。核心的思路使用 `otool` 获取依赖的系统库,然后调用苹果的接口来查询系统库支持的最低系统版本。用来解决 App 意外错误引入高于 App 最低支持系统版本的系统库,导致 App 启动崩溃的问题。 + +### 🐎 [淘系两年半 A/B 实验经历,聊聊我理解的“科学实验”](https://mp.weixin.qq.com/s/-durED9M0UMqhT0i2S67lQ) + +[@Smallfly](https://github.com/iostalks):这篇文章主要讲述了作者在淘系两年半的 A/B 实验经历,包括在货架电商和内容电商两个领域的 A/B 实验能力建设。文章中,作者分享了对科学实验的理解和实践,文章中提到了几个关键点: +1. **业务目标科学**:增长目标应该是长期健康、可量化验证的。 +2. **实验设计科学**:在常规实验中,样本组的同质性和样本间的独立性是重要的考虑因素。 +3. **实验数据可用**:强调了 AA 检验的重要性,以确保实验数据的可用性。 +4. **实验分析科学**:在获得可用的数据基础上,关注实验分析的问题,包括确定需要观察的指标和维度,以及如何处理低响应实验。 + +### 🐎 [彻底弄懂 Linux 下的文件描述符(fd)](https://yushuaige.github.io/2020/08/14/%E5%BD%BB%E5%BA%95%E5%BC%84%E6%87%82%20Linux%20%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%EF%BC%88fd%EF%BC%89/#1%E3%80%81%E4%BB%8E%E4%B8%80%E4%B8%AA%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E4%BE%8B%E5%AD%90%E8%AF%B4%E8%B5%B7/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了 Linux 下的文件描述符(file descriptor)。文件描述符是内核对已经被打开文件所创建的索引。内核维护了一张进程级别的文件描述符表,记录了每个文件描述符对应的文件指针,使得对这些文件进行 I/O 操作的系统调用都可以通过文件描述符来实现。同时系统还维护着系统级别的打开文件表和 i-node 表,这两张表内有关于打开文件更多的信息,包括偏移量、访问模式、权限等。文件描述符表指向打开文件表,打开文件表则又指向了 i-node 表。此外,本文也举例了通过 shell、C 语言、python 等方式打开文件后,文件描述符的实际表现。 + +### 🐎 [OS Style settings view](https://paulpeelen.com/SettingsView) + +[@水水](https://xuyanlan.com/categories/iOS/):如果您正苦恼于不知道怎么给 MacOS 应用添加一个符合 MacOS 风格的设置页面,那么本文给出了简单的代码示例教您如何去实现,敢兴趣的读者可以参考 ~ + +### 🐎 [Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?](https://mp.weixin.qq.com/s/InAzeSa-2YeV2oo6gnykhg) + +[@极速男孩](https://github.com/ztlyyznf001/):本文介绍了 HTTP/3 和 QUIC 协议及其在 Flutter 中的应用,特别是通过 Cronet 库。HTTP/3 基于 QUIC 实现,优化了网络连接的稳定性和效率,支持连接迁移和加密。Cronet 作为 Chromium 的网络堆栈,支持 QUIC 和 TCP,可通过 Flutter 使用,增强移动应用的网络性能。文章还讨论了如何在 Flutter 项目中通过 cronet_http 包和 Dio 库集成 Cronet,利用其在 Android 上的优势,以及 iOS 上用 NativeAdapter 的来支持 HTTP/3。 + +## 播客 + +### 🐢 [SWIFT PACKAGE INDEXING EPISODE 43: Now I ’ m worried our metrics aren ’ t correct! with special guest Holly Borla](https://share.transistor.fm/s/2d4b1ba7) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本期 SwiftPackageIndex 播客和特邀嘉宾苹果的 Swift 语言团队的负责人 Holly Borla 讨论了 Swift 6 的并发特性和语言模式迁移,Swift Package Index 中的 Swift 6 兼容性跟踪项目。同时介绍了一些与并发相关的提案(SE414 和 SE431)和 Swift 软件包。 + +## 工具 + +### [difftastic](https://difftastic.wilfred.me.uk/) + +[@Crazy](https://github.com/jiyan135960):difftastic 是一款专门针对文件对比的工具,这个工具不是简单的逐行对比,会根据语言以及运行环境进行分析,提供更便于阅读对比界面。该工具现在支持多种语言,移动端开发所用的 Swift、Java、Kotlin、Dart 都已经支持。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#289-2024.05.20.md b/Reports/2024/#289-2024.05.20.md new file mode 100644 index 000000000..c92dab321 --- /dev/null +++ b/Reports/2024/#289-2024.05.20.md @@ -0,0 +1,74 @@ +# 老司机 iOS 周报 #289 | 2024-05-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/289.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +有很多朋友最近在后台留言询问 WWDC 24 内参的相关事宜,今年的内参老司机技术会继续主办,还请大家放心,我们会在合适的时间邀请大家共同参与今年的内参创作! + +## 文章 + +### 🐕 [SE-0436: Objective-C implementations in Swift](https://forums.swift.org/t/se-0436-objective-c-implementations-in-swift/71712) + +[@kemchenj](https://kemchenj.github.io/):Swift 团队最近提出了提案 SE-0436,可以用 Swift 来实现 Objective-C 的 Category/Extension,并且让调用者对此毫无感知,就像是 Objective-C 实现的那样,但这个功能的必要性在哪? + +1. **对于大型混编项目来说,Swift 生成的 Header 会严重拖慢增量编译的速度**,这一点在 [#242 期的 抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%](https://github.com/SwiftOldDriver/iOS-Weekly/blob/61670ff7475638f2476c9d302cf39d3c9bd86be1/Reports/2023/%23242-2023.04.24.md?plain=1#L28C4-L28C4) 里有详细的说明,如果是通过这个功能去实现的话,就可以绕开这个问题 +2. **Swift 自动生成的 Header 文件可读性很差**,对于习惯了将 Header 文件作为文档阅读的 Objective-C 工程师来说是灾难般的存在 +3. **可以给 Swift 提供更 Swifty 的接口**,WebKit 早在这个提案之前就[用上了这个功能](https://github.com/WebKit/WebKit/blob/4de0f4880b7b12b8f995bfbe480b41503219ab67/Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaPlayer.swift#L134),给 `WKSLinearMediaPlayer` 加上了 `var isLoadingPublisher: AnyPublisher` 等接口,试想一下如果底层使用的是 Objective-C 实现的话,那这样 Swifty 的接口可能就很难实现了 + +### 🐕 [【 Just For Fun 】 C - 宏开发 - 选取第 n 项参数、按照参数数目展开不同的宏、缺陷](https://zhuanlan.zhihu.com/p/61152480) + +[@Barney](https://github.com/BarneyZhaoooo~):这个系列文章深入探讨了 C 语言宏的高级应用,从可变参数函数的基础用法,到宏定义中参数的选择和计数,再到延迟展开技术,逐步展示了宏在 C 语言中的灵活性和强大能力。文章通过具体示例,详细解释了如何构建能够根据参数数量动态展开的宏,以及如何利用延迟展开来优化宏的行为。这些技巧不仅增强了对 C 语言宏机制的理解,也为宏编程提供了新的视角和解决方案。 + +### 🐢 [每个程序员都应该了解的硬件知识](https://mp.weixin.qq.com/s/Ol9J1ZWevHSjP2ZIyidK-g) + +[@xuyafei86](https://github.com/xiaofei86):在追求高效代码的路上,我们不可避免地会遇到代码的性能瓶颈。为了了解、解释一段代码为什么低效,并尝试改进低效的代码,我们总是要了解硬件的工作原理。于是,我们可能会尝试搜索有关某个架构的介绍、一些优化指南或者阅读一些计算机科学的教科书(如:计算机组成原理)。但以上的内容可能都太过繁琐、细节太多,在阅读的过程中,我们可能会迷失在纷繁的细节中,没法很好地将知识运用到实践中。本文旨在通过多个可运行的 benchmark 介绍常见的优化细节以及与之相关的硬件知识,为读者建立一个简单、有效的硬件心智模型。 + +### 🐎 [存储空间终于算“对”了](https://mp.weixin.qq.com/s/_2dzH99T1r70tYSH8z_0Ow) + +[@Smallfly](https://github.com/iostalks):这篇文章分析了 iOS 系统中 App 显示存储空间与系统显示不一致的问题,并探讨了造成差异的四个主要原因:App 自身大小、进制差异、口径差异和统计路径差异。文章通过实验验证了 iOS 存储空间的显示口径,并介绍了快手 App 如何通过技术改进实现与系统显示对齐,增强了用户体验和信任。 + +### 🐎 [Flutter 3.22 发布,快来看看有什么更新吧?](https://mp.weixin.qq.com/s/wvas9YoP6WQgubmVp9hPUQ) + +[@Crazy](https://github.com/jiyan135960):本篇文章主要介绍了 Flutter 3.22 中更新的一些主要功能与性能优化。JsonCodable 因该是所有 Flutter 开发者比较期待的一个功能了,Json 的序列化问题一直都是 Flutter 的大麻烦,需要借助 build_runner 生成 Dart 代码来解决。有了 JsonCodable 以后会大大加速 Flutter 开发者的开发效率。本次 Flutter 更新还将 Vulkan backend 和 Wasm Native 两个功能实现了落地,让 Web 的渲染速度得到了巨大的提升。剩下更多的更新可以在文章中浏览。 + +## 代码 + +### 🌟 🐎 [时隔五年,IGListKit 迎来 5.0.0 版本更新](https://github.com/Instagram/IGListKit/releases/tag/5.0.0) + +[@zvving](https://github.com/zvving/):时隔五年,Instagram 团队隆重推出了 IGListKit 的 5.0.0 版本(4.0.0 版本的发布时间还是 2019 年 11 月)。这个新版本整合了近年来 Instagram 对 IGListKit 进行的所有增强,引入了后台 diffing 功能,对 scrollToObject: 方法进行了改进,增加了对 Mac Catalyst 的支持,并提供了 IGListAdapter 等更丰富的属性观察与状态回调方式。此外,还对性能进行了优化,并修复了安全性和细节问题,同时带来了一些 Breaking Changes。 + +考虑到这个版本在多年后带来的众多改进和优化,我们强烈推荐已经使用 IGListKit 的团队关注并尝试更新,以期获得更出色的性能、稳定性和新功能。 + +### 🐎 [SwiftSecurity: Modern Swift framework for Keychain API](https://github.com/dm-zharov/swift-security) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):SwiftSecurity 是 Apple 安全框架的现代 Swift API (Keychain API、SharedWebCredentials API 等)。通过编译时检查,以更简单的方式保护您的应用程序管理的数据。SwiftSecurity 与其他包装器有些不同,它支持每个钥匙串项目类别,与 CryptoKit 和 SwiftUI 兼容等。 + +## 音视频 + +### 🐢 [The Sound of Software](https://www.notboring.software/words/the-sound-of-software) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 顾名思义,本系列文章讲述如何在软件中使用声音,从声音的本质开始阐述,到工具推荐,到整体设计,一连串文章一步步带你创造酷炫的声响;该系列由 [notboring](https://www.notboring.software/) 产出;[notboring](https://www.notboring.software/) 崇尚酷炫的交互和极致的影音体验 , 他们在 App Store 上有诸多酷炫的应用 , 有声音软件开发的同学 , 强烈推荐学习 ! + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#290-2024.05.27.md b/Reports/2024/#290-2024.05.27.md new file mode 100644 index 000000000..664b56c5e --- /dev/null +++ b/Reports/2024/#290-2024.05.27.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #290 | 2024-05-27 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/290.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Incorrect bundle purchase payments: Fixed!](https://lapcatsoftware.com/articles/2024/5/2.html) + +作者 5 月初发现苹果从 24 年 2 月起,对于应用内包含了 [App 套装销售(Offering app bundles)](https://developer.apple.com/cn/app-store/app-bundles/) 的 App ,会少给予开发者一份原本 App 的购买费用,即:错误地从 App 套装销售 的购买收益中两次减去了之前购买的应用程序的价格。 + +在作者提交了反馈后,苹果回电问题已被发现,所有受影响的开发者将得到对应损失的补偿。 + +## 文章 + +### 🐢 [探讨跨平台技术与跨平台 UI 框架及 Kotlin Multiplatform 在 bilibili 的实践](https://mp.weixin.qq.com/s/b8_s1iboJMEdEvyMd59u-g) + +[@JonyFang](https://github.com/JonyFang): 本文以相对客观的事实数据比对了目前移动领域的多个跨平台语言的横评,也相对主观的针对当前的大环境下的一些跨平台技术的思考及 B 站的选型做了一些解读。希望可以为读者开阔思路,也希望如果能拉拢到同样观点的大佬们共同一起反哺基于 Kotlin 跨平台的生态的建设。从而做到社区全局收益。后续 B 站会持续继续输出关于 KMP 技术的技术及实践的深度文章,也会持续关注跨平台技术的发展,希望能够在这个领域有更多的交流。 + +### 🐎 [Is Dynamic Isolation Bad?](https://www.massicotte.org/dynamic-isolation) + +[@zoeGuo](https://github.com/zoeGuo):文章讨论了 Swift 并发中的动态隔离与静态隔离的区别和应用。静态隔离通过使用像 `nonisolated`,`isolated`,`actor`, 和 `global actor` 这样的关键字来标记类或代码块,确保它们在编译时就定义好运行环境,是由编译器来处理的隔离。动态隔离使用运行时结构如锁来实现,需要在运行时正确地协调。文中举例用两种方式实现原子性,静态隔离固然安全,但动态隔离灵活便捷,要选择合适的方式解决并发问题。 + +### 🐕 [Faster Git checkouts on NFS and SSD with parallelism](https://matheustavares.gitlab.io/posts/parallel-checkout) + +[@AidenRao](https://weibo.com/AidenRao): 本篇文章主要介绍在大型存储库上使用并行 checkout 功能,此功能可将某些 checkout 操作在 SSD 上的速度提高 3.6 倍,在 NFS 挂载上的速度提高 4.5 倍。且所有使用到 checkout 机制的 git 命令都能收益,包括:clone, reset, switch, restore, merge 等。 + + +### 🐕 [计算机系统篇之链接(15):共享库拦截技术之运行时库打桩](https://csstormq.github.io/blog/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E7%AF%87%E4%B9%8B%E9%93%BE%E6%8E%A5%EF%BC%8815%EF%BC%89%EF%BC%9A%E5%85%B1%E4%BA%AB%E5%BA%93%E6%8B%A6%E6%88%AA%E6%8A%80%E6%9C%AF%E4%B9%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E5%BA%93%E6%89%93%E6%A1%A9%EF%BC%88%E4%B8%8A%EF%BC%89) + +[@Damien](https://github.com/ZengyiMa): 本文主要讨论了 Linux 系统中的运行时库打桩技术,这是一种允许截获对共享库函数的调用,取而代之执行自己代码的技术。文章详细解释了运行时库打桩的实现原理,以及如何在加载程序时拦截标准库的 API(以 malloc/free 为例)的实现过程。 + +### [Scaling ChatGPT: Five Real-World Engineering Challenges](https://newsletter.pragmaticengineer.com/p/scaling-chatgpt) + +[@老驴](https://weibo.com/u/6090610445):这篇文章是采访了来自 OpenAI 的 Evan Morikawa,讲述了他们在爆炸增长的用户量下,是怎么解决一些难以解决的问题工程问题的。 + +他主要提到了下面的几点: + +1. KV 缓存和 GPU RAM 的管理。 +2. 批处理大小的优化。 +3. 正确的度量指标。 +4. 寻找 GPU 资源。 +5. 缺乏自动扩展的能力。 + +这些问题在比较早期的公司都比较容易遇到,但是像 OpenAI 这次这么快速爆炸的用户量增长,应该也算是比较少见的了。如果对 OpenAI 感兴趣的同学,建议读一读原文。 + +## 代码 + +### [HandVector](https://github.com/XanderXu/HandVector) + +[@BluesJiang](https://github.com/BluesJiang):这个是一个在 VisionOS 平台上实现手势识别的开源库。主要是通过 ARKit 拿到手部骨骼节点后,通过余弦相似的算法,来评估手部骨骼节点与目标手势的相似度,以此来支持手势识别。还可以预先录制自己期望的手势作为匹配目标,实现任意手势的识别和匹配。 +本开源库还介绍了一种如何在模拟器中调试手势识别算法的方法,因为官方模拟器并没有提供访问摄像识别手势的能力。方案主要是使用 Google 的 MediaPipes 来代替 Vision Pro 真机上的手势识别能力,然后将数据投入 Swift 代码中进行测试。 +这个也是少有的在 Swift Native 侧开源的基础算法仓库之一,可以提供参考和借鉴。 + +## 书 + +### 【 iOS 】 Apple 增强现实(Apple Augmented Reality)「[上卷](https://bytedance.larkoffice.com/docx/doxcnYJ8ZNlDkdguWyuxrT9Vrje)」「[下卷](https://bytedance.larkoffice.com/docx/doxcncDbOnTfHuJDEXpTx3Cwwpb)」 +[@Smallfly](https://github.com/iostalks):这是一本 raywenderlich 出品的 AR 教程,国内的同学翻译。这本书是为初中级 iOS 开发者设计的,旨在帮助读者使用 Swift 构建苹果平台上的沉浸式增强现实(AR)体验。 + +书中涵盖了以下主题: +- **Reality Composer & Reality Files**: 学习如何使用 Reality Composer 创建 AR 体验,以及如何使用 Reality Converter 和 USDZ 文件。 +- **RealityKit**: 一个用于构建丰富 AR 体验的框架。 +- **Facial Blend Shapes**: 学习如何使用面部融合形状来创建反应用户面部表情的 AR 面具。 +- **ARKit**: 苹果的 AR 开发框架,用于创建交互式 AR 体验。 +- **Raycasting & Physics**: 学习如何在 AR 应用中使用射线投射和物理引擎。 +- **ECS & Collaborative Experiences**: 探索如何创建多人共享的 AR 体验。 + +书籍分为多个部分,每个部分都通过项目来教授特定的技能和概念。例如,使用 Reality Composer 创建交互式虚拟鼓套件,使用图像锚点和跟踪创建交互式 AR 商务名片,以及使用 RealityKit 和面部跟踪创建类似 Snapchat 的面部滤镜应用等。 + +如果你对 AR 开发感兴趣,可以直接访问提供的链接。 + +### [【 iOS 】并发(Concurrency)](https://bytedance.larkoffice.com/docx/doxcnMYZcL7DvPKuE9IN0iJ4eKh) + +[@DylanYang](https://github.com/Dylan19Yang):这是一本 raywenderlich 出品的 iOS 并发(Concurrency)教程,国内的同学翻译。这本书能够帮助 iOS 初学者理解并发的概念,并且快速上手实践。需要注意的是,这本书中讲述的并发是以 GCD(Grand Central Dispatch)实现的,而非最新的 Swift 并发框架(Swift Concurrency),考虑到 GCD 依然是当前的主流,这本书非常值得一读。 + +书籍分为多个章节,详细解释了并发的概念,以及 GCD 和 Operations 的原理和实际使用的方式。本书使用了诸多的代码示例使读者便于理解,尤其是最后通过 CoreData 的案例展现了并发如何在实际中应用。除此之外,本外也讲述了如何通过 Thread Sanitizer 来分析并发中常见的数据竞争问题。 + +整体而言,这是一本内容翔实的并发教程,感兴趣的读者可以收藏后反复品读。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#291-2024.06.03.md b/Reports/2024/#291-2024.06.03.md new file mode 100644 index 000000000..b95b8a4a0 --- /dev/null +++ b/Reports/2024/#291-2024.06.03.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #291 | 2024-06-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/291.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +明天我们就将推送 《WWDC24 内参》的报名信息,希望参与创作的同学不要错过哦~ + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐕 [深入理解内存分配](http://djs66256.github.io/2018/04/04/2018-04-04-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D/) + +[@莲叔](https://github.com/aaaron7):内存问题一直是 iOS 平台上最常见的稳定性问题,尤其在以 OC 为主的应用中。我们在排查野指针崩溃的问题时遇到的难点往往是崩溃点和问题点往往不在一起。这篇文章通过分析 iOS 平台内存分配的原理来非常严谨的解释了这个现象的原因,非常值得大家学习。之后作者还提出了一种定制内存分配策略的实现方式,对于精细化的性能分析或者特定应用场景分配优化都是不错的方向。 + +### 🐕 🌟 [Tricking iOS Into Animating App Icons](https://bryce.co/animated-app-icons/#the-problems) + +[@水水](https://www.xuyanlan.com/categories/iOS/):如何让你的 APP 图标动起来?这是一个很有意思的事情,文本作者从系统提供的切换 APP 图标 的 API 实现中,一步步通过反编译,解决了弹框提醒、进入后台等问题,实现了 APP 的动态图标。并附带有 Github Demo 实现 [AnimatedAppIcons](https://github.com/bryce-co/AnimatedAppIcons),效果如下: + +![](https://github.com/SwiftOldDriver/iOS-Weekly/assets/20059859/d89aceaf-cfd9-4a3b-ace6-c766682d664c) + +### 🐕 [Copy on Write Performance Measurements](https://github.com/Swift-CowBox/Swift-CowBox-Sample) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 24 年 04 月 15 日期推荐的 COW 库后续,作者使用 Benchmarks 和 Instruments 对他的 COW 库进行了详细的性能评估。对性能评估和 COW 细节感兴趣的读者欢迎阅读。 + +### 🐢 [Build your next website in Swift](https://www.hackingwithswift.com/articles/266/build-your-next-website-in-swift) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者借由 WWDC 2019 上苹果用来介绍 result builders 的 HTML 风格的代码作为引子,一步一步地展示了如何通过 Swift 的各种语法构建出一个类 HTML 风格的开发框架,并最终输出 HTML 代码,使得 Swift 开发者可以不必精通 HTML 就可以通过 Swift 写出 HTML 代码。同时写 Swift 代码相比直接写 HTML 又有更好的编译校验,提高了可靠性。在这个过程中,作者也介绍了 result builders 的用法和它的一些特性。最后作者揭示了这个框架的整体构思过程,当你回看时会发现这其实和 SwiftUI 如出一辙。 + + +### 🐕 [Always correct gradient text in UIKit](https://nemecek.be/blog/143/always-correct-gradient-text-in-uikit) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章提供了在 UIKit 中为 UILabel 创建渐变文本的解决方案。初始方法是通过 UIImage 生成 UIColor,但存在问题:当 UILabel 的 frame 大于文本内容时,渐变显示不完整。解决方案包括使用 AutoLayout 居中渐变或设置合适的约束,或者使用 UIStackView 子类来自动布局,确保渐变正确渲染。文章强调,渐变渲染应作为最后步骤进行,以适应当前文本的边界。此方法也适用于 UITextView。 + +### 🐢 [一文搞懂七种基本的 GC 垃圾回收算法](https://mp.weixin.qq.com/s/RSWYSAzpvPJD056vZDQPig) + +[@Crazy](https://github.com/jiyan135960):本篇文章是一篇非常详细的关于 GC 算法的讲解文章,仔细的阅读本文不仅可以让你理解现有的七种基本的 GC 算法,更可以应用在面试中,让你在面试中给面试官留下深刻印象。本文先介绍了 GC 算法的起源与基本概念,其中主要讲解了 GC 算法的性能评价标准。基础讲解完之后本文开始详细讲述了 GC 的七种基本算法的原理与改进方法,其中包括:标记-清除法、引用计数法、GC 复制算法、标记-压缩算法、保守式 GC 、分代垃圾回收、增量式垃圾回收。在文章的最后作者更是用一张图来简明扼要的对七种算法进行了对比,将各个算法的优缺点都写在了表格之中。本文是一篇值得大家反复仔细阅读的文章,无论是工作中还是面试中对大家都会有很深的帮助。 + +## 音视频 + +### [WWDC Index](https://nonstrict.eu/wwdcindex/) + +[@EyreFree](https://github.com/EyreFree): WWDC 会议的非官方索引,包含 2000 年至 2023 年 3430 次会议的资源,以及各种技术讲座,比较完整。此网站不隶属于苹果公司,所有内容仅供参考。感兴趣的同学可以收藏学习。 + +### [Developing An Inclusive Mindset](https://david-smith.org/blog/2024/04/22/new-post/) + +[享耳先森](https://github.com/iblacksun): 如果你的产品在考虑或已经做了无障碍适配,建议看看这个视频。作者 David Smith 是独立开发者,开发了 `Pedometer Plus+` 等应用,视频里重点介绍了他对 ` 包容性设计 ` 的认知发展过程:无障碍适配不仅仅是 `Accessibility API` 适配这么简单,而应该从更全局的角度来审视整个设计。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[杭州] 心光团队 - 心光 App - iOS/Android/UI/UX/资深运营增长专家 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#292-2024.06.10.md b/Reports/2024/#292-2024.06.10.md new file mode 100644 index 000000000..6a0e35062 --- /dev/null +++ b/Reports/2024/#292-2024.06.10.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #292 | 2024-06-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/292.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 [【老司机技术出品】 WWDC24 内参目录(更新中)](https://wwdc-reference.feishu.cn/wiki/QsFQwuOgcirBZck2xorcGtwUnKb?table=tblETPZEPEmxZ8gy&view=vewysxfUqf) + +今年我们如期带来 Session 的汇总,并会在每天推送当天新放出的 Session ,欢迎大家关注更新。 + +## 文章 + +### 🌟 🐕 [What Does spacing = nil Mean in SwiftUI? ](https://fatbobman.com/en/posts/spacing-of-swiftui/) + +[@zoeGuo](https://github.com/zoeGuo):作者通过探讨子视图间不一致的间距问题,深入分析了 spacing 参数的默认值 nil 所代表的含义。作者从“是什么”、“为什么”、“怎么用”的角度,分析了 SwiftUI 中 spacing 的构成和原理。对开发者在处理复杂布局、追求 UI 细节时有很大帮助,掌握一些 spacing 技巧也能帮助实现一些用传统方法难以达到的布局效果。 + +### 🐎 [How Do You Know Whether or Not SwiftUI Previews and Preview Content Are Excluded From App Store Builds?](https://jaredsinclair.com/2024/05/20/preview-content.html) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 部分同学写 Preview 代码可能没有加 `#if DEBUG` 的习惯,理想情况下也确实不用加。Preview 代码不会被实际上游代码引用,因此直觉是不用 `#if DEBUG` 也不会出现在最终代码中。本文介绍了目前 SwiftUI Preview + Xcode 的一些 bad case,并建议大家目前对于 Preview 代码还是保持写 `#if DEBUG`。 + +### 🐎 [Do NOT init State externally in SwiftUI](https://samwize.com/2024/05/08/do-not-init-state-externally-in-swiftui-view/) + +[@JonyFang](https://github.com/JonyFang): 这篇文章详细解析了为何不应在 SwiftUI 中外部初始化 `State`,并提供内联初始化的正确姿势及其他解决方案,避免视图更新问题。 + +### 🐎 [Swift 集成 KSCrash IOS 崩溃跟踪](https://bin.zmide.com/?p=1220) + +[@kemchenj](https://kemchenj.github.io/):本篇文章讲解了在 Swift 项目中集成 KSCrash 进行 iOS 应用崩溃日志跟踪的方法,并提供了将日志输出到指定文件的解决方案。作者详细介绍了 KSCrash 的配置和自定义输出文件的实现步骤,包含代码示例,帮助开发者更好地管理和分析应用崩溃信息。 + +> 推荐人:[PBK-B](https://github.com/PBK-B) + + +### 🐕 [Boost Performance by Over 100x Using the Accelerate Framework](https://getstream.io/blog/accelerate-framework/) + +[@BluesJiang](https://github.com/BluesJiang):这篇文章简单介绍了苹果自带的框架 Accelerate 的应用范围和作用。因为 Accelerate 框架是比较集中在数据特定领域的加速框架,比如视频、图片、音频、科学计算等,所以了解的人不多。本文给出了他们使用 Accelerate 框架的两个应用,并且已经开源,发现这个框架相比于市面上泛用的 C++ 框架有这个更好的计算性能和能效优势,解决了他们在使用常规并行计算时依旧会产生的延迟,并且也显著降低了内存消耗。这个得益于 Accelerate 针对苹果设备的高度优化,并且是苹果自己也在使用的高性能计算框架。 +如果你也有类似的实时计算需求,不妨研究一下这个框架,说不定有意外之喜。 + +### 🐎 [Designing a Declarative API](https://www.mobilesystemdesign.com/blog/declarative-api-design/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过开发一个对用户输入进行验证的 Validator 的例子,一步步为大家揭示了如何去设计一个声明式风格的 API。对于不太了解声明式编程的同学来说 SwiftUI 就是一个非常典型的声明式的开发框架。作者对于设计声明式 API 的一个重要思想就是,我们应该优先聚焦在最终的代码应该如何被展现的逻辑和结构上,然后才轮到讨论具体的控制流。同时作者也通过例子证明了声明式编程可以和 UI 无关,也并不一定意味着包含链式调用。 + +### 🐕 [几个在 SwiftUI 中使用惰性容器的技巧和注意事项](https://fatbobman.com/zh/posts/tips-and-considerations-for-using-lazy-containers-in-swiftui/) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了在 SwiftUI 中使用惰性容器的几个技巧和注意事项。惰性容器如 List 和 LazyVStack 在展示大型数据集时非常高效,它们只在需要时动态构建和加载视图,从而提升应用性能和内存利用效率。文章提到了自定义遵循 RandomAccessCollection 协议的数据类型,以优化数据源的性能和内存使用。此外,还介绍了实现无限数据加载的方法,以及 id 修饰器对 List 懒加载机制的影响等。这些技巧和注意事项能够使开发者在 SwiftUI 中保持流畅的用户体验和高效的资源使用。 + +## 代码 + +### 🌟 🐕 [ZippyFormat](https://github.com/michaeleisel/ZippyFormat) + +[@EyreFree](https://github.com/EyreFree): ZippyFormat 是一个更快版本的 NSString stringWithFormat 方法,在 iOS 端可以显著提升字符串格式化的性能。它通过直接将格式化参数追加到 char* 缓冲区,并仅在最后创建 NSString 来优化性能。ZippyFormat 还利用堆栈来避免 NSMutableString 产生的中间堆分配。此外,它在追加格式化参数时无需执行验证,因为已经知道数据是有效的 UTF-8。对于常见的 %@ 参数如 NSNumber、NSDictionary、NSArray 等,ZippyFormat 通过直接复制已知的输出到缓冲区,避免了调用 [object description] 的开销。总的来说 ZippyFormat 通过在较低层次上操作,避免了 Apple 原生实现中不必要的抽象和验证,从而显著提升了字符串格式化的速度。它是一个非常值得尝试的性能优化工具。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#293-2024.06.17.md b/Reports/2024/#293-2024.06.17.md new file mode 100644 index 000000000..384c3b3b6 --- /dev/null +++ b/Reports/2024/#293-2024.06.17.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #293 | 2024-06-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/293.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Bad practice: not using a ButtonStyle](https://www.swiftwithvincent.com/blog/bad-practice-not-using-a-buttonstyle) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了一些不使用 ButtonStyle 的 bad case,一篇关于 SwiftUI ButtonStyle 的入门科普。 + +## 文章 + +### 🌟 🐕 [QQ 客户端性能稳定性防劣化系统 Hodor 技术方案](https://mp.weixin.qq.com/s/ng_R0s9tAsFCdc2O1JE_Pw) + +[@JonyFang](https://github.com/JonyFang): 手 Q 的防劣化系统命名为 Hodor 系统,从 2021 年 10 月开始研发,历时近三年迭代至今。系统涉及验证闭环、群控机架搭建等复杂过程,包含不少行业内独创方案。与厂商合作进行底层问题沟通,并在 2024 年拓展至 QQ 桌面客户端。系统目前已在 QQ 各平台落地,方案可做借鉴。 + +### 🐎 [Comparing Swift Compiler Performance on Type Inference Part I Strings, Numbers, Arrays, Dictionaries and Constructables](https://lucasvandongen.dev/compiler_performance.php) + +[@kemchenj](https://kemchenj.github.io/): 这篇文章比较了 Swift 编译器在进行类型推断时的性能,特别是在字符串、数字、数组、字典和可构建类型的初始化方面。作者通过基准测试发现,使用未类型化的字面量初始化通常最快,而使用 `.init()` 的方式最慢。特别是在复杂上下文中,例如计算属性,`.init()` 的性能下降明显。文章还指出,不同版本的 Xcode 在编译性能上的差异,并提出了优化编译时间的具体建议。 + +### 🐎 [iOS 18: Notable UIKit Additions](https://www.swiftjectivec.com/ios-18-notable-uikit-additions) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了 iOS 18 中 UIKit 一些值得注意的新增功能 : +- 自动 Trait 跟踪 : UIKit 会自动检测某些生命周期函数中涉及的 Trait 变化 , 并调用相应的更新函数,减少了开发者需要手动注册特征变化监听的代码。 +- UIUpdateLink: UIUpdateLink 提供了比 CADisplayLink 更好的性能和电池效率 , 可用于复杂动画和绘制应用程序。 +- 更多符号动画 : 新增了摇摆、呼吸和旋转等三种新的符号动画效果。 +- 自定义文本格式化 : 开发者可以自定义文本编辑器中显示的格式化工具,默认关闭需要手动 opt-in。 + +### 🐎 [Rust - 性能超越 Kotlin 的跨平台方案](https://mp.weixin.qq.com/s/b8lHRfk5G2yN7pkoURU7CA) + +[@Smallfly](https://github.com/iostalks):这篇文章讨论了跨平台开发技术,指出 Rust 由于内存安全、并发安全和 WebAssembly 支持,成为 C/C++ 的替代品,特别适合处理跨平台业务逻辑。文章分析了桥接、IPC 和 Canvas 绘制等跨平台方案,并提出使用 Rust 作为「前端中的后端」,通过 protobuf 等高效序列化方式与原生平台通信。Rust 在性能上超越 Kotlin Native,适合开发底层库。作者建议 Rust 可替代 C++ 用于跨平台开发,提供更现代的语法和更安全的代码。 + +## 代码 + +### 🌟 🐕 [o3d](https://mp.weixin.qq.com/s/_EaqpWF-CgCgX0sTkXoHsw) + +[@Damien](https://github.com/ZengyiMa): o3d 是一款 Flutter 3D 渲染插件,它是一个能够在 Flutter 上渲染 glTF 和 GLB 格式 3D 模型的 widget 插件,支持 Android,IOS,Web 三个平台,不仅支持加载本地文件,而且支持加载在线文件。 + +### 🐎 [swift-testing-revolutionary](https://github.com/giginet/swift-testing-revolutionary/) + +[@DylanYang](https://github.com/Dylan19Yang): swift-testing-revolutionary 是一个 Xcode 插件,可以帮助开发者快速将自己现有项目中的的 XCTest 框架的测试代码自动迁移到苹果最新推出的 swift-testing 测试框架中,插件支持了大部分的代码转化,但仍有小部分需要人工处理。你也可以通过 Command Plugin 或者命令行工具来使用它。 + +### [Cocoapods-sled 让 iOS 组件二进制化变得简单](https://juejin.cn/post/7375419781132042267) +[@莲叔](https://aaaron7.github.io):二进制化是加快编译速度的常见手段,很多大厂在这个方向都做过不小的研究。但目前行业上还缺乏比较泛用的方案。cocoapods —— sled 这个插件就是为了解决这个问题,能针对 pod 进行二进制化并且能灵活的切换二进制和源码构建。有类似需求的小伙伴可以试试。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2023」,领取 2023 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#294-2024.06.24.md b/Reports/2024/#294-2024.06.24.md new file mode 100644 index 000000000..4185f872a --- /dev/null +++ b/Reports/2024/#294-2024.06.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #294 | 2024-06-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/294.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [使用 Swift 6 语言模式构建 Swift 包](https://juejin.cn/post/7376444924425011210) + +[@AidenRao](https://weibo.com/AidenRao): Swift 6 带来了许多重要的新特性,如数据隔离和数据竞争安全检查,这些特性有助于编写更安全、更高效的代码。然而,这些新特性并不会自动启用,需要通过 Swift 6 语言模式显式开启。通过下载和安装 Swift 6 工具链,并在命令行或包清单文件中启用 Swift 6 语言模式,我们可以提前体验和适应这些变化。尽管新特性带来了一些学习和调整成本,但它们最终会使我们的代码更加健壮。 + +### 🐎 [Here are 3 advanced tips in Swift](https://www.swiftwithvincent.com/blog/here-are-3-advanced-tips-in-swift/) + +[@DylanYang](https://github.com/Dylan19Yang): 作者在本文中介绍了三个知识点 +1. enumareted 返回的 index 永远是一个从 0 开始的计数器,它与实际数组的 index 是不保证相等的,像 ArraySlice 这种 index 不从 0 开始的情况就会出现问题。更稳妥的情况是使用 zip 组合 indices 或者使用 Algorithms 库的 indexed 方法来进行遍历。 +2. 多层嵌套的循环前可以加上标签,方便在内层循环中需要时直接 break 外层循环。 +3. 非枚举类型也可以通过方法重载来使用模式匹配。 + +### 🐕 [A preview of our upcoming UIKitNavigation library](https://www.pointfree.co/blog/posts/145-a-preview-of-our-upcoming-uikitnavigation-library) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍了即将发布的 UIKitNavigation 库,这是一个为 UIKit 设计的状态管理和导航工具库,灵感来源于 SwiftUI。它包括状态观察、双向绑定和状态驱动导航等功能,旨在简化 UIKit 应用开发。此外,库的工具基于纯 Swift 构建,具有跨平台潜力。 + +### 🐕 [node-swift: Write NodeJS native modules in Swift](https://github.com/kabiroberai/node-swift) + +[@EyreFree](https://github.com/EyreFree):NodeSwift 是一个让 Swift 与 Node.js 无缝对接的库。它具有以下优点 : + +- 安全:充分利用了 Swift 的内存安全和自动引用计数,无需手动管理内存,避免了内存相关的问题; +- 简单:提供了不同层次的 API,适应不同的需求,并且使用渐进式的方式让开发者循序渐进地使用; +- 原生:NodeSwift 的 API 设计遵循 Swift 的惯用法,例如使用 Swift 的 Dynamic Member Lookup 特性让互操作更加自然; +- 全面:在 Swift 中可以访问几乎所有的 Node.js API,包括操作 JavaScript 对象和调度事件循环等; +- 跨平台:支持 macOS、Linux、Windows 甚至 iOS 等多个平台; +- 高效:直接在宿主平台上运行 Swift 代码,相比 WebAssembly 拥有更好的性能,且可以直接访问系统底层 API。 + +NodeSwift 是 Swift 与 Node.js 互操作的优秀方案,帮助开发者用 Swift 构建 Node.js 模块,或在 Swift 应用中引入 Node.js 的生态,为相关应用开发带来更多可能性。 + +### 🐎 [Getting started with Swift Testing](https://www.polpiella.dev/swift-testing) + +[@Smallfly](https://github.com/iostalks):Swift Testing 是由 Apple 在 2024 年的 WWDC 上介绍的现代、表达性强、基于宏的测试库,旨在替代 XCTest 用于编写单元测试。文章详细介绍了如何开始使用 Swift Testing,如何使用它编写测试,以及如何将现有的 XCTest 测试迁移到新库中。 + +### 🐕 [Environment & Preference Updates](https://talk.objc.io/episodes/S01E409-environment-preference-updates?t=63) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文讨论了 SwiftUI 的视图更新在环境和首选项更改方面的一些微妙之处,并通过简单的例子来一步步解释,感兴趣的读者可以通过本文示例代码进行验证 SwiftiUI 上的环境值、首选项和视图更新上的一些独特点(附视频)。 + +## 代码 + +### 🐕 [Enable XcodeLLM for ChinaSKU Mac on macOS 15 Beta 1](https://gist.github.com/Kyle-Ye/4ad1aa92df3a31bd812487af65e16947) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Gist 中介绍了如何使用 lldb / DYLD_LIBRARY_INSERT 方式在 macOS 15 Beta 1 上给国行 Mac 设备启用 XcodeLLM 的方案。 + +> 警告:上述方式均需要关闭 SIP,请提前了解关闭系统完整性保护的风险再操作。 + + +### 🐎 [分析 XPC 通信的图形界面](https://github.com/chichou/XpcScope) + +[@Damien](https://github.com/ZengyiMa): XPC 是 macOS / iOS 安全研究无法忽视的一个点,本项目是模仿 Wireshark 的界面,提供图形界面分析用户态进程之间的通信。 + +## 音视频 + +### 🐢 [So You Think You Know Git Part 2 - DevWorld 2024](https://www.youtube.com/watch?v=Md44rcw13k4) + +[@BluesJiang](https://github.com/BluesJiang): 这个视频介绍了很多 Git 的高级用法,比如 git switch、 Git rebase, git LFS,git scalar,git worktree,gitbutler 等高级用法。里面对每一个功能都做了简要的说明,可以根据自己的兴趣酌情观看。 + +比较有特点的是 git scalar 一个为大 git 仓库做了优化的 git 命令,git worktree、gitbutler 能让你在同一个仓库里快速切换功能分支,加速你多 feature、bugfix 的开发。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#295-2024.07.01.md b/Reports/2024/#295-2024.07.01.md new file mode 100644 index 000000000..fee22748a --- /dev/null +++ b/Reports/2024/#295-2024.07.01.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #295 | 2024-07-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/295.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +今年的内参创作正在紧锣密鼓的展开,首篇文章已经发布。目前 空间计算 等主题还有重要 Session 期待大家的创作,可以[填写问卷](https://docs.qq.com/form/page/DZWZPZk1seFJWWURG)继续报名:) + +### 🌟 [WWDC24 10195 - Go further with Swift Testing](https://xiaozhuanlan.com/topic/5946873021) + +[@Zac](https://github.com/jihongboo):Swift Testing 是 Swift 团队推出的一个全新的测试框架,集合了原生、开源、跨平台、高效、易用、IDE 无缝集成等新特性。文章从 0 开始介绍如何使用 Swift Testing ,对比了与 XCTest 的差异,最后对 Swift Testing 以及单元测试的相关问题进行了探讨。 + +## 新手推荐 + +### 🐢 [Flutter 面试八股之深入理解 Dart 异步实现机制](https://mp.weixin.qq.com/s/OTYt2efBQOYuc5ko_PU1iw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 日常开发中用到的各种异步机制你都了解其运行原理么 : Future, Timer, isolate, Runner; 他们跟 Thread 又有什么关系?本文由 GYSTech 提供,详细阐述了几个异步机制的深层原理,同时清晰的展示各种关联,带你详细了解 Flutter 异步机制;最后小编推荐有英文阅读能力的同学同时[阅读 Dart VM 机制讲解](https://mrale.ph/dartvm/),可以加深对于 Flutter 底层运行的了解. + +## 文章 + +### 🐎 [All new frameworks presented at WWDC24](https://marcoeidinger.github.io/appleframeworks/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个关于 Apple 公共框架的在线资源页面,为开发者提供了一个全面、准确、易用的 Apple 公共框架查看和搜索平台,极大地便利了开发者在 Apple 生态系统中进行框架选择和开发工作。 + + +### 🐎 [Reverse Engineering Photos' New Search UI](https://sebvidal.com/blog/reverse-engineering-photos-search-ui/) + +[@Damien](https://github.com/ZengyiMa/):文章介绍了 iOS 18 中 Photos 应用搜索界面的逆向工程分析。作者探索了创建与键盘背景融合的自定义搜索栏的技术,并通过调试和使用 Objective-C 运行时方法,成功复现了这一效果。最后,作者提供了一个 GitHub 示例项目,展示了如何将自定义搜索栏集成到应用中。 + +### 🐕 [Preparing your App Icon for dark and tinted appearance](https://www.createwithswift.com/preparing-your-app-icon-for-dark-and-tinted-appearance/) + +[@AidenRao](https://weibo.com/AidenRao): 这篇文章介绍了在 iOS 18 中引入的关于应用图标的新要求,提供三种不同版本的应用图标:亮模式、暗模式和有色(tinted)模式。文章提供了关于设计这些图标的建议和注意事项,包括暗模式下的颜色选择和有色模式下的灰度图像要求。此外,还介绍了如何使用苹果提供的设计资源和模板来支持开发者和设计师创建可自定义的应用图标。 + +### 🐕 [SwiftData vs Realm: Performance Comparison](https://www.emergetools.com/blog/posts/swiftdata-vs-realm-performance-comparison/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过自己写的测试 Demo 深度对比了成熟的社区开源产品 Realm 以及 Apple 新推出的 SwiftData 的性能差距。总的来说得益于 Realm 使用的轻量化的对象和 mmap 的内存管理方案,Realm 在大多数场景下尤其是处理大量数据的时候都有远超 SwiftData 的性能表现,部分差距可达 3-10 倍。但是 SwiftData 在复杂数据查询和少量数据(<=10000)时的更新场景下也有优势。除开性能表现外,SwiftData 相较于 Realm 而言还是一个不够成熟的框架,比如最低支持 iOS 17+ 以及依然存在若干 bug 等,不过 SwiftData 支持索引,这对大数据集有一定帮助。以上这些都是开发者在做数据库的方案选择时可以考虑的因素。 + +## 工具 + +### 🐎 [riffo.ai:AI 文件自动整理工具](https://riffo.ai) + +[@EyreFree](https://github.com/EyreFree):Riffo 是一款革命性的 AI 文件命名工具,旨在帮助用户告别杂乱无章的文件名,节省大量文件整理时间。它内置于菜单栏中,只需单击即可使用。Riffo 支持各种常见文件格式,如图片、Word 文档、PDF 等,让文件管理变得简单高效。用户可以自定义命名规则,Riffo 就会自动为文件批量重命名,实现无人工干预的文件管理。凭借并行处理技术,Riffo 可以在几秒钟内完成大批量文件的重命名,目前支持 macOS 系统。推荐每一位被文件管理所苦的用户尝试使用。 + +### 🐎 [Installing macOS Sequoia Beta in a Separate APFS Volume](https://adrian.schoenig.me/blog/2024/06/13/installing-macos-sequoia-in-a-separate-volume/) + +[@Crazy](https://github.com/jiyan135960):对于既想要使用最新版本的 macOS Sequoia,但却只有一台主力机的开发人员来说。利用一个单独的 APFS 卷来安装 macOS Sequoia 测试版,是一个很好的方法,本文将这种安装最新 macOS 的过程简化为 10 个步骤。 + +- 使用 Time Machine 进行备份 +- 创建一个新的 APFS 卷 +- 关闭 Mac +- 启动并一直按住电源按钮 +- 选择“ Options ” +- 然后选择将 Sonoma 重新安装到步骤 2 中的卷 +- 等待一段时间 +- 安装完成后,最好不要登录 iCloud,并跳过迁移之前的用户账户 +- 打开系统设置,启用测试版更新,并将该安装更新到 Sequoia +- 向 Apple 提交反馈! + + +## 代码 + +### 🐕 [apple/app-store-server-library-swift](https://github.com/apple/app-store-server-library-swift) + +[@Barney](https://github.com/BarneyZhaoooo):Apple App Store Server Swift Library 是一个为 App Store 服务器 API 和通知设计的 Swift 库,支持 iOS 应用开发。它提供了安装指南、详细的 API 文档、使用示例和安全更新支持。开发者可以通过 Swift Package Manager 轻松集成,并参照示例代码快速上手。 + + +### 🐢 [below/HelloSilicon](https://github.com/below/HelloSilicon) + +[@xuyafei86](https://github.com/xiaofei86):在 iOS 开发中,定位疑难 BUG、优化性能和逆向工程等经常需要对汇编、操作系统、处理器有一定的了解。但在 Apple Silicon Mac 上学习汇编十分困难,大部分中文材料仍然停留在 32 位处理器,基于 Linux 系统。而《Programming with 64-Bit ARM Assembly Language》是入门 ARM64 汇编语言的优秀材料。本仓库将此书的所有示例代码适配到 Apple Silicon Mac。感兴趣的同学可以结合原书一起学习。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#296-2024.07.08.md b/Reports/2024/#296-2024.07.08.md new file mode 100644 index 000000000..25dd99a9d --- /dev/null +++ b/Reports/2024/#296-2024.07.08.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #296 | 2024-07-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/296.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10144 - What's New in SwiftUI](https://xiaozhuanlan.com/topic/5931472806) + +[@WBear](https://github.com/WBearJ):SwiftUI 作为苹果在 2019 年发布的跨平台框架至今,经过多年的版本更新、优化迭代,已经相对成熟。国外已经有部分公司已经开始使用 SwiftUI 进行商业化开发了,对已有 app 进行重构和更新和新 app 的从 0 开发。国内目前因大量用户的 iOS 版本还停留在较早版本,所以导致 SwiftUI 在国内不温不火。但是 SwiftUI 作为苹果未来主推的方式,作为 iOS 开发者,提前了解与学习 SwiftUI 并不是无用功,以备不时之需 (毕竟小组件只能用 SwiftUI 来开发,而且想要写出更酷炫的 Vision Pro app ,学习 SwiftUI 也是必不可少的环节)。 + +### 🌟 [WWDC24 10136 - Swift 的新功能](https://xiaozhuanlan.com/topic/2470951386) + +[@bq](https://github.com/bqlin):文章简要回顾 Swift 过去十年的历史,介绍社区通过工作组、扩展包生态和增加平台支持来促进 Swift 发展。还介绍一种默认实现数据竞争安全的新语言模式,以及一个允许在高度受限系统上运行的 Swift 语言子集。最后将探索一些语言更新,包括不可复制类型、类型化抛出和改进的 C++ 互操作性。 + +## 文章 + +### 🐕 [Async await in Swift explained with code examples](https://www.avanderlee.com/swift/async-await/) + +[@zoeGuo](https://github.com/zoeGuo):这篇文章很全面的讲解了 Swift 中 `async` 和 `await` 在处理异步任务中的作用和用法。并探讨了结构化并发的概念,通过线性执行方法,使异步代码执行顺序需更加清晰,与传统基于闭包的的异步编程相比,结构化并发更简洁、易理解。同时代码示例了如何将基于闭包的异步代码转换成使用 `async` 和 `await` 处理的新结构。文末还讨论了 Swift 6 的新特性和相关迁移策略。 + +### 🐎 [Flutter 架构设计:MVVM + Repository](https://mp.weixin.qq.com/s/pEQmf9LjhpsHQ7SOe33IPg ) +[@极速男孩](https://github.com/ztlyyznf001):文章介绍了 Flutter 中的 MVVM+Repository 架构设计,强调高内聚、低耦合的核心原则。通过分离关注点, MVVM 使代码更易于维护和测试,结合 Repository 模式进一步解耦业务逻辑和数据访问。文中详细解释了 MVC, MVP 和 MVVM 的演变原因,并提供了 MVVM+Repository 在 Flutter 中的实现示例,展示了如何通过 StreamController, FutureBuilder 和 StreamBuilder 进行数据绑定和异步操作管理。 + +### 🐎 [Plotting a Path to a Package Ecosystem without Data Race Errors ](https://www.swift.org/blog/ready-for-swift-6/) + +[@Damien](https://github.com/ZengyiMa):本文主要讨论了 Swift 6 语言模式对于数据竞争安全性的改进。Swift 6 可以帮助消除潜在的并发错误,提高代码的全性和可维护性。目前,已有超过 43% 的包没有数据竞争错误,这对于 Swift 6 beta 过程的第一周来说是一个很好的开始。 + +### 🐎 [普通 iOS 开发者的第一款 Harmony Next 应用](https://mp.weixin.qq.com/s/KjydTcbUQAafB6zFIi7yDw) + +[@Crazy](https://github.com/jiyan135960):本篇文章中不包含代码,读起来会很快,但是里面包含了很多产品开发中的关键点。抛开 Harmony 不谈,这篇文章也可以为其他的移动端产品开发提供很多的借鉴,如果想成为独立开发者的话,更要仔细阅读此文。本文从立项开始讲起,其中有竞品分析,技术选型,之后更有隐私协议等合规流程的介绍,可以说是对一个移动端应用从开发到上架的大致的重要任务都已提及。俗话说实践出真知,看完了文章,大家可以尝试自己按照这套流程自己写一个小应用看看反响。 + +## 工具 + +### 🐕 [Generative AI for beginners](https://github.com/microsoft/generative-ai-for-beginners) + +[@JonyFang](https://github.com/JonyFang): Generative AI for Beginners 是微软 Cloud Advocates 团队推出的生成式 AI 入门的系列课程,分十二章介绍了构建生成式 AI 应用程序的基础知识,课程仓库在 GitHub 上已有超过 5.5w Stars。教程中逐章介绍了生成式人工智能原理和应用程序开发的知识点,提供了导学视频、相关扩展材料、代码示例及相关进阶的学习资源。 + +### 🐎 [AutoCorrect](https://github.com/huacnlee/autocorrect) + +[@Smallfly](https://github.com/iostalks):AutoCorrect 是一个基于 Rust 编写的工具,用于「自动纠正」或「检查并建议」文案,给 CJK(中文、日语、韩语)与英文混写的场景,补充正确的空格,纠正单词,同时尝试以安全的方式自动纠正标点符号等等。 + +类似 ESlint、Rubocop、Gofmt 等工具,AutoCorrect 可以用于 CI 环境,它提供 Lint 功能,能便捷的检测出项目中有问题的文案,起到统一规范的作用。 + +支持各种类型源代码文件,能自动识别文件名,并准确找到字符串、注释做自动纠正。 + +## 代码 + +### [WhisperKit](https://github.com/argmaxinc/WhisperKit/) + +[@DylanYang](https://github.com/Dylan19Yang):一个集成了 OpenAI 的 Whisper 语音识别模型的 Swift 库,作者利用 CoreML 库和 iPhone 设备上的神经网络引擎对音频编码、文字解码等做了额外的性能优化。主页上有提供通过 TestFlight 下载的 Demo App,有兴趣的同学可以体验一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#297-2024.07.15.md b/Reports/2024/#297-2024.07.15.md new file mode 100644 index 000000000..e51adb0b5 --- /dev/null +++ b/Reports/2024/#297-2024.07.15.md @@ -0,0 +1,76 @@ +# 老司机 iOS 周报 #297 | 2024-07-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/297.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10135 - What's new in Xcode 16](https://xiaozhuanlan.com/topic/3658412079) + +[@Yuanxu Han](https://github.com/hanyx1992):和往年一样,今年 Xcode 也迎来了全新版本,Session 10135 从 `Edit`,`Build`,`Debug`,`Test`,`Profile` 几个方面非常简短地讲述了更新的内容,文章针对这些重点特性分别进行了 Session 内容的翻译和部分必要的补充,尽力保证读者都可以对其有清楚的认识和理解;然后从 Xcode Release Note 中整理了部分需要关注的更新点;最终进行总结和探讨。 + +### 🌟 [WWDC24 10188 - SF Symbols 6 使用指南](https://xiaozhuanlan.com/topic/3691085724) + +[@Mim0sa](https://github.com/Mim0sa):为了更方便没有 SF Symbols 经验的读者理解,也将往年的 SF Symbols 相关内容归纳整理。本文从 SF Symbols 的特性切入,讨论 SF Symbols 这款由系统字体支持的符号库有哪些特点以及该如何使用。在这次 WWDC 2024 更新中,除了符号的数量增加到了 6000+ 之外,还新增了一些能让符号们更加活泼的动画效果,同时提升整体使用体验,给界面带来了更多活力和想象力,让 SF Symbols 这把利器变得又又又更加趁手和锋利了。 + +## 文章 + +### 🐎[The State Of Meridian](https://khanlou.com/2024/06/the-state-of-meridian/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了于几年前 Meridian Swift 服务端框架的最新状态(async&await / Websockets 支持 / 中间件等)和未来计划(Swift Macro 和 Swift OpenAPI framework 迁移),对 Swift on Server 感兴趣的同学可以详细阅读了解。 + +### 🐎 [Swift Testing support for SnapshotTesting](https://www.pointfree.co/blog/posts/146-swift-testing-support-for-snapshottesting) + +[@Smallfly](https://github.com/iostalks):WWDC24 推出的 Swift Testing 框架为 Swift 语言带来了新的原生测试支持。作者介绍 SnapshotTesting 库已同步支持此框架,同时提供了 Beta 预览和新特性。它简化了 XCTest 与 Swift Testing 的不兼容问题,允许开发者在不同测试环境中使用统一的 assertSnapshot 方法。对测试框架感兴趣的同学可阅读原文了解更多。 + +### 🐕 [Using TextRenderer to create highlighted text](https://alexanderweiss.dev/blog/2024-06-24-using-textrenderer-to-create-highlighted-text) + +[@AidenRao](https://weibo.com/AidenRao): 这篇博文介绍了如何使用 TextRenderer 在 SwiftUI 中创建带有文本高亮效果的视图。TextRenderer 是在 WWDC 2024 上引入的新协议,可以增强文本的渲染。使用TextRenderer,我们可以更纯粹地在 SwiftUI 中实现文本高亮,而不再需要使用 NSAttributedString。 + +## 工具 + +### 🐎 [ImHex](https://github.com/WerWolv/ImHex) + +[@EyreFree](https://github.com/EyreFree):ImHex 是一个功能丰富的十六进制编辑器,专为逆向工程师、程序员和夜间工作者设计。它提供了许多实用功能,如: + +- 强大的十六进制视图,支持字节修补、无限撤销 / 重做、多种数据解释和高亮显示等; +- 自定义 C++ 风格的模式语言,用于解析和高亮文件内容; +- 数据检查器,可将数据解释为多种类型; +- 基于节点的数据预处理器,可在显示前修改和解码数据; +- 支持多种数据源,如本地文件、原始磁盘、进程内存等; +- 内置反汇编器,支持多种处理器架构; +- 集成 Yara 规则扫描; +- 差异比较、数据分析、可视化等辅助工具; +- 现代化用户界面,支持多工作区、自定义布局、深色模式等。 + +总之,ImHex 是一款功能全面、设计专业的十六进制编辑器,可以极大提升逆向工程和低级编程的工作效率,感兴趣的朋友可以试试。 + +## 代码 + +### 🐎 [StreamUI](https://github.com/StreamUI/StreamUI) + +[@Damien](https://github.com/ZengyiMa): StreamUI 项目是一个用于创建和流媒体视频的强大库,它允许开发者使用 SwiftUI 编程生成动态视频,并实时渲染和直播。这个库的主要功能包括实时视频渲染,直播流媒体,动态视频生成等。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#298-2024.07.22.md b/Reports/2024/#298-2024.07.22.md new file mode 100644 index 000000000..066a5039c --- /dev/null +++ b/Reports/2024/#298-2024.07.22.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #298 | 2024-07-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/298.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10104 - 使用 RealityKit 构建空间绘画 App](https://xiaozhuanlan.com/topic/9421058376) + +[@Layer](https://github.com/LLLLLayer): RealityKit 是 visionOS 应用空间功能的基础。我们将以空间绘画 App 为例,探索资源在 RealityKit 中的运作方式,通过构建自定义网格、纹理和着色器、使用低级别网格和纹理 API 等,实现精致的视觉设计。 + +### 🌟 [WWDC24 10074 - 动态字体体验入门](https://xiaozhuanlan.com/topic/6789542301) + +[@nuomi1](https://github.com/nuomi1): 使用动态字体功能实现一个演示 App,对比 SwiftUI 与 UIKit 在实现上的异同点。 + +### 🌟 [WWDC24 10118 - UIKit 新功能](https://xiaozhuanlan.com/topic/0679358421) + +[@Sharker](https://github.com/AkaShark): 在 iOS 18 中,UIKit 经历了显著的改进,专注于提升用户界面的直观性和互动性。最引人注目的是全新的文档启动体验,它为应用提供了更多个性化展示的空间,同时优化了用户的首次文档创建流程。标签栏和侧边栏也经过了重新设计,不仅外观更加紧凑,还增加了新的定制功能,使得内容展示更为突出。强化了 SwiftUI 和 UIKit 之间的互操作性,特别是通过统一手势系统和允许 SwiftUI 动画类型直接应用于 UIKit 视图,极大地丰富了开发者在动画和交互设计上的选项。此外,UIKit 的 Trait 系统现在支持自动特性跟踪,简化了视图更新,提高了应用性能。为了进一步增强用户体验,iOS 18 引入了 UIUpdateLink ,它使得周期性的 UI 更新更为高效,并且通过感官反馈的改进,如对 Apple Pencil Pro 的支持,为 iPad 用户提供了更加丰富的交互反馈。文本编辑也得到了提升,新的文本格式化面板和写作工具为用户提供了更直观的编辑体验。总的来说,iOS 18 的 UIKit 更新为开发者提供了更多创新的工具和 API,以构建更加引人入胜和用户友好的应用界面。 + +## 新手推荐 + +### 🐎 [Blend Modes in SwiftUI](https://digitalbunker.dev/blend-modes-in-swiftui/) + +[@Smallfly](https://github.com/iostalks):这篇文章详细介绍了 SwiftUI 中的图层混合模式(Blend Modes),展示了如何通过这些模式增强图像的视觉效果。从基础的「正常」模式到复杂的「强光」和「颜色减淡」,每个模式都有详细的计算公式和效果展示。如果你想设计更有吸引力的视觉效果,推荐一读。 + +## 文章 + +### 🐕 [Mastering Animatable and AnimatablePair in SwiftUI](https://digitalbunker.dev/mastering-animatable-and-animatablepair-swiftui/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):在本文中,探索了 SwiftUI 的 Animatable 和 AnimatablePair,并通过 Demo 代码和实际效果举例让大家了解如何使用这些 API 在应用程序中制作更高级的动画。 + +### 🐎 [Introducing Entry macro in SwiftUI](https://swiftwithmajid.com/2024/07/09/introducing-entry-macro-in-swiftui/) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了 SwiftUI 中新推出的 `@Entry` 宏,它极大地简化了自定义环境键和聚焦值的创建过程。传统方法需要为每个自定义环境键创建符合 EnvironmentKey 协议的类型,而使用 `@Entry` 宏只需在 EnvironmentValues 的扩展中定义变量即可,大大减少了样板代码。文章通过示例展示了 `@Entry` 宏在环境值和聚焦值中的应用,强调了其简洁性和易用性。`@Entry` 宏不仅适用于环境值,还可用于事务、容器和聚焦值。它是向后兼容的,可以在之前的 Apple 平台版本中使用,为开发者提供了更高效的 SwiftUI 编程体验。 + +### 🐎 [Create Custom SF Symbols in Sketch ](https://www.danijelavrzan.com/posts/2024/06/create-custom-sf-symbols/) + +[@zoeGuo](https://github.com/zoeGuo):SF Symbols 是由苹果公司推出的一套系统图标,这篇文章作者介绍了如何用已有的 SF Symbols 简单修改获得自己想要的自定义 SF Symbols。通过简单的示例说明了怎么导入符号、调试、调整和优化等,操作简单易学,适合想自己做一些简单图标的初学者。 + +## 代码 + +### 🐎 [Charts](https://github.com/ChartsOrg/Charts) + +[@极速男孩](https://github.com/ztlyyznf001):DGCharts 是为 iOS、tvOS 和 macOS 平台设计的图表库,灵感来源于 Android 的 MPAndroidChart。除了基本的图表类型,如折线图、条形图、散点图和饼图,还支持自定义图表样式、高亮显示、图表交互、动态数据更新等高级功能。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#299-2024.07.29.md b/Reports/2024/#299-2024.07.29.md new file mode 100644 index 000000000..d6684bc2f --- /dev/null +++ b/Reports/2024/#299-2024.07.29.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #299 | 2024-07-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/299.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10146 - 为自定义容器视图添加更多的能力](https://xiaozhuanlan.com/topic/9032587461) + +[@whf881211](https://github.com/whf881211):该文章介绍了 SwiftUI 新添加的一些用于操控 Subview 的 API。这些 API 令 SwfitUI 的操控 UI 的能力大大增强,让我们可以给自定义容器添加更多灵活性和更强大的能力。 + +### 🌟 [WWDC24 10198 运行、暂停、检查:探索如何使用 LLDB 进行有效调试](https://xiaozhuanlan.com/topic/0854921673) + +[@haochen08](https://github.com/haochen08):本文以 WWDC24-10198 为主线,综合了 WWDC19-24 期间多个和调试主题相关的 Session,向大家介绍如何使用 Xcode IDE 和 LLDB 的最新能力,进行有效和高效的调试。同时还介绍了如何处理使用相关工具碰到的常见问题和一些高级技巧。 + +## 文章 + +### 🐎 [SwiftUI Hero Animations with NavigationTransition](https://peterfriese.dev/blog/2024/hero-animation/) + +[@xiaofei86](https://github.com/xiaofei86):借助 iOS 18 中 SwiftUI 新引入的 NavigationTransition 协议实现和 App Store 首页卡片展开类似的 Hero 动画只需三行代码。阅读本文,跟着作者一步步复现一模一样的效果,并了解相关的 SwiftUI 新特性。 + +### 🐕 [Memory consumption when loading UIImage from disk](https://www.avanderlee.com/swiftui/memory-consumption-loading-uiimage-from-disk/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章主要讨论了在使用 SwiftUI 从磁盘加载 UIImage 时遇到的内存消耗问题,并提供了多种解决方案来优化内存使用。通过下面这些要点,读者可以全面了解文章讨论的内存消耗问题、原因、解决方案以及优化建议: +- 1.内存消耗问题 + - 问题描述:当使用 UIImage 从磁盘加载大量图片时,内存消耗会迅速增加,特别是当图片频繁切换或数量较多时 + - 示例场景:文章通过一个包含 200 张壁纸的示例项目,展示了使用 SwiftUI Slider 滑动查看图片时内存消耗增加的问题 +- 2.内存增长原因 + - 系统缓存机制:使用 UIImage(named:)方法加载图片时,图片会被系统缓存,导致内存占用增加 + - 代码实现:展示了使用 UIImage(named:)方法的代码示例,并解释了为什么这种方法会导致内存问题 +- 3.解决方案 + - 避免系统缓存:推荐使用 UIImage(contentsOfFile:)方法加载图片,该方法不会将图片添加到系统缓存中,从而减少内存消耗 + - 代码优化:通过重写图片加载逻辑,使用 UIImage(contentsOfFile:)替代 UIImage(named:),解决了内存快速增长的问题 +- 4.图像缓存策略 + - NSCache 使用:对于需要处理或频繁访问的图片,可以使用 NSCache 进行缓存,以提高性能和减少内存浪费 + - 缓存逻辑:展示了如何使用 NSCache 创建一个简单的图像缓存,并在需要时从缓存中检索或存储处理后的图像 +- 5.性能优化建议 + - 预处理图像:建议在后台线程预先处理图像(如缩放),以避免在主线程上进行耗时操作,提高应用性能 + - 预加载策略:可以提前加载即将显示的图片,以减少滑动时的加载延迟 + +### 🐎 [Exploring SwiftUI: Make SF Symbols Wiggle Wiggle](https://www.rudrank.com/exploring-swiftui-make-sf-symbols-wiggle/) + +[@Smallfly](https://github.com/iostalks):这篇文章主要介绍了如何在 SwiftUI 中使用 SF Symbols 的新型摆动(wiggle)动画效果。 + +### 🐎 [Using SwiftUI in Command Line Tools](https://swifttoolkit.dev/posts/swiftui-meets-command-line) + +[@Damien](https://github.com/ZengyiMa):文章介绍了一种创新的方法,使用 SwiftUI 框架在命令行工具中为 iOS 应用图标添加徽章。通过 ImageRenderer 类,SwiftUI 视图可以被导出成图像。文章提供了一个名为 badgeify 的示例工具,它接受命令行参数来指定图标的输入输出路径和徽章文本。badgeify 工具利用 SwiftUI 构建视图,并利用 ImageRenderer 生成最终的带徽章图标图像。尽管在命令行环境中使用 SwiftUI 存在一些限制,比如 Xcode 无法为 SPM 可执行文件生成预览,但文章也提供了一些技巧来优化开发和测试流程。 + +## 工具 + +### 🐎 [Enable XcodeLLM on ChinaSKU Mac without disabling SIP](https://github.com/Kyle-Ye/XcodeLLMEligible) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 借助开源 eligibility_util 实现,实现在国行设备不关闭 SIP 的情况下使用 Xcode 16 Beta 的 LLM 功能 + +## 代码 + +### 🐎 🌟 [Charts](https://github.com/ChartsOrg/Charts) +[@水水](https://www.xuyanlan.com/categories/iOS/):Charts 是一个用 Swift 编写的为 iOS 创建图表方面提供各类样式的库,其对标的是在 Android 开发人员中非常受欢迎的 MPAndroidChart 图表库。对于读者来说非常值得参考和收藏。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#300-2024.08.05.md b/Reports/2024/#300-2024.08.05.md new file mode 100644 index 000000000..0fb25f375 --- /dev/null +++ b/Reports/2024/#300-2024.08.05.md @@ -0,0 +1,97 @@ +# 老司机 iOS 周报 #300 | 2024-08-05 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/300.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10162 - 多次拍摄保持色彩一致](https://xiaozhuanlan.com/topic/5093124687) + +[@bqlin](https://github.com/bqlin):色彩一致性是人类视觉感知的一个特性,看苹果如何软硬件结合,在拍摄上重现该“生理”特性。 + +### 🌟 [WWDC24 10149 - 在 SwiftUI 中设计窗口](https://xiaozhuanlan.com/topic/9328564107) + +[@Rickey](https://github.com/RickeyBoy):Window(窗口) 是承载 App 内容的最重要的容器,尤其是在 macOS 和 VisionOS 平台上更是需要优雅地设计和使用窗口。本文将介绍 Windows 组件,并且基于一个 Demo(BOT-anist)从实战角度进行教学。 + +## 文章 + +### 🐎 [Xcode-Kotlin 2.0 Release](https://touchlab.co/xcode-kotlin-2-0) + +[@Crazy](https://github.com/jiyan135960):本文是一篇公告,介绍了 Kotlin 的跨平台技术在 Xcode 上取得的巨大进展。Kotlin 的跨平台开发能力已经提供了很长一段时间了,这次,他们带着 xcode-kotlin 2.0 来再次挑战广大开发者的神经。下面是他在 2.0 版本中主要的优化项: + +- 极大的提升了 Debugging 的性能(最快可达到之前的五倍) +- 扩展了每一帧变量的信息 +- 在 Swift, Kotlin, Objective-C 下都可工作 +- 默认支持 List 和 Map 并且后续还会持续更新(例如:StateFlow, Set) + +Kotlin 还是延续了它一贯的特点,开源,免费,文章很短,大家可以快速浏览,对新技术有个简单的认知。 + +### 🐢 [Async await in Swift: The Full Toolkit](https://www.emergetools.com/blog/posts/swift-async-await-the-full-toolkit) + +[@AidenRao](https://weibo.com/AidenRao):这篇博客介绍了 Swift 中异步 / 等待(async/await)的完整工具包,包括 async/await 基础语法、Task、Task group、Actors 等多种技术。通过实际示例和理论讲解,展示了这些工具在 Swift 并发编程中的用法和场景。 + +### 🐎 [Building Swift Executables](https://swifttoolkit.dev/posts/building-swift-executables) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何在不同操作系统和架构上构建和分发 Swift 可执行文件。对于使用 Swift 构建 CLI 程序感兴趣的同学建议阅读学习。 + +### 🐕 [Swift 6 适配的一些体会以及对现状的小吐槽](https://onevcat.com/2024/07/swift-6/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章主要围绕 Swift 6 的迁移体验、并发编程的引入、以及作者对 Swift 语言发展的个人感想进行了详细阐述。 +- 1.Swift 6 迁移体验 + - 迁移挑战:作者提到 Swift 6 的迁移过程并不顺利,与 Swift 3 的迁移有相似之感,主要是因为并发编程和严格线程安全的引入 + - 并发编程工具:Swift 6 通过 actor 隔离和 Sendable 标注等工具,试图在编译阶段就解决数据竞争和线程问题 + - 迁移建议:尽管 Apple 提供了对旧版本的兼容选项,但迁移仍需要大量工作,作者建议新代码可以按 Swift 6 标准编写,老代码则观察后再决定 + +- 2.并发编程和严格线程安全 + - 主要任务:迁移过程中的主要任务包括添加 @MainActor、标记 Sendable、以及将回调函数改写成 async 并考虑 Task 的使用 + - @MainActor 的使用:UI 相关类型默认添加 @MainActor,非主线程调用时需使用 Task 或添加 @MainActor + - Sendable 和 @unchecked Sendable:对于非 Sendable 的 class,需要实现线程安全机制,如使用锁或 dispatch queue,但可能导致性能问题 + +- 3.迁移过程中的具体挑战 + - 回调和闭包:async 普及前,遗留的 completion handler 代码需要转换为 @Sendable 闭包,但易导致“传染”问题 + - deinit 问题:deinit 无法被 actor 隔离,导致在 Swift 6 中一些原本可行的代码变得无法书写,需要使用 Task 或 withoutActuallyEscaping 来绕过限制 + +- 4.Swift 语言的发展和个人感想 + - 复杂度增加:Swift 从最初的简单到如今包含 Result Builder、Property Wrapper、宏、并发编程等多个复杂特性的编程语言,学习负担加重 + - 开发者体验:编译速度退化、Xcode 的代码补全和 SwiftUI 预览等开发者体验问题尚未得到显著改善 + - 未来展望:作者对 Swift 的未来发展持观望态度,认为其重点似乎并未完全放在帮助开发者更快完成 App 上,而是扩展到了 Server Side 和其他操作系统平台 + +- 5.作者的个人经历和对新人的建议 + - 十年 Swift 开发者经历:作者回顾了自己从 Swift 发布第一天开始的十年历程,见证了 Swift 的多个重要节点 + - 对新人的建议:初学者面临的学习负担较重,作者认为新人需要掌握基础语法、值类型和引用类型等基础知识,以及更复杂的宏和 Property Wrapper 等特性 + +### 🐢 [结合实例深入理解 C++ 对象的内存布局](https://mp.weixin.qq.com/s/pzvI1AEUoz6uWdjlBI2xSQ) + +[@老驴](https://weibo.com/u/6090610445):这篇来自腾讯技术工程的文章通过实际案例深入探讨了 C++ 对象的内存布局,包括简单对象、带方法的对象、私有和静态成员、类继承以及虚函数的实现。 + +通过使用 GDB 调试工具,文章分析了 C++ 对象在内存中的分布情况,揭示了成员变量和方法在内存中的存储方式。其中,作者强调了编译器如何通过对象地址和偏移量来定位成员变量,并讨论了多态实现的底层机制。这篇文章算是一篇 C++ 进阶的文章,有兴趣的同学可以细读。 + +## 代码 + +### 🐎 [swift-issue-reporting](https://github.com/pointfreeco/swift-issue-reporting/tree/main) + +[@Damien](https://github.com/ZengyiMa): Point-Free 推出了一个名为 Issue Reporting 的新库,它允许开发者以 Xcode 运行时警告、断点、断言等方式报告应用程序和库代码中的问题,并支持测试。这个库提供了 reportIssue 函数来在代码中标记不应发生的问题,并可自定义问题报告方式,包括自定义报告器以发送问题到 OSLog 或外部服务器。此外,在测试环境中,所有报告的问题都会变成测试失败,有助于确保问题代码路径不被执行。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#301-2024.08.12.md b/Reports/2024/#301-2024.08.12.md new file mode 100644 index 000000000..7cfaeb7b2 --- /dev/null +++ b/Reports/2024/#301-2024.08.12.md @@ -0,0 +1,84 @@ +# 老司机 iOS 周报 #301 | 2024-08-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/301.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## WWDC24 内参 + +### 🌟 [WWDC24 10177 - 用 HDR 图片点亮你的 App](https://xiaozhuanlan.com/topic/3465798021) + +[@陈震昊](https://github.com/szzxczh1996):本文首先简要阐述了 HDR 相关的基本概念,例如 reference white、headroom 以及 tone mapping,然后回顾了苹果以往建立的 HDR 标准以及 HDR 渲染技术,最后重点介绍了今年新推出的 Adaptive HDR 标准以及在该标准下,如何对 HDR 图片进行读写、编辑和展示。 + +### 🌟 [WWDC24 10073 - 提升 SwiftUI 的可访问性体验](https://xiaozhuanlan.com/topic/7683249501) + +[@Jason](https://github.com/pujiaxin33):深入了解 SwiftUI 如何提供开箱即用的内置 Accessibility,以及如何使用工具来完善和打造你的应用程序的 Accessibility。 + +## 新闻 + +### [‘ You are a helpful mail assistant, ’ and other Apple Intelligence instructions](https://www.theverge.com/2024/8/5/24213861/apple-intelligence-instructions-macos-15-1-sequoia-beta) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 macOS Sequoia 15.1 开发者测试版中,有用户发现了一些包含人工智能后台提示的 JSON 文件,并分享了如何找到这些文件的方法。这些文件揭示了苹果 AI 工具在接收到用户提示之前所接收到的隐藏指令。这些指令为 AI 工具提供了如何响应用户输入的指南,例如邮件助手如何基于邮件内容提问,以及如何生成“回忆”视频等。此外,还提到了一些具体的指令要求,如限制字数、不捏造事实信息等。同时,本文也提醒用户在探索这些系统文件时要谨慎行事,因为它们涉及系统敏感信息。 + +## 文章 + +### 🐕 [SwiftUI app lifecycle: issues with ScenePhase and using AppDelegate adaptors](https://www.jessesquires.com/blog/2024/06/29/swiftui-scene-phase/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章入剖析了 SwiftUI 的 `ScenePhase` API,并指出了它在跨平台应用生命周期管理上的局限性。文章建议,为了更细致地控制应用生命周期,应该扩展 `ScenePhase` 或引入新的 `AppPhase` API。同时,作者发现在 macOS 上,依赖 `ScenePhase` 不如直接使用 `NSApplicationDelegate` 来得可靠。为开发者在构建跨平台应用时提供了宝贵的见解。 + +### 🐎 [Swift Protocol 背后的故事(理论)](https://zxfcumtcs.github.io/2022/02/04/SwiftProtocol2/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者从原理上解析了在 Swift 中 Protocol 是如何实现的。Swift runtime 为每个类型都生成了类型元信息(Type Metadata),不同类型的元信息的共同特点是都包含了 VWT、Kind。Class、Struct 的实例上通过 Existential Container 模型来指导 Protocol 变量布局内存,非类约束的 Protocol,会在此模型中通过 type 指向真实类型的元信息,类约束的 Protocol 因为类的实例中已包含了类的元信息,故此模型中不再包含。而泛型在无约束、类约束或者 Protocol 约束的情况下表现均有不同,并在特定条件下特化,改为静态派送来提升性能。感兴趣的读者可以阅读本文,了解更细节的知识。 + +### 🐕 [轻踩一下就崩溃吗——踩内存案例分析](https://mp.weixin.qq.com/s/9OCFb2cH-H5zbaIT5VAS9w) + +[@Cooper Chen](https://github.com/cjlcooper):本文探讨了内存踩踏问题的现象、成因及解决方案,结合具体案例和代码示例,详细解析了全局符号介入和编译参数不一致引发的内存错误。主要通过四个章节进行了分析,分别是: +- 踩内存问题分析成本高,需要借助专业的调试工具和方法 +- 即使代码逻辑本身没有问题,全局符号介入机制也可能导致内存越界 +- 编译参数不一致会引发内存踩踏崩溃 +- 工程标准化,能够有效减少踩内存等问题的发生 + +### 🐎 [Zoom transitions](https://douglashill.co/zoom-transitions/) + +[@极速男孩](https://github.com/ztlyyznf001/):这篇文章主要介绍了如何在 iOS 18 SDK 中分别用 SwiftUI 和 UIKit 使用缩放过渡。作者通过具体的代码示例展示了如何在不同的场景中实现缩放动画,比如从一个列表项缩放到一个全屏的详细视图。此外,文章还讨论了如何优化源视图和目标视图的选择,以确保过渡动画的自然和流畅。 + +## 工具 + +### 🌟🌟🌟 [Cursor: The AI Code Editor](https://www.cursor.com/) + +[@kemchenj](https://kemchenj.github.io/):Cursor 是基于 VSCode 的一个 AI 编辑器,实际使用比起 VSCode+Copilot 体验好上不少。使用 Cursor 只需要会用两个快捷键: + +- CMD+k,单文件编辑,选中你要修改的代码,告诉他需要修改的内容,还能贴 UI 图 +- CMD+i,多文件编辑,直接按快捷键,然后按 + 号指定改动的文件,告诉他需要修改的内容 + +然后站起来走两步,拿起杯子喝口水,看着他把代码写好,健康编程从此刻开始!!! + +## 音视频 + +### 🐢 [Embedded Swift Tutorial - Getting Started (Everything you need to know)](https://blog.supereasyapps.com/embedded-swift-tutorial-getting-started-everything-you-need-to-know/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 一篇关于 Embedded Swift 的详细教程,对嵌入式 + Swift 方向感兴趣的可以观看。目前 Embedded Swift 还处于较早期的玩具阶段,期待后续搭配 HomeKit/Matter 生态的进一步发展。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#302-2024.08.19.md b/Reports/2024/#302-2024.08.19.md new file mode 100644 index 000000000..d6157fdaa --- /dev/null +++ b/Reports/2024/#302-2024.08.19.md @@ -0,0 +1,70 @@ +# 老司机 iOS 周报 #302 | 2024-08-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/302.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [NFC & SE Platform for Secure Contactless Transactions - Support - Apple Developer](https://developer.apple.com/support/nfc-se-platform/) + +[@Barney](https://github.com/BarneyZhaoooo):苹果即将在 iOS 18.1 中引入 NFC & SE 平台,让开发者能在 iOS 应用中实现安全便捷的无接触支付等功能。开发者得先跟苹果签个协议,确保他们遵守行业规则和保护用户隐私。新系统要求 iPhone XS 或更新机型,运行 iOS 18.1 或更高版本。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10125 - 自动化创建 Passkey 和全新密码 App 帮助简化登录流程,并提升安全性](https://xiaozhuanlan.com/topic/6145027938) + +[@米广](https://github.com/yz06276):即刻起开始部署更加简单易用,更加安全的 Passkey。 + +### 🌟 [WWDC24 10100 - ARKit 新功能介绍](https://xiaozhuanlan.com/topic/1830462795) + +[@lijingpei](https://github.com/lijingpei2016):本文介绍了 2024 年 ARKit 的新增内容。 + +## 文章 + +### 🐎 [Swift Navigation: Powerful navigation tools for all Swift platforms](https://www.pointfree.co/blog/posts/149-swift-navigation-powerful-navigation-tools-for-all-swift-platforms) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了一个新的导航用开源库 Swift Navigation。这个库适用于 SwiftUI、UIKit、AppKit 以及其他一系列非苹果的平台上。它整体沿用了 SwiftUI 的导航思想,通过一些宏的封装和枚举的使用,使开发者能够更简洁的进行导航的管理。同时在 UIKit 等非 SwiftUI 的框架下,它也提供了视图和数据的绑定能力,让开发者能够在数据更新时及时更新视图。 + +### 🐕 [Non-Sendable types are cool too you know ](https://www.massicotte.org/non-sendable) + +[@zoeGuo](https://github.com/zoeGuo):本文深入探讨了 Swift 语言中的并发特性:`Sendable` 和 `non-Sendable` 类型的使用,提出二者在多线程编程安全中的重要作用,以及它们在处理线程安全和协议一致性方面具有各自的优势。文章通过实例分析了 `non-Sendable` 类型在异步函数中的应用,并提出了使用隔离参数的解决方案,使得这些类型在并发环境中更加灵活。最终,作者鼓励开发者充分利用 `non-Sendable` 类型,以提高代码的线程安全和并发性能。 + +### 🐕 [Diffuse reflection UV computation tool](https://www.elkraneo.com/diffuse-reflection-uv-computation-tool/) + +[@BluesJiang](https://github.com/BluesJiang):本文介绍了苹果在 Vision Pro 中的观影模式下环境对屏幕内容的反射效果的实现方式。今年苹果在 WWDC24 上开放了这个效果给开发者们使用,本文就是介绍了相关的工具和使用。想要实现这种反射效果,苹果给了一个 python 脚本来我们计算 Emitter UV 以及 Attenuation UV,并且简单的介绍了原理。这个工具可以实现任何物体类型投射的光线都可以在预定的位置快速计算其反射的效果。在 Reality Composer Pro 上使用这两种 UV 就可以把反射 UV 应用到场景上。这种实现方式也给我们自研引擎的开发者们提供了一种新的思路。 + +### 🐎 [Exploring OpenAI: Creating a Proxy with AIProxy for iOS and macOS Apps](https://www.rudrank.com/exploring-openai-creating-a-proxy-with-aiproxy/) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了作者使用 AIProxy 服务来保护 OpenAI API 密钥的经验。AIProxy 通过加密和分割 API 密钥提高安全性,并使用 DeviceCheck 框架防止未授权访问。文章详细讲解了 AIProxy 的工作原理、安全措施及在 iOS 和 macOS 应用中的实施步骤。作者展示了如何在 Swift 项目中集成 AIProxy,包括设置依赖、创建服务实例和发送 API 请求。文章还讨论了优化系统提示以控制 API 调用成本,以及使用 AIProxy 仪表板监控请求情况。有需要的同学不要错过。 + +### 🐎 [Concurrency Step-by-Step: A Network Request](https://www.massicotte.org/step-by-step-network-request) + +[@Smallfly](https://github.com/iostalks):本文是一篇 SwiftUI 并发编程教程,通过一个网络请求示例,讲解了如何使用 GCD 和 `async/await` 进行线程安全的操作。文章强调了区分 I/O 和 CPU 密集型任务的重要性,并介绍了 `nonisolated` 关键字的使用,以避免在非主线程上操作 UI 状态。建议读者从基础学起,逐步深入 Swift 并发编程。 + +### 🐕 [Migrating KeyboardKit to Swift 6 language mode](https://douglashill.co/keyboardkit-swift-6/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了将 KeyboardKit 更新到 Swift 6 的一些迁移经验,将 KeyboardKit 实现了完全的数据竞争安全性。KeyboardKit 是一个键盘控制的开源框架,作者在迁移过程中遇到了一些有趣的问题,包括 UIViewController 子类无法使用无参数的初始化方法、全局常量被错误地隔离等。这些变化对使用 KeyboardKit 的开发者没有影响,但如果感兴趣,可以查看最新版本的 KeyboardKit。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#303-2024.08.26.md b/Reports/2024/#303-2024.08.26.md new file mode 100644 index 000000000..9be9f7595 --- /dev/null +++ b/Reports/2024/#303-2024.08.26.md @@ -0,0 +1,61 @@ +# 老司机 iOS 周报 #303 | 2024-08-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/303.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [CocoaPods 官宣进入维护模式](https://blog.cocoapods.org/CocoaPods-Support-Plans/) + +CocoaPods 的生命走入倒计时,后续将在某个时间节点将 Specs repo 设置为 read-only,一个时代结束了。感谢开源社区的作者们提供了这么好用的依赖工具。对于国内的开发者来说,在 SPM 能满足大家需求前,可以考虑在内网建立私有 Specs repo 以及定制 Cocoapods 功能以持续迭代。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10173 - Analyze Heap Memory](https://xiaozhuanlan.com/topic/9307481265) + +[@iPhreetom](https://github.com/iPhreetom):新手级的 iOS 内存分析入门文章,通过学习 MemoryGraph 和 Allocations 的使用,帮助你在开发中更好的解决内存问题。 + +## 文章 + +### 🐕 [Reminder: Conditional Breakpoints are Slow](https://twocentstudios.com/2024/08/08/conditional-breakpoints/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章作者分享了一个有趣的调试故事,为了排查调试项目时发现的不合理的延迟,尝试了禁用调试器、深入了解 GRDB、代码验证等手段,花了数个小时跨越几周的时间,最终发现其实是 LLDB 中的条件断点会增加明显的执行延迟问题。能发现并解决问题总是一个令人愉快的体验,相信读者也有一样的体会,感兴趣的可以看看这个故事。 + +### 🐕 [Issue with AVAsset access in iOS 18 beta | Apple Developer Forums](https://forums.developer.apple.com/forums/thread/758691) + +[@Barney](https://github.com/BarneyZhaoooo):在 iOS 18 中,直接通过硬编码路径访问 AVAsset 会引发权限错误。Apple 技术支持 Quinn 指出,应用应使用 PhotoKit API 来安全地访问和处理用户的照片库,以符合 iOS 的沙盒机制。 + +### 🐕 [How to automatically detect memory leaks on CI/CD using UI tests](https://www.polpiella.dev/automatically-detect-memory-leaks-using-ui-tests/) + +[@莲叔](https://aaaron7.github.io/):内存泄露一直都是 iOS 开发者头疼的问题,并且绝大多数情况都会比较隐蔽,无法简单的被发现。这篇文章介绍了一种结合 UI test 来挖掘内存泄露的方式,通过使用 xcodebuild 新的 enablePerformanceTestsDiagnostics 特性,在 UI test 过程中能自动生成 memory graph 的报告,作者还给出了通过 Swift 来解析内存报告和判断内存泄露的案例,这样就能够自动化的去测试用户在使用 App 的过程中是否有内存泄露。整体来说提出了一种新的解决泄露的思路,并且给出了可落地的方案参考。 + + +## 代码 + +### 🐎 [swift-translate](https://github.com/hidden-spectrum/swift-translate) + +[@DylanYang](https://github.com/Dylan19Yang):一个帮助开发者快速完成字符串本地化翻译的工具,支持通过 ChatGPT 或者 Google Translate 进行翻译。目前源语言必须是英语,同时项目还在早期阶段,可能存在部分翻译不准确、漏翻等情况,使用者需要自行关注。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#304-2024.09.02.md b/Reports/2024/#304-2024.09.02.md new file mode 100644 index 000000000..b691d2400 --- /dev/null +++ b/Reports/2024/#304-2024.09.02.md @@ -0,0 +1,68 @@ +# 老司机 iOS 周报 #304 | 2024-09-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/304.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + + +## 文章 + +### 🐕 [JSON Parsing in Swift explained with code examples](https://www.avanderlee.com/swift/json-parsing-decoding/) + +[@zoeGuo](https://github.com/zoeGuo):解析 JSON 是我们在编码中常处理的问题,文章介绍了在 Swift 编码中不使用外部依赖解析 JSON。作者示例说明了如何使用 `Decodable` 协议来轻松解码 JSON,如何通过自定义映射将 JSON 关键字映射到 Swift 属性名,以及如何转换驼峰命名法和蛇形命名法,示例了如何使用自定义日期格式解码 JSON 中的日期。作者还提供了利用 AI 将 JSON 转换为 Swift 结构体的 prompt,一个以美观的格式打印 JSON 的扩展。这篇文章详细介绍了 Swift 中 JSON 解码的各个方面。 + +### 🐕 [SwiftUI for Mac 2024](https://troz.net/post/2024/swiftui-mac-2024/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):这篇文章列举了系列示例代码来展示 WWDC 2023 和 WWDC 2024 中 SwiftUI 在 MacOS 应用程序上更新的新功能,主要包含了以下方面的内容: + +- Xcode +- Previews +- Windows +- Tabs +- Charts +- Colors and Gradients +- SF Symbols + +### 🐢 [Flutter Web 正式官宣弃用 HTML renderer , Canvas 路线成为唯一](https://mp.weixin.qq.com/s/FdRMQGcZU5BDOI2N0EksiQ) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter Web 一直是 Flutter 团队努力攻克的一个方向 , 最初 HTML renderer 的路线最近被团队所抛弃 , 采用 CanvasKit 结合 WASM 方式;本文讲述了 Flutter Web 在 HTML renderer 到 CanvasKit 上的取舍和对比 , 可以让我们更深度的了解为何 CanvasKit 成为了唯一路线. + +### 🐎 [Investigating a Dynamic Linking Crash with Xcode 16](https://pspdfkit.com/blog/2024/dynamic-linking-crash-xcode-16/) + +[@Smallfly](https://github.com/iostalks):这篇文章作者介绍了 Xcode 16 beta 导致 PSPDFKit 在 iOS 上启动崩溃的问题。该问题与动态链接 `sqlite3_threadsafe` 有关。调查发现,Xcode 的线程性能检查器默认启用,会导致 `libRPAC.dylib` 错误解析 SQLite 符号。解决方案是禁用该工具或更新 PSPDFKit 至 13.7 版本,后者允许 `libRPAC.dylib` 和 `libsqlite3.dylib` 共存,以防止崩溃。 + +### 🐎 [Swift Build Times and Module Verification …](https://pfandrade.me/blog/swift-build-times-and-module-verification/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章讲述了开发 Secrets 4 时遇到的构建时间变慢的问题。作者将 Secrets 4 重构为 36 个框架,结果发现构建时间逐渐增加。主要原因是启用了 Xcode 的模块验证功能(ENABLE_MODULE_VERIFIER),该功能在构建时检查各种模块问题,虽然对框架分发有帮助,但在调试时会显著拖慢速度。作者决定在调试构建中禁用该功能,结果构建时间从 3.5 分钟减少到 52 秒。此举大大提高了开发效率,也提醒开发者定期检查构建时间以优化开发流程,这对于优化 Swift 工程的编译效率有不错的参考意义。 + +### 🐕 [JavaScript to Swift and back: Bridging location services in WKWebView](https://swiftlybald.com/javascript-to-swift-and-back-bridging-location-services-in-wkwebview/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章主要解决 WKWebView 访问地理位置权限,会触发两次位置授权弹窗(APP 授权 与 特定网页授权)的问题。解决方案主要是通过拦截来自浏览器的位置服务请求,在 iOS 中本地处理它们,然后在位置相关工作完成后将控制权交还给浏览器。如果你的 APP 有类似的体验问题,可以参考文章的实现原理进行优化。 + +### 🐎 [Send data Between iOS Apps and Extensions Using Darwin Notifications](https://ohmyswift.com/blog/2024/08/27/send-data-between-ios-apps-and-extensions-using-darwin-notifications/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了一种用于进程间通信的方式。在 App 内通知是一种通信的常用的手段,而有一种特殊的通知可用于进程间的通信 ———— Darwin Notifications。通常谈到进程间通信,我们会想到 Userdefaults 或者 Keychain,但是从作者看来 Darwin Notifications 会是一种更合适的方式,不过它有一个缺点是无法携带额外的信息(类似 userInfo)。作者展示了一个简单的 demo 来说明如何使用,感兴趣的读者可以阅读本文学习一下。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#305-2024.09.09.md b/Reports/2024/#305-2024.09.09.md new file mode 100644 index 000000000..57ba318b6 --- /dev/null +++ b/Reports/2024/#305-2024.09.09.md @@ -0,0 +1,60 @@ +# 老司机 iOS 周报 #305 | 2024-09-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/305.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## WWDC24 内参 + +### 🌟 [WWDC24 10151 - SwiftUI 过渡效果篇](https://xiaozhuanlan.com/topic/8321460975) + +[@zdd](https://github.com/zddhub):本文将介绍 SwiftUI 实现过渡效果的两种方式:AnyTransition 和 Transition。并逐步剖析自定义 SwiftUI 过渡效果的步骤和注意事项,最后通过多个示例展示视觉、着色器、颜色、文字、滚动和导航等不同类型过渡效果的应用,旨在启发读者创建令人印象深刻的过渡效果。 + +## 文章 + +### 🐕 [Backport SwiftUI modifiers](https://alejandromp.com/development/blog/backport-swiftui-modifiers/) + +[@AidenRao](https://weibo.com/AidenRao):SwiftUI 每年都会更新新的修饰符,但我们往往需要等待用户更新到修饰符支持的最低版本,才能享受这些新功能。本篇作者分享了一些技巧和方法,帮助开发者在较旧的 Swift UI 环境中使用新的 SwiftUI 修饰符,在确保旧版本用户体验不变的情况下,面向未来做开发,毫无问题地使用新版本 API。实现原理主要是检查操作系统版本,并在可用时调用 SwiftUI 函数,在不可用时回退到其他函数。 + +### 🐢 [抄 Apple Intelligence 作业的思路](https://juejin.cn/post/7407385581079396389) + +[@Cooper Chen](https://github.com/cjlcooper):近年来,AI 领域迅猛发展,模型规模和性能不断提升,而这是一篇对端上智能或者说 LLM 总结和思考的文章,作者从三个大的方面对当前 Apple Intelligence 的诞生、现状以及展望做了非常详尽的分析,其核心的观点大致可以总结为: +- 以技术为基石的应用更要对技术诚实,LLM 幻觉和推理能力不足可以采用移交控制 / 验证和主动治理 / 约束策略 +- 并不是所有 AI 都需要以 AGI 为目标,提升现有产品的核心体验 / 收益也可以作为投入目标 +- 借助 LLM 实现跨 domain 交互在技术上可行,但不同 domain 有不同的商业模式考量 + +对于不仅是 AI 相关行业的开发,甚至对于各平台的开发来说都有非常大的参考价值,值得反复的阅读和思考。 + +### 🐎 [Dogfooding Emerge Tools: Open-sourcing an Android Hacker News App](https://www.emergetools.com/blog/posts/open-sourcing-emerge-tools-hackernews-app) + +[@Crazy](https://github.com/jiyan135960):关于 Hacker News 的 App 有很多,这次是由 Emerge 团队开发的一款 Hacker News 阅读器。Emerge 团队开发了很多关于应用性能优化与分析的工具,他们在移动应用领域有着深厚的背景。这款新的 Hacker News App 正是使用了他们自己开发的诸多工具来完成的具体实践,这些工具可以让开发者在开发的过程中发现一些错误,并且有自动去除 dead code 等功能。开发者也可借鉴他们的开源代码来使用 Emerge 团队的开发工具,大大简化了开发者从开发到上架的实施难度。 + + +## 音视频 + +### 🐢 [Cross-Platform Swift: View Paradigms](https://www.pointfree.co/episodes/ep290-cross-platform-swift-view-paradigms) & [Cross-Platform Swift: WebAssembly](https://www.pointfree.co/episodes/ep291-cross-platform-swift-webassembly) + +[@Kyle-Ye](https://github.com/Kyle-Ye):本系列视频探讨了如何通过合理的领域建模,将同一套功能集无缝地应用于不同的视图范式和跨平台环境中(UIKit/SwiftUI/WebAssembly),对 Swift 进行跨平台开发感兴趣的读者可以阅读学习下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#306-2024.09.23.md b/Reports/2024/#306-2024.09.23.md new file mode 100644 index 000000000..ff5c95e83 --- /dev/null +++ b/Reports/2024/#306-2024.09.23.md @@ -0,0 +1,67 @@ +# 老司机 iOS 周报 #306 | 2024-09-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/306.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [Xcode Folders & Groups](https://troz.net/post/2024/xcode_folders_groups/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Xcode 15 到 Xcode 16 有不少变化,本文就 Folders & Groups 相关变化做了一些比较,比如 : 添加文件,创建 Group 等;最终作者也给出了一些总结性的建议,如果有不习惯新组织形式的小伙伴依然可以保持 15 时候的形式. + +### 🐢 [COW2LLVM: The isKnownUniquelyReferenced Deep-Dive](https://jacobbartlett.substack.com/p/cow2llvm-the-isknownuniquelyreferenced) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 编译器中的 copy-on-write(CoW)优化了 Swift 结构体,结合了值语义和引用语义。它将数据存储在堆内存中,允许通过轻量级指针高效复制,同时确保在数据更改时触发值语义。这种技术被 Swift 的标准类型(如 Array 和 String)所采用。这篇文章深入探讨了 Swift 编译器中的 CoW 优化,文章将带领读者探索 Swift 编译器的源代码,揭示 CoW 的工作原理,旨在让读者对这一复杂的机制有更深入的理解。 + +### 🐕 [SwiftUI's Observable macro is not a drop-in replacement for ObservableObject](https://www.jessesquires.com/blog/2024/09/09/swift-observable-macro/) + +[@Barney](https://github.com/BarneyZhaoooo):文章指出 SwiftUI 的 `@Observable` 宏并非 `ObservableObject` 的完美替代。主要区别在于初始化行为: `@StateObject` 仅初始化一次,而 `@State` 每次视图重建时都会重新初始化。这可能导致意外行为,建议将全局状态放在 `App` 结构中以避免问题。 + +### 🐢 [我是怎么做个人知识管理(PKM)的](https://starming.com/2024/09/12/my-pkm/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章概述了作者个人知识管理(PKM)的历程与心得,从早期使用备忘录、Evernote 等工具,到探索 Bear、Notion、Obsidian 等结构化笔记应用,作者经历了从信息囤积到注重信息消化的转变,最终采用卢曼卡片盒笔记法,通过闪念笔记、文献笔记、永久笔记等形式,建立笔记间的关联,形成知识网络。同时,结合 P.A.R.A 框架优化管理流程,并引入费曼学习法、CODE 方法论等工具促进知识内化。作者强调工具与方法的选择应基于个人需求,且写作是知识管理的重要产出形式。整篇文章为读者提供了关于如何高效管理和利用信息的实用指南。 + +## 工具 + +### [swift-export](https://swiftpackageindex.com/franklefebvre/swift-export) + +[@Smallfly](https://github.com/iostalks):swift-export 是一款命令行工具,用于在 macOS 上更容易地签名和公证可执行包。这可以帮助开发者简化在 macOS 上分发应用程序时的安全和合规性流程。具体来说,它包括以下功能: + +- **签名**:为应用程序添加数字签名,这是 macOS 应用程序分发的一个要求,以确保应用程序的来源和完整性。 +- **公证**:将应用程序提交给 Apple 进行公证,这是 macOS Catalina 及更高版本中的一项新要求,用于确保应用程序在启动时不会损害用户的安全。 + +这个工具对于需要频繁构建和分发 macOS 应用程序的开发者来说非常有用。 + +## 代码 + +### [HandVector 2.0 版本更新](https://juejin.cn/post/7408086889591390262) + +[@BluesJiang](https://github.com/BluesJiang):这个之前推荐过的开源库又迎来的大的更新,新增了 HandleShape 的 API,给不同手的不同形态给出了具象化的分类,可以更语义化的了解目前手势的情况,如手掌弯曲了多少、手指捏合了多少、手指弯曲了多少等。有利于开发快速调整以寻找合适的手势匹配参数,而不是像之前录制手势那样必须完全精准的重现手势才能达成目的。对手势交互依赖比较重的应用可以考虑升级和使用。 + +### 🐎 [Hummingbird 2](https://forums.swift.org/t/hummingbird-2/74535) + +[@DylanYang](https://github.com/Dylan19Yang):Hummingbird 是一个用 Swift 编写的轻量又灵活的后端框架,它包含了路由、请求和结果处理、编解码等诸多能力。它最近发布了新版本 Hummingbird 2,代码整体基于 Swift 的结构化并发进行了重写,使代码更易读,感兴趣的读者可以关注一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#307-2024.09.30.md b/Reports/2024/#307-2024.09.30.md new file mode 100644 index 000000000..a42859fcb --- /dev/null +++ b/Reports/2024/#307-2024.09.30.md @@ -0,0 +1,73 @@ +# 老司机 iOS 周报 #307 | 2024-09-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/307.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +提前祝大家国庆快乐,我们下一期周报会在 10 月中旬与大家见面。 + +## 文章 + +### 🌟 🐢 [在 Swift 中如何正确传递 Unsafe Pointers 参数](https://mp.weixin.qq.com/s/xDeZ6zM7-6RfPXrs5kCqWw) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章总结了作者在抖音推动规模化落地 Swift 组件中发现的一些常见 Unsafe Pointers 问题。通过具体的工程例子和编译器代码分析给出了具体原因。 + +### [为超越 JVM 而生?深入理解 Kotlin Native 的梦想与可能](https://mp.weixin.qq.com/s/oo7YTnW4oL1xq17cNPGhnw) + +[@JonyFang](https://github.com/JonyFang): Kotlin Native 是 Kotlin 多平台生态的关键一环。本文依据 Kotlin Native 的源码,结合作者在运用 Kotlin Native 开发多平台应用的实战经验,详细为大家解读 Kotlin Native 在编译时和运行时的实现细节和实践技巧。作为 Kotlin 多平台生态的重要一环,Kotlin Native 不再依赖其他运行环境,同时也能保持与其他平台一致的开发体验。 + +### 🐎 [Freeing disk space on GitHub Actions runners](https://www.dzombak.com/blog/2024/09/Freeing-disk-space-on-GitHub-Actions-runners.html) + +[@J_Knight_](https://github.com/knightsj):本文分享了可以清理 GitHub Actions 的运行器所在的服务器的内存空间的脚本代码,以用来防止在执行 GitHub Actions 工作流的时候遇到内存不足的问题。 + +### 🐕 [SwiftData: Solving Fatal Errors and EXC_BAD_ACCESS While Handling Entities on Different Threads](https://www.simplykyra.com/blog/swiftdata-solving-fatal-errors-and-exc_bad_access-while-handling-entities-on-different-threads/) + +[@AidenRao](https://weibo.com/AidenRao):这篇博客介绍了在处理不同线程上的 Entities 时如何解决 SwiftData 中的异常崩溃。通过示例代码和步骤,作者展示了如何有效解决这些错误,希望能帮助读者解决类似问题。 + + ### 🐎 [Exploring SwiftUI: Creating a Custom Slider Inspired By Camera Control](https://www.rudrank.com/exploring-swiftui-creating-a-custom-slider-inspired-by-camera-control/) + +[@zoeGuo](https://github.com/zoeGuo):文章是作者在看到 iPhone16 上相机控制的丝滑交互动效后收到启发,自己用 SwiftUI 实现了一套类似的动画流畅、并且有交互反馈的 slider 控件。作者在文中介绍了设计和实现的思路,并最终应用在自己的上线 App 中的过程。 + +### 🐎 [Point-Free is Xcode 16 ready](https://www.pointfree.co/blog/posts/152-point-free-is-xcode-16-ready) + +[@极速男孩](https://github.com/ztlyyznf001): Point-Free 更新了开源库,以支持 Swift 6.0 和 Xcode 16,同时保持对旧版 Swift 和 Apple 平台的兼容性。此次更新特别强化了并发安全性,Dependencies 库通过使用 TaskLocal 实现了无警告编译,减少了不安全并发操作。Composable Architecture 库的 Store 现已完全在主线程上执行,确保了线程安全。此外还兼容 Swift 的新测试框架,同时继续支持 XCTest,帮助开发者平稳过渡。这些改进均保持向后兼容,开发者无需担心破坏性变更。 + +## 代码 + +### [ChatMLX](https://github.com/maiqingqiang/ChatMLX) + +[@EyreFree](https://github.com/EyreFree):ChatMLX 是一款面向 macOS 的开源聊天应用,基于大型语言模型 LLM 和 Apple silicon 芯片设计。其主要特点包括: + +- 多语言支持:兼容英文、中文(简 / 繁)、日文和韩文,满足多元用户需求; +- 多模型集成:支持 Llama、OpenELM、Phi、Qwen 等多个 LLM 模型,为用户提供丰富的对话选择; +- 高性能表现:充分利用 MLX 框架和 Apple silicon 芯片的优势,实现快速响应; +- 隐私保护:通过本地运行 LLM,确保用户数据安全。 + +项目完全开源,使用 Swift 语言开发,结合 SwiftUI 构建用户界面,展示了 Swift 在 AI 应用开发领域的潜力。对 Apple 开发者而言,ChatMLX 提供了一个学习 AI 技术与原生应用融合的范例。 + +### [VisionOS 30 天学习计划](https://github.com/satoshi0212/visionOS_30Days) + +[@BluesJiang](https://github.com/bluesjiang):这个计划目前有两个版本:[visionOS 1.0](https://github.com/satoshi0212/visionOS_30Days) 以及 [visionOS 2.0](https://github.com/satoshi0212/visionOS_2_30Days) 版本。这里面可以找到大部分 visionOS 特性相关的示例代码,可以快速尝试 visionOS 上的独特的特性。十分推荐都看一遍,可以帮组你快速上手 visionOS 。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#308-2024.10.21.md b/Reports/2024/#308-2024.10.21.md new file mode 100644 index 000000000..679218248 --- /dev/null +++ b/Reports/2024/#308-2024.10.21.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #308 | 2024-10-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/308.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### Xcode 16 + withCheckedContinuation 崩溃 + +[@Kyle-Ye](https://github.com/Kyle-Ye): 如果你的 App 在近期适配了 iOS 18 SDK 并切换到了 Xcode 16 打包,在 App 崩溃监控可能会发现部分 withCheckedContinuation 崩溃。 + +这里目前上游总结了两个问题: +- @backDeploy 实现修复,只影响 iOS app on macOS,被 #76218 修复在 Swift 6.0.1 上了(还没有相关正式版 Xcode 版本) + - 如果你的 App 有大量 iOS app on macOS 用户,可以等后续新 Xcode 版本放出后再升级 Xcode 16 系列,[社区总结的临时解决方案](https://github.com/RevenueCat/purchases-ios/issues/4177)是全部切换为 withCheckedThrowingContinuation 变体 +- 因为 iOS 18 Beta 上的 ABI 变更导致的 crash。这个 Apple 员工认为符合预期,且在最终的正式版 18.0 上不会有问题。但仍会影响 iOS 18.0 Beta 和部分 iOS 18.1 Beta。 + - 如果你的 App 有大量使用 Beta 系统的用户(>1%),建议也可以暂时延缓升级 Xcode 16.0 。 + +详细解释可以参考这篇 [Apple 员工回复](https://github.com/swiftlang/swift/pull/76218#issuecomment-2377064768)。 + +## 文章 + +### 🐕 🌟 [二刷 iOS 性能与编译,简单点说](https://mp.weixin.qq.com/s/X96VdTsskmNVCoqMzZjbgg) + +[@Leo](https://github.com/leomobiledeveloper):这篇文章是性能和编译相关的优质好文,文章内容覆盖了卡顿、内存、IO、CPU、启动、Bazel、构建等多个领域,每个领域下通过实践中遇到的问题展开,并给出了充分的代码示例,对想了解性能优化和编译构建领域的同学会很有帮助,推荐阅读。 + +### 🐎 [AVAudioEffectNode: painless low level audio effects written in Swift](https://orjpap.github.io/swift/low-level/audio/avfoundation/2024/09/19/avAudioEffectNode.html) +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 AVAudioEffectNode 的概念和用法,包括应用音频效果、创建自定义音效处理节点以及与其他音频节点的连接方法。作者提供了代码示例,展示如何配置和使用 AVAudioEffectNode,以便开发者可以在实时音频处理中轻松添加各种效果,如混响和延迟。通过这些实践,开发者能够增强音频应用的表现力和互动性。 + +### 🐎 [Copy On Write and the Swift-CowBox Macro](https://swifttoolkit.dev/posts/copy-on-write-cowbox) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 一篇关于 Swift Copy on Write 和 Swift-CowBox 原理分析的文章,并给出了 Swift-CowBox 的性能评测。 + +### 🐕 [Security-scoped bookmarks for URL access](https://www.avanderlee.com/swift/security-scoped-bookmarks-for-url-access/) + +[@水水](https://www.xuyanlan.com/categories/iOS/):本文介绍了 Security-scoped Bookmarks (Mac OS 上的安全区域书签)的在 URL 访问上的作用、使用范围和使用示例、以及使用时发现的一个由于 “ ScopedBookmarksAgent ” 引起的应用挂起的问题 ,虽然苹果已经在 macOS 15.1 beta 4 中修复,但是作者也提供了一个解决方案。 如果您有在 Mac 应用上存储给定 URL 资源的权限、并在后续使用中重新获得访问权限,可以使用安全区域书签功能来实现。 + +### 🐎 [Discover 3 new features of Xcode 16](https://www.swiftwithvincent.com/blog/discover-3-new-features-of-xcode-16) + +[@zoeGuo](https://github.com/zoeGuo):文章介绍了 Xcode 16 的三个新功能:新增“新建空文件”操作简化文件创建流程、支持直接粘贴代码块到项目导航器自动生成新文件;Asset Catalogs 新增查找引用功能,便于清理未使用资源;调试器推出 Backtrace 视图,优化堆栈跟踪的查看体验。 + +### 🐎 [Are Android apps THAT much smaller than iOS?](https://www.emergetools.com/blog/posts/are-android-apps-really-that-much-smaller-than-ios) + +[@Crazy](https://github.com/jiyan135960):本文是一篇对于新开发者的入门级文章,本文主要分析了为什么 iOS 应用在应用商店上展示的比 Android 应用在应用商店上展示的大出许多。文章首先言明了两个商店所使用的 Size 意义是不一样的,App Store 用的是安装大小,Goolge play 使用的是下载大小。之后又根据编译方式分析了两种 app 在编译与执行情况下的不同,并且给出了经过各种编译方式后安装到手机上的应用文件大小的对比图。最后文章也给出了关于 iOS 应用瘦身的一些建议,当然在产品的开发过程中,产物大小不能说明什么,但是良好的开发习惯与知识储备,确实可以令你的产物更小,更能节省用户的流量。 + +## 视频 + +### 🐎 [SwiftCraft 2024](https://www.youtube.com/playlist?list=PLugrLwuQvERqB4Kj8GOPwCnUMOLxJ0Ny9) + +[@Damien](https://github.com/ZengyiMa): 这是今年 SwiftCraft 2024 大会的视频地址,SwiftCraft 是英国一个新的 Swift 开发者大会,在这里你可以学到 Swift 开发中的各种技术,如用 Swift 开发 App/ 游戏,如何做 Mobile 的 DevOps 等等。 + +## 代码 + +### [apple-knowledge](https://github.com/hack-different/apple-knowledge) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):`Apple Knowledge` 是由 Hack Different 团队在 GitHub 上维护的项目,旨在提供关于苹果产品的逆向工程信息以及机器可读的苹果硬件数据库。该项目鼓励社区成员的参与,并且涵盖了多个技术领域,包括但不限于以下内容: + +- Apple Silicon 和 ARM 架构:介绍 Apple Silicon 及 ARM 架构的工具、编译器及安全缓解措施 +- 协处理器与底层硬件:包括 USB、NVMe、雷电接口等协议的分析,以及苹果神经引擎等协处理器的研究 +- 网络与无线协议:涵盖 AWDL(无线分发链路)、iCloud、蓝牙通信及远程通信协议 +- 越狱与安全研究:收录历史上的越狱工具和漏洞,例如 checkra1n 和 Fugu,以及与苹果系统保护相关的资源 +- 系统配置与诊断:包括苹果的日志系统、恢复模式(FDR)及工厂数据恢复等详细信息 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#309-2024.10.28.md b/Reports/2024/#309-2024.10.28.md new file mode 100644 index 000000000..580474b14 --- /dev/null +++ b/Reports/2024/#309-2024.10.28.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #309 | 2024-10-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/309.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [New requirement for app updates in the European Union](https://developer.apple.com/news/?id=yfacfeal) + +自 2024 年 10 月 17 日起(已经生效),在欧盟地区上架的 app 需要提供交易商身份信息,之后才能提交 app 。如果一直不提供交易商信息,则 app 会在 2025 年 2 月 17 日被下架。详见:[填写说明](https://developer.apple.com/help/app-store-connect/manage-compliance-information/manage-european-union-digital-services-act-trader-requirements/)。 + + +### [Apple Push Notification service server certificate update](https://developer.apple.com/news/?id=09za8wzy) + +这是一则前置通知:Apple 推送通知服务 (APNs) 的证书颁发机构 (CA) 即将改变。APNs 将于 2025 年 1 月 20 日更新沙盒环境的服务器证书,并于 2025 年 2 月 24 日更新生产环境的服务器证书。 + +大家可以等沙盒环境更新后再进行操作,建议在过渡期间同时保留新旧两份证书。 + +## 文章 + +### 🐢 [Elite Hoops Year One: 12 Bite-Sized Lessons](https://www.swiftjectivec.com/elite-hoops-gaining-users-as-an-indie-app-with-paid-ads-and-lessons-learned/) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文是一个独立开发者关于应用增长过程的思考,从初始的少量付费用户开始到市场分析思考共 12 条,可谓字字珠玑,对于正处于独立开发中的同学来说有不小的借鉴意义。 + +### 🐕 [swiftlang/swift-java](https://github.com/swiftlang/swift-java) + +[@Barney](https://github.com/BarneyZhaoooo):这个项目提供了 Swift 和 Java 互操作性的工具和库,允许 Swift 程序直接调用 Java API。还有一个 jextract-swift 工具,用于从 Java 源码中提取用于 Swift 调用的代码。项目处于早期开发阶段,依赖于特定的 Swift 和 JDK 版本。 + +### 🐕 [直接使用 xcodebuild 比 Xcode 慢的原因分析](https://github.com/wojciech-kulik/xcodebuild.nvim/issues/201#issuecomment-2423828065) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要讨论了 xcodebuild 工具相较于 Xcode 更加耗时的问题,xcodebuild 每次构建时向 Apple 的 API 发出了多个请求,响应时间较长,导致构建变慢,并且 xcodebuild 对每个目标逐个发请求,目标越多则效率差异越明显,作者提供了解决方法包括修改 hosts 文件和使用网络嗅探工具阻止请求。这些方法能显著提高构建速度,同时作者建议用户也提交反馈,以促使 Apple 修复此问题。 + + +### 🐕 [The Memory Leak: An Xcode Detective Story](https://www.emergetools.com/blog/posts/the-memory-leak-an-xcode-detective-story) + +[@莲叔](https://github.com/aaaron7):这篇文章讲述了作者从一个自己 app 遇到的 deeplink 的 bug 一步步的排查到问题的根源的过程。问题的根源虽然并不复杂,但触发点非常隐蔽,至少属于 CR 时很难发现的问题,值得关注。另外,过程中一步步讲述了作者自己排查的过程以及思路,对于刚入门的同学应该也有非常有帮助。 + + +### 🐕 [Beware UserDefaults: a tale of hard to find bugs, and lost data](https://christianselig.com/2024/10/beware-userdefaults/) + +[@xiaofei86](https://github.com/xiaofei86):在 iOS 15 “应用预热” 和 ”敏感数据解锁前不可访问(钥匙串等)“ 2 个系统功能的互相影响下,会出现 `UserDefaults.standard` 实例取到空的偶现问题。一但问题出现,程序可能认为是首次启动,进而用默认数据覆盖 UserDefaults,导致更严重的问题。作者总结了能够大概率复现的场景,并提供解决方案。同时也封装了 [TinyStorage](https://github.com/christianselig/TinyStorage) 用来替代 UserDefaults,感兴趣同学可以阅读原文了解。 + +### 🐕 [MoveMe - SwiftUI Edition](https://whackylabs.com/swift/swiftui/ios/animation/2024/09/12/moveme-swiftui-edition/) + +[@AidenRao](https://weibo.com/AidenRao):使用 SwiftUI 来处理手势和动画实际上并不像听起来那么直观,这篇文章讲解了如何实现正方形的拖动、缩放以及过渡动画效果,并解决了一些在实现过程中出现的问题。文章还提供了代码示例和 GitHub 链接供参考。 + +### 🐎 [So how does this whole @preconcurrency thing work?](https://www.massicotte.org/preconcurrency) + +[@DylanYang](https://github.com/Dylan19Yang):@preconcurrency 是一个新增的关键字,帮助开发者屏蔽并发相关的警告。在开发者往严格的并发框架逐渐迁移的流程上,有时会出现无法快速迁移,甚至无法迁移的情况,而 @preconcurrency 能够允许开发者忽略这部分警告,使得开发者能够增量的完成并发框架的迁移。本文介绍了 @preconcurrency 可以在哪些场景下帮助开发者处理这些问题,比如在一个 @MainActor 的类型里实现一个 nonisolated 的 protocol 场景,或是处理三方库中无法迁移到 concurrency 框架的代码等。有遇到类似问题的开发者可以阅读此文了解更多。 + +## 代码 + +### [ProtobufKit](https://github.com/OpenSwiftUIProject/ProtobufKit) + +[@kemchenj](https://kemchenj.github.io/):轻量跨平台 ProtoBuf Swift 解决方案,实现了基础的序列化 API,并且提供一套类似 Codable 的方案支持,对比原版 5.7MB 的二进制大小,这个版本只需要 142KB。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#310-2024.11.04.md b/Reports/2024/#310-2024.11.04.md new file mode 100644 index 000000000..0595d0e0d --- /dev/null +++ b/Reports/2024/#310-2024.11.04.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #310 | 2024-11-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/310.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [TestFlight 增强功能助你吸引测试员](https://developer.apple.com/cn/news/?id=fps422ld) + +TestFlight 分发功能迎来了加强,新增对测试员的招募标准,例如指定 OS 版本,方便在在 1w 的名额内,尽可能按 app 实际要求暴露问题,例如鼓励低 OS 的用户加入测试。同时还提供了公开链接的转化情况看板等新功能。总体是一次满足开发者们痛点的更新。 + +## 文章 + +### 🐕 [How to build a Safari extension with SwiftUI](https://www.polpiella.dev/safari-extensions-swiftui/) + +[@Barney](https://github.com/BarneyZhaoooo):Polpiella 在博客中分享了如何使用 SwiftUI 构建 Safari 扩展的步骤。首先,在 Xcode 中创建 Safari 扩展目标并修改 Info.plist 文件,设置工具栏项和网站访问权限。接着,利用 SFSafariExtensionHandler 创建 SwiftUI 视图,并通过 PopoverViewController 展示。最后,运行应用即可在 Safari 中安装并测试扩展。 + +### 🐎 [Phase Animator Behavior](https://chris.eidhof.nl/post/phase-animator/) + +[@AidenRao](https://weibo.com/AidenRao):在这篇文章中,Chris Eidhof 探讨了 PhaseAnimator 的工作原理。当视图的位置从 -100 更改为 -100 时,更新前后的节点完全相同,并不会产生任何动画,当没有具体的动画时,会立即调用动画的完成处理程序。换句话说,我们马上就进入了下一个阶段。 + +### 🐎 [Swift Macro 在业务开发中的探索与实践](https://juejin.cn/post/7428200842229055529) + +[@JonyFang](https://github.com/jonyfang): 结合模块化场景及曝光场景下的应用,通过模块宏能解决模块化通用模版定义的繁琐, 通过曝光宏能降低整个曝光体系接入的复杂度,本质上都是让 Swift Macro 帮助我们减少重复样板代码的编写,提供快速接入的能力。接入 Swift Macro 可以玩出很多花样,增加了代码的趣味性和可读性,降低了维护成本。 + +### [App development on iPad](https://mutatingfunc.github.io/blog/2024-10-12-app-development-on-ipad/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者在过去一年里,全面投入到使用 iPad 进行应用程序开发。这篇文章介绍了在 iPad 上使用 Swift Playgrounds 进行 iOS 应用程序开发的可能性和局限性(缺乏 Xcode 的某些功能,如断点调试和模拟器支持)。虽然还存在一些局限性,但通过一些创新的解决方案,这些问题都可以得到缓解。 + +### 🐎 [Vapor and Swift Testing: Running tests in parallel](https://www.avanderlee.com/swift-testing/vapor-and-swift-testing-running-tests-in-parallel/) + +[@Smallfly](https://github.com/iostalks):这篇文章探讨了在 Swift 和 Vapor 框架中如何进行并行测试。它解释了 Swift Testing 与 XCTest 的不同,并提出了使用 Repository Pattern 来避免测试中的数据库查询,以实现测试的并行执行。同时还介绍了如何配置和使用内存中的仓库进行测试,并重写代码以通过仓库访问数据,从而提高开发效率和测试稳定性。推荐对 Swift 服务端开发和测试的同学阅读。 + +### 🐎 [Reminder: Apple Watches use 32 bit pointers](https://jeffverkoeyen.com/blog/2024/10/02/arm64_32-PSA/) + +[@极速男孩](https://github.com/ztlyyznf001):Apple Watch 从 Series 4 起采用 arm64_32 架构,虽为 64 位系统,但用 32 位指针。开发者在 watchOS 模拟器中测试时 Int 为 64 位,而在实际硬件上 Int 为 32 位,导致模拟器运行正常的代码在硬件上可能崩溃。例如,处理时间戳的代码可能在 Apple Watch 上失败。所以要在处理 Int 和 CGFloat 时需注意这种差异,确保代码在硬件上也稳定运行。 + +### 🐎 [Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域](https://mp.weixin.qq.com/s/imRQnDJgHTdrcuD5rYQApg) + +[@Crazy](https://github.com/jiyan135960):本文主要介绍了 Flutter 在 3.10 版本里进行的颜色体系更改,首先介绍了 sRGB 和 P3 两种颜色体系的在色域上的区别,从肉眼上看 P3 的颜色更加鲜艳。紧接着文章便介绍了新版本的颜色体系,其中主要对颜色位数做了对比讲解,并且对源码也进行了分析。文章的最后作者更是对现有 API 的现状进行分析,更是对之后的 API 发展情况进行了介绍。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#311-2024.11.11.md b/Reports/2024/#311-2024.11.11.md new file mode 100644 index 000000000..88cfdb8e8 --- /dev/null +++ b/Reports/2024/#311-2024.11.11.md @@ -0,0 +1,62 @@ +# 老司机 iOS 周报 #311 | 2024-11-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/311.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Migrating Combine to AsyncAlgorithms](https://blog.jacobstechtavern.com/p/migrating-combine-to-asyncalgorithms) + +[@zoeGuo](https://github.com/zoeGuo):Swift Concurrency 发布以来,其设计在许多简单用例上大大超越了 Combine,而在 AsyncAlgorithms 发布之后,Combine 中的许多功能在 Swift Concurrency 中都可以使用。本文以一个示例项目为例,逐步演示了将 Combine 代码迁移到 AsyncAlgorithms 的过程,涵盖了数据源合并、流和节流、以及 CurrentValueSubject 到 AsyncChannel 的转换等常见场景。迁移后代码更简洁易读,易于维护;与 Swift Concurrency 无缝集成,享受异步编程的便利。 + +### 🐕 [Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar](https://www.nutrient.io/blog/swiftui-main-toolbar/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章主要探讨了在 SwiftUI 中使用主工具栏的实现方法。作者介绍了 SwiftUI 的 ToolBar 视图及其在 iOS 16 及以上版本中的应用,强调工具栏在提升用户体验和界面整洁性方面的重要性。文章通过示例代码展示了如何创建和自定义工具栏,包括添加按钮、分隔符以及响应用户交互的功能。此外,作者还讨论了工具栏的布局和风格设置,以及如何在不同设备上保持一致的用户体验。 + +### 🐕 [Faster iOS Networking with Shared Dictionary Compression](https://eisel.me/shared-dictionary-compression) +[@JonyFang](https://github.com/JonyFang): 共享字典压缩是一种有效加速 iOS 应用的网络性能的技术,通过在客户端和服务器之间共享数据字典来减少传输数据量。 + +## 工具 + +### [GitHub Copilot 官方发布 Xcode 插件](https://github.blog/changelog/2024-10-29-github-copilot-code-completion-in-xcode-is-now-available-in-public-preview/) + +[@kemchenj](https://kemchenj.github.io/):Xcode 在 AI 补齐的功能上一直落后其它 IDE/Editor,虽然今年 Xcode 也发布了 Code Completion Prediction 功能,但只有国外能用。终于终于,GitHub Copilot 官方在近日发布了 Xcode 插件,让我们也可以用上 AI 补齐的功能: + +- 代码补齐 +- 多语言支持,包含 Swift/Objective-C/C/C++/Metal +- 多行代码补齐 +- ... + +周报之前其实也介绍过一款国内工程师开发的 [Copilot Xcode 插件](https://github.com/intitni/CopilotForXcode),经过了解之后发现 GitHub 这次发布的插件其实是 fork 出来的,并且是[已经跟原版作者达成了协议](https://github.com/intitni/CopilotForXcode/discussions/597),GitHub 也[给了一点赞助金给作者](https://x.com/intitni/status/1851352010718880059)。 + +原版后续也会继续维护,而且就目前来说原版的功能甚至比 GitHub 版本更多更丰富。最后想说这大概是我入行以来看到最和谐的一次项目分叉了。 + +## 代码 + +### 🐕 [Metal-Puzzles](https://github.com/abeleinin/Metal-Puzzles) + +[@BluesJiang](https://github.com/bluesjiang):这个代码库提供了一些简单的习题,用来联系编写 Metal 的 Custom Kernel,可以利用在 MLX、Metal Shader 等场景下。对于想学习使用 Metal 加速计算、自己写 Shader 的可以下载下来跟着教程周走一遍。仓库提供了一个测试框架,需要写的代码注意是在 source 变量字符串里。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#312-2024.11.18.md b/Reports/2024/#312-2024.11.18.md new file mode 100644 index 000000000..da12d0560 --- /dev/null +++ b/Reports/2024/#312-2024.11.18.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #312 | 2024-11-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/312.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [We're forking Flutter. This is why.](https://getflocked.dev/blog/posts/we-are-forking-flutter-this-is-why/) + +[@极速男孩](https://github.com/ztlyyznf001): Flutter 社区在 Flutter 基金会的支持下,启动了名为 "Flock" 的 Flutter 新分支。此举是由于 Google 在处理桌面应用支持等方面的政策使一部分开发者感到不满,认为其发展速度和开放性不足。"Flock" 分支希望通过更加民主和包容的社区驱动模式,更好地响应开发者的需求。 + +### [A memory leak in Apple's Network Extension framework](https://obdev.at/blog/a-memory-leak-in-apples-network-extension-framework/) + +macOS 15.0 Sequoia 被发现会存在大量的内存泄漏(14.0 也存在,但是量级很小),你可以通过 ``sudo leaks at.obdev.littlesnitch.networkextension | grep "total leaked bytes"`` 来查询自己是否受到影响。如果确实有大量内存泄漏,可以通过杀死 ``at.obdev.littlesnitch.networkextension`` 进程来强制释放。 + +##  Developer - 设计开发加速器 + +### [案例研究:设计出色的 visionOS App](https://developer.apple.com/events/view/GV4QHX6VBJ/dashboard) + +与我们一起探索出色的 visionOS App,了解设计师是如何针对无边画布进行创作的。在为期半天的讲座中,你将了解如何采用沉浸式功能、为眼睛和手设计交互体验,并充分利用深度、比例和空间。 + +另外还有 [Apple Vision Pro 开发者实验室](https://developer.apple.com/events/view/ZJZ99TX978/dashboard) 的线下实验室,感兴趣的同学们可以积极报名。 + +## 文章 + +### 🐎 [Xcode stops fetching Swift packages](https://danielsaidi.com/blog/2024/11/04/xcode-stops-fetching-swift-packages) +[@Smallfly](https://github.com/iostalks):在 Xcode 16.1 中,Swift 包依赖突然无法获取,并出现 ` “ Fatal: cannot use bare repository ” ` 错误。经过排查,作者发现问题与 SourceTree 添加的全局 Git 配置 `safe.bareRepository = explicit` 有关。删除或注释掉该配置后,Xcode 恢复正常。 + +此配置的作用是提高安全性,建议不删除全局配置,而是通过命令手动标记相关仓库为安全: +```bash +git config --global --add safe.directory /path/to/repo +``` + +更详细的讨论可见 SPM 的 [issue 8068](https://github.com/swiftlang/swift-package-manager/issues/8068),以及对应的 [PR](https://github.com/swiftlang/swift-package-manager/pull/8106) 。 + + +### 🐕 [逆流而上的设计 - Swift 所有权和 ~Copyable](https://onevcat.com/2024/11/noncopyable/) + +[@zoeGuo](https://github.com/zoeGuo):Swift 5.9 中引入了不可复制类型的标记 ~Copyable(non-copyable),在今年的 Swift 6 中,之前类型扩展(extension)和泛型(generic)不支持 ~Copyable 的不足也得到了解决,~Copyable 的可用性得到了提升。文章用 ~Copyable 的工作方式、所有权转移关键字、在泛型或扩展中使用 ~Copyable,三个部分详细讲解了 ~Copyable 的概念、工作原理以及具体如何使用。作者在对 ~Copyable 的概念阐述中提到:“以往的协议是‘为类型增加功能’,而 ~Copyable 则是‘为类型解除限制’”,相信能帮助你更快理解 ~Copyable 协议。在文末:“只在确实需要独占资源或严格控制生命周期时才使用 ~Copyable,可能会是更加平滑和正确的方式”,也很好的总结了 ~Copyable 的使用场景。文中有大量代码例举以及内存管理的详细示意,强烈推荐阅读原文。 + +### 🐕 [THREADS IOS PERFORMANCE](https://atscaleconference.com/threads-ios-performance/) + +[@DylanYang](https://github.com/Dylan19Yang):本文是 Threads 开发讲述了 Threads 是如何优化 App 性能的。Threads 主要关注的性能指标包含了图片加载速度、网络内容的返回速度、发布成功率、页面加载耗时、发布可靠性等。本文对页面加载耗时和发布可靠性方面做了更深入的讲解,包括通过劣化实验推断页面加载耗时对业务数据的影响、提供 debug 工具帮助业务研发判断自己业务的性能水平以及发文草稿的磁盘占用对用户的体验影响等。本文对 Threads 各方面的性能监控、优化等都有涉及,想要优化自己 App 的读者可以细致阅读一下。 + +## 工具 + +### [screenshot-to-code](https://github.com/abi/screenshot-to-code) + +[@EyreFree](https://github.com/EyreFree):screenshot-to-code 是一个开源 AI 代码生成工具,能将设计稿截图、Figma 设计稿或网页模型快速转换为干净、可用的代码。该工具支持多种技术栈,包括 HTML+Tailwind、React+Tailwind、Vue+Tailwind、Bootstrap 等。它支持 Claude Sonnet 3.5 和 GPT-4o 等模型。且近期加入了实验性功能,可以将网页交互的视频 / 屏幕录制转换为功能性原型。用户可以通过 Docker 快速部署。对于需要快速将设计转换为代码的开发者来说,这是一个非常实用的工具,感兴趣可以尝试。 + +## 音视频 + +### 🐕 [SwiftConnection Videos, Material and Transcript](https://async.techconnection.io/frenchkit) + +[@Barney](https://github.com/BarneyZhaoooo):该网站提供了关于 Swift 编程语言的会议资源,包括视频、材料和演讲稿。会议内容覆盖 Swift 性能优化、AI 集成、嵌入式 Swift 应用、可访问性构建等多个技术领域。这个平台为 Swift 开发者提供了丰富的学习材料和交流机会。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#313-2024.11.25.md b/Reports/2024/#313-2024.11.25.md new file mode 100644 index 000000000..2b7468bd7 --- /dev/null +++ b/Reports/2024/#313-2024.11.25.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #313 | 2024-11-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/313.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Can't install any apps on my new iPhone 16 Pro with iOS 18 from Xcode](https://forums.developer.apple.com/forums/thread/764196?answerId=804884022#804884022) + +苹果的开发工程师对于从 Xcode 16 Beta/rc 升级到 Xcode 16 正式版用户会遇到无法安装 app 到 iPhone 16 系列手机的问题给出了解决方案:手动通过指令安装 XcodeSystemResources 。该问题在 Xcode 16.1 Beta 2 中修复。 + +``` +sudo installer -pkg /Applications/Xcode.app/Contents/Resources/Packages/XcodeSystemResources.pkg -target / +``` + +## 文章 + +### 🐎 [编译器,靠你了!使用类型改善状态设计](https://onevcat.com/2024/11/type-as-state/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者通过一个实际工作中碰到的端到端消息发送的例子,讲述了如何利用 Swift 的类型系统 , 将状态逻辑编码到类型中 , 由编译器来保证程序执行正确性,从而减少使用和维护的心智负担。 + +### 🐕 [MainActor usage in Swift explained to dispatch to the main thread](https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/) + +[@AidenRao](https://weibo.com/AidenRao):在构建应用程序时,在主线程上执行 UI 更新任务是至关重要的,而使用多个后台线程时可能会遇到点麻烦。使用 @MainActor 属性将有助于确保您的 UI 总是在主线程上更新。文章详细解释了什么是 MainActor,全局 actor 的概念,以及如何在 Swift 中使用 MainActor。 + +### 🐎 [Flutter vs. Kotlin Multiplatform: Which Should You Choose for Cross-Platform Development?](https://medium.com/@rushabhprajapati20/flutter-vs-kotlin-multiplatform-which-should-you-choose-for-cross-platform-development-4bcf28358918) + +[@Crazy](https://github.com/jiyan135960):从 React Native 开始,移动端的开发就发起了跨平台的改革,如今 Flutter,KMP,C++,都进入了跨平台的研发序列。本文主要对 Flutter 与 Kotlin 两个现今比较火的跨平台框架进行了对比。 + +Flutter 平台的优点主要为: + +1. 统一代码库 +2. 富有表现力和灵活的用户界面 +3. 快速的开发周期 +4. 强大的社区支持 + +KMP 平台的优点: + +1. 原生一般的性能 +2. 高互用性 +3. 高代码共享能力 +4. Google 的支持 + +总结一下:Flutter 主要用于项目启动、 MVP 功能、项目原型、有 UI 统一化的需求开发。KMP 主要用于大项目和已有代码库、需要高性能、需要多平台逻辑分享的功能开发。 + +### 🐢 [Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层](https://mp.weixin.qq.com/s/LW3bASRhA_HL6pS27qUVMA) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 本文从原理层讲解了 Overlay 和 OverlayPortal 之间的差异,并且对如何使用 OverlayPortal 做了更深一步的阐述,对于 Flutter 开发的小伙伴来说是一个不错的科普文! + +### 🐕 [Integrating Live Activity and Dynamic Island in iOS: A Complete Guide](https://canopas.com/integrating-live-activity-and-dynamic-island-in-i-os-a-complete-guide) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了关于在 iOS 中集成 Live Activities 和 Dynamic Island 的完整指南。它涵盖了如何创建和管理 Live Activities,以便在锁屏和应用程序上显示实时信息。此外,指南还介绍了如何利用 Dynamic Island 来增强用户体验,让用户能够方便地访问和交互实时通知和活动。可供开发者参考,实现更具动态交互的应用程序。 + +### 🐎 [Swift Format in Xcode](https://troz.net/post/2024/swift_format/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了在 Xcode 16 中首次集成的 swift-format 工具,swift-format 是和 swint-lint 类似的用于规范代码格式的工具。作者写了一段有问题的示例代码,并同时使用 swift-lint、Prettier 和 swift-format 进行代码自动矫正。从表现上来看 swift-format 并不如 swint-lint 一般全能,但是使用十分方便,也支持规则的自定义配置,在配置妥当后已经适用于大部分场景。同时作者也提到目前并没有官方的 Swift code style guidelines, swift-format 目前仅仅只指向了一个方向,具体的规则后面还有改动的可能。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#314-2024.12.02.md b/Reports/2024/#314-2024.12.02.md new file mode 100644 index 000000000..281e63877 --- /dev/null +++ b/Reports/2024/#314-2024.12.02.md @@ -0,0 +1,116 @@ +# 老司机 iOS 周报 #314 | 2024-12-02 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/314.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [AutoConsis:UI 内容一致性智能检测](https://mp.weixin.qq.com/s/VwnnYnyo9sCDdUuG4Mu1kQ) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了美团技术团队与复旦大学计算机学院合作开发的 AutoConsis 系统,这是一个自动化智能检测流程,用于检测移动 App 中 UI 界面内容的一致性。该系统通过目标区域识别、目标信息提取和一致性校验三个关键步骤,实现了低成本、高泛化性和高置信度的 UI 内容一致性检测。AutoConsis 在美团 App 的多类营销业务场景中得到应用,有效提升了 UI 质量保障,并在 ICSE 2024 会议上发表了相关论文。 + +### 🐎 [Lazy vars in @Observable classes in Swift](https://nilcoalescing.com/blog/LazyVarsInObservableClasses/) + +[@zoeGuo](https://github.com/zoeGuo):从 ObservableObject 协议迁移到 @Observable 宏时,如果之前使用 lazy 修饰了该类型的变量,那么迁移后将会遇到报错的情况。文中解释了这种情况并提出可以使用 @ObservationIgnored 来解决。 + +### 🐎 [Exploring Apple Intelligence: Writing Tools](https://www.createwithswift.com/exploring-apple-intelligence-writing-tools) + +[@EyreFree](https://github.com/EyreFree):本文介绍了 Apple Intelligence 新推出的 Writing Tools 写作工具功能。该功能集成于 Apple 生态系统中,可在 iOS 和 macOS 设备上使用,主要提供以下功能: + +- 智能校对:自动识别并修正语法和拼写错误 +- 文本重写:支持改写文本,可选择友好、专业或简洁的语气 +- 文本转换:将文本转换为要点、列表或表格(测试版暂未提供) +- 文本摘要:生成长文本的简明摘要(测试版暂未提供) +- AI 集成:支持 AI 辅助写作(测试版暂未提供) + +对开发者而言,Writing Tools 已自动集成到 SwiftUI 的 Text、TextField 和 TextEditor 等原生组件中。开发者可以通过 writingToolsBehavior 修饰符来自定义写作工具的行为,还可以在 UIKit 中实现更灵活的控制。这套工具已无缝集成到 Mail、Messages、Notes 和 Safari 等 Apple 生态系统应用中,显著提升了在这些应用中的写作体验。 + +### 🐕 [货拉拉 iOS 疑难 Crash 治理-系统键盘语音](https://juejin.cn/post/7396463744186515465) + +[@xiaofei86](https://github.com/xiaofei86):本文主要介绍了货拉拉解决系统键盘语音转文字崩溃的整个排查过程。通过崩溃类型、崩溃堆栈和偏移指令等信息,结合汇编指令调试,最终确定崩溃根本原因,并进行有效治理。感兴趣的同学可以阅读原文学习更多疑难崩溃的分析思路。 + +### 🐢 [Google Deepmind LLM 研究员解读 OpenAI o1 及 LLM+ 强化学习新范式 | 3 小时播客全文精华](https://mp.weixin.qq.com/s/i019cHmumJIviyLCDPI3sA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章是对一个长达 162 分钟播客内容的深入解读,该播客深入探讨了 OpenAI 的 o1 模型及其与 LLM(大型语言模型)和强化学习(RL)结合的新范式。以下是播客内容的主要总结: + +- 1. Agent 系统 + - 基础:推理能力是构建 agent 的基础,需解决 AI 间协作、竞争及任务分工。 + - 工具使用:关键在于提升模型对工具功能的理解和调用能力。 + - 构建要素:强大基础模型、高质量工具、优质 prompt 及学习使用工具的数据集。 + - 数据收集:理想方式是将数据标注嵌入用户日常工作流程。 + +- 2. 思维链(CoT)与强化学习(RL) + - 思维链:详细步骤提升模型表现,分显式(明确 token)和隐式(直觉思考)流派。 + - 强化学习:通过 agent 与 environment 交互和 reward 指引学习。 + - 模型反思:允许模型反思修正错误,显著提升 reasoning 任务表现。 + +- 3. AI 反馈系统与 Human in the Loop + - AI 优势:快速处理文本并总结,处理复杂评估任务有优势。 + - Human in the Loop:AI 简化复杂问题,人类做最终判断,提升可扩展性。 + +- 4. Multi-Agent 与角色分类 + - Multi-Agent:更像 multi-task,需角色分离,如 generator 和 critic。 + - 角色分离:通过不同 persona 实现,提升 multi-agent 系统效率。 + +- 5. Single-Agent 与 Multi-Agent + - Single-Agent:在达到超人类水平前,Multi-Agent 表现更优。 + - 过渡阶段:Multi-Agent 可能是过渡产物,未来趋向单一全能模型。 + +- 6. 数据与方法 + - 数据获取:高质量数据是训练关键,特别是在 reasoning 领域。 + - 合成数据:MCTS 等方法生成高质量合成数据。 + +- 7. 未来展望 + - 一年内:期待 coding 技能商品化,多模态 reasoning 突破。 + - 三年内:希望看到接近 AGI 水平的模型,解决所有问题。 + +- 嘉宾与主持人介绍 + - Kimi Kong:Google DeepMind 研究工程师,专注于强化学习。 + - Eric Li:Google Cloud 研究科学家,专注于 LLM 和 MCTS 结合的研究。 + - 苏辉:前微信 AI 研究员,现负责国内一线互联网公司的大模型训练。 + - Cage:原字节数据科学家,现拾象科技研究员。 + - Monica:美元 VC 投资人,前 AWS 硅谷团队和 AI 创业公司员工。 + +### 🐎 [Syntax Highlighting SwiftUI Code with Swift Syntax](https://sahandnayebaziz.org/blog/syntax-highlighting-swiftui-with-swift-syntax) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者总结了一些在使用 swift-syntax 时的经验和技巧 , 并最终在 DetailsPro 应用中实现了对 SwiftUI 代码实时更新的语法高亮显示功能。 + +## 代码 + +### [SwiftUIFX](https://swiftpackageindex.com/finnvoor/SwiftUIFX) + +[@bq](https://github.com/bqlin):SwiftUIFX 是一个 Final Cut Pro 插件,用于直接将 SwiftUI 视图渲染到视频中。该插件提供了一个容器,打通了从 SwiftUI 到 Final Cut Pro 上屏渲染的链路。项目创造性地解决了几个问题: + +1. 如何实现一个 Final Cut Pro 插件。 +2. 如何将 UI 绘制成支持输出到 Final Cut Pro 的数据帧(实现比我们想象的要简单😜)。 +3. 如何在外部使用 dylib 将我们编写的 SwiftUI 视图跑起来。 + +思路很有趣,逻辑较简单,是个很好的入门制作 Final Cut Pro 插件的契机。了解更多插件制作可浏览 [Apple 官方文档](https://developer.apple.com/documentation/professional-video-applications/preparing-plug-ins-for-use-in-final-cut-pro)。 + +### [NSDockTilePlugIn](https://github.com/marioaguzman/NSDockTilePlugIn-Example) + +[@Cooper Chen](https://github.com/cjlcooper):`NSDockTilePlugIn` 是一个用于在 Mac 开发中用于应用未运行时自定义 Dock 图标的插件。通过实现这个插件,开发者可以在应用程序未启动的情况下修改其 Dock 图标,并提供自定义的 Dock 菜单。插件的名称通过应用的 `Info.plist` 文件进行指定,并在登录时或图标被添加到 Dock 时加载。插件可以通过实现 `setDockTile(_:)` 来定制图标,并通过 `dockMenu()` 提供自定义菜单选项。当图标不再有效时(例如应用被移除出 Dock),插件会接收到 `nil` 参数进行销毁操作,这个插件对于部分 Mac 开发用不错的借鉴价值。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#315-2024.12.09.md b/Reports/2024/#315-2024.12.09.md new file mode 100644 index 000000000..4ae75ebdb --- /dev/null +++ b/Reports/2024/#315-2024.12.09.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #315 | 2024-12-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/315.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [CocoaPods Trunk Read-only Plan](https://blog.cocoapods.org/CocoaPods-Specs-Repo/) + +Cocoapods 为将 Specs 仓库转为只读状态制定了时间表,预计在 2026 年 12 月 2 日正式不再接受新的提交。 + +## 文章 + +### 🐕 [有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常 | 肘子的 Swift 记事本](https://fatbobman.com/zh/posts/the-anomaly-of-onchange-in-swiftui-multi-layer-navigation/) + +[@Barney](https://github.com/BarneyZhaoooo):本文探讨了 SwiftUI 中 `onChange` 的异常行为,特别是在多层导航的情况下。文章分析了在使用 `NavigationView` 和 `NavigationLink` 时,`onChange` 修饰符可能会出现的问题,尤其是当视图层级嵌套较多时。作者提供了几个实际示例,演示如何管理状态变化和确保 `onChange` 正常响应。同时,提供了一些最佳实践,以帮助开发者避免常见陷阱并提升应用性能和用户体验。 + +### 🐕 [Improving the approachability of data-race safety](https://github.com/hborla/swift-evolution/blob/approachable-concurrency-vision/visions/approachable-concurrency.md) + +[@Smallfly](https://github.com/iostalks):这篇文章提出了 Swift 并发特性面临的易用性挑战,包括过多的显式注释、数据竞争误报和异步代码编写困难。文中提出了解决方案包括减少并发注释、调整异步函数语义以减少误报、提供同步和异步代码之间的桥接工具,以及自动迁移代码等。目的是为了让 Swift 并发更易学易用,同时保持高性能。推荐给对 Swift 并发特性演进感兴趣的同学阅读。 + +### 🐎 [深入探讨 C++ 多线程性能优化](https://mp.weixin.qq.com/s/18TujefnTj-17GuNgmYW-Q) + +[@老驴](https://weibo.com/u/6090610445):这篇来自腾讯技术工程的文章从实际案例出发,深入探讨了 C++ 多线程编程中的性能优化问题,包括锁竞争、缓存一致性等难点,并通过详细的 benchmark 数据对比锁与原子操作的性能差异。此外,文章还介绍了如 Epoch Based Reclamation 等高级优化方法。无论是提升性能还是理解底层机制,这篇文章都值得一读。 + + +## 工具 + +### [Xcode + ChatGPT: Official Support is Available Now](https://medium.com/@hiandic/dc21998f3653?source=friends_link&sk=e4dfbadcc5281bd474ecd546b221877e) + +[@EyreFree](https://github.com/EyreFree):这篇文章介绍了 OpenAI 最新宣布的 ChatGPT for macOS 可以直接与 Xcode 集成的功能,除了 Xcode,该功能还支持 VS Code、TextEdit 和 Terminal 等开发工具。使用该功能需要按以下步骤: + +- 目前该功能仅向 ChatGPT Plus 和 Team 用户开放请先确保条件符合,Enterprise 和 Edu 用户将在近期获得访问权限 +- 确保 ChatGPT for macOS 应用已更新到最新版本 +- 在 ChatGPT 设置中启用 `Enable Work with Apps` 选项以获取辅助功能权限 +- 使用快捷键 Option + Space 打开 ChatGPT 聊天栏 +- 点击 `Work With Apps` 按钮并选择 Xcode + +通过这种集成,ChatGPT 可以直接查看和理解开发者的代码库(Codebase),从而提供更准确的回答和建议。作者以开发 SwiftUI 动画的卡片翻转游戏为例,展示了这个新功能的应用。AI 辅助编程近来发展迅速,这次与 Xcode 的原生集成让开发体验更加流畅,标志着 AI 编程助手进入新阶段。 + +### [Easydict: 一个简洁优雅的词典翻译 macOS App](https://github.com/tisfeng/Easydict) + +[@Cooper Chen](https://github.com/cjlcooper):Easydict 是一个开源的词典翻译 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果,目前支持市面上绝多数主流的翻译 App,使用者可以通过 Homrebrew 快速安装使用,Easydict 支持鼠标滑词、OCR 识别等功能,是 Mac 平台上非常高效的翻译软件,值得推荐。 + +## 代码 + +### [swift-sharing](https://github.com/pointfreeco/swift-sharing) + +[@bq](https://github.com/bqlin):如其名,sharing,你能想到的状态共享,跨模块间的状态共享、持久化、观察监听,它都做了,无论是实现业务逻辑、Combine、SwiftUI、UIKit 都能无痛接入。关键人家实现还非常优雅,宏、属性包装器、清晰的职责实现,都是很优秀的实践,单单接入就能让你的代码耳目一新了。还是那句话,Point-Free 出品,必属精品。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 比图科技 - 高级 iOS 工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#316-2024.12.16.md b/Reports/2024/#316-2024.12.16.md new file mode 100644 index 000000000..cd625f40b --- /dev/null +++ b/Reports/2024/#316-2024.12.16.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #316 | 2024-12-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/316.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐢 [Flutter 3.27 发布](https://mp.weixin.qq.com/s/gQ5u1m7hudyoa-HeLyMKlw) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): Flutter 3.27 悄悄的就来了,该版本包含了大量更新,包括: + +- Cupertino 相关组件的大量优化 +- Material 下的一些主题和控件调整,包括之前我们聊过的 Row and Column spacing +- Android Impeller 默认开启和 iOS 性能优化 +- P3 色域的 UI 支持 +- Web 下的大量改进 +- Swift Package Manager 的支持 +- 之前聊过的 Edge to Edge 和 Android Freeform 支持 +- pub 下载数 +- DevTool 工具大改进和优化,包括设备断线数据保持 +- 对老 Dart SDK 插件不再维护适配,弃用 OC + +## 文章 + +### 🐕 [Prevent screenshot capture of sensitive SwiftUI views](https://www.createwithswift.com/prevent-screenshot-capture-of-sensitive-swiftui-views/) + +[@BluesJiang](https://github.com/bluesjiang):这篇文章使用了一个比较巧妙的方法来实现截屏隐藏隐私信息。核心是使用 `UITextField` 的 `isSecureTextEntry` 属性,然后将被包装的 View 作为其子 View 即可。然后使用了 preference 来实现父容器大小与子容器大小匹配。可以通过这个文章整体了解 SwiftUI 的 View 的包装和 Modifier 的写法,是一个很好的参考。 + +### 🐕 [Why Can't You Loop Over Ranges of Characters in Swift](https://mfaani.com/posts/swift/why-cant-you-loop-over-ranges-of-characters-in-swift/) + +[@bq](https://github.com/bqlin):当你对 `"a"..."z"` 执行 for 循环遍历时,你会惊讶地发现 Swift 并不支持的,虽然这有点违反常理。这篇文章你将了解到 Swift 字符并不是简单的 ASCII 字符,而是可变长的 Unicode 字符,其在不同的语言环境有不同的排序,不断迭代的 Unicode 也在不断地扩充字符范围,甚至有些字符是集群的时候,遍历、计数将变得不太可能。文章也介绍了 Unicode 这么设计背后的意图,以及当你硬要遍历一个字符范围时候,作者也给出了一个比较安全的解决方案。 + +### 🐕 [WebKit GPU Profiling](https://developer.playcanvas.com/user-manual/optimization/gpu-profiling/) + +[@莲叔](https://github.com/aaaron7):WebGL 的 debug 一直以来都是一个令人头痛的问题,通过浏览器内置的调试能力能够满足一部分需求,但如果需要更进一步的分析往往都缺乏足够好用的工具。这篇文章针对 WebGL 和 WebGPU 两种应用在不同平台的调试技巧做了汇总,包括 Mac、Window 和 Quest。其中对于在 Mac 上通过 Xcode 来做分析给出了 step by step 的步骤,非常友好。 + +### 🐕 [Concurrency Step-by-Step: Reading from Storage](https://www.massicotte.org/step-by-step-reading-from-storage) + +[@Barney](https://github.com/BarneyZhaoooo):本文提供了关于如何在 Swift 应用中逐步从本地存储读取数据的详细指南。文章重点介绍了如何使用 `Codable` 协议来序列化和反序列化对象,并通过 `FileManager` 管理文件的读取和写入。作者逐步解析了实现这个过程的关键步骤,包括如何设置数据模型、保存数据以及从文件中加载数据的示例代码。此外,文章还提供了常见问题的解决方案,以帮助开发者更有效地处理数据存储。适合想要深入理解 iOS 数据存储机制的开发者阅读。 + +## 代码 + +### [rmtrash](https://github.com/TBXark/rmtrash) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Swift 实现的 macOS 命令行工具 rm 的替代方案,用于将文件移动到废纸篓。此外 rmtrash 提供了与 Linux 和 macOS 版本 rm 命令完全兼容的标志位支持方案。 + +### [ml-cross-entropy](https://github.com/apple/ml-cross-entropy) + +[@Leo](https://github.com/LeoMobileDeveloper):由 Apple 开源的 CCE(Cut Cross-Entrop) 是一种优化小模型(SLM)训练过程中内存消耗的代码库,以 Gemma 2 (2B) 为例,能够将内存从 24GB 优化到 1MB,显著提高小模型的训练速度。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京] 支付宝-终端业务研发专家(支付碰一下) - iOS/Android - P7 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#317-2024.12.23.md b/Reports/2024/#317-2024.12.23.md new file mode 100644 index 000000000..ce19f833b --- /dev/null +++ b/Reports/2024/#317-2024.12.23.md @@ -0,0 +1,100 @@ +# 老司机 iOS 周报 #317 | 2024-12-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/317.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +##  Developer - 设计开发加速器 + +### [展望未来:打造出色的 visionOS App(线下)](https://developer.apple.com/events/view/F7QL84UKJV/dashboard) + +参加在上海 Apple 开发者中心举办的为期一天活动,了解如何打造出色的 visionOS App。 + +你将通过三个讲座学习如何开始使用 SwiftUI,探索一流的 App,并深入了解 RealityKit 和 Reality Composer Pro。随后,你还将听取开发者社区成员的分享,并有机会体验一系列 visionOS App 示例。 + +## 文章 + +### 🐕 [得物 iOS 函数调用栈及符号化调优实践|得物技术](https://mp.weixin.qq.com/s/KSAZRfqYmBPuooXJM5qn0A) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了得物技术团队如何解决 iOS 隐私合规检测的性能难题。文章详细解析了 `+[NSThread callStackSymbols]` 的内部机制,并通过逆向工程优化了调用栈的获取与符号化过程。实现包括自定义 `callStackSymbols` 方法、缩短堆栈长度以及智能缓存策略,显著降低了 CPU 占用,提升了检测效率。为 iOS 开发者提供了优秀的性能优化实践案例。 + +### 🐕 [Exploring Apple Intelligence: Image Generation](https://www.createwithswift.com/exploring-apple-intelligence-image-generation/) + +[@Cooper Chen](https://github.com/cjlcooper):Apple 推出了几款创新的图像生成工具,推动个性化创作和数字交流。Image Playground 允许用户通过文本和视觉提示生成图像,并与 PencilKit 集成,带来 Image Wand 功能,让用户将手绘草图转化为精美图像。同时,Genmoji 让用户根据文本描述生成个性化表情符号,增强了数字沟通的表现力。这两款工具不仅注重创意自由,还在包容性和版权合规性上做出了努力。此外,开发者可以将这些功能集成到应用中,扩展数字创作的可能性。而这篇文章为数字创作和个性化互动提供了不错的参考,展示了 Apple 工具如何为用户和开发者带来创意支持。 + +### 🐕 [Apple' s use of Swift and SwiftUI in iOS 18](https://blog.timac.org/2024/1208-state-of-swift-and-swiftui-ios18/) + +[@ZengyiMa](https://github.com/ZengyiMa):这篇文章分析了苹果在 iOS 18 中 Swift 和 SwiftUI 的使用情况。iOS 18 中使用 Swift 和 SwiftUI 的应用数量持续增长,甚至在安全固件的低级别部分开始使用 Swift。此外,新开发的技术,如 Apple Intelligence,也依赖于 Swift。截止目前,iOS 18 现在包含 592 个使用 SwiftUI 的二进制文件,Swift 代码的二进制文件数量相比较 iOS 17 增加了 50%。 + +### 🐎 [JDImage - 京东自研鸿蒙图片库](https://juejin.cn/post/7444800867030286371) + +[@Crazy](https://github.com/jiyan135960):JDImage 是京东使用 C++ 打造的一款跨平台的图片加载框架,主要解决系统和其他第三方加载组件的问题,比如加载速度较慢,格式支持不全等。JDImage 在架构上借鉴了 SDWebImage 与 Glide 等图片加载框架,将整体图片库分解为:图片缓存、解码器、图片源拉取、性能监控、图片组件五个部分,使用流水线设计灵活调整执行流程,满足各类的图片加载需求。最后关于 C++ 的跨端代码要根据自己项目的实际情况进行选择,使用之前对错误的捕捉与升降级一定要事先准备好。 + +## 工具 + +### 🐕 [HuggingChat macOS](https://github.com/huggingface/chat-macOS) + +[@EyreFree](https://github.com/EyreFree):HuggingChat macOS 是一款原生 macOS 聊天应用,由知名 AI 开源社区 Hugging Face 开发。该项目将先进的开源语言模型能力集成到桌面端,为用户提供流畅的 AI 对话体验,可以简单理解为 ChatGPT 客户端的本地大模型版。 + +- 原生体验:专为 macOS 设计,支持全局快捷键(⌘ + Shift + Return)快速唤起; +- 语音支持:支持实时同声传译(OpenAI Whisper); +- 易于安装:提供直接下载和 Homebrew 安装两种方式; +- IDE 集成:通过 VSCode 扩展支持代码上下文理解,提供更准确的编程建议; +- 开源透明:基于 Swift 开发,代码完全开源,支持社区贡献; +- 使用门槛低:仅需 macOS 14.0 以上系统即可运行,安装即用。对于开发者,项目提供完整的开发文档和贡献指南。 + +作为 Hugging Face 出品的官方客户端,该项目让优质开源 AI 模型触手可及,为想要摆脱商业 AI 服务的用户提供了绝佳选择。项目活跃度高,安装简单,值得一试。 + +### 🐢 [Skip: Build native apps for iPhone and Android with Skip](https://skip.tools) + +[@bq](https://github.com/bqlin):通过 Skip 项目,你可以使用 Swift 同时编写 Android 和 iOS 原生应用。没看错,Swift 也有反客为主的一天了。Skip 项目的基本原理是:当你在编写 Swift 和 SwiftUI 源代码时,Skip Xcode 插件会不断构建用于 Android 的等效代码,因此最终 App 产物都能获取原生的性能和原生的交互体验。 + +- 真正原生:与其他跨平台方案相比,Skip 项目是真正的原生代码。当编写 SwiftUI 代码时,将生成 Android 的 Jetpack Compose。 + +- 完全透明:使用 Skip 时,不会在调试器中隐藏任何信息。Skip 库是开源的,也没有复杂的运行时需要调试。 + +- 轻量:使用 SkipZero,iOS App 不依赖任何 Skip 框架;Android 也仅需几个 Skip 开源库。 + +- 内存效率:无额外的托管运行时,Skip App 在两个平台都可能地高效。 + +- 熟悉的 IDE:Skip 使用 Xcode IDE 进行编写,是 Swift 的首要开发环境。当需要高度自定义的 Android 能力时,则需在 Android Studio 中编写 Kotiln。 + +- 完美整合:Skip 与 Kotlin 和 Compose 无缝衔接,因此也很轻松集成 Android 三方库。 + +- 框架开放:Swift-on-Android 只是开始,Skip 的开发框架都是免费开源的。 + +- CI 友好:支持跨平台的单元测试,确保逻辑在跨平台中保持一致。也支持在本地或远程执行测试。 + +- 容易迁移:代码都是你自己的,包括 Swift 输入和 Android 输出,因此不会持续依赖 Skip 工具。 + + +值得注意的是,虽然框架源码是开源的,但 Xcode 转译器插件针对大型商用还是需要收费的。 + +## 代码 + +### [SwiftUI-experiments](https://github.com/mikelikesdesign/SwiftUI-experiments) + +[@DylanYang](https://github.com/Dylan19Yang):作者是一个爱好自己通过代码实现创意的设计师,他通过 SwiftUI 实现了不少有创意的交互设计,并且都提供了原型 Demo。独立开发者们如果希望尝试一些有特色的交互的话可以参考参考。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2024/#318-2024.12.30.md b/Reports/2024/#318-2024.12.30.md new file mode 100644 index 000000000..b163f1709 --- /dev/null +++ b/Reports/2024/#318-2024.12.30.md @@ -0,0 +1,70 @@ +# 老司机 iOS 周报 #318 | 2024-12-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/318.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [阿权](https://github.com/bqlin) 加入老司机技术,就职于字节剪映团队,喜欢音视频和图像处理,做过许多翻译和 WWDC 内参,热爱摇滚与爵士。喜欢文艺喜欢电影,曾经幻想诗与远方,却囿于昼夜、厨房与爱。 + +**希望 阿权 的加入也能为大家带来更多元化的内容输出!** + +## 文章 + +### 🐕 [Calling Hidden Swift Functions](https://www.emergetools.com/blog/posts/calling-hidden-swift-functions) + +[@AidenRao](https://weibo.com/AidenRao):这篇博文介绍了在 Swift 中调用隐藏函数的方法。Swift 中有 6 种访问级别,从 open 到 private。但是,用 Swift 编写的 Apple 框架(尤其是 SwiftUI)包含供其他 Apple 框架使用但不供第三方应用程序使用的 API。文章探讨了如何在自己的代码中调用这些函数以使用隐藏功能。 + +### 🐕 [Be careful wrapping a throwing function in a Task](https://www.swiftwithvincent.com/blog/be-careful-wrapping-a-throwing-function-in-a-task) + +[@Barney](~https://github.com/BarneyZhaoooo~):本文讨论了在 Swift 中将抛出函数包装在 `Task` 中时需要注意的事项。直接在 `Task` 中调用抛出函数可能导致不如预期的行为,因为 `Task` 默认会捕获并处理错误。作者举例说明了如何正确使用 `Task` 来执行抛出函数,并提供了实现的最佳实践,以确保错误被适当地处理。同时,文章还强调了在并发编程中理解错误处理的重要性,帮助开发者避免引入难以调试的问题。适合希望深入了解 Swift 并发特性与错误处理的开发者。 + +### 🐎 [Enhance Xcode Previews with Unit Test Coverage](https://www.emergetools.com/blog/posts/unit-test-xcode-previews/) + +[@DylanYang](https://github.com/Dylan19Yang):本文介绍了如何利用单元测试加强 Xcode Previews 能力的可靠性。Xcode Previews 是一个非常方便的开发工具,但是它在有些时候也非常脆弱,如果有人在一个 view 上添加了 `@EnvironmentObject` 标志,所有调用到这个 view 的 preview 场景如果没有注入这个变量就会发生 crash。在代码量较少时还能及时发现,但是在一个庞大的项目中,view 的层级很深的话很难完全覆盖到所有需要修复的 preview 场景。而借助一个三方的 SnapshotPreviews 框架,它能够自动帮助我们在运行时查找所有实现了 PreviewProvider 的 preview 并添加到单元测试中进行执行。这样可以非常轻松的确保我们的 preview 都能成功运行了。 + +## 代码 + +### MetalLibraryArchive + +MetalLibraryArchive 是一个 Apple 的 metallib 的逆向库,可以解析出 metallib 的 library 类型,目标平台和包含的所有函数。 + +函数的信息包含了: + +- 函数名 +- 函数类型 - 例如 vertex/fragment/kernel 等等 +- Metal Shading Language 的版本 +- 函数的 bitcode 等效表达式(底层使用 llvm-dis) +- 函数源码(如果 metallib 包含了源码的话) + +另外也提供了一个[在线的 demo](https://yuao.me/MetalLibraryExplorer/),对于想要逆向 Metal 的朋友来说是非常有用的工具。 + +## 音视频 + +### 🐎 [为什么 C 口数据线越来越乱?](https://www.bilibili.com/video/BV1j7zzYGEp9/) + +[@极速男孩](https://github.com/ztlyyznf001):苹果在 2023 的 iPhone15 中首次才用了 USB-C 作为数据线,不少用户会发现在有些 Android 的充电线在 iPhone 上无法实现快充或者无法充电。这个视频主要介绍了 USB-C 协议这些年来的混乱的标准和不同公司使用的各种快充协议。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#319-2025.01.06.md b/Reports/2025/#319-2025.01.06.md new file mode 100644 index 000000000..44b4ac39c --- /dev/null +++ b/Reports/2025/#319-2025.01.06.md @@ -0,0 +1,62 @@ +# 老司机 iOS 周报 #319 | 2025-01-06 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/319.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [聊聊 Flutter & Dart 里的内存泄漏和优化,也许没你想的那么复杂](https://mp.weixin.qq.com/s/_88yMWWkLI6fFPHhqMdc2w) + +[@Crazy](https://github.com/jiyan135960):本篇文章简单的聊了一下有关 Flutter 的内存泄漏问题,主要从持续引用和全局引用两个方面为大家讲解了一下 Flutter 最容易引起内存泄漏的几个地方。全文很短,作者集中测试了 Timer 与 AnimationController 两个类在引用上的区别,以及如何处理这两个类造成的内存泄漏问题。在 Android 与 iOS 原生应用的开发中,已经有成熟的框架来减少 context 导致的内存泄漏的问题了。同时也期待 Flutter 有一天可以开发出类似的框架,来解决关于 context 引用的问题。 + +### 🐕 [百度 APP iOS 端磁盘优化实践(上)](https://mp.weixin.qq.com/s/YNd8-NKVdql3pRNImwxyTA) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):在 APP 开发中,磁盘管理已成为不可忽视的部分。随着功能的复杂化和数据量的快速增长,高效管理磁盘空间直接关系到用户体验和 APP 性能。本文围绕百度 APP 的磁盘清理问题,从 iOS 沙盒文件存储机制出发,系统性地阐述了磁盘管理的重要性和技术实现。通过自动清理与手动清理的结合策略,以及多维度触发机制和灵活的用户交互设计,平衡了系统性能与用户体验。 + +### 🐎 [Preventing Accidental API Breaks: A Swift Developer's Guide to API Diffing](https://www.adyen.com/knowledge-hub/swift-api-diff) + +[@DylanYang](https://github.com/Dylan19Yang):在 SDK 的维护过程中,检测是否有 API 破坏性变更的发生是非常重要的一件事。作者提供了三种方式用于这类检测。一是通过 swift package 自带的工具,但是对 iOS target 使用会有异常,第二种方式是结合 xcodebuild 和 swift-api-digester,第三种则是作者开源的一个工具 Swift Public API Diff,它的优点是输出结果的可读性更好。同时作者也给出了一些维护 API 稳定性的建议。感兴趣的读者可以阅读本文了解更多。 + +### 🐢 [Compile Metal shader Bitcode to x86 and ARM assembly](https://worthdoingbadly.com/metalbitcode/) + +[@ChengzhiHuang](https://www.github.com/ChengzhiHuang):作者通过逆向的手段研究了从 metal 代码到 air 文件([LLVM Bitcode](https://llvm.org/docs/BitCodeFormat.html)),最后到 metalib 文件(产物)的过程,期间根据经验进行合理猜测验证,通过寻找原始函数字符串、magic number 、长度偏移量 等还原了文件的结构,并最终提供了将 metalib 文件重新 disassemble 为 air 文件的脚本。 + +最后作者还尝试直接使用 LLVM 将 air 文件重新 compile 成最终的 ARM/x86 的机器码,尽管这些最终产物并不适合直接提交给 GPU 运行,但是也证明了 LLVM 是可以处理来自 metal 的 Bitcode 的。 + +内容与过程非常翔实,推荐工作中需要与 Metal 打交道的同学阅读。 + +前置知识:LLVM 是三段式的设计,而 LLVM 会将 IR 转为 Bitcode ,Bitcode 依旧是可以兼容多平台的中间代码,因此可以最终翻译为各个平台的代码。 + +### 🐢 [什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap](https://mp.weixin.qq.com/s/oiwfzBiednsQQgSCG-K_0g) + +[@CrazyCoderShi](https://github.com/CrazyCoderShi): 如标题所言,Flutter 的 UI 组件编码方式一直被开发者们所诟病,本文通过对与 SwiftUI 和 ArkUI 以及参考 Flutter 新一年的 roadmap 做出了一些简单类比。在小编看来这不失为是一个代码结构的优化,毕竟末尾的 '括号山' 还是很高的。 + +## 代码 + +### 🐢 [Home Assistant iOS](https://github.com/home-assistant/iOS) + +[@阿权](https://github.com/bqlin):Home Assistant iOS 客户端,代码全部开源。Home Assistant 是一款开源的智能家居自动化平台,允许用户控制所有连接到同一网络的智能家居设备。项目文档详实,甚至面向零基础用户,了解该项目是入门智能家居的最佳实践。了解各平台能力对比可阅读 [Home Assistant Feature overview](https://companion.home-assistant.io/docs/core/)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#320-2025.01.13.md b/Reports/2025/#320-2025.01.13.md new file mode 100644 index 000000000..7b9fc6b0f --- /dev/null +++ b/Reports/2025/#320-2025.01.13.md @@ -0,0 +1,64 @@ +# 老司机 iOS 周报 #320 | 2025-01-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/320.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐎 [Algorithm changes to server connections for Apple Pay on the Web](https://developer.apple.com/news/?id=2x8awlvm) + +[@Damien](https://github.com/ZengyiMa):从 2025 年 2 月 4 日开始,苹果将改变支持 Apple Pay 在 Web 上的服务器连接的安全算法。为了保持服务不间断,你需要确保你的生产服务器在这个日期之前支持指定的[六种密码之一](https://developer.apple.com/documentation/apple_pay_on_the_web/setting_up_your_server#overview)。 + +## 文章 + +### 🐕 [Xcode Library customization with SPM plugin](https://www.artemnovichkov.com/blog/xcode-library-customization-with-spm-plugin) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文探讨了如何通过 Swift Package Manager 插件自动将自定义 SwiftUI 视图和修饰符集成到 Xcode Library 中。 + +通过实现 `LibraryContentProvider` 协议,开发者可以将自定义组件引入库中,提升可重用性和发现性。然而,手动维护这些集成可能会很繁琐。作者通过利用 SwiftSyntax,开发了一份插件来自动化此过程,这种方法简化了将自定义组件集成到 Xcode 库中的过程,减少了手动操作和潜在错误。 + +### 🐕 [数据编织在AB实验自动化中的应用 | 京东零售技术实践](https://mp.weixin.qq.com/s/NMPot2AfEtsWXVPowZBDOA) + +[@Barney](https://github.com/BarneyZhaoooo):本文讨论了数据编织在 AB 实验中的应用,强调其重要性以及面临的数据科学性、一致性和时效性挑战,并提出相应的自动化解决方案。内容涵盖数据编织的管理理念、逻辑数据平台构建、标准语义建立及自动编排等关键技术。最后,展示了 AB 实验链路的自动化实施进展及未来规划,强调提升交付效率和数据治理的必要性。 + +### 🐢[使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南](https://mp.weixin.qq.com/s/3qDQJXXiVl9gF-q5KtbxVw) + +[@阿权](https://github.com/bqlin):文章本是 APMPlus 的软文,一套全面的性能监控的解决方案,但偏偏还为大家罗列了 21 条内存管理的最佳实践,并介绍了 OOM 监控的基本原理与手段。干货满满,都是我们日常开发中高频遇到的场景,或许它能成为内存问题踩坑时的自查小册。 + +### 🐕 [What happens when you move a file in git?](https://swiftrocks.com/what-happens-when-you-move-a-file-in-git) + +[@JonyFang](https://github.com/jonyfang): 文章主要介绍了在 Git 中移动或重命名文件及文件夹时的内部工作原理,包括文件以快照形式存储、文件夹与提交的关联、重命名或移动操作对存储的影响及优化方法,还提及了大文件的特殊处理情况。文中对 Git 文件的操作机制的介绍,对日常开发中文件结构调整会有帮助,降低因操作不当引发的仓库性能问题风险。 + +## 代码 + +### 🚧 [Now we’re all Forked!](https://appdecentral.com/2024/12/13/now-we-are-all-forked) + +[@Cooper Chen](https://github.com/cjlcooper):Forked 是一个简化共享数据管理的 Swift 工具,专为多设备数据同步和冲突解决设计。借鉴 Git 的分支和合并机制,Forked 能轻松实现三方合并(3-way merge),并自动处理并发冲突。该工具支持与 iCloud 等云服务同步,确保跨设备的数据一致性,并通过简洁的 API 帮助开发者快速实现数据合并和冲突解决。无论是离线编辑还是实时协作,Forked 都能提供高效、可靠的数据管理方案。如果你需要在应用中实现智能数据同步和冲突解决,Forked 是一个理想选择。了解更多并开始使用 Forked,查看官方文档:[Forked GitHub 仓库](https://github.com/drewmccormack/Forked)。 + +### 🐢 [解密小红书与美团的合作案例](https://www.xiaoyuzhoufm.com/episode/676e5d051e823e72d332d12e) + +[@EyreFree](https://github.com/EyreFree):播客主要探讨了小红书与美团两大平台的战略合作,美团正在寻求从单纯的效果营销转向更注重品牌价值和用户心智的增长方式,而小红书则凭借其独特的内容生态和用户群体特征,成为流行生活趋势的策源地。双方合作的核心在于优势互补:美团有流量但缺乏优质内容,小红书拥有丰富的 UGC 内容但需要商业变现出口。这次合作反映了内容平台与交易平台的融合趋势,也展示了"反漏斗模型"在实际商业场景中的应用。虽然可能离具体的技术开发较远,但对互联网商业逻辑感兴趣的朋友可以听一下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#321-2025.01.20.md b/Reports/2025/#321-2025.01.20.md new file mode 100644 index 000000000..3c3602edb --- /dev/null +++ b/Reports/2025/#321-2025.01.20.md @@ -0,0 +1,85 @@ +# 老司机 iOS 周报 #321 | 2025-01-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/321.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +这就是春节前最后一期周报啦,下周老司机编辑部也会开始春节假期,提前祝大家新春快乐! + +## 文章 + +### 🌟 🐎 [探究 SwiftUI Preview 的工作原理](https://onee.me/zh/blog/how-new-xcode-swiftui-preview-works-under-the-hood/) + +[@JonyFang](https://github.com/jonyfang): 在 SwiftUI 开发中,Xcode Preview 常出现崩溃或卡死问题,如果不了解其工作原理,通常只能用清除缓存、重启 Xcode 等方法解决。作者通过将 DerivedData 文件夹加入 Git 管理,观察其变化来研究 Preview 原理。其运行机制上,Xcode 16 起 Build and Run 与 Preview 共享构建产物,Preview 用 JIT 方式运行且有特殊预处理过程。Preview 有 Small、Middle、Large 三种重构建策略,依源代码修改程度决定范围与刷新方式。与 Flutter 的 Hot Reload 相比 Xcode Preview 的表现逊色,不支持断点调试,视图状态会重置,实现更黑盒,但仍期待 Xcode 后续对 Preview 优化。 + +### 🐢 [Using Copilot to write a raindrop audio synthesizer using AVAudioEngine](https://www.cocoawithlove.com/blog/copilot-raindrop-generator.html) + +[@EyreFree](https://github.com/EyreFree):本文分享了作者使用 GitHub Copilot 开发一个用 AVAudioEngine 实现的雨滴音频合成器的经历。文章评估了 Copilot 在实际开发中的优缺点: + +优点: +1. 在处理不熟悉的 SDK 时能快速提供解决方案; +2. 能实现复杂算法(如粉噪音生成); +3. 擅长跨语言代码转换(如 C++ 到 Swift)且基本不会产生语法错误。 + +缺点: +1. 代码质量欠佳,存在大量重复和不必要的抽象,常忽略指令的部分要求; +2. 对最新的语言特性支持不足,线程安全处理不当; +3. 手动修改代码后容易与 Copilot 聊天上下文不同步。 + +使用 Copilot 就像在指导一个热情但经验不足的新手程序员,虽然在某些场景下能提高效率,但需要权衡使用 Copilot 编写代码与手动修复其产生的问题之间的时间成本,因为和 Copilot 的交互是「一次性」的,AI 并不会真的累积这些进步。 + + +### 🐎 [Creating interactive tutorials using DocC](https://www.nutrient.io/blog/creating-interactive-tutorials-using-docc/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何使用 DocC 创建交互式教程。通过 DocC,可以将静态的文档内容转变为交互式的体验,允许用户在文档中点击、操作,并快速找到他们所需的信息。此外,文章还展示了如何集成代码示例、自定义预览图片和课后小测,提供了更具互动性和可操作性的开发者学习体验。 + +### 🐎 [Creating a SwiftUI text view with tappable links](https://danielsaidi.com/blog/2024/12/18/creating-a-swiftui-text-view-with-tappable-links) + +[@Bluesjiang](https://github.com/bluesjiang): 文章介绍了一种在 SwiftUI 中实现可点击超链接效果的文本。因为 SwiftUI 原生没有提供对应中间。文章的作者很巧妙的利用了 SwiftUI 中 `Text` 支持 Markdown 的渲染来实现这一效果。作者还简单编写了一个组件来帮你快捷的构建 Markdown 超链接的内容。比较适合刚入门 SwiftUI 的同学实践自定义 UI。 + +### 🐕 [Size Matters: An Exploration of Virtual Memory on iOS](https://alwaysprocessing.blog/2022/02/20/size-matters) + +[@阿权](https://github.com/bqlin):文章作者发现开启扩展虚拟内存(Extended Virtual Addressing)能够解决调试 App OOM 的问题。文中详细介绍了以下内容: + +1. 虚拟内存的原理、作用; +2. iOS 中虚拟内存: + 1. iOS 虚拟内存的特殊性:No Page Outs; + 2. iOS 虚拟内存空间大小的计算方式; + 3. iOS 不同设备进程可用的虚拟地址空间大小; + 4. 调试 App 出现 OOM 的原因:除了程序自身的 Mach-O、依赖库占用内存,还需为调试环境预留内存; + 5. 通过开启扩展虚拟内存(Extended Virtual Addressing)来防止调试出现 OOM。 + +文章遇到的情况在许多大型项目跑在低端设备上都会经常出现,了解虚拟内存对调试开发都很有帮助。 + +### 🐢 [Type-Driven Design with Swift](https://swiftology.io/collections/type-driven-design/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一系列文章向我们介绍了类型驱动设计的概念。类型驱动设计的核心是通过类型自身来传递更多信息,一个非空类型比一个 Optional 类型包含了更多信息(非空),一个自定义的 Email 类型可以比单纯的 String 包含更多信息,例如在一个 Email 结构的初始化中校验 String 的格式是否正确,通过传递 Email 类型而不是 String 来保留这份格式校验的信息。以此类推,把更多的逻辑通过自定义类型封装起来,通过巧妙的设计类型来抹除原本可能出现的错误状态,然后在类型和类型之间通过领域化来划分、拆解,使得整个设计思路更清晰。本系列通过丰富的 demo 对类型驱动设计这一概念有较深入的阐释,感兴趣的读者可以花时间阅读下这个系列。 + +## 代码 + +### 🐎 [echarts](https://echarts.apache.org/examples/zh/index.html#chart-type-line) + +[@极速男孩](https://github.com/ztlyyznf001): ECharts 是一个开源的可视化库,广泛用于创建交互式图表。线性图表常用于表示数据趋势,X 轴通常为时间或类别,Y 轴为数值。ECharts 支持多条数据线展示、交互式操作(如悬停显示数据),并可高度自定义图表样式,如颜色、线条类型、动画等。用户通过 JSON 配置来定义图表内容,适用于销售、气温等多种数据展示。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#322-2025.02.10.md b/Reports/2025/#322-2025.02.10.md new file mode 100644 index 000000000..47518793d --- /dev/null +++ b/Reports/2025/#322-2025.02.10.md @@ -0,0 +1,91 @@ +# 老司机 iOS 周报 #322 | 2025-02-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/322.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [zhangferry](https://zhangferry.com) 加入老司机技术!ferry 是我们的老朋友了,作为摸鱼周报的主编输出了大量优质内容,同时也深度参与了历年 WWDC 内参担任审核。目前 ferry 在抖音基础技术团队从事代码分析相关工作,对 LLM 与 Stable Diffusion 也有涉猎。 + +**希望 ferry 的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [Apple 开源 Xcode 底层构建引擎](https://www.swift.org/blog/the-next-chapter-in-swift-build-technologies/) + +[@kemchenj](https://kemchenj.github.io/):Apple 近日开源了 swift-build,它是 Xcode、Swift Playground 底层使用的构建引擎(在 Xcode 里名为 XCBBuildService)。 + +目前 Swift Package Manager 使用的是另一套单独编写的构建引擎,同时维护两套除了行为不同会让用户困惑,并且维护成本也很高,所以后续 SPM 也会改为使用 swift-build,统一构建系统。 + +这样也给了我们机会一窥 Xcode 里的构建逻辑,以往很多问题都可以直接在这个库里找到答案,对于 Xcode 构建逻辑感兴趣的你千万别错过。 + + +### [不再依赖 CallKit,iOS 微信使用新方案实现通话弹窗接听](https://mp.weixin.qq.com/s/6hw75UXjqGGBfNmuH3_cVQ) + +苹果上线了新的 LiveCommunicationKit 作为在中国大陆替代 CallKit ,从用户视角分析,与 CallKit 最大的区别就是适配了灵动岛。目前[文档内容](https://mp.weixin.qq.com/s/6hw75UXjqGGBfNmuH3_cVQ)不多,期待 WWDC25 中能有更详细的内容。 + +## 文章 + +### 🌟 🐢 [Debugging An Undebuggable App](https://bryce.co/undebuggable/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):作者记录了他尝试注入一个应用时遇到的全过程,其中使用的技巧与思路清晰明确,值得所有需要逆向相关工作的同学阅读。简单列举一些其中让我感到受益匪浅的知识(并非全部): +1. 直接调用 ``ptrace(PT_DENY_ATTACH, 0, 0, 0);`` 可以阻止后续所有的 debugger(lldb) attch。需要注意 ptrace 在 iOS 上是私有函数,需要通过 dlsym 查找。如果应用使用这种方式加固,则可以通过符号断点并 ``thread return`` 跳过当前函数的剩余指令解决。 +2. ptrace 本质是 ``svc #0x80`` 等汇编指令的集合,因此可以直接通过汇编指令调用,就能避免应用程序绕过 dlsym 寻找 ptrace 来进行调用(这样也能避免一些审核时的私有 API 扫描)。 +3. 在未知的二进制中搜索带有特殊含义的汇编,例如搜索 ``mov x16, #0x1a`` 与 ``mov w16, #0x1a`` 就比搜索 svc 效率更高。因为 x16/x17 是一般是跳转校验用的特殊寄存器,很少挪作他用。 +4. ``br s -a 0x102A2BB14 -s XXXBinary`` 意思是设置断点,在相对 XXXBinary 的 loadAddress + 0x102A2BB14 的位置。这样可以避免每次启动 App 时 iOS 的 ASLR 机制会随机 loadAdfress 位置而需要重复计算实际的断点地址。同样我们日常调试时也可以相对我们自己的二进制或者系统库(UIKit / SwiftFoundation 等)设置断点。 +5. 通过无限循环调用 [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:YES/NO] 可以制造出 OOM ,进而直接让 iOS 系统崩溃而重启(System OOM)。 + +### 🐎 [Advantages of Using withAnimation](https://www.magnuskahr.dk/posts/2025/01/advantage-of-withAnimation/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章比较了 SwiftUI 中在视图声明上使用 .animation(...) 和在操作中使用 withAnimation 的差异。前者仅动画视图自身,当需要让布局或其他视图也平滑过渡时就会出现视图跳动等问题。使用 withAnimation 则能让所有相关布局变化一并参与动画,尤其在 ScrollView 等场景下可确保整体体验平滑无跳跃。 + +### 🐢 [Hardcore Debugging](https://blog.jacobstechtavern.com/p/hardcore-debugging) + +[@zhangferry](zhangferry.com):当调试应用发生崩溃,崩溃信息只有系统堆栈没有源码时,会影响我们定位问题。针对这类场景,文中提供了两种解决方案: + +1. 利用 `git bisect`,在正常 commit 和引入问题 commit 之间,通过二分法定位首次引入问题的 commit,来最大限度缩小排查范围。 +2. 提取崩溃日志,利用 atos 进行符号化,可以更精准定位问题代码。其中还分享了一个 tips,当 atos 执行异常时,可以根据偏移地址在 dSYM 里的 `Relocations/aarch64/xx.yml` 文件中手动解析符号。 + +### 🐎 [Compose 多平台是真实存在的!](https://whackylabs.com/swift/kotlin/compose/2025/01/12/compose-multiplatform-is-real/) + +[@极速男孩](https://github.com/ztlyyznf001):该文章分享了作者使用 Kotlin Multiplatform 与 Compose Multiplatform 的体验。通过网页工具快速生成项目模板,并在 Android Studio 中打开,然后简单实现了一个 PhotoApp,实现多平台代码共享。虽然依赖配置略有挑战,但可直接在 Android Studio 中运行 iOS 应用。 + +### 🐢 [深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件](https://mp.weixin.qq.com/s/FCu6OiZRh6EcmCWLB904jA) + +[@david-clang](https://github.com/david-clang):本文深入介绍 Android 侧 Flutter 和 Compose 在内嵌 Platform Views 的实现对比。虽然 Compose 和「传统 XML View」 在上层开发是两种写法,但因为底层渲染机制都是 Android Native View 的同一套渲染机制,所以无论内嵌 Platform Views 是否为 SurfaceView,都能正常渲染,甚至官方还推出了 SurfaceView 对应的 Compose 封装 [AndroidExternalSurfaceScope](https://developer.android.com/reference/kotlin/androidx/compose/foundation/AndroidExternalSurfaceScope)。而 Flutter 和内嵌的 Platform Views 是两套渲染流程,连渲染数据的生产线程都不同,而且在内嵌 SurfaceView 时的渲染模式会从 [TLHC](https://docs.flutter.dev/platform-integration/android/platform-views#texturelayerhybridcomposition) 降级为 VD(这会影响 SurfaceView 交互逻辑,如无障碍功能可能失效),对此官方还没很完美的兼容方案(截止 2 月 9 日,Android 侧 Platform Views 相关的 [issue](https://github.com/flutter/flutter/issues?q=is%3Aopen%20is%3Aissue%20label%3A%22a%3A%20platform-views%22%20label%3Aplatform-android) 还有 100 个是 open 状态)。 + +### 🐕 [深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比](https://mp.weixin.qq.com/s/756kaH11g0rM7dlklLSiuA) + +[@Crazy](https://github.com/jiyan135960):这是一篇针对 Flutter 与 Compose 两个框架的 Diff 机制讲解的文章,本篇文章首先对 Flutter 的 Diff 机制进行分析,从 setState 方法开始逐步讲解 Flutter 框架的 Element 树是如何进行对比判断与循环更新的。很多 Flutter 开发者开发了两三年的 Flutter 也不知道 Widget 中的 Key 的作用,这篇文章很好的告诉了你 Key 与 runtimeType 的对比位置,也会让大家对 Key 的理解有更深的体会。文章对 Compose 的 Diff 算法进行了分析,Compose 与 Flutter 不同,Compose 是两个树来进行 UI 管理,同样在 Compose 的对比过程中,它的 Key 也启到了至关重要的作用,Compose 的 Diff 相较于 Flutter 更加的复杂,因为涉及到了多个模块的协作问题。本文读起来很快,但是需要大家反复阅读,如果有时间也可以根据文章所说的对源码进行自己的分析,会有不一样的效果。 + +## 工具 + +### 🐎 [Network Link Conditioner: Simulating Slow Networking](https://www.avanderlee.com/debugging/network-link-conditioner-utility/) + +[@阿权](https://github.com/bqlin):Network Link Conditioner 是苹果提供的慢网模拟工具,支持 macOS 和 iOS,其提供几套预设的网络环境供用户直接切换,常用于调试网络环境不佳下的网络请求或其他连接,优化用户体验,文章详细介绍了在该工具在各平台的使用方法。 + +比较有趣的是在模拟器上模拟慢网时还提到了另外一款工具 [RocketSim](https://www.rocketsim.app/?utm_source=swiftlee&utm_medium=article&utm_campaign=network_link_conditioner),该工具可以独立控制模拟器的慢网模拟,不影响 macOS 其他进程,另外该工具还支持网络抓包、UI 稿对比、网格像素对齐、标尺、程序状态切换、Deeplink 测试、推送测试、权限控制、定位模拟等功能,功能丰富强大,可惜只能作用在模拟器。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#323-2025.02.17.md b/Reports/2025/#323-2025.02.17.md new file mode 100644 index 000000000..2a68deb48 --- /dev/null +++ b/Reports/2025/#323-2025.02.17.md @@ -0,0 +1,94 @@ +# 老司机 iOS 周报 #323 | 2025-02-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/323.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Updating the Visual Studio Code extension for Swift](https://www.swift.org/blog/vscode-swift-2/) + +[@Cooper Chen](https://github.com/cjlcooper):Swift 团队正式支持 Visual Studio Code 中的新版本 Swift 扩展,旨在提升跨平台开发体验。原有扩展已迁移至 GitHub /swiftlang 组织,确保更广泛的社区支持和持续更新。对于现有开发者,升级过程无缝衔接,旧版扩展会自动替换为新版,用户可以轻松过渡。如果你是 Swift 开发者,可以尽快更新以体验更多功能和改进。 + +## 文章 + +### 🐕 [Creating a reusable action menu component in SwiftUI](https://peterfriese.dev/blog/2025/swiftui-action-menu/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章详细介绍了如何通过 SwiftUI 构建一个高度复用、和 Apple Mail 中的操作菜单风格一致的动作菜单组件: + +- 视图构建器与解耦:通过 `@ViewBuilder` 允许动态注入菜单内容,提升组件的通用性 +- SwiftUI 风格系统:利用 `LabelStyle` 和 `ButtonStyle` 统一管理样式,确保视觉一致性 +- 封装与复用:通过视图修饰符将复杂逻辑隐藏,调用时仅需链式语法(如 `.actionMenu {title: ..., isPresented: ...}`),类似 SwiftUI 原生 API 的体验 + +作者也提供了配套的 GitHub 库([ActionMenu](https://github.com/peterfriese/ActionMenu)),支持通过 Swift Package Manager 集成。 + +### 🐎 [Attaching debugger to system apps](https://supersonicbyte.com/blog/attaching-debugger-to-system-apps/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 作者分享了调试 iOS 模拟器中系统 App 的一些经验:在关闭 macOS SIP 后我们即可对任何进程进行调试,然后使用 `simctl` 命名启动对应系统 App 并获取 PID,最后在 Xcode 中对该 process 进行 debug 即可。 + +### 🐎 [Attending Apple Intelligence and App Intents workshop at Paris](https://blog.thomasdurand.fr/story/2025-01-17-attending-apple-workshop/) + +[@Smallfly](https://github.com/iostalks):这是一篇苹果在巴黎举办的技术研讨会议内容,主题围绕如何通过 Apple Intelligence 和 App Intents 框架增强应用功能,提升系统集成能力。涵盖从代码实现到系统集成的关键步骤,并透露出苹果在智能化和本地化功能上的战略布局。 + +iOS App Intents 是苹果生态中实现「功能原子化」的核心工具,通过标准化接口打通应用与系统的边界。开发者通过定义意图和实体,即可将应用融入 Siri、搜索、自动化等场景,为用户提供无缝、智能的体验。随着 Apple Intelligence 的深化整合,其应用潜力将进一步释放,对于关注 AI 集成的开发者,有较高的参考价值。 + +### 🐢 [Flutter 3.29 发布,看起来会是一个“大坑”的版本](https://mp.weixin.qq.com/s/_uA5XYYqmzbtTVCtqRPI7w) + +[@david-clang](https://github.com/david-clang):本文结构和内容参考 Flutter 技术项目经理的 [What ’ s new in Flutter 3.29](https://medium.com/flutter/whats-new-in-flutter-3-29-f90c380c2317) ,作者在官方软文报喜不报忧的基础上,给出开发者角度的担忧,例如: + +1. Dart 代码会直接在 Android 和 iOS 的主 UI 线程上运行,而不是单独的 Dart UI 线程,此时 Dart 和平台调用直接可以同步执行。 +2. 没有 Vulkan 驱动的 Android 设备将回退到在 OpenGLES 上运行的 Impeller,而不是使用 Skia。 +3. 移除了 Flutter Gradle 插件,之前没迁移的需要手动迁移适配。 + +而且 Flutter 创始人 [Eric](https://github.com/eseidel) 也对“废弃 Dart 独立 UI 线程”发表了 [comment](https://github.com/flutter/flutter/issues/150525#issuecomment-2652547816),表怀疑态度,比如 Dart 和 Native 平台同一线程之后,那么「滚动 / 动画」是否会因此出现相互影响,特别是第三方插件处理不当的时候,反而可能更加卡顿。官方回复 Eric 这利大于弊,而 Eric 表示后面有空整理文档回复该讨论。 + +## 工具 + +### 🐢 [SweetPad: Develop Swift/iOS projects using VSCode](https://github.com/sweetpad-dev/sweetpad) + +[@阿权](https://github.com/bqlin):之前你可能听说过 VSCode 插件 [Swift Programming Language](https://marketplace.visualstudio.com/items?itemName=swiftlang.swift-vscode),官方大力宣传 Swift 可以跨平台开发了,但也就仅限于开发 Swift 了(语法高亮、代码补全、错误检查、Swift Package Only),还是不能取代 Xcode 进行 iOS 开发。 + +SweetPad 或许能做到这一点,其也是一款 VSCode 插件,旨在使用 VSCode 开发 Swift/iOS 项目,成为 Xcode 以外的替代 IDE 方案。SweetPad 通过集成各种开源工具(swift-format、swiftlint、xcodebuild、xcrun、xcode-build-server、sourcekit-lsp 等)直接在 Xcode 生成(当然也可以用 [XcodeGen](https://github.com/yonaskolb/XcodeGen) 或 [Tuist](https://tuist.io/) 生成)的项目文件进行开发、运行和调试。换句话说,SweetPad 通过各种命令行工具实现并对齐 Xcode 的各项能力。 + +SweetPad 目前实现能力有: + +- Xcode 项目文件编辑:通过 Tuist 工具实现。 +- 自动补全(SourceKit-LSP)、单元测试:通过 [Swift](https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang) 插件 + [xcode-build-server](https://github.com/SolaWing/xcode-build-server) 工具实现。 +- 调试:通过 [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) 实现。 +- 运行到模拟器和真机:通过 `xcrun simctl` 和 `xcrun devicectl` 命令行实现。 +- 格式化:通过 [swift-format](https://github.com/apple/swift-format) 实现。 + +SweetPad 还没使用最近开源的 [swift-build](https://github.com/swiftlang/swift-build),还是使用 `xcodebuild` + `sourcekit-lsp` 的方案,所以还是得安装 Xcode 环境。另外,诸如 SwiftUI Preview、XIB/Stroyboard 可视化、签名证书管理等也尚未支持。 + +之前 [#224](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/Reports/2023/%23244-2023.05.15.md) 周报有提到 [用 VSCode 基于 Bazel 打造 Apple 生态开发环境](https://mp.weixin.qq.com/s/7UJdgJIYWkhzSjtKsHqC2g) 则是实现一套 Bis + Bazel 编译系统的 VSCode 开发环境,感兴趣的同学可以对比着阅读。 + +## Tips + +### [一个使用 Instrument 的小技巧](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4871) + +[@Barney](https://github.com/BarneyZhaoooo):Instrument 录制结束卡顿很久或者秒退时,可用的设置。只采集最后几秒的数据,对于一些需要前置操作一段时间才能复现的问题时,会有较大帮助。在处理大量长时间数据时,Instrument 会有较大卡顿并消耗大量内存,此时就可以开启这个选项。 + +![Instrument](https://github.com/user-attachments/assets/42907aa6-5814-49c6-ac06-402502bfe4a6) + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#324-2025.02.24.md b/Reports/2025/#324-2025.02.24.md new file mode 100644 index 000000000..88e8c4ff8 --- /dev/null +++ b/Reports/2025/#324-2025.02.24.md @@ -0,0 +1,75 @@ +# 老司机 iOS 周报 #324 | 2025-02-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/324.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS & iPadOS 18.4 Beta 1: Here’s everything new](https://9to5mac.com/2025/02/21/ios-18-4-beta-1-heres-everything-new/) + +对于中国用户最期待的自然是中文版本的 Apple Intelligence 终于可以使用了,[Release Notes](https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-18_4-release-notes#Apple-Intelligence) 有两条相关提醒: + +1. 对于中文(非英语),使用 Apple Intelligence 需要前置打开 Siri ,并允许通过任意方式唤醒 Siri 。 +2. 还原设备后,可能出现 Apple Intelligence 出现 "Downloading support …" 的报错,此时重启设备后问题可能可以解决(原文用词是 might resolve ,尚不清楚是否有 bad case)。 + +## 文章 + +### 🐎 [Understanding SwiftUI Preferences](https://peterfriese.dev/blog/2025/swiftui-preferences-swift6/#what-are-preferences-in-swiftui) + +[@JonyFang](https://github.com/JonyFang): 本篇主要介绍了 SwiftUI 中的 Preferences 机制,讲述了其在父子视图间传递数据的作用。 作者通过具体示例,展示了如何利用 Preferences 构建自定义视图,如表单验证功能。 此外,文章还讨论了 Swift 6 中与 Preferences 相关的问题,提供了对开发者有价值的见解。 总的来说,这篇文章为开发者深入理解和应用 SwiftUI 的 Preferences 提供了清晰的指导。 + +### 🐢 [The Synchronization Framework in Swift 6](https://blog.jacobstechtavern.com/p/the-synchronisation-framework) + +[@DylanYang](https://github.com/Dylan19Yang):作者为我们介绍了 Swift 6 和 iOS 18 下的新同步框架,其中主要包含了两个底层结构 Mutex 和 Atomics。作者在本文中对这两个新的能力做了较为详细的说明和性能比对。Mutex 能使得对被他包裹的数据的访问自动上锁,在性能上和手动通过代码上锁区别不大,但是相比使用 Actor 有不少提升。不过相比 Actor 的缺点自然是锁会阻塞当前线程。而 Atomic 则可以使被他包裹的操作都为原子操作不会被并发打断。从性能上看它和 Actor 比并没有较大优势,因此大多数情况下使用 Actor 已经足够。对同步框架感兴趣的读者可以花时间阅读下本文。 + +### 🐎 [The Framework Next Door](https://www.elkraneo.com/the-framework-next-door) + +[@BluesJiang](https://github.com/BluesJiang): 这篇文章分享了他们在制作密室逃脱场景下,使用 TabletopKit 来开发一个 VisionOS 的应用。这个主要是针对桌面游戏的需求来设计的框架,支持多人互动,桌面的 Persona 布局,还有丰富的交互能力。有兴趣给 Vision Pro 开发桌面游戏的可以调研一下这个框架。 + +### 🐎 [解决 Xcode 16 "Waiting to reconnect to ..." 问题](https://stackoverflow.com/questions/79016653/after-upgrading-to-xcode-16-i-am-stuck-at-waiting-to-reconnect-to-when-tryi) +[@Cooper Chen](https://github.com/cjlcooper):这篇文章主要解决了在升级到 Xcode 16 后,无法在 Apple TV(tvOS 17.7)上构建应用的问题。错误提示显示 DDI(Developer Disk Image)内容过时,导致设备无法连接。最终,运行 `xcrun devicectl manage ddis update` 命令更新 DDI 后,问题得以解决。这个方法不仅适用于 tvOS,也可以解决 iOS 开发中的类似问题,帮助开发者应对 Xcode 16 引入的新 DDI 管理方式。 + +### 🐢 [asm lessons](https://github.com/FFmpeg/asm-lessons) +[@老驴](https://weibo.com/u/6090610445):很多人敲碗等待的 FFmpeg 汇编课终于来了。FFmpeg 现在基本是业界最重要的开源视频编解码库了。这种对于性能极度敏感的库,自然会有一些特殊手段来进一步优化性能。FFmpeg 团队就在库里使用了大量的汇编,按照他们的说法,可以大幅提升性能。但是现在会手写汇编语言的人也越来越少,所以很多人就敲碗让团队出一个汇编课程。这就是这个课程的来历。略微可惜的是,这个课程目前是基于 x86 的汇编,不过团队也说之后会添加 ARM 的汇编内容。鉴于 FFmpeg 在业界的地位,值得大家花一点时间来学习一下。 + +## 工具 + +### 🐎 [你的 iPhone 也可以离线运行 DeepSeek「含原理介绍」](https://mp.weixin.qq.com/s/oXfrBKwZzXIzg-k_KRQEbQ) + +[@EyreFree](https://github.com/EyreFree):本文为大家介绍了一款能在 iPhone 上运行 LLM 的应用 fullmoon,它的下载链接为 [https://apps.apple.com/app/id6727014156](https://apps.apple.com/app/id6727014156),能直接运行 mlx-community/DeepSeek-R1-Distill-Qwen-1.5B-4bit 模型,还给出了配置步骤,其原理基于苹果的 MLX Swift 实现,iOS 开发者可通过修改 LLMEval 例子来运行 DeepSeek。作者自测 iPhone 16 Pro 能运行 1.5B 和 7B 模型,感兴趣的朋友可以下载体验。 + +## Tips + +### 🐎 [DispatchConcurrentQueue 可用性提示](https://github.com/SwiftOldDriver/iOS-Weekly/issues/4870) + +[@Damien](https://github.com/ZengyiMa):DispatchConcurrentQueue 实际要在 iOS 17 才开始能够使用,但是 Xcode 15 标注错误并且可以通过编译检查,但是在 Runtime 期间会引发 Crash。有使用到的同学请特别注意。 + +Xcode 15 +![image](https://github.com/user-attachments/assets/81dfa441-424a-4706-a5d2-0bda334ecc95) + +Xcode 16 +![image](https://github.com/user-attachments/assets/4ca77442-dd15-4131-b3db-8b564921dac7) + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#325-2025.03.03.md b/Reports/2025/#325-2025.03.03.md new file mode 100644 index 000000000..fa898a988 --- /dev/null +++ b/Reports/2025/#325-2025.03.03.md @@ -0,0 +1,66 @@ +# 老司机 iOS 周报 #325 | 2025-03-03 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/325.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Presenting and Managing Expandable Sections in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/presenting-and-managing-expandable-sections-in-swiftui/) + +[@DylanYang](https://github.com/Dylan19Yang):作者为我们介绍了如何在 SwiftUI 中实现一个可通过交互来展开和收起的 Section。在 Section 的 header 上实现一个自定义 view,并在点击时反转 Section 的 isExpanded 属性来达成目标。文章内容非常简单基础,并且有丰富的代码演示,适合刚接触 SwiftUI 的同学学习。 + +### 🐕 [First analysis of Apple's USB Restricted Mode bypass (CVE-2025-24200)](https://blog.quarkslab.com/first-analysis-of-apples-usb-restricted-mode-bypass-cve-2025-24200.html) + +[@david-clang](https://github.com/david-clang):本文分析了 iOS 中 [CVE-2025-24200](https://support.apple.com/en-ca/122174) 漏洞的技术细节,该漏洞利用 Accessibility 框架中状态管理不严密的问题,使得攻击者能够在设备锁定时绕过 [USB Restricted Mode](https://support.apple.com/en-us/111806),从而实现未授权的 USB 数据连接。文章中的分析思路和手段很值得学习。 + +作者通过对比补丁前后的固件,详细说明了漏洞修复涉及的关键代码改动,例如在 AXSpringBoardServerInstance 和 profiled 守护进程中新增的状态检查逻辑。接着展示了利用辅助功能(如 Assistive Touch 或 Switch Control )触发漏洞的可能攻击路径,即在设备锁定且辅助功能激活时,通过触发警告弹窗诱导用户点击“ OK ”,进而调用 `_setUSBRMPreferenceDisabled` 函数禁用 USB Restricted Mode,使攻击者有机会绕过物理安全防护措施。 + +### 🐎 [How Swift's server support powers Things Cloud](https://www.swift.org/blog/how-swifts-server-support-powers-things-cloud/) + +[@阿权](https://github.com/bqlin):文章分享了 Things App 如何将自身的后端服务使用 Swift 重写的经验。 + +Things Cloud(Things App 后端服务),原本是使用 Python 2 和 Google App Engine 构建的,虽然稳定,但面临内存占用高、响应速度慢、后端语言缺乏类型静态安全检查导致上线错误不可预知的问题。在探索了多种后端语言后,因为 Things App 开发已经深度使用 Swift,熟悉其优势(可能是客户端人力充足🐶),最终选择使用 Swift 重写后端。使用 Vapor + SwiftNIO 编写主要的后端业务,通过 RediStack 调用 Rdis、MySQLKit 调用 Aurora、Soto 调用 S3、APNSwift 调用 APNs。最终通过 Linux 编译产物,构建到 Docker 中以便部署到集群中。最终算力节省 3 倍多,响应时间缩短 4 倍多。 + +在降本增效的大流中,或许用 Swift 也能闯出一番天地。 + +### 🐕 [What ’ s new in Swift 6.1?](https://www.donnywals.com/whats-new-in-swift-6-1/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 的最新特性和改进。Swift 6.1 是一个较小的版本,主要包含错误修复和用户体验提升。其中主要讨论了两个特性: +1. **Task Groups 的变化**:Swift 6.1 对 TaskGroup 进行了改进,开发者不再需要显式定义子任务的返回类型。编译器可以根据第一个添加的任务自动推断类型,这样可以简化代码。 +2. **导入成员可见性的新模式**:Swift 6.1 引入了一种新的成员可见性模式,允许开发者在导入特定模块时,仅使用该模块中的扩展。这解决了当多个模块中有相同函数名时,编译器可能产生混淆的问题。通过这种方式,开发者可以更明确地控制代码中使用的扩展,避免意外调用错误版本的函数。 + +总体而言,这些改进增强了 Swift 的易用性,提升了开发体验。 + +## 工具 + +### 🐎 [Interactive & Beautiful CLI Tools with Noora](https://swifttoolkit.dev/posts/noora-package) + +[@Smallfly](https://github.com/iostalks):Noora 是一款创新性的 Swift 命令行工具包,致力于将枯燥的黑白终端转化为专业、交互式的开发者体验。它提供了丰富的组件——从醒目的成功 / 错误提示、智能的 Yes/No 选择框,到动态进度指示器,再到灵活的主题定制功能——让 CLI 工具瞬间焕发活力。如果你的应用需要进行命令行交互,值得一试。 + +### 🐎 [基于 WWDC 内容的 AI 问答平台 Ask WWDC](https://askwwdc.com) + +[@xiaofei86](https://github.com/xiaofei86):Ask WWDC 以 WWDC 内容对 LLM 进行检索增强。基于 LangChain 和 GPT-4o,目前免费使用,响应速度尚可。作者同时开放了其基于 Next.js、Upstash 和 ModalLabs 的服务,用户也可以构建自己的 Ask Site。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#326-2025.03.10.md b/Reports/2025/#326-2025.03.10.md new file mode 100644 index 000000000..938acef2b --- /dev/null +++ b/Reports/2025/#326-2025.03.10.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #326 | 2025-03-10 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/326.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +**周报编辑组又来新人啦~** + +欢迎 [David](https://github.com/david-clang) 加入老司机技术!David 有多年大厂的工作经验,目前在日本从事 iOS Infra 相关工作,对 Flutter 动态化框架也有涉猎。 + +**希望 David 的加入也能为大家带来更多元化的内容输出!** + +## 新闻 + +### [Lynx: 迈向原生体验](https://mp.weixin.qq.com/s/Wmapq8NMfoXejIcxX-2K-Q) + +[Lynx](https://github.com/lynx-family/lynx):跨平台 UI 方案始终在**性能、灵活性和工程复杂度**之间寻找平衡。Lynx 采用**声明式 DSL 直出原生 UI**,减少 JS 端计算和通信开销,同时优化 UI Diff 机制,使更新更加高效。 + +它并非简单的 React Native 或 Flutter 替代,而是对跨端渲染的一次新尝试,在实际业务场景中提供了不同的取舍和可能性。 + +不论是国内还是国外,都已有一段时间没有推出类似的新框架了,此次开源还是有较大的借鉴意义,希望 Lynx 团队后续能有更多原理的解析释出。 + +## 新手推荐 + +### 🐎 [Simple Modularization setup for a New App](https://www.manu.show/2025-02-27-simple-modularization-setup/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何使用 Swift Package Manager 的本地包实现 iOS 应用的模块化。作者强调了模块化在改善构建时间、分离关注点、增强测试能力和促进团队协作方面的优势。文章提供了清晰的依赖关系图,解释了核心层(CoreLayer)、领域层(Domain Layer)和表现层(Presentation Layer)的设计,并分享了通过 Fastlane 集成来运行测试的实用技巧。对于寻求优化开发流程和提高代码质量的 iOS 开发新手来说,这篇文章提供了宝贵的指导和实际案例,是不错的学习资源。 + +## 文章 + +### 🐕 [Ollama](https://nshipster.com/ollama/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Ollama,一个简化在 macOS 上运行大语言模型(LLMs)的工具。Ollama 基于 llama.cpp,提供友好的接口,使模型管理和推理变得简单。文章强调了在本地运行模型的优势,特别是当计算几乎变得免费时,AI 的可用性和应用方式也随之改变。虽然像 GPT-4 和 Claude 这样的前沿模型无疑令人印象深刻,但本地运行开放模型同样值得关注,因为它提供了隐私保护、成本效益、低延迟、用户控制和可靠性等多种优势。 +值得注意的是,Ollama 不仅限于 macOS 应用,因其提供的 HTTP API 可以与任何支持 HTTP 请求的编程语言和工具集成,因此可以在其他操作系统上使用。 + +### 🐎 [不要升级,Flutter Debug 模式在 iOS 18.4 beta 无法运行,提示 Permission denied](https://mp.weixin.qq.com/s/shfvj95_CjwO-33s_7LIWQ) + +[@david-clang](https://github.com/david-clang):本文介绍了为什么 Flutter Debug 模式无法在 iOS 18.4 beta 1 的真机上运行([issues](https://github.com/flutter/flutter/issues/163984)),是因为该版本修复了通过 get-task-allow 授权即可获取 JIT 的内存访问权限([iOS 18.4 beta 1 JIT patch analysis](https://gist.github.com/osy/8940e5ae5f24646b808f58d197883ca5))。好消息是 iOS 18.4 beta 2 撤销了对应更改,所以升级系统版本将不会影响 Flutter Debug 模式的真机调试。 + +但 Flutter 团队还是想避免利用 get-task-allow 授权获取 JIT 的内存访问权限,并在该 [issues](https://github.com/dart-lang/sdk/issues/60202) 讨论了些解决方案。其中有个[思路](https://github.com/dart-lang/sdk/issues/60202#issuecomment-2695705498)很值得大家学习,利用 lldb debugserver 将数据写入到"只读和可执行(RX)"的内存映射区域后,即可直接调用 mprotect 让内存权限在"只读和可执行(RX)"和"可读可写(RW)"之间切换,从而稳定地实现 JIT。虽然该事在 Flutter 官方的优先级只是 P2,也让我们期待下最终的解决方案吧! + + +### 🐕 [Designing a custom lazy list in SwiftUI with better performance](https://nilcoalescing.com/blog/CustomLazyListInSwiftUI/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍了如何在 SwiftUI 中创建一个自定义的惰性列表(Lazy List)。作者首先讲解了惰性列表的概念,然后展示了如何通过使用 `LazyVStack` 和 `ForEach` 实现具有动态加载功能的列表并提供了示例代码和优化性能的建议。 + + +### 🐎 [关于推理模型的一些误解和盲区](https://onevcat.com/2025/02/reasoning-model/) + +[@JonyFang](https://github.com/jonyfang): 文中介绍了推理模型与通用大模型的性能差异及适用场景,指出推理模型在逻辑领域优势显著却受制于响应速度与创作力,揭示了温度参数对生成内容的影响规律,并探讨了混合架构趋势与开源蒸馏模型推动 AI 普惠的技术路径。 + +## 工具 + +### [XCFolder: 一个将 Xcode 项目 Group 转为 Folder 的工具](https://github.com/ZhgChgLi/XCFolder) + +iOS 开发者都知道团队协作时 .xcodeproj 文件会经常冲突,这是因为 Xcode 项目会为每个文件和文件夹都生成 UUID 引用,多人同时修改项目结构时几乎必然会发生合并冲突。 + +好消息是,Xcode 16 带来了一个新功能 —— 将虚拟的 Group 转换为 Folder!基于 Folder 的项目不再为每个文件声明对应的 object,大幅减少了合并冲突的可能性。 + +但对于现有项目,手动迁移工作量巨大。这时 XCFolder 就可以派上用场了,这款由 ZhgChgLi 开发的工具能自动完成这一项工作,并且保持项目引用完整性,操作简单高效。 + +如果你厌倦了处理 Xcode 项目合并冲突,这个工具绝对值得一试。它不仅能帮助团队顺利过渡到 Xcode 16 的新项目结构,还能大幅提升团队协作效率。 + +## 音视频 + +### 🌟 🐢 [Deep Dive into LLMs like ChatGPT](https://www.youtube.com/watch?v=7xTGNNLPyMI&list=PPSV) + +[@Damien](https://github.com/ZengyiMa):LLM 时代已经到来,作为开发人员,我们也需要了解一些必备的 LLM 相关的知识,本视频为 AI 大神 Karpathy 出品的 LLM 视频,本视频深入浅出,适合零基础想要了解 LLM 的同学。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[北京/上海] 美团 - 短视频 - iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#327-2025.03.17.md b/Reports/2025/#327-2025.03.17.md new file mode 100644 index 000000000..d1898834b --- /dev/null +++ b/Reports/2025/#327-2025.03.17.md @@ -0,0 +1,93 @@ +# 老司机 iOS 周报 #327 | 2025-03-17 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/327.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [iOS Versions Market Share in 2025](https://telemetrydeck.com/survey/apple/iOS/majorSystemVersions/) + +网页展示了使用 iOS 系统(包括 iPadOS)的用户的分布变化,其中有两条结论: + +1. 自 2024 年 9 月推出以来,iOS 18 已成为迄今为止份额最高的版本。截至 2025 年 2 月底,该比例为 79.54%。 +2. 截至 2024 年 8 月底,iOS 17 是占主导地位的版本,占 87.70% 的份额。截至 2025 年 2 月底,它已降至 13.68%。 + +## 新手推荐 + +### 🐎 [通过覆写方法看 Swift 方法派发](https://blog.rakuyoo.top/swift-method-dispatch-via-overriding/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一个子类覆写方法的 Demo 向我们解释了 Swift 内静态派发和动态派发两种机制,并介绍了 @objc 和 dynamic 关键字的含义,讲述了如何在 extension 中正确的覆写父类方法。看完以后感兴趣的同学也可以尝试再研究下 Protocol 方法的派发机制。 + +## 文章 + +### 🐢 [A Journey to understand LLVM-IR](https://un-devs.github.io/low-level-exploration/journey-to-understanding-llvm-ir/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):对于 iOS 开发来说,接触 LLVM-IR 的机会不多,一般逆向研究系统库时会直接反汇编,研究 Swift 时大部分情况阅读 sil(Swift Intermediate Language) 即可解决大部分问题。但也有极端情况下,需要研究 IR 优化时,就需要这块知识了。作者虽然是以 C/Rust 语言的视角进行讲解,但是对于 OC/Swift 是一样的。文章内容大致包含下面几块: + +1. IR 的 静态单一分配 (static single assigment representation) +2. 开启 mem2reg 讲解生成的 IR 代码 +3. 再对比 x86 汇编与 IR 代码的对应 + +### 🐕 [op run](https://nshipster.com/1password-cli/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章探讨了传统 .env 文件在开发中的痛点(配置同步难、多环境管理复杂、变更追踪缺失),并介绍了 1Password CLI(op)的解决方案。通过 op run 命令动态注入环境变量,开发者可用 op://URL 引用密钥库中的敏感数据,实现配置与代码分离。步骤包括安装 CLI、创建共享保险库、迁移密钥、更新.env 文件为引用格式,并调整启动命令。 + +### 🐕 [What drives your users to pay? Jobs to Be Done has the answers](https://www.revenuecat.com/blog/growth/what-drives-users-to-pay-jobs-to-be-done/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):本文探讨了 Jobs to Be Done (JTBD) 理论如何帮助企业理解用户真正的需求,并通过精准定位驱动更强的产品变现能力。主要内容如下: + +1. 了解用户购买动机:痛点驱动 vs. 需求驱动 +2. 如何进行 Jobs to Be Done 访谈,发现变现关键点 +3. 三种核心驱动力:功能、情感和社交 +4. 如何优化定价、转化和留存 +5. 利用 JTBD 扩展高价值用户群 + +### 🐢 [当 Swift 编译器删除了标准库中的代码 - 记修复 Swift 6 中的冗余 Load 指令消除优化器](https://mp.weixin.qq.com/s/MLYm8S8vMeI9y06SgAGfFw) + +[@david-clang](https://github.com/david-clang):本文首先通过最小复现代码,展示了在 `-Osize` 优化级别下使用 `AutoreleasingUnsafeMutablePointer` 导致的 use-after-free(UAF)崩溃问题。 + +通过反汇编和 SIL 分析,发现 Swift 编译器在冗余 Load 消除优化(RLE)过程中,因误判 `_reserveCapacityAssumingUniqueBuffer` 函数的副作用,错误删除了数组扩容后必须重新加载缓冲区地址的 `load` 指令,致使后续代码访问已释放内存。 + +作者还给出了修复方案,通过调整逃逸分析对 `unchecked_ref_cast` 指令中 Optional 转换的路径追踪逻辑,确保编译器正确识别副作用,从而避免冗余 `load` 指令消除,修复 UAF 崩溃问题。 + +文章结尾还分享了调试 Swift 编译器的技巧,全文为深入理解 Swift 编译优化机制提供了宝贵参考。 + +## 代码 + +### [RealityShaderExtension](https://github.com/XanderXu/RealityShaderExtension) + +[@BluesJiang](https://github.com/BluesJiang): visionOS 开发官方有两套可选的开发方式,一种是使用 RealityKit,另一种是使用基于 Metal 的自制引擎来自己绘制。苹果推荐使用的 Unity 的 PolySpatial,一种将 Unity 的内容直接导出到 visionOS 上的方式,也是通过第二种模式运行的。 +但是第二种模式会存在许多限制,比如没有眼动追踪等。所以有时候还是需要使用原生的开发方式。但是为了保证渲染效果的一致性,作者经常需要将在 Unity 中实现的 Shader 再在 ShaderGraph 中实现一遍。而二者默认提供的 Shader 节点并不一致。 +所以作者将 Unity 中有而 RealityKit 中没有的 Shader 效果实现了一遍,并且开源。visionOS 的原生开发玩家可以关注一下。 + +## 音视频 + +### [How to Do Apple Search Ads (ASA) Right and Grow Your Downloads](https://www.youtube.com/watch?v=W6_bN3AZo_s) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 如何使用 Apple Search Ads 提升你的下载。作者分享了配置使用 ASA 完整流程和一些实用技巧,有自己的独立 App 需要推广的可以学习下。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] TikTok - iOS 高级开发工程师(跨端方向)& 实习生(跨端方向) + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#328-2025.03.24.md b/Reports/2025/#328-2025.03.24.md new file mode 100644 index 000000000..8786e43a4 --- /dev/null +++ b/Reports/2025/#328-2025.03.24.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #328 | 2025-03-24 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/328.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐎 [Understanding SwiftUI's Namespace](https://kyleye.top/posts/swiftui-namespace/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 SwiftUI `Namespace` 的工作原理,从底层实现到实际应用,再到高级用法,内容详实且易于理解。作者不仅解释了 `Namespace` 如何生成唯一标识符,还通过实际代码示例展示了如何利用它实现平滑的几何动画。相信无论是初学者还是有一定经验的开发者,都能从中获得一些启发。 + +### 🐕 [Designing a custom lazy list in SwiftUI with better performance](https://www.swiftwithvincent.com/blog/animation-vs-withanimation-whats-the-difference) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章探讨了 SwiftUI 中 `animation` 与 `withAnimation` 的区别。`animation` 是一个修饰符,直接在视图上应用动画,而 `withAnimation` 则是一个函数,用于在特定的状态变化中包裹代码,使其能够动画化。作者通过示例展示了两者的用法和适用场景,强调了使用 `withAnimation` 时可以更灵活地控制动画效果。 + +### 🐎 [Identifying individual sounds in an audio file](https://www.createwithswift.com/identifying-individual-sounds-in-an-audio-file/) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了如何实现声音识别功能,使用 Apple 的 Sound Analysis 框架来识别音频文件中的特定声音。通过这个文章教程,读者可以构建一个应用,能够分析音频文件、分类声音的 App。文章还提到,这种声音识别功能适用于预录制音频文件的分析,可以用于批量处理、高质量录音的编辑以及离线分析等场景,为音频分析任务提供了更广泛的应用可能性。 + +### 🐕 [Swift + Zed = ❤️ ](https://tgomareli.medium.com/swift-zed-%EF%B8%8F-6b08de865425) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了作者如何在 Zed 编辑器中优化 Swift 编程体验。作为一位文本编辑器爱好者,作者分享了他从 Neovim 转向 Zed 的过程,探讨了安装 Swift 扩展、解决 Xcode 项目中的代码补全问题,以及创建自定义任务和快捷键的具体步骤。通过这些配置,作者成功提升了开发效率,使得构建、测试和运行 Swift 包变得更加流畅和自然。如果你正在寻找高效的编程工具,这篇文章值得一读。 + +### 🐎 [Synchronous Work](https://www.massicotte.org/synchronous-work) + +[@DylanYang](https://github.com/Dylan19Yang):作者分别通过 DispatchQueue、Task.detached、nonisolated func 等方式为我们介绍了如何去异步执行一段耗时逻辑。最终作者更推荐 async let 的方式,因为它更加简洁,但也要注意它并不是时刻生效的,我们需要关注方法的 isolated 的状态。同时作者也提到同步方法本身会更加灵活,因为它可以按需转为异步调用,给了调用方更多选择。 + +## 工具 + +### 🐎 [Framous: Screenshot Frames](https://apps.apple.com/us/app/framous-screenshot-frames/id6636520519?mt=12) + +[@阿权](https://github.com/bqlin):[Framous](https://apps.apple.com/us/app/framous-screenshot-frames/id6636520519?mt=12) 是一款快捷生成 Apple 设备带壳截图的 Mac App,支持生成常见的 iPhone、iPad、Apple Watch、Mac、Apple TV 设备的带壳截图。对于独立开发者上架或者介绍某款 App 时是款很实用的工具。App 支持功能: + +- 可以通过拖放、复制粘贴、捷径等方式将图片生成带壳截图。 +- 自动识别截图来源设备(大概是根据分辨率),自动匹配设备。 +- 支持多个设备合成一张图或批量导出多张图。 +- 丰富的自定义选项,支持切换设备、修改设备颜色、圆角、设备按钮位置、屏幕挖孔样式等。 + +App 在 Mac App Store 免费下载,但生成支持的设备截图仍需内购。 + +## 代码 + +### [GlyphixTextFx](https://github.com/ktiays/GlyphixTextFx) + +[@AidenRao](https://weibo.com/AidenRao):**GlyphixTextFx** 主要实现了类似 SwiftUI 中 `numericText` 的数字变化过渡动画效果。以下是核心内容: + +- **字符级动画**:当文本内容变化时,每个字符会以平滑的动画过渡(如数字增减时的滚动效果)。 +- **灵活定制**:支持自定义过渡方向(向上 / 向下)、文本对齐方式(左 / 中 / 右)以及多行文本显示。 +- **视觉效果优化**:提供模糊效果选项增强过渡美感。 +- **跨框架兼容**:适用于 UIKit、AppKit 和 SwiftUI,支持 iOS 13+ 和 macOS 11.0+ + +## 音视频 + +### [Swift DevRoom at FOSDEM 2025](https://swiftlang.github.io/event-fosdem/) + +[@zhangferry](zhangferry.com): FOSDEM 是一个专门为自由软件及开源软件开发者而设的周年会议,由比利时的布鲁塞尔自由大学及一些志愿者共同筹办,被视为全欧洲、乃至全球最优秀的自由软件及开源软件活动。Swift 作为开源语言,曾在 2023 年[申请 FOSDEM](https://forums.swift.org/t/swift-fosdem/67752),但被官方拒绝,2024 年再次申请,终于通过,正式会议于 2025 年 2 月召开,已经结束。 + +作为向开源社区展示 Swift 的一次重要机会,演讲主题也跟开源相关,涵盖:服务端、嵌入式、跨语言交互等内容,总计 15 场,每个在 20min 左右,所有视频内容都可以到 FOSDEM 查看。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海/北京/深圳/杭州] 抖音 - 基础技术 - iOS/Android + +[上海] BiliBili - 移动端开发实习生(社区生态)- iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#329-2025.03.31.md b/Reports/2025/#329-2025.03.31.md new file mode 100644 index 000000000..b3c62f3b7 --- /dev/null +++ b/Reports/2025/#329-2025.03.31.md @@ -0,0 +1,77 @@ +# 老司机 iOS 周报 #329 | 2025-03-31 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/329.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Understanding structural identity in SwiftUI](https://tanaschita.com/swiftui-structural-identity/) + +[@阿权](https://github.com/bqlin):SwiftUI 使用结构体描述视图,由 SwiftUI 内部完成视图的绘制与更新。而结构体标识则是视图层级中的唯一 id,用于识别状态变化前后的视图结构体是否是同一视图,进而进行更新和重绘。 + +文章介绍了 SwiftUI 结构体标识的基本原理和应用、SwiftUI 重绘机制以及 SwiftUI 结构体标识的具体实践。 + +## 文章 + +### 🐢 [Profiling apps using Instruments](https://developer.apple.com/tutorials/instruments) + +[@Smallfly](https://github.com/iostalks):这是苹果官方出品的 Instruments 教程。Instruments 主要用来分析应用程序的性能、资源使用和行为,了解如何提高响应性,减少内存使用,以及运行时的复杂的行为。该教程包含对卡顿的基础知识介绍,卡顿的分析和检测,并提供了卡顿的优化建议。 + +### 🐢 [充分理解 C/C++ 重要概念:运行时库](https://mp.weixin.qq.com/s/Fed-0uVaOGDUiftH43vnGA) + +[@极速男孩](https://github.com/ztlyyznf001):本文系统解析了 C/C++ 运行时库的核心概念与实现机制。运行时库作为程序运行的基础支撑,封装了操作系统 API(如内存管理 malloc/ 文件操作 fopen)、提供标准库函数(字符串 / 数学运算),并管理程序生命周期(全局变量初始化 / 资源清理)。跨平台差异显著:Linux 依赖 glibc/libstdc++,Windows 通过 MSVC 运行时库实现,Android/iOS 则采用轻量化 Bionic/libc++。开发中需警惕多实例问题(静态链接导致内存堆冲突)和多版本兼容性问题(GLIBC/C++ABI 不匹配),解决方案包括统一动态链接、规范跨模块接口设计(避免传递 C++ 对象)及固化工具链版本。 + +### 🐕 [Detecting body poses in a live video feed](https://www.createwithswift.com/detecting-body-poses-in-a-live-video-feed/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章介绍了如何利用苹果的 Vision 框架在 SwiftUI 应用中实时检测视频流中的人体姿态。主要步骤包括: + +1. 通过 `AVCaptureSession` 管理视频采集,处理权限申请,配置视频输入 / 输出格式,并调整画面方向以适应界面显示 +2. 使用 `UIViewRepresentable` 协议将 `AVCaptureVideoPreviewLayer` 集成到 SwiftUI 视图中,实现实时画面展示 +3. 创建 `PoseEstimationViewModel` 类处理视频帧,利用 Vision 的 `VNHumanBodyPoseRequest` 检测 19 个关键身体节点(如头、肩、肘、腕等),并建立关节连接关系(如肩到肘、膝到踝等)。 +4. 通过检测到的身体坐标点动态绘制骨骼连线,最终实现在视频流上叠加姿态骨架图的效果 + +文章提供了完整的代码实现思路,适用于健身追踪、AR 等场景开发。 + +### 🐎 [Why I Avoid Group](https://chris.eidhof.nl/post/why-i-avoid-group/) + +[@DylanYang](https://github.com/Dylan19Yang):作者通过一系列的 Demo 向我们展示了 Group 目前存在的一些问题。官方文档上写着作用于 Group 的 modifier 会作用在 Group 内的每一个元素上,但实际在模拟器上的表现并非如此。作者猜测可能和渲染 SwiftUI 的根结点实质是一个 UIKit 的 view 有关。如果使用一个 VStack 包裹 Group,则它的表现又符合预期了。 + +### 🐎 [这篇 GPU 学习笔记,详细整理了其工作原理、编程模型和架构设计](https://mp.weixin.qq.com/s/IzsI_dzX6AxFnJGg8zewEw) + +[@老驴](https://weibo.com/u/6090610445):最近 AI 大火也让 nvidia 再次在风口浪尖烧,你有没有想过 GPU 到底是怎么工作的?它为什么在特定应用下这么快?和我们日常写的代码、性能优化有什么关系? + +这篇文章用清晰的逻辑和大量实例,从 GPU 架构原理、并行执行模型到实际的 CUDA 编程,带你系统了解 GPU 背后的技术基础。即使你平时不写 CUDA,这些知识也能帮你更好地理解 Metal、CoreML 这些 Apple 平台下的 GPU 特性。 + +如果你是一名希望拓展技术广度的开发者,值得一读。 + +## 代码 + +### [FlowNavigation](https://github.com/magnuskahr/swiftui-flow-navigation) + +[Announcing FlowNavigation](https://www.magnuskahr.dk/posts/2025/03/announcing-FlowNavigation/) 本文介绍了作者开发的一个名为 FlowNavigation 的 SwiftUI 框架。该框架旨在简化线性流程的定义和管理 , 如注册流程。作者提供了一个示例代码 , 展示如何使用该框架来定义一个包含电子邮件、密码和提交屏幕的流程。该框架目前还在测试阶段,作者希望能够获得社区反馈并继续完善。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] Soul App - 终端技术团队 - iOS 架构/跨端容器专家 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#330-2025.04.07.md b/Reports/2025/#330-2025.04.07.md new file mode 100644 index 000000000..ab9fa4a23 --- /dev/null +++ b/Reports/2025/#330-2025.04.07.md @@ -0,0 +1,82 @@ +# 老司机 iOS 周报 #330 | 2025-04-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/330.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🐕 [Swift 6.1 Released](https://www.swift.org/blog/swift-6.1-released/) + +[@AidenRao](https://weibo.com/AidenRao):Swift 6.1 正式推出,核心更新: + +1. **并发优化**: `nonisolated` 支持类型和扩展,任务组子任务结果类型自动推断; +2. **OC 迁移:** 新增 `@implementation` 支持,允许在 Swift 中实现 Objective-C 类型,便于逐步迁移; +3. **开发体验**:尾随逗号支持扩展至参数列表、元组等场景; +4. **包管理**:新增 `package traits` 机制,适配跨平台条件编译; +5. **测试增强**:支持自定义测试前后逻辑,异常处理更便捷; +6. **文档工具**:Swift-DocC 优化符号链接可读性。 + +推荐通过 Xcode 16.3 或 `swiftly` 工具链安装体验。 + +## 新手推荐 + +### 🐕 [Modern URL construction in Swift](https://www.swiftbysundell.com/articles/modern-url-construction-in-swift/) + +[@阿权](https://github.com/bqlin):本文介绍了 Swift 在 URL 构建方面的现代解决方案,通过类型扩展、宏和新 API 的结合,实现了更安全、简洁的 URL 处理方式。开发者可根据项目需求选择合适方案,提升代码质量。具体内容为: + +1. 静态字符串构建 URL 使用 Optional 方式显得冗余,应直接强制解包。 + 1. 解法 1:添加 URL 扩展直接创建 URL 实例,内部解包为空时 fatallError,输出信息。 + 2. 解法 2:通过自定义宏创建 URL 实例,实现解包并抛出错误的逻辑。 +2. 对于动态构建的 URL,应使用更结构的 URL、URLComponents 拼接、构建方法,甚至能够直接获取本地常见目录的 URL。 + +## 文章 + +### 🐕 [Deploying a Swift Server App to Fly.io and Railway](https://swifttoolkit.dev/posts/deploy-fly-railway) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 本文介绍了如何使用 Vapor 框架部署 Swift 服务端应用程序到 Fly.io 和 Railway 平台。文章涵盖了初始化 Vapor 项目、编写 Dockerfile、以及在两个平台上部署应用的具体步骤。此外 , 还提到了一些进阶主题 , 如自定义域名和添加数据库服务等。 + +### 🐢 AI 产品经理进阶:万字深析大模型的 MCP([上](https://www.woshipm.com/ai/6190336.html) & [下](https://www.woshipm.com/ai/6190355.html)) + +[@EyreFree](https://github.com/EyreFree):这篇文章深度剖析了大模型的 MCP 技术。MCP 是 Anthropic 于 2024 年底开源的开放标准协议,旨在统一 AI 与外部数据源和工具的连接方式,降低集成成本。它采用客户端 - 服务器架构,基于 JSON-RPC 2.0 通信,定义多种原语规范交互。该技术已在智能问答、编程辅助、办公自动化等场景崭露头角。文章还全面分析了 MCP 的优势与局限,如标准统一、开源灵活,但也存在生态不完善、远程支持不足等问题。此外,还展望了其未来在完善远程云支持、构建 “应用商店” 式分发机制、拓展多模态应用等方面的演进方向,为 AI 从业者或对之感兴趣的同学提供了极具价值的参考。 + +### 🐕 [Fast & Fluid: Integrating Rust egui into SwiftUI](https://medium.com/@djalex566/fast-fluid-integrating-rust-egui-into-swiftui-30a218c502c1) + +[@david-clang](https://github.com/david-clang):作者在开发实时预览 SwiftData 和 CoreData 数据库的 Mac App [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,发现 SwiftUI 的 `Table` 性能相当差,尝试用 AppKit 的 `NSTableView` 也无法满足需求,最后用 Rust 的 UI 框架 `egui` 去优化性能。作者把 SwiftUI 中嵌入 `egui` 渲染视图的 Demo 整理成文章,还用代码示例展示如何在 SwiftUI 的 `NavigationSplitView` 中嵌入 `egui` 渲染的视图。以下是 `egui` 和传统 UI 框架的对比: + +- 传统 UI 框架(如 SwiftUI、UIKit)多采用**保留模式(Retained Mode)**,需显式管理 UI 组件状态(例如按钮状态、列表数据等),框架内部通过对比新旧状态差异来局部更新界面。 +- `egui` 的**即时模式(Immediate Mode)** 则相反:**每帧完全丢弃旧 UI 状态**,根据当前数据重新生成整个界面,通过高频重建实现“无状态化”。 + +虽然 Demo 中使用 `egui_wgpu_backend` 作为渲染后端,但它在 Metal 上渲染单帧需要 10 毫秒,作者在开发 [DataScout](https://apps.apple.com/us/app/datascout-for-sqlite-swiftdata/id6737813684) 时,通过自定义渲染后端,把帧渲染时间缩短到仅 1-2 毫秒,最终才实现高性能需求,可见把 “ SwiftUI 中嵌入 `egui` 渲染视图” 封装成成熟框架会比较难,但本文优化 SwiftUI 性能的思路值得我们学习。 + +### 🐎 [得物 iOS 启动优化之 Building Closure](https://mp.weixin.qq.com/s/xr43Xx-A3NT8lPGIii8pPA) + +[@Smallfly](https://github.com/iostalks):本文深入解析了 iOS 应用启动优化中常被忽视的 **Building Closure** 阶段(由 dyld 动态链接器负责),聚焦其耗时问题与优化实践。文章通过真实案例,揭示了某版本因 Building Closure 阶段耗时暴增 200ms 的根因定位过程,并最终通过 解决**Perfect Hash 算法**的哈希冲突,将关键函数耗时从 1200ms 降至 110ms。 + +文中详细剖析了 Building Closure 的工作原理(如首次启动生成缓存、Swift/ObjC 协议一致性处理),并提供了 **文件结构解析、耗时定位方法(Instrument 工具)及优化方案**,适合以下读者参考: +1. **iOS 开发工程师**:需优化应用启动速度,尤其是冷启动场景; +2. **性能调优团队**:关注底层 dyld 机制,探索启动耗时优化新方向; +3. **技术管理者**:了解复杂问题排查流程与跨团队协作经验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#331-2025.04.14.md b/Reports/2025/#331-2025.04.14.md new file mode 100644 index 000000000..6204de8d4 --- /dev/null +++ b/Reports/2025/#331-2025.04.14.md @@ -0,0 +1,80 @@ +# 老司机 iOS 周报 #331 | 2025-04-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/331.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Building a dependency injection framework](https://tanaschita.com/dependency-injection-building-lightweight-container/) + +[@阿权](https://github.com/bqlin):文章介绍了在 Swift 中如何从零到一搭建轻量级级依赖注入(DI)容器,内容包括: + +1. DI 容器设计:实现注册(`register`)和解析(`resolve`)依赖的基本功能,通过字典存储类型与工厂函数的映射。 +2. 生命周期管理:使用枚举 `DependencyLifetime` 区分瞬态(每次解析创建新实例)和单例(首次解析创建并缓存),通过单独的字典存储单例实例。 +3. 属性包装器 `@Injected`:简化依赖注入,声明属性时自动从容器解析依赖,提升代码简洁性。 +4. 实战示例:通过协议定义、容器配置和 SwiftUI 集成演示完整流程。 + +文章中的实现覆盖了 DI 的核心机制,有了这篇文章的基础,推荐大家再去阅读 [Swinject](https://github.com/Swinject/Swinject) 的实现,会对 DI 的实现有更深刻的理解。 + +## 文章 + +### 🐎 [注意,暂时不要升级 MacOS ,Flutter/RN 等构建 ipa 可能会因 「ITMS-90048」被拒绝](https://mp.weixin.qq.com/s/s9fJWOJNhOf9Beu60VDQUA) + +[@david-clang](https://github.com/david-clang):macOS 15.4 会导致 Flutter/RN 构建产物新增无效文件夹 `.Symbols` ,提交 App Store 审核会被拒。虽然文章还提供了临时解决办法,但还是建议非必要先不升级,因为调试 Flutter iOS 模拟器时会遇到 `flutter attach` 失效,无法 hot reload ([#166333](https://github.com/flutter/flutter/issues/166333)),该问题还没好的解决办法,可用真机调试先绕过。 + +### 🐕 [New in Swift 6.1: Test Scoping Traits](https://www.pointfree.co/blog/posts/169-new-in-swift-6-1-test-scoping-traits) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Swift 6.1 引入的 Test Scoping Traits 新特性,它彻底改变了测试代码的编写方式。通过自定义 TestTrait,开发者可以更优雅地管理测试上下文和全局状态,特别适合依赖注入和快照测试等场景。 +新特性主要优势包括: +1. 简化测试代码:用 @Test(.trait) 替代复杂的闭包嵌套 +2. 支持并发安全:完美适配 Swift Testing 的并行测试 +3. 三大流行库已适配:Dependencies、SnapshotTesting 和 MacroTesting 都支持新特性 + +现在升级到最新版本即可体验这些改进,让测试代码更简洁高效。 + +### 🐕 [Swiftdata Architecture Patterns And Practices](https://azamsharp.com/2025/03/28/swiftdata-architecture-patterns-and-practices.html) + +[@Barney](https://github.com/BarneyZhaoooo):本文以预算管理为例,展示了 Swift 原生框架下数据驱动的开发范式。主要介绍了苹果专为 `SwiftUI` 设计的 `SwiftData`。 +核心特性包括: +**1** **声明式建模** :`@Model` 宏简化模型定义,支持 `Codable` 类型与唯一性约束; +**2** **深度 SwiftUI 整合** :`@Query` 动态追踪数据变化,视图自动刷新; +**3** **业务逻辑内聚** :模型类直接嵌入唯一性验证、金额计算等规则; +**4** **灵活架构** :可选协议抽象数据层,适配长期维护或框架迁移; +**5** **云同步与预览** :默认 `CloudKit` 私有库同步,`PreviewModifier` 快速注入测试数据。 + +## 工具 + +### 🐎 [Introducing swiftly 1.0](https://www.swift.org/blog/introducing-swiftly_10/) + +[@DylanYang](https://github.com/Dylan19Yang):Swift 正式发布了它的工具链版本管理工具 swiftly,它可以帮助开发者更方便的在不同的平台上下载、安装指定版本的 Swift。借助 swiftly 的版本申明,可以更简单的在团队开发或者 CI/CD 环境中保持 Swift 的版本一致性。swiftly 一大亮点是它自身是由 Swift 开发而成的,因此它可以直接使用 Swift 内的标准库处理 HTTP 请求和文件系统读写等场景,它也利用可以和 C 桥接的特性使用了 C 的压缩库。对具体的使用方式感兴趣的同学可以阅读文章做进一步的了解。 + +## 音视频 + +### 🐢 [Spatial Rendering for Apple Vision Pro with ARKit, Metal, and Compositor Services by Warren Moore](https://www.youtube.com/watch?v=vO0M4c9mb2E) + +[@BluesJiang](https://github.com/BluesJiang): 《Metal by Example》的作者亲自亲自视频授课。这个视频介绍了 Vision Pro 上做 3D 内容所涵盖的所有知识点,包括 ARKit 渲染,Metal 渲染,自定义渲染器,空间手势,手部追踪,物理等,内容覆盖的很全面,适合想了解 VisionOS 在 3D 渲染方面如何切入的读者。视频作者的书也很值得跟着学一学。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#332-2025.04.21.md b/Reports/2025/#332-2025.04.21.md new file mode 100644 index 000000000..c9d2bc6dd --- /dev/null +++ b/Reports/2025/#332-2025.04.21.md @@ -0,0 +1,69 @@ +# 老司机 iOS 周报 #332 | 2025-04-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/332.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [DocC for Multi-Platform Documentation](https://alexanderweiss.dev/blog/2025-03-09-docc-for-multi-platform-documentation) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇文章介绍了如何手动创建 Swift 包的跨平台文档。虽然 DocC SPM 插件最近添加了对多目标文档生成的支持,但目前仍不支持跨平台包的文档生成。作者分享了一种解决方案,通过直接使用 Xcode 自带的 DocC 工具来实现。 + +文章详细讲解了三个主要步骤: +1. 为各平台构建项目并生成符号图 +2. 将.docc 包转换为 DocC 存档 +3. 将存档处理成可托管的 HTML 文件 + +作者提供了完整的代码示例,包括如何设置 DocC 包结构、创建 Info.plist 文件定义各平台的部署目标,以及编写 shell 脚本来自动化整个构建过程。这种方法可以有效地显示每个 API 在 iOS、watchOS、visionOS、tvOS 和 macOS 上的可用性。 + +### 🐕 [iOS 静态代码检查方案解读](https://mp.weixin.qq.com/s/yYmwuD3wl77Je4m1zFGfWQ) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章对比了 iOS 开发中三大主流静态代码检查工具:SonarQube、Infer 和 Clang Static Analyzer。SonarQube 存在资源消耗大、配置复杂及 Xcode 适配等问题;Infer 存在语言局限和误报、漏报等问题;Xcode 原生集成的 Clang Static Analyzer,相比 SonarQube 和 Infer,Clang 静态分析在底层问题检测、编译阶段的高效性和多语言支持方面具有显著优势。其凭借增量分析、路径敏感检测和零配置优势,通过脚本筛选增量文件并转换分析结果,可以实现高效自动化检查与定制化报告生成,成为平衡开发效率与质量的中大型项目优选方案。 + +### 🐕 [How to inspect .ipa files and secure your iOS app from common mistakes](https://www.artemnovichkov.com/blog/how-to-inspect-ipa-files) + +[@Barney](https://github.com/BarneyZhaoooo):本文介绍了如何检查 iOS 应用的 .ipa 文件结构,揭示潜在安全隐患。通过 Apple Configurator 等工具获取 .ipa 文件后,可解压分析 Info.plist(含明文密钥 /URL scheme)、Frameworks(第三方 SDK)和 Resources(测试账户 / 配置文件)。并提出三准则:勿在 Info.plist 存敏感数据,移除开发测试资料,避免明文存储密钥。强调攻击者常用逆向工具(如 Hopper)解析未加密信息,开发者应定期自查 .ipa 文件,强化安全防护。 + +### 🐎 [你为什么需要了解 Dart AST?一个简单的 bug 带你快速认识下 Dart Kernel AST](https://mp.weixin.qq.com/s/DgC0C3U9-9u8KFeM4Ud6mw) + +[@david-clang](https://github.com/david-clang):作者在调用 extension 拓展 BuildContext 的 context.l10n 时报运行时错误 `NoSuchMethodError`,最终通过 [ast_to_text.dart](https://github.com/dart-lang/sdk/blob/ee32a22712b64006b98a3923ff77f4d9476e2f84/pkg/kernel/lib/text/ast_to_text.dart#L5) 相关工具将 IR 层的 dill 文件转成可读文本,定位到问题根本原因是未显式声明函数参数是 BuildContext 类型,导致编译时 context 被推断为 dynamic 类型,最终导致运行时 `NoSuchMethodError` 错误。文章里通过分析 Dart AST 来找到代码根本问题的思路值得我们学习。 + +### 🐎 [SwiftUI Keyboard Shortcut Scope](https://useyourloaf.com/blog/swiftui-keyboard-shortcut-scope/) +[@Smallfly](https://github.com/iostalks):本文聚焦 SwiftUI 键盘快捷键的「跨视图生效」问题,当控件通过导航跳转离开屏幕时,其关联的快捷键仍被系统识别并响应,导致操作冲突。核心原因是系统按视图层级解析快捷键,而非视图可见性。解决方案是利用状态变量动态禁用父视图控件,间接关闭其快捷键响应。若你在 SwiftUI 开发中需精准管理多层级导航的快捷键作用域,本文可帮助你快速定位逻辑隐患。 + +## 代码 + +### 🐎 [Supercharging SwiftUI Text with Dynamic Content Styling](https://danielsaidi.com/blog/2025/04/08/supercharging-swiftui-text-with-dynamic-content-styling) + +[@阿权](https://github.com/bqlin):文章提供了一种扩展 SwiftUI `Text` 视图的思路,通过自定义文本替换规则,允许对文本中的特定字符串(如单词或段落)应用自定义样式。核心实现包括: + +1. `TextReplacementView`:提供单个或多个替换规则的初始化接口。 +2. `processReplacements`:查找文本中的匹配范围,按顺序处理非重叠替换,拼接生成带有不同样式的 `Text` 视图。 + +文章最后展示了简单和复杂场景下的用法,支持灵活的视图修饰符(如字体、颜色、斜体等)。其优势在于简化了原有通过组合多个 `Text` 视图实现样式定制的繁琐流程,提供了更统一的解决方案。 + +更详细的实现和用法可前往开源库 [TextReplacements](https://github.com/danielsaidi/TextReplacements)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#333-2025.04.28.md b/Reports/2025/#333-2025.04.28.md new file mode 100644 index 000000000..a13285f33 --- /dev/null +++ b/Reports/2025/#333-2025.04.28.md @@ -0,0 +1,88 @@ +# 老司机 iOS 周报 #333 | 2025-04-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/333.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +下周就是五一劳动节了,老司机周报轮休一周,提前祝大家劳动节快乐! + +## 新闻 + +### [重磅上线 | 一次性购买通知 ONE_TIME_CHARGE 即将正式发布 / A new App Store Server Notification type will soon be available](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) + +[@SeaHub](https://github.com/SeaHub):自 2024/06/10 沙箱环境首发以来,该通知历经大半年的稳定性验证,现即将进入现网发布阶段。以下内容值得我们重点关注: + +1. 全商品类型覆盖能力 +突破原有仅自动续期订阅型存在后台发货通知的限制。新通知囊括消耗型商品、非续期订阅型商品及非消耗型商品等所有类型,彻底解决一次性购买场景的后台通知缺位问题 + +2. 客户端依赖解耦 +通过一次性购买通知,针对发货阶段,我们不再需要依赖客户端与服务端通信。客户端不再作为发货主路径,实现发货逻辑的解耦 + +3. 实时发货闭环 +结合一次性购买通知与 appAccountToken 订单透传字段,可构建起媲美国内主流支付平台(微信支付 / 支付宝)的实时发货体系 + +该通知于 2025/05/27 正式上线,推荐大家优先接入。我们通过一次性购买通知更加优雅的处理订单发货场景,构建更健壮的业务履约体系 + +## 新手推荐 + +### 🐎 [Using singletons in Swift 6](https://www.donnywals.com/using-singletons-in-swift-6/) + +[@Smallfly](https://github.com/iostalks):本文介绍了 Swift 6 中单例模式因并发安全性触发的编译错误及解决方案。针对「全局可变状态不安全」和「非 `Sendable` 类型共享状态」等典型问题,文章提出多场景应对策略:通过 `MainActor` 隔离属性或类型、将共享实例重构为 `actor`、使用 `Sendable` 协议确保类型安全,并谨慎使用 `nonisolated(unsafe)` 或 `@unchecked Sendable` 作为临时过渡。作者强调遵循 Swift 6 规范的同时,平衡代码安全性与迁移成本。 + +### 🐎 [Using Swift ’ s defer keyword within async and throwing contexts](https://www.swiftbysundell.com/articles/using-defer-within-async-and-throwing-contexts/) + +[@阿权](https://github.com/bqlin):`defer` 常用在代码块(花括号)作用域结束时执行代码。我们常常用来清理在当前作用域内创建的资源或其他上下文,如配置 lock-unlock。这一思想在 async 方法中同样适用,`defer` 为异步流程提供一个处理成功或失败绝佳的节点,类似异步的 finally。不过 `defer` 会打破传统的流程控制流顺序,带来便利的同时也会削弱一些代码可读性。详细可阅读原文,文章从这几方面介绍了 `defer` 的应用: + +1. `defer` 关键字基础介绍。 +2. 在异常抛出场景中的应用。 +3. 在异步场景中的应用。 + +## 文章 + +### 🌟 🐕 [Dynamically Constructing Generic Types in Swift](https://kyleye.top/posts/dynamic_generic/) + +[@JonyFang](https://github.com/jonyfang): 在 Swift 这种强类型语言里,运行时拼泛型一直是个痛点 —— 比如我们想动态生成 `Optional`、`Array` 这样的类型,通常只能在编译期确定。 +- 作者先带着扒了扒 Swift 元数据(Metadata)的底层结构,包含 `Metadata`、`ProtocolDescriptor`、`ConditionalProtocolDescriptor` 等核心数据布局,并封装成易用的辅助类型,帮你在运行时拿到任意类型的信息和协议类型。 +- 接着用 SwiftUI 的 `_ConditionalContent` 举例,演示如何调用元数据访问器函数,动态组装出三种常见场景下的泛型:`optional`、`either`、`atom`,整个过程零配置、可复用。 +- 最后给出一个基于 Swift Runtime 的完整实现方案,从元数据解析、函数指针调用到类型实例化全流程演示,并对该方案在 ABI 稳定性和未来演进方向上的局限性给出了思考。 + +如果你在做框架或底层库,需要在运行期才知道类型,或者想探索 Swift ABI / Runtime 的更多玩法,这篇文章绝对值得一读。 + +### 🐕 [20 years of Git. Still weird, still wonderful.](https://blog.gitbutler.com/20-years-of-git/) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章回顾了 Git 诞生 20 周年的历程,最初由 Linus 为解决 Linux 内核协作问题开发,以高效跟踪代码快照为核心设计。从仅 7 个底层命令的"内容跟踪器"起步,逐步整合社区贡献(如 rebase、log 功能),演变为分布式版本控制系统。GitHub 的诞生及其章鱼猫形象推动普及,使其成为全球开发基石。20 年来核心数据结构和"愚蠢但极快"的理念未变,持续支撑从代码管理到内容分发的创新(如 GitButler),奠定现代软件开发基础设施地位。 + +### 🐕 [SwiftFiddle/swiftregex: Swift Regex is an online tool to learn, build and test Swift Regex Regex and Regex Builder.](https://github.com/swiftfiddle/swiftregex) + +[@Barney](https://github.com/BarneyZhaoooo):**Swift Regex** 是开源在线工具,支持 Swift 正则表达式及 Regex Builder 的实时测试与调试,提供语法高亮和错误定位。基于 Swift、JavaScript 及 Vapor 框架开发,采用 MIT 协议,含 Docker 部署配置。支持命名捕获组、自动化依赖更新及安全策略,适合开发者快速验证正则逻辑。 + +### 🐕 [Creating MCP Servers in Swift](https://www.artemnovichkov.com/blog/creating-mcp-servers-in-swift) + +[@Kyle-Ye](https://github.com/Kyle-Ye):作者深入探讨了如何在 Swift 中创建 MCP 服务器。这篇文章不仅为开发者提供了有关 MCP(Model Context Protocol)通信协议的详细背景,还通过代码示例展示了如何在 Swift 中实现一个基本的 MCP 服务器,最后介绍了如何在 VSCode 和其他客户端中使用该 MCP 服务器。 + +### 🐕 [Make your app content show on Spotlight](https://www.createwithswift.com/make-your-app-content-show-on-spotlight/) + +[@极速男孩](https://github.com/ztlyyznf001):这篇文章介绍了如何让应用内容出现在 iOS 的 Spotlight 搜索中。主要有两种方法:一是通过 AppShortcutsProvider.updateAppShortcutParameters() 自动索引应用数据;二是使用 Core Spotlight API 手动创建索引,步骤包括为数据模型实现 IndexedEntity 协议、设置 attributeSet 元数据、在添加或删除内容时分别调用 indexAppEntities 和 deleteAppEntities 方法。文章还提到从 iOS 18.4 起,可以用 hideInSpotlight 控制内容是否显示在搜索结果中。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#334-2025.05.12.md b/Reports/2025/#334-2025.05.12.md new file mode 100644 index 000000000..250e780e8 --- /dev/null +++ b/Reports/2025/#334-2025.05.12.md @@ -0,0 +1,79 @@ +# 老司机 iOS 周报 #334 | 2025-05-12 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/334.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Adding dependencies to binary Swift packages](https://danielsaidi.com/blog/2025/05/02/adding-dependencies-to-binary-swift-packages) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章介绍了作者如何为 Swift 的二进制包(binary Swift packages)添加依赖的问题和解决方案。普通 Swift 包可以直接声明依赖,但二进制包无法这样做,这给闭源 SDK 的开发带来了挑战。过去作者采用复制依赖库源代码到二进制包中的方式来解决,但这种方式混乱、低效、并增加了编译时间。后来作者发现可以通过在 Swift 包中同时声明多个二进制目标(binary target),并将它们一起加入到产品中,从而实现依赖的间接引入,这样包管理器就会自动下载和链接所需的依赖库。作者用这种方法解决了 VietnameseInput 这类闭源 SDK 的依赖管理问题,大大简化了项目结构并提升了构建效率,同时也指出这种方案尚未在更多场景下验证,需要更多开发者一起探索和交流。 + +### 🐎 [支付宝客户端 Kotlin/Native 包体积优化实践](https://mp.weixin.qq.com/s/vcuo2YJsrn3kQcTNuoLuGQ) + +[@Kyle-Ye](https://github.com/Kyle-Ye):支付宝在使用 Kotlin/Native 进行跨端开发时 , 针对应用安装包体积过大的问题 , 采取了一系列优化措施。通过增加 LLVM 优化参数和 DCE 优化,支付宝团队成功将 iOS 和鸿蒙平台上的 Kotlin/Native 应用包体积分别减少了 50% 和 15% 以上。对于正在使用或计划使用 Kotlin/Native 的开发者来说,这篇文章或是一份很好的优化实践参考。 + +### 🐢 [使用 AVPlayer 播放 FairPlay DRM 视频的最佳实践](https://mp.weixin.qq.com/s/vnK8GZP9ucvML6GQ7EJkeQ) + +[@阿权](https://github.com/bqlin):DRM,数字版权管理,可以简单理解为加密媒体 / 音视频。文章围绕使用 AVPlayer 播放 FairPlay DRM 视频展开,详细介绍了相关技术要点和操作方法,具体内容如下: + +1. DRM 介绍:DRM 原理、方案;FairPlay 播放 DRM 视频原理。 +2. FairPlay 密钥的两种管理方式:AVAssetResourceLoader、AVContentKeySession,及其应用场景。 +3. 使用 AVAssetDownloadTask 下载 DRM 资产:使用流程、下载后本地文件组成。 + +对于 DRM 视频,其场景不仅可用于点播视频,直播视频场景也可以使用。只要是 Apple 支持的格式,使用系统的 AVPlayer 播放 DRM 足矣,系统提供一定自由度来让用户定义自己的加解密业务流程,剩下的音视频编解码就交由 AVPlayer 自身管理了。这样实现一个满足自身业务的 DRM 播放器门槛自然就低了很多,也不一定都要白手起家捣鼓起 FFmpeg 来。 + +### 🐕 [Gatekeeper change in macOS 15.4](https://lapcatsoftware.com/articles/2025/4/8.html) + +[@Cooper Chen](https://github.com/cjlcooper):苹果在 macOS 15.4 中调整了安全策略:用户下载文件后,拖拽至部分应用(如 TextEdit)时会反复弹出安全警告,而 Preview 等应用却不受影响。 +问题核心: +- 触发条件取决于应用声明的文件类型。若包含"高危类型"(如 Unix 可执行文件),任何下载文件都会触发警告 +- 文件扩展名直接影响判定结果,暴露逻辑漏洞 + +解决方案: +- 普通用户:终端执行 xattr -d com.apple.quarantine 文件名 +- 开发者:需检查应用配置,避免声明高危文件类型 + +这一调整究竟是安全升级还是过度防护?目前苹果尚未回应,用户可暂用上述方法应对。 + +### 🐎 [How a Single Line Of Code Could Brick Your iPhone](https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone) + +[@david-clang](https://github.com/david-clang):本文介绍了 [Darwin Notify](https://developer.apple.com/documentation/darwinnotify) 的系统漏洞,仅一行代码 `notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")` 即可让设备进入“恢复中”界面且无法退出,只能重启设备,再利用 iOS 自动唤醒小组件的机制,使设备在每次重启后重复触发漏洞,最终实现一行代码把 iPhone 变砖。不限制该敏感通知发送权限的漏洞疑似 [iOS 18.2 beta 2](https://github.com/blacktop/ipsw-diffs/blob/fee5b3c8c18e4639e74677dd3cc1fa80203e64f6/18_2_22C5109p__vs_18_2_22C5125e/Entitlements.md?plain=1#L2336) 引入的,在作者报告漏洞后,[iOS 18.3](https://support.apple.com/zh-cn/122066) 已修复。 + +## 工具 + +### [DeepWiki](https://deepwiki.com/) + +[@EyreFree](https://github.com/EyreFree):DeepWiki 是一个将 GitHub 仓库转化为交互式 wiki 的工具网站,它能够根据项目代码、文档等内容为 GitHub 上的 Public 项目生成详细文档、绘制交互式图表、提供对话式 AI 助手等。用法是把 GitHub 项目 URL 中的 `github` 换成 `deepwiki`,例如 kingfisher 的对应访问地址就是 [deepwiki.com/onevcat/Kingfisher](https://deepwiki.com/onevcat/Kingfisher),或直接在 DeepWiki 官网搜索仓库名称,主流项目基本上已经做了预处理,搜不到的话在主页点击 `Add repo` 等待处理即可。 + +## 代码 + +### [swift-subprocess](https://github.com/swiftlang/swift-subprocess) + +[@kemchenj](https://kemchenj.github.io/):Swift 近日开源了 swift-subprocess 这个库,作为 Swift Foundation 团队的提案,旨在提高 Process 相关 API 的易用性,支持更多的 Swift 现代化的特性,设计部份参考了 Python 和 Rust,目前属于 0.1 版本,并且在后续可能会直接加入 Swift Foundation 库。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [深圳] Lalamove 司机端(Huolala 海外业务)- iOS + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#335-2025.05.19.md b/Reports/2025/#335-2025.05.19.md new file mode 100644 index 000000000..19919ec5b --- /dev/null +++ b/Reports/2025/#335-2025.05.19.md @@ -0,0 +1,86 @@ +# 老司机 iOS 周报 #335 | 2025-05-19 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/335.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Apple 公布将于今年晚些时候推出的强大辅助功能](https://www.apple.com.cn/newsroom/2025/05/apple-unveils-powerful-accessibility-features-coming-later-this-year/) + +苹果在辅助功能的上的设计还是非常先进的,现有的一些辅助功能适配起来相对来说还是比较轻松的,期待苹果更多的辅助功能。 + +## 文章 + +### 🐎 [UIApplication delegate deprecation coming in iOS 19 SDK](https://lapcatsoftware.com/articles/2025/4/5.html) + +[@Damien](https://github.com/ZengyiMa):作者通过关注 WebKit 提交记录发现 iOS 19 SDK 中 UIApplicationDelegate 协议中的部分 API 将被弃用,原因是修复因新 SDK 导致的弃用警告,作者预测“新 SDK ”指的是即将在 6 月 WWDC 发布的 iOS 19,苹果工程师们已经在用 iOS 19 SDK 编译 WebKit,所以出现了这些弃用警告。 + +### 🐕 [Using Model Context Protocol in iOS apps](https://www.artemnovichkov.com/blog/using-model-context-protocol-in-ios-apps) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):MCP(Model Context Protocol,模型上下文协议)是一种用于大语言模型(LLM)与外部工具交互的协议。它允许模型在对话过程中调用开发者自定义的函数(称为“工具”),以访问本地或远程的数据和服务,从而增强模型的实际能力。这篇文章介绍了如何在 iOS 应用中使用 Model Context Protocol(MCP)集成大模型能力。作者通过示例展示了如何实现一个 MCP Server(用于获取 Apple Health 中的血压数据)和一个 MCP Client(通过 Anthropic Claude API 实现聊天功能)。整个流程包括定义工具、调用本地服务、解析大模型响应,并在用户请求与工具调用之间建立桥梁,实现智能对话与本地数据交互的结合。 + +### 🐕 [Xtool: cross-platform Xcode replacement. Build iOS apps on Linux and more!](https://forums.swift.org/t/xtool-cross-platform-xcode-replacement-build-ios-apps-on-linux-and-more/79803) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这篇贴子介绍了作者的开发名为 Xtool 的跨平台 Xcode 替代工具。Xtool 可以在 Linux 和 Windows 上构建和部署 iOS 应用程序 , 同时也可以在 macOS 上替代 Xcode。它支持使用 SwiftPM 构建 iOS 应用程序、签名和安装应用程序。中间还提到了一些 Xtool 目前还不支持的功能 , 如 Interface Builder、资产目录和 LLDB 调试等,作者表示未来会继续完善这些功能。 + +### 🐕 [Vibe Xcoding your apps](https://tuist.dev/blog/2025/05/13/vibe-xcoding) + +[@EyreFree](https://github.com/EyreFree):本文探讨了 LLMs 驱动的氛围编程(Vibe Coding)在 Xcode 生态的应用,介绍了 Alex、CopilotForXcode 等社区开发的 AI 代码助手,提及 MCP 协议对上下文交互的作用。同时指出了 Xcode 的扩展性局限,期待苹果开放底层接口(如借鉴 VSCode 模式)优化集成,强调了上下文、运行时数据和文档对 AI 辅助的重要性。作者认为氛围编程将推动苹果革新开发者工具,建议感兴趣的朋友持续关注社区在 Xcode 与 AI 整合方面的探索。 + +### 🐎 [A flowing WebGL gradient, deconstructed](https://alexharri.com/blog/webgl-gradients) + +[@莲叔](https://github.com/aaaron7): 一篇非常棒的科普文章,通过由浅入深的例子,娓娓道来的揭开了复杂动效的神秘面纱。本质上,绝大多数动画都可以解构为 时间 + 公式 + 图形 api。本篇文章从渐变开始、过度到波浪、贝塞尔曲线等复杂动效,都以思路,公式到代码予以实现,一直到最后实现了一个非常炫酷的动态模糊效果,标题中虽然有 WebGL,但绝大多数代码其实可以非常方便的移植到其他图形 api,如 OpenGL 和 Metal 等等。对动画和图形学有兴趣的同学千万不能错过。 + +### 🐕 [Unlocking the Real Power of Swift 6's Typed Throws with Error Chains](https://www.fline.dev/swift-6-typed-throws-error-chains/) + +[@阿权](https://github.com/bqlin):本文围绕 Swift 6 的类型化抛出(Typed Throws)特性展开,重点解决错误处理中的「嵌套地狱」问题,核心内容如下: + +1. 类型化抛出的优势与挑战 + - 优势:编译时错误检查、类型安全、自文档化 API、IDE 支持。 + - 挑战:抛出类型只能指定一个,不支持嵌套。多层架构中错误需手动转换,导致代码冗余、类型激增和上下文丢失。 +2. Catching 协议与 [ErrorKit](https://github.com/FlineDev/ErrorKit) 解决方案 + - 引入 ErrorKit,通过 `Catching` 协议为错误类型添加 `caught(Error)` case,统一包装子层错误。 + - 关键函数: + - `catch` 函数:自动将闭包中抛出的错误包装为当前层错误类型,避免手动转换。 + - `errorChainDescription` 函数:递归构建层级化错误链,保留原始错误上下文,提升调试效率。 +3. 总结 + - 类型化抛出结合 `Catching` 协议,在保证类型安全的同时简化错误处理,ErrorKit 提供的工具链进一步增强了调试能力。 + - 适用于复杂多层架构,尤其适合需要清晰错误追踪和高效调试的场景。 + +### 🐕 [Debug crashes in iOS using MetricKit](https://ohmyswift.com/blog/2025/05/08/debug-crashes-in-ios-using-metrickit/) + +[@Barney](https://github.com/BarneyZhaoooo):文章介绍如何通过苹果 MetricKit 实现系统级崩溃诊断,捕获内存 / 系统信号等传统工具遗漏的崩溃。涵盖框架配置、调用栈分析和 iOS 版本差异化报告机制(13-14 每日汇总,15+ 即时推送),提供崩溃模拟方案,并展示与 Zoho Apptics 整合实现符号解析与数据可视化。 + +### 🐕 [Fitting the Lapse experience into 15 MegaBytes](https://blog.jacobstechtavern.com/p/f7411f56-a502-4ef4-81b1-aef15238d460) + +[@DylanYang](https://github.com/Dylan19Yang):本文讲述了作者在开发 App Clip 时如何将包体压缩到 15 MB 的方式。作者通过重构依赖关系,减少核心功能的依赖库大小,减少、压缩内置的图片、字体等文件,分割核心模块,较少不必要的代码,裁剪字体包,编译优化等各种手段来极致的压缩包体。虽然这是 App Clip,但是对 App 本体的包体有诉求的开发者也有不错的参考价值。 + +## 代码 + +### [ButtonKit](https://github.com/Dean151/ButtonKit) + +[@Smallfly](https://github.com/iostalks):ButtonKit 的设计背景源于 SwiftUI 对异步任务交互的不足,旨在简化开发者在处理复杂用户交互时的工作量。其主要作用是提供一个支持异步操作、进度展示和自定义样式的按钮组件,特别适合需要处理网络请求、文件操作或其他耗时任务的 SwiftUI 应用。开发者可以通过这个库减少样板代码,提升代码可读性和用户体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#336-2025.05.26.md b/Reports/2025/#336-2025.05.26.md new file mode 100644 index 000000000..70e209b0d --- /dev/null +++ b/Reports/2025/#336-2025.05.26.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #336 | 2025-05-26 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/336.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [LLM 学习笔记:最好的学习方法是带着问题去寻找答案](https://mp.weixin.qq.com/s/T7aD9diSNymHhv68FSaSZA) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章以日常 AI 聊天场景为切入点,生动解析了大语言模型背后的技术原理。特别值得关注的是: + +1. 完整训练流程剖析 +- **数据清洗**:详细讲解如何通过 MinHash 去重、PII 移除、Gopher 过滤等技术处理海量原始数据 +- **Tokenization 优化**:深入解析 BPE/WordPiece 算法,对比不同模型的词汇表设计(如 GPT-4 的 10 万 token 词汇表) +- **分布式训练**:揭秘千亿参数模型如何在数千 GPU 上高效并行训练 +- **监督微调(SFT)**:展示如何用人工标注的高质量对话数据优化模型输出 +- **奖励建模(RM)**:详解如何训练小型网络评估回答质量,实现人类偏好对齐 + +2. DeepSeek-R1 的创新实践 +- **GRPO 算法详解**: + - 创新性地采用分组相对策略优化(Group Relative Policy Optimization) + - 通过分组奖励估计替代传统批评模型,降低 40% 训练成本 + - 结合准确性奖励(基于规则验证)和格式奖励(强制结构化输出) + +- **自主推理能力涌现**: + - 训练过程中自然发展出自我验证和反思能力 + - 在数学(AIME 2024)任务上 pass@1 达 71% + - 自动生成长思维链(CoT)推理过程,平均生成 500+ 推理 token + +文章用大量实例和图表,将复杂的模型训练过程讲解得通俗易懂。无论是想了解 AI 工作原理的初学者,还是希望深入掌握训练技巧的开发者都能从中获得启发。 + + +### 🐎 [What's new in Swift 6.2?](https://www.hackingwithswift.com/articles/277/whats-new-in-swift-6-2) +[@Smallfly](https://github.com/iostalks):这篇文章介绍了 Swift 6.2 将会迎来的重大更新,聚焦于提升开发效率与代码安全性。其核心改进包括: + +1. **并发编程简化**:通过编译器标志 `-default-isolation MainActor` 支持模块级主线程默认隔离,大幅降低异步代码复杂度;新增 `Task.immediate` 实现同步任务初始化,优化执行逻辑。 +2. **语法增强**:引入原始标识符(如 `` `Strip HTML tags`() ``)提升测试可读性,字符串插值支持默认值(`\(age, default: "Unknown")`),KeyPath 扩展支持方法调用(`map(\.uppercased())`)。 +3. **工具升级**:`Backtrace` API 提供运行时堆栈追踪,任务命名功能(`Task(name: "FetchNews")`)助力异步调试,`InlineArray` 实现高性能定长存储。 +4. **测试革新**:支持验证程序崩溃逻辑(`#expect(processExitsWith:)`),失败测试可附加日志 / 数据(`Attachment.record()`)。 +5. **安全强化**:严格内存检查要求显式标记 `@unsafe` 代码,全局 Actor 隔离协议提升并发安全。 + +此次更新通过 20+ 项提案优化了语言一致性,为开发者提供更简洁、安全的工具链,尤其助力 SwiftUI 和服务器端开发的深度整合。 + +### 🐎 [Dependency container on top of task local values in Swift](https://swiftwithmajid.com/2025/04/30/dependency-container-on-top-of-task-local-values-in-swift/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章由 Swift 专家 Majid 撰写,深入探讨了 Swift 并发编程中的 Task Local Values(任务本地值),并创新性地将其应用于依赖注入容器的实现。 +文章首先解析了 @TaskLocal 宏的核心机制,展示了它如何在异步任务间隐式传递数据,类似于 SwiftUI 的 Environment。随后,作者通过构建一个支持多环境(生产 / 测试)的依赖容器,演示了如何利用这一特性优雅地管理全局依赖,特别是在单元测试中快速切换 mock 实现。适合中高级 Swift 开发者学习现代并发编程范式,为复杂应用架构提供新思路。 + +### 🐎 [2025 上半年 Flutter iOS 大坑超汇总,看看你踩中了没](https://mp.weixin.qq.com/s/JceoW5K554Gg3QYZoVYbYw) + +[@david-clang](https://github.com/david-clang):本文汇总了 2025 上半年 Flutter iOS 影响比较大的 6 个问题,好在这些问题都有对应的解决办法,它们分别是: + +1. iOS 18.4 Beta 的 JIT 权限问题([#163984](https://github.com/flutter/flutter/issues/163984)) +2. macOS 15.4 打包 IPA 的 ITMS-90048 错误([#166367](https://github.com/flutter/flutter/issues/166367)) +3. macOS 15.4 模拟器的调试服务问题([#166333](https://github.com/flutter/flutter/issues/166333)) +4. iOS 设备 Hot Restart 延迟([#165656](https://github.com/flutter/flutter/issues/165656)) +5. iOS 18.5 Beta 字体粗细异常([#167343](https://github.com/flutter/flutter/issues/167343)) +6. iOS 输入框崩溃问题([#138464](https://github.com/flutter/flutter/issues/138464)) + +### 🐎 [Default isolation with Swift 6.2](https://www.massicotte.org/default-isolation-swift-6_2) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者通过 Swift 默认可见性的类比形象的为大家解释了默认隔离态 (Isolation) 的含义。修改默认隔离态是 Swift 6.2 新引入的特性,帮助开发者方便的修改一个模块默认的隔离态。原先模块默认的隔离态均为无隔离 (nonisolated),而通过修改默认隔离态,我们可以将一个模块的隔离态默认改为使用主线程隔离,相当于默认带上了 `@MainActor` 。不过作者随后也提到此修改有利有弊,大家实际使用时需要认真权衡。 + +## 代码 + +### [OpenAsyncImage](https://github.com/OpenSwiftUIProject/OpenAsyncImage) + +SwiftUI 的 `AsyncImage` 开源 backport: + +- 最低支持 iOS 13 +- 基于 iOS 18 的 `State.wrappedValue` setter 进行优化 +- 全平台统一一致的行为 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#337-2025.06.09.md b/Reports/2025/#337-2025.06.09.md new file mode 100644 index 000000000..a8427d244 --- /dev/null +++ b/Reports/2025/#337-2025.06.09.md @@ -0,0 +1,87 @@ +# 老司机 iOS 周报 #337 | 2025-06-09 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/337.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [Optimized mathematical computations in Swift](https://swiftwithmajid.com/2025/05/13/optimized-mathematical-computations-in-swift/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章介绍如何用 `Swift` 的 `Accelerate` 框架 (特别是 `vDSP` 模块) 高效处理大规模数学计算 (如求和、平均值、标准差)。它替代传统低效方法(如 `reduce`), 显著提升大数据场景性能 (如百万级健康数据点)。核心展示了 `vDSP.sum`、`vDSP.mean` 和 `vDSP.standardDeviation` 的简洁用法,并指出该框架还支持更复杂计算(如机器学习、信号处理)。 + +### 🐢 [微信自研高性能推理计算引擎 XNet-DNN:跨平台 GPU 部署大语言模型及优化实践](https://mp.weixin.qq.com/s/QNQpWKX3EuoTJvBNrIqmPQ) + +[@Cooper Chen](https://github.com/cjlcooper):在 AI 大模型落地浪潮中,微信团队的 XNet-DNN 引擎以“一次开发,全平台高效运行”的理念,解决了 LLM 部署的两大痛点:硬件碎片化适配和边缘计算性能瓶颈。其技术突破性体现在三方面: + +- 跨平台统一性 +-- 通过自研 RCI 框架,将 NVIDIA TensorCore、Apple M 系列 GPU、高通 Adreno 等异构硬件的计算能力抽象为统一接口,大幅降低开发成本。对比社区方案(如 llama.cpp),仅需少量代码即可实现更广的硬件覆盖。 + +- 性能压榨艺术 +-- 从宏观的系统级优化(Command Tape 减少 CPU 开销)到微观的指令级调优(寄存器分配、Cache 命中),结合硬件逆向工程,真正“榨干”每颗 GPU 的算力潜力。实测显示,其推理速度在多个平台领先竞品 30% 以上。 + +- 工业级落地价值 +-- 包体积优化适合移动端,长序列支持(FlashAttention-2)契合实际业务场景,且已通过微信生态验证。对于亟需在端侧部署 LLM 的开发者,XNet-DNN 提供了从理论到实践的完整技术路径。 + +该技术特别适合三类专业人士深入研读:需要跨平台部署大语言模型的工程师可通过该引擎实现"一次开发,多端适配",大幅提升开发效率;专注边缘计算性能优化的架构师能从其系统级设计思路中获得异构硬件资源调度的创新启发;而致力于 GPU 底层调优的研究者则可借鉴其从硬件逆向到指令级优化的完整方法论,这套基于 Roofline 模型和微基准测试的优化体系具有普适性参考价值。 + +### 🐕 [一行代码解决 iOS 18 iPad TabBar 位置变化,还你熟悉的底部导航](https://mp.weixin.qq.com/s/i5ydTkzlyxcgdQQ39b7lnA) + +[@BluesJiang](https://github.com/bluesjiang): 在 WWDC24 上,苹果对 iPadOS 上的原生 TabBar Controller 的 UI 作了很大的改版。将 SideBar 移动到了顶部,原本在底部的 UI 也移动到了页面的顶部。这种底层 UI 的改动影响到了我们线上的 UI 表现。这篇文章就给出了三个可行的解决方案,将 UI 还原成原来的的样子, + +### 🐎 [Compose Multiplatform Skia 对比 Flutter Impeller ,都是跨平台自绘有什么差异](https://mp.weixin.qq.com/s/o0vopxuOcqzT47R0Pb2EkA) + +[@david-clang](https://github.com/david-clang):本文大概介绍了 Compose Multiplatform 中的 Skia 和 Flutter 中的 Impeller 的差异,它们最大的区别是两个: + +1. Impeller 定位只为 Flutter 服务,而 Skia 更多考虑兼顾通用性支持。 +2. Impeller 着色器是提前编译,而 Skia 是运行时动态编译。 + - Impeller:通过 `impellerc` 工具链在应用构建期将 GLSL 转换为 SPIR-V ,再编译为平台原生代码(如 Metal MSL),彻底消除运行时编译开销。 + - Skia:依赖传统 Ganesh 后端,需在运行时动态生成着色器(GPU 指令),首次执行复杂动画易引发卡顿(Jank) + +### 🐕 [『极致』的二进制重排](https://juejin.cn/post/7432913408574930971) + +[@JonyFang](https://github.com/JonyFang): 本文介绍了基于 `Clang` 静态插桩的二进制重排方案,主要解决了 `Page Fault` 符号部分剩余未彻底清理的问题。基于 `SanitizerCoverage` 完善符号收集机制,也针对 C++ 静态初始化和 Swift 项目等特殊场景提出优化思路。 + +## 工具 + +### 🐎 [Data Scout: SwiftData debugging tool](https://medium.com/@djalex566/behind-the-scenes-of-datascout-a-swiftdata-debugging-tool-dcfc880f0733) + +[@阿权](https://github.com/bqlin):Data Scout 是一款 SwiftData 调试工具。SwiftData 底层也会使用 SQLite 能力,但读取文件上会有一些细微的差别。 + +1. 发现数据库:支持从模拟器、App 或本地目录中自动发现 SwiftData 数据库。 +2. 查看数据库结构与内容:与 SwiftData 一致,以 Swift 模型的形式展示数据库的结构。并支持层级导航。 +3. 支持使用谓词进行高级筛选。 +4. 实时更新:支持数据库在外部被更新时实时展示在 Data Scout App 中。 + +Data Scout 是作者技术的试验场,其使用了 SwiftSyntax、SourceKit、CoreML、Rust 等技术,App 还在持续更新中,更多内容可以阅读:[Behind the Scenes of DataScout: A SwiftData Debugging Tool](https://medium.com/@djalex566/behind-the-scenes-of-datascout-a-swiftdata-debugging-tool-dcfc880f0733)。 + +## 代码 + +### [Swift Embedded ESP32C6 OLED Demo](https://github.com/CmST0us/swift-embedded-xiao-esp32c6-expansion_board) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这个项目展示了如何在 ESP32C6 嵌入式环境中使用 Swift 进行开发,实现了在 OLED 显示屏上渲染旋转 3D 立方体动画。项目的亮点在于演示了 Swift Package Manager 与 CMake 的集成方案,提供了完整的 Swift 嵌入式开发工作流。特别值得关注的是其解决了 Swift 与 C 互操作时的符号链接问题,以及 U8g2 字体优化方案。对于想要探索 Swift 在嵌入式领域应用的开发者来说,这是一个很好的实践参考项目。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +[上海] 米哈游 - iOS 初级 / 高级 / 资深工程师 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#338-2025.06.16.md b/Reports/2025/#338-2025.06.16.md new file mode 100644 index 000000000..d7c9f7f37 --- /dev/null +++ b/Reports/2025/#338-2025.06.16.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #338 | 2025-06-16 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/338.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Redesigned Swift.org is now live](https://www.swift.org/blog/redesigned-swift-org-is-now-live/) + +Swift 上线了新的官网,新官网的设计目标是突出 Swift 易于上手的特性。并且还提供了 软件包、Swift 实际应用示例、代码片段以及进一步学习的资源链接等信息。 + +## 文章 + +### 🐕 [What's new in Swift 6.2?](https://www.hackingwithswift.com/articles/277/whats-new-in-swift-6-2) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):Swift 6.2 带来了一系列语言特性增强和并发模型优化,旨在提升开发效率并简化并发编程。以下是核心更新要点: +- 一.并发编程改进 + - 1.默认 actor 隔离推断 + - 2.非隔离异步函数默认在调用者 actor 执行 + - 3.任务优先级升级 API + - 4.任务命名 +- 二.语言特性增强 + - 1.Raw Identifier 大扩展 + - 2.字符串插值的默认值 + - 3.enumerated () 遵循 Collection 协议 + - 4.方法和初始化器键路径 +- 三.内存安全与调试 + - 1.可选严格内存安全检查 + - 2.回溯 API +- 四.测试框架升级 + - 1.退出测试 + - 2.测试附件 + - 3.条件特性公共 API +- 五.其他重要更新 + - 1.弱常量 + - 2.内联数组 + - 3.正则表达式后向断言 + - 4.全局 actor 协议一致性 + +Swift 6.2 通过简化并发入门门槛、增强语言灵活性和测试能力,持续推动 Swift 在多平台开发中的易用性与专业性。 + +### 🐕 [Accessorise Your Context Menu Interactions](https://sebvidal.com/blog/accessorise-your-context-menu-interactions/) + +[@Smallfly](https://github.com/iostalks):这篇文章介绍了如何通过苹果的私有 API,实现类似 iMessage 消息气泡上的 Tapback 表情选择器效果。作者详细介绍了相关 API 的使用,并给出 Objective-C 桥接和 Swift 运行时动态调用两套完整的方案,巧妙的规避审核风险。有相关需求的同学值得一读。 + +### 🐕 [A (Re-)Introduction to ExtensionKit](https://www.massicotte.org/extensionkit-intro) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章全面解析了苹果 ExtensionKit 框架的核心功能与应用价值,其中包括: + +- 跨平台扩展:支持应用间功能调用与 UI 嵌入(SwiftUI 远程视图),覆盖 macOS/iOS; +- 高效安全:基于 XPC 通信,强制沙盒化但允许文件共享; +- 开发要点:需内置于 .app 分发,iOS 支持自动授权;推荐开源库 Extendable 降低复杂度; +- 应用场景:专业工具集成(如相机 + 修图)、编辑器插件等,为开发者创造跨应用协作新机会; + +适合以下开发者深入阅读: + +- iOS/macOS 开发者:想要实现跨应用功能集成的技术团队; +- SwiftUI 使用者:需要深度整合原生 UI 的开发者; +- 独立开发者:寻找商业化新机会的个人或小团队; + +建议关注 iOS 26 对该框架的支持进展,把握跨平台开发新趋势。 + +### 🐎 [iOS 26 beta1 重新禁止 JIT 执行,Flutter 下的 iOS 真机 hot load 暂时无法使用](https://mp.weixin.qq.com/s/KREg8100EKo3oemJZ6F36Q) + +[@david-clang](https://github.com/david-clang):iOS 26 beta1 并未“禁止 JIT ”,而是**精确封堵了 App 进程自身动态修改内存权限并执行未签名代码的能力**,目标是打击利用此机制的恶意软件(App Fraud),同时保留合法的开发调试功能。但 Flutter iOS 真机 hot load 因依赖此机制而“误伤”,需通过解释器等新方案适配。 + +文章还介绍了几个适配思路,其中混合模式执行的思路很有意思,因为这是 Flutter 热更新框架 shorebird 在 iOS 上目前的热更新方案:**App 整体通过 AOT 运行,只有热更新 patch 存在的时候,针对该部分进行解释执行**。 + +## 工具 + +### [SourceKitten](https://github.com/jpsim/SourceKitten) + +SourceKit 是一个由 Apple 开发的框架,它构成了 Xcode 等开发工具中大部分语言功能的基础,例如代码补齐,定义跳转等等。尽管 SourceKit 功能强大,但其底层通信协议(基于 XPC)相对复杂,直接使用并不方便。这时,SourceKitten 就应运而生了。 + +SourceKitten 是一个由社区驱动的开源 SPM 项目,它将与 sourcekitd 的复杂交互封装成了简单易用的命令行工具和 Swift 框架。开发者可以轻松地利用 SourceKitten 来调用 SourceKit 的强大功能,而无需关心底层的实现细节。 + +可以用来替代 sourcekitd-test,不推荐直接与 sourcekitd-test 交互,输入格式可读性不强。 + +SourceKitten 默认使用 `sourcekitdInProc.framework/Versions/A/sourcekitdInProc` 处理请求,当然也可以替换为自己本地编译的 Sourcekit (之前已开源)方便排查与定位问题。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#339-2025.06.23.md b/Reports/2025/#339-2025.06.23.md new file mode 100644 index 000000000..e89c8a7ae --- /dev/null +++ b/Reports/2025/#339-2025.06.23.md @@ -0,0 +1,96 @@ +# 老司机 iOS 周报 #339 | 2025-06-23 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/339.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Unique values in Swift: Removing duplicates from an array](https://www.avanderlee.com/swift/unique-values-removing-duplicates-array/) + +[@阿权](https://github.com/bqlin):文章介绍了 Swift 中数组去重一些最佳实践。 + +1. 使用 Set 去重(O(n)),要求元素遵循 Hashable: + 1. 不关心顺序场景,可以直接创建对应的 Set,再转换为数组来去重。 + 2. 对于保留顺序场景,也可以增加 Set 来跟踪出现过的元组,过滤出重复项。 +2. 使用 [Swift Algorithms Package](https://github.com/apple/swift-algorithms) 提供的 `uniqued()` 方法。虽然功能完善,不过对于这个场景可能有些大材小用了,还可以能引入不必要的依赖。 + +大家在工程实践中,推荐用方法一也够用了,另外这也是各公司面试题中的必考基础算法之一噢。 + +## 文章 + +### 🐕 [Automatic Observation Tracking in UIKit and AppKit: The Feature Apple Forgot to Mention](https://steipete.me/posts/2025/automatic-observation-tracking-uikit-appkit) + +[@AidenRao](https://weibo.com/AidenRao):苹果在 iOS 18/macOS 15 中为 UIKit/AppKit 框架秘密添加了“自动观察追踪”功能。开发者只需在应用的 Info.plist 文件中启用一个键值,UI 就能自动响应数据变化,类似 Swift 的 @publish。(从 iOS 26 开始,此功能默认启用。) + +### 🐎 [Recreating the bird animation from Swift.org](https://alexwlchan.net/2025/swift-bird-animation/) + +[@Smallfly](https://github.com/iostalks):这篇文章揭晓了 [Swift.org](https://www.swift.org/) 首页那只「飞鸟」的诞生过程。作者深入剖析了这个令人印象深刻的动画:它并非视频,而是巧妙地利用 HTML5 Canvas 和 JavaScript 实现的纯代码杰作。 +核心亮点在于: +1. 「画笔」​效果:​ 用特殊的 虚线路径(dash pattern)​ 技巧,模拟出画笔逐渐绘制出飞鸟轨迹的动态。 +2. 精准遮罩:​ 通过 globalCompositeOperation 技术,将绘制出的动态路径作为「模具」,精准地揭示出底层的精美图像。 +3. 流畅动画:​ 借助 Anime.js 库 实现平滑自然的运动效果,并考虑了页面加载(MutationObserver)和用户偏好(prefers-reduced-motion)。 + +### 🐎 [Tips and tricks for when using SwiftUI ’ s ViewBuilder](https://www.swiftbysundell.com/articles/swiftui-viewbuilder-tips-and-tricks/) + +[@DylanYang](https://github.com/Dylan19Yang):本文作者主要介绍了使用 SwiftUI 中的 ViewBuilder 类型的一些实用小建议。比如通过在合适的地方添加 ViewBuilder 属性来使得我们自定义的 View 初始化时可以使用 SwiftUI 风格的 View 描述方式。以及提供了两种不同方法达成初始化参数缺省的方式,以简化自定义 View 的初始化。这些方法虽然并不起眼,但是可以让我们在组织代码的时候获得更多的灵活性。 + +## 工具 + +### [enableAppleAI](https://github.com/kanshurichard/enableAppleAI) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):可以开启国行设备体验 Apple AI 的工具,优势是不用长期关闭 SIP (完成后可重新开启)。原理是通过修改 eligibilityd 沙盒文件 + 锁权限 。需要注意的是,其中关于注入 eligibilityd 相关代码报错的描述存在一些错误,[XcodeLLMEligible](https://github.com/Kyle-Ye/XcodeLLMEligible/) 并未替换系统的 eligibilityd ,仅是在开发调试 eligibilityd 时对齐系统行为所用。 + +### [Notepad.exe](https://notepadexe.com/) + +[@EyreFree](https://github.com/EyreFree):Notepad.exe 是专为 Swift 开发设计的原生 macOS 应用,主打轻量高效,可替代 Xcode 用于快速原型和代码实验。它支持 iOS 模拟器集成、智能代码补全、实时错误检测,具备便签式悬浮笔记、库式工作流等功能,还有内置 AI 辅助编码。工具注重隐私,数据本地存储,界面简洁无冗余,适合想避开重型 IDE 的开发者,感兴趣的朋友可以试试。 + +## 代码 + +### 🐕 macOS 26 恢复启动台小技巧 + +[@Barney](https://github.com/BarneyZhaoooo):macOS 26 恢复启动台小技巧,终端执行一下命令后重启电脑即可。 + +``` + +sudo mkdir -p /Library/Preferences/FeatureFlags/Domain +sudo defaults write /Library/Preferences/FeatureFlags/Domain/SpotlightUI.plist +SpotlightPlus -dict Enabled -bool false + +``` + +### [apple-on-device-openai](https://github.com/gety-ai/apple-on-device-openai) + +[@Cooper Chen](https://github.com/cjlcooper):这个创新项目巧妙地将 macOS 26 内置的 Apple Intelligence 本地模型(3B 参数)封装成兼容 OpenAI API 的接口,让开发者能在第三方 AI 客户端中直接调用这个轻量级模型,实现隐私优先的本地推理。 + +技术亮点包括: + +- 完整的 OpenAI API 协议兼容,无缝对接现有生态 +- 针对 M 系列芯片优化的本地推理引擎 +- 智能上下文管理,支持多轮对话 +- 典型响应速度控制在 800ms 内(M3 设备实测) + +目前项目已在 GitHub 开源,这种创造性地"桥接"系统级 AI 能力的思路,为桌面端 AI 应用开发提供了新范式。对于关注隐私计算和边缘 AI 的开发者,这无疑是个值得研究的样本。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#340-2025.06.30.md b/Reports/2025/#340-2025.06.30.md new file mode 100644 index 000000000..18fed622a --- /dev/null +++ b/Reports/2025/#340-2025.06.30.md @@ -0,0 +1,109 @@ +# 老司机 iOS 周报 #340 | 2025-06-30 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/340.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🌟 🐢 [btrace 3.0 对外开源:重磅新增 iOS 支持!免插桩原理大揭秘!](https://github.com/bytedance/btrace/blob/master/INTRODUCTION.zh-CN.MD) + +[@JonyFang](https://github.com/JonyFang): btrace 是字节开源的一款高性能 Android/iOS 端性能追踪(Tracing)工具,基于 Perfetto 进行数据展示。它能够详细记录方法的调用过程,精准分析耗时,并归因性能瓶颈,兼具高采样精度和低性能损耗。与 Apple 的 Time Profiler 等传统工具相比,btrace 更加灵活、可自定义,并支持系统方法追踪、有丰富的数据归因和可视化能力,能帮助开发者深入理解和优化 App 性能。 + +btrace 3.0 相比 2.0 的优化(iOS 视角): + +1. 采集方案升级。 +3.0 由单一编译期插桩,升级为“同步抓栈 + 异步抓栈”的混合采样方案。同步抓栈通过 hook 高频系统方法和关键节点,实时采集 Trace 数据;异步抓栈则通过独立采样线程定时回溯线程调用栈,保证采集的时间连续性。相比 2.0,3.0 大幅降低了接入和维护成本,采集更全面、对系统方法也支持更好。 + +2. 数据存储与压缩优化。 +3.0 针对 Trace 数据量大、存储压力大等问题,设计了高效的调用栈去重与压缩结构。通过空间相似性(调用栈公共前缀合并)、时间相似性(连续相同栈合并)等手段,进一步减少内存和磁盘占用,提升了大体量数据下的可用性。 + +3. 多线程与性能再提升。 +3.0 优化了多线程数据写入的并发安全性与性能,采用 CAS 等无锁 / 低锁技术,兼顾高性能与数据一致性,在复杂多线程场景下依然保持低开销。 + +4. 死锁规避与线程采样精细化。 +异步采样时规避了 Time Profiler 可能导致的死锁风险,通过黑名单和信号安全 API 控制,提升了工具的稳定性。同时,仅采集活跃线程,有效降低了对 App 性能的影响。 + +5. 丰富的性能归因与可视化。 +除了基本的方法调用追踪,3.0 进一步支持 CPU 时间、对象分配、缺页 / 上下文切换、线程阻塞等多维度的耗时归因,配合 Perfetto 可视化,帮助开发者一站式定位性能瓶颈。 + +6. 易用性和生态提升。 +3.0 极大简化了接入流程,无需业务侧代码大改,无侵入式支持线上场景,支持性能自动诊断和多端(Android/iOS/ 鸿蒙 /Web)扩展,生态愈发完善。 + +整体来看,btrace 3.0 对 iOS 开发者而言,是一款集高性能、易用性、灵活性于一体的专业 Trace 工具。相比 2.0,3.0 大幅优化了采集方式、性能、安全性和数据分析能力,适合需要深入性能调优、线上问题定位和日常性能治理使用,推荐纳入工程实践! + + +### 🐕 [避免在 Swift 中使用 `self.`](https://juejin.cn/post/7508668930896412722) + +[@AidenRao](https://weibo.com/AidenRao):这篇文章探讨了在 Swift 开发中避免不必要的 `self.` 前缀使用,利用编译器检查减少循环引用风险。它基于 Swift 5.3(SE-0269)和 5.8(SE-0365)的演进,在闭包中省略 `self.` 能让编译器强制捕获语义(如使用 `[weak self]`),从而暴露潜在内存泄漏问题。 + +### 🐕 [Why I ’ ve Filed Over 1,000 Apple Feedbacks — And Why You Should Too](https://www.linkedin.com/pulse/why-ive-filed-over-1000-apple-feedbacks-you-should-too-eric-dorphy-qfe8c/) + +[@阿权](https://github.com/bqlin):文章分享了作者关于 Apple Feedback 的心得体会与收益: + +1. 反馈的价值: + 1. 作者自 2014 年起提交超 1000 条反馈,推动漏洞修复、文档更新及新功能开发(如 HealthKit、MetricKit 等框架的改进)。 + 2. 对开发者而言,可以理清技术思路、记录测试用例,形成可复用的技术文档;提升沟通能力,强化对平台的理解,甚至在撰写反馈过程中解决问题。 +2. 有效提交反馈的策略: + 1. 内容结构化: + 1. 标题:包含框架名和关键词(如 “生产问题”“测试版”),例:“ HealthKit: 锻炼会话中 paddleSports 的 totalDistance 弃用导致数据保存失败”。 + 2. 内容:遵循 “问题描述→预期→复现步骤→重要性→示例项目” 结构,附日志、截图或 sysdiagnose 文件。 + 2. 高优场景: + 1. 生产环境漏洞、重大回归、影响广泛的 API 问题; + 2. beta 版本期间,及时提交问题,利用 WWDC 与工程师面对面跟进。 +3. 作者的反馈实践案例。 + +开发者可以积极参与反馈提交,尤其在 WWDC 和测试版周期中,通过结构化报告和社区分享推动平台改进。反馈不仅是对 Apple 的贡献,更是优化自身开发流程的重要手段。 + +### 🐢 [Reverse-Engineering Xcode's Coding Intelligence prompt](https://peterfriese.dev/blog/2025/reveng-xcode-coding-intelligence/#explaining-a-chunk-of-code) + +[@zhangferry](zhangferry.com):Xcode 26 提供了 Coding Intelligence 功能,并且支持自定义模型。但当前自定义模型支持的 URL 格式 是 ChatGPT 风格的,非这类格式例如 Gemini 还需要依赖 Proxyman 这类网络代理工具做一层转换。(感觉算是 Bug,希望后续能修复) +文中以 Xcode 中使用 Gemini 为例,抓取和分析了 AI 相关的代码解释、文档生成、代码生成这几个功能所涉及的 Prompt,每一个功能都对应一组封装好的 Prompt,可以了解到 Apple 是如何使用 PE 的: + +* 行为约束:完整理解用户意图及代码再回答问题 +* 前置知识:注意 Apple 平台的 API 选型;代码生成优先使用 Swift、OC;优先 Concurrency 而不是 Combine +* 代码理解:使用 SEARCH 工具(函数调用)获取代码相关上下文,再丢给 LLM +* 代码生成:除了代码本身,还会查找项目依赖,学习其 API + +### 🐕 [Flutter 又双叒叕可以在 iOS 26 的真机上 hotload 运行了,来看看又是什么黑科技](https://mp.weixin.qq.com/s/jGqJFTlLqF2N_rqVdSkLKQ) + +[@Damien](https://github.com/ZengyiMa):由于 iOS 26 beta1 禁止了 Debug 时 mprotect 的 RX 权限,导致 Flutte 在 iOS 26 真机上 Debug 运行时出现了问题。为了解决这一问题,Flutter 团队采用了一种临时方案,即创建了 NOTIFY_DEBUGGER_ABOUT_RX_PAGES 函数。当 Flutter 应用需要执行新代码时,该函数会暂停应用并通知调试器,调试器随后利用其特权,通过 debugserver 修改内存权限,实现“双地址映射”,其中一个地址用于写入代码,另一个地址用于执行代码。这一方案虽然解决了当前的运行问题,但存在一定的延迟和较高的环境要求,未来仍需开发高性能的 Debug 解释器来提供更完善的解决方案。 + +## 代码 + +### 🐕 [EFQRCode](https://github.com/EFPrefix/EFQRCode) + +[@Barney](https://github.com/BarneyZhaoooo):`EFQRCode` 是一个轻量级纯 `Swift` 二维码库,支持生成带水印 / 图标的风格化二维码和图片识别功能。基于 `CoreGraphics`、`CoreImage` 和 `ImageIO`,全平台支持 `iOS/macOS/watchOS/tvOS/visionOS` 。最新 7.0.0 版本重构了 `API`,引入 `EFQRCodeGenerator` 和 `EFQRCodeRecognizer` 类,支持链式配置,改进 `Objective-C` 兼容性。可通过 `CocoaPods`、`Carthage` 或 `SPM` 集成。 + +## 音视频 + +### 🐢 [SwiftData versus SQL Query Builder](https://www.pointfree.co/blog/posts/174-free-episode-swiftdata-versus-sql-query-builder) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Point-Free 团队在 WWDC 2025 期间免费放送了一期重磅视频,深入对比 SwiftData 与他们自家 SQL Query Builder(Structured Queries)在实际开发中的表现。视频以还原 Apple Reminders 复杂查询为例,展示了两种方案在代码简洁性、可组合性和类型安全等方面的差异。 + +Structured Queries 方案只需 23 行代码即可线性表达复杂查询逻辑,支持类型安全、可读性强;而 SwiftData 不仅写法更繁琐(32 行),还存在布尔和枚举类型无法直接排序 / 筛选、可选字段排序不灵活等问题,甚至有些写法在运行时会直接崩溃。 + +如果你关心 Swift 持久化方案、数据层架构,或在 SwiftData 和 SQL 之间犹豫,强烈建议观看本期视频。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#341-2025.07.07.md b/Reports/2025/#341-2025.07.07.md new file mode 100644 index 000000000..c5a5483e4 --- /dev/null +++ b/Reports/2025/#341-2025.07.07.md @@ -0,0 +1,95 @@ +# 老司机 iOS 周报 #341 | 2025-07-07 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/341.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Don ‘ t Liquid Glass All the Things](https://david-smith.org/blog/2025/06/17/design-dary-liquid-glass-everything/) + +[@阿权](https://github.com/bqlin):iOS 26 的液体玻璃效果让大家眼前一亮,大家可能已经在重新设计自己的 App,恨不得给所有 UI 都加上液态玻璃效果。文章提到液态玻璃效果容易滥用,导致界面的不和谐。使用液态玻璃的场景应该是用于突出按钮下方的内容,例如地图预览上方的操作按钮。换句话说,液态玻璃效果的控件会让控件自身与下方内容悬浮出来,形成两个解耦的交互层级,如果控件本身与内容是嵌合的二维依赖关系,则并不适合添加液态玻璃效果。 + +## 文章 + +### 🐢 [深入解析| Cursor 编程实践经验分享](https://mp.weixin.qq.com/s/UQPcxiV4UsTxpPYRjaNZIA) + +[@Cooper Chen](https://github.com/cjlcooper):本文深度剖析 AI 编程助手 Cursor 的进阶使用方法,为开发者提供一套可落地的效率提升方案: + +1.Prompt 设计黄金法则 + +- 采用"目标-背景-约束"三段式结构 +- 技术方案设计阶段明确禁止生成代码 +- 单测生成时附带示例代码确保风格统一 + +2.Rules 规范引擎 + +- 自动生成项目专属开发规范(支持 Go/Java 等) +- 中间件调用错误率降低至 0.3% +- 通过"/"命令快速适配团队规范 + +3.工具链整合方案 + +- 复杂需求使用 AutoGPT 进行任务分解 +- 技术调研调用 Claude 深度研究模式 +- 钉钉文档直接解析免去格式转换 + +本文提供的技术方案设计模板和开发规范 Rules 可直接复用,帮助开发者快速建立 AI 辅助编程工作流。文中揭示的"代码生成 + 架构决策"分层协作模式,为现代软件开发提供了高效的智能解决方案。 + + +### 🐕 [Flutter 里的像素对齐问题,深入理解为什么界面有时候会出现诡异的细线?](https://mp.weixin.qq.com/s/eESwYV6tfXP-zeygHObCrw) + +[@david-clang](https://github.com/david-clang):Flutter 界面中出现的诡异细线,本质原因是: + +1. 逻辑像素到物理像素转换出现浮点值(非整数 DPR、布局误差)。 +2. Skia 默认开启 AAA(Analytic Anti-Aliasing)抗锯齿处理,处理相邻同色元素时各自计算的像素覆盖率总和可能不足 100%(如 40% + 50% = 90%)。 +3. 未被覆盖的剩余部分(如上例的 10%)会显露背景色,形成半透明的细线。 + +解决方案是: + +1. [pixel_snap](https://pub.dev/packages/pixel_snap):提前将逻辑像素换算物理像素,根本上避免转换后出现物理像素不对齐。 +2. Impeller: MSAA(Multisample Anti-Aliasing)抗锯齿处理,通过在每个像素内部采样多个点来获得更准确的边缘渲染效果,使那些原本因浮点误差产生的“半像素边缘”更加平滑自然,从而视觉上弱化或隐藏了细线问题。 + +### 🐕 [Rewriting a 12 Year Old Objective-C iOS App with Claude Code](https://twocentstudios.com/2025/06/22/vinylogue-swift-rewrite/) + +[@Smallfly](https://github.com/iostalks): 这是一篇非常详实的 AI 辅助开发实践分享。作者用 Claude Code 将一个 12 年前的 Objective-C 应用 Vinylogue 重写为 Swift + SwiftUI,仅用 7 天时间就完成了从架构升级到 App Store 上架的全流程。 + +文章的价值在于: +1. **真实的成本分析** - 详细记录了理论花费 $353 vs 实际花费 $20 的对比,以及每日开发进度 +2. **实用的最佳实践** - 总结了大量 Claude Code 使用技巧,如使用 `--quiet` 标志、合理管理上下文窗口、创建反馈循环等 +3. **架构升级经验** - 展示了如何利用 AI 工具进行大规模重构,从传统架构升级到现代的 swift-dependencies + swift-sharing 架构 +4. **完整的开发流程** - 涵盖了从数据迁移、UI 适配到自动化截图生成的全过程 + +对于想要尝试 AI 辅助开发的 iOS 开发者来说,这篇文章提供了一个很好的参考框架。特别是文章中提到的"保持在宏观层面评估代码库,让 AI 处理微观层面的工作"这一理念,对提高开发效率很有启发意义。 + +### 🐕 [Understanding and Improving SwiftUI Performance](https://medium.com/airbnb-engineering/understanding-and-improving-swiftui-performance-37b77ac61896) + +[@AidenRao](https://weibo.com/AidenRao):Airbnb 的 SwiftUI 性能优化分享:通过为视图自定义 `Equatable` 协议实现,仅在实际数据变化时触发重绘,避免不必要的视图更新。将大型视图分解为小型可差异化组件,配合复杂度检测工具(如 SwiftLint 规则)预警重构时机,减少单次渲染计算量。 + +## 代码 + +### [container](https://github.com/apple/container) +[@老驴](https://weibo.com/u/6090610445):Apple 最近发布了一个新的开源项目叫 Container,本质上是一个运行在 Linux 上,基于 Swift 和 Virtualization framework 的容器库。它的重点是更好地支持 Apple Silicon 芯片跑容器。 个人猜测,这可能是 Apple 为将来在自家服务器上使用 Apple Silicon 做准备的一步。毕竟一直有传言说 Apple 想让自家数据中心的服务器用上自研芯片,而要做到这一点,一个完善的容器方案是少不了的。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#342-2025.07.14.md b/Reports/2025/#342-2025.07.14.md new file mode 100644 index 000000000..acc007768 --- /dev/null +++ b/Reports/2025/#342-2025.07.14.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #342 | 2025-07-14 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/342.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Swift 宣布成立安卓工作组](https://www.swift.org/android-workgroup/) + +Swift 官方宣布成立 Android 工作组,将 Android 列为官方支持的平台。该工作组的主要目标是为 Swift 语言添加并维护 Android 平台支持,让开发者能够使用 Swift 开发 Android 应用。 + +## 文章 + +### 🐕 [A Swift Developer ’ s Guide to Prompt Engineering with Apple ’ s FoundationModels](https://www.natashatherobot.com/p/swift-prompt-engineering-apples-foundationmodels) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章是关于 Apple's FoundationModels 在 Swift 开发中的提示工程指南。Apple 的 Foundation Model 专门为 Swift 和 SwiftUI 训练,有 4096 token 的上下文限制。核心技术是使用 Generable 宏定义输出结构,通过 Guide 系统精确控制生成内容。文章强调属性顺序的重要性,因为 LLM 逐 token 生成。实用技巧包括自然语言长度修饰符、角色设定、少样本提示法和温度调节。对于用户输入,建议限制开放字段并妥善处理 guardrail 错误。为 Swift 开发者提供了原生、类型安全的 AI 集成方案。 + +### 🐕 [Finding my Way](https://david-smith.org/blog/2025/07/02/new-maps/) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 独立 iOS 开发者 David Smith 分享了他在基于 iOS 26 设计语言重新设计 Pedometer++ 的地图功能的一些思考。文章详细描述了他的设计过程,包括如何让地图全屏显示、如何优化顶部按钮、如何设计浮动的信息面板等。 + +### 🐢 [《别急于下定论:人工智能编程工具实则可能降低生产力》 Not So Fast: AI Coding Tools Can Actually Reduce Productivity ](https://secondthoughts.ai/p/ai-coding-slowdown) + +[@Cooper Chen](https://github.com/cjlcooper):在 AI 编程工具被广泛吹捧的背景下,METR 实验室通过一项严谨的随机对照试验(RCT)揭示了一个反直觉的结论:经验丰富的开发者在成熟项目中使用 AI 工具后,工作效率反而降低 19%。这项研究基于 16 位资深开源开发者在百万行代码项目中的 246 项真实任务,挑战了“ AI 必然提升效率”的行业共识。 + +关键发现: + +- 效率幻觉:开发者普遍预期 AI 能提速 24%,实际却拖慢 19%,认知偏差高达 40 个百分点。 +- 时间消耗:44% 的 AI 生成代码被废弃,开发者 9% 的时间用于修正 AI 输出,4% 在等待响应。 +- 适用场景:AI 在小型新项目中表现良好,但对复杂系统维护可能适得其反。 + +### 🐕 [Schedule a countdown timer with AlarmKit](https://nilcoalescing.com/blog/CountdownTimerWithAlarmKit/) + +[@阿权](https://github.com/bqlin):文章详细介绍了如何使用 WWDC25 推出的 AlarmKit 框架实现倒计时提醒功能。过去要实现指定时间提醒功能,普通开发者只能通过苹果的通知推送。虽然通知能自定义时机甚至提醒铃声,但始终还是通知,在静音模式和专注模式下都无一幸免,要想像系统闹钟一样即使在静音和专注模式下还能提醒,只能通过新推出的 AlarmKit 了。AlarmKit 支持一次性闹钟、重复闹钟和立即开始的倒计时提醒,AlarmKit 提供的能力需要用户授权,并需要适配锁屏展示和灵动岛中的展示,具体配置可浏览原文。 + +只希望该功能不要被厂商滥用,尤其不要用在“加急”功能上啊! + +### 🐎 [Google I/O Extended :2025 Flutter 的现状与未来](https://mp.weixin.qq.com/s/hqra9NJJ4-KwtoQFc6h1mg) + +[@david-clang](https://github.com/david-clang):本文的分享更侧重于科普类型的概括,包括 Flutter 的市场渗透率、技术进展、未来方向,其中有几个有趣的点: + +1. 市场渗透率: + - **Flutter 比 RN 的整体渗透率高**:根据 2025 年 6 月[腾讯端服务](https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653581211&idx=1&sn=eb05a7282b245fd33dedfa1ace9a2c76&scene=21#wechat_redirect)统计整体渗透率,Flutter 约 13%,RN 约 9%。另外,根据 Apptopia 统计,2024 年 AppStore 里 Flutter 占据所有新免费 iOS 应用的近 30%。 + +2. 技术进展: + - **线程合并**:之前的 3.29 Android 和 iOS 默认合并 Dart UI 线程和平台线程,从最近 3.32 开始, Windows 和 macOS 也支持合并 Dart UI 线程和平台线程。 + - **多窗口**:在本文发布后 2 天,对多窗口的支持已经合到主分支([#168728](https://github.com/flutter/flutter/pull/168728)),在 Engine 层引入在 Windows、macOS 和未来 Linux 平台上创建并管理多个窗口的机制。 + +3. 未来方向: + - **移除 Cupertino 和 Material 的内置**:对于 iOS 26 的液态玻璃实现,官方已经明确了不会内置支持,甚至连 Android 的最新  Material 3 Expressive 也是,长期来看,把特色控件从 Framework 内置移除,专注引擎优化,是个更好的方向。 + - **ffigen/jnigen 持续优化**:线程合并的主要目的,是为了抛弃历史产物 MethodChannel,而在互操作这件事情,未来肯定是 Dart 和平台语言直接互调用,而 3.32 也提到了,ffigen/jnigen 也在持续改进并内测,预计下半年会有全新的消息。 + +### 🐎 [使用 Xcode 26 构建,在 (, iOS 26) 设备启动崩溃 Symbol not found: _NSUserActivityTypeBrowsingWeb](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5062) + +[@DylanYang](https://github.com/Dylan19Yang):使用 Xcode 26 构建包,跑在版本号小于 iOS 26 的系统上会在启动阶段遇到设备启动崩溃 Symbol not found: NSUserActivityTypeBrowsingWeb。原因是 CoreServices 在 iOS26 SDK 中重新导出了 NSUserActivityTypeBrowsingWeb 符号,导致链接时将符号绑定到了 CoreServices 模块。修复方案是把 Foundation 的在链接参数中的位置往前面提到 CoreServices 之前。 + +> [CrazyFanFan](https://github.com/CrazyFanFan) 提供信息 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#343-2025.07.21.md b/Reports/2025/#343-2025.07.21.md new file mode 100644 index 000000000..3939f4b56 --- /dev/null +++ b/Reports/2025/#343-2025.07.21.md @@ -0,0 +1,83 @@ +# 老司机 iOS 周报 #343 | 2025-07-21 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/343.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Meet the Inspector view in SwiftUI](https://serialcoder.dev/text-tutorials/swiftui/meet-the-inspector-view-in-swiftui/) + +[@阿权](https://github.com/bqlin):文章介绍了 SwiftUI 中检查器视图(Inspector View)的用法: + +1. 基本概念与使用场景: + 1. 检查器视图用于展示主内容的附加信息,默认在右侧展示(macOS/iPadOS),在紧凑尺寸设备(如竖屏 iPhone)上以 sheet 形式呈现。 + 2. 需要 macOS 14+ 和 iOS 17+。 +2. 基本用法:通过 `inspector(isPresented:content:)` 控制检查视图的显隐。 +3. 自定义宽度:支持固定宽度 `inspectorColumnWidth(_:)`,和用户拖拽控制宽度 `inspectorColumnWidth(min:ideal:max:)`。 +4. 检查器入口按钮与导航工具栏的适配,问题提供了三种适配方案。 +5. 在紧凑尺寸中的展示效果及其适配方案。 + +在苹果提供中的 App 中,检查视图是用户早已习惯的交互形式,使用检查视图可能提升 App 的专业性并提升用户体验。 + +## 文章 + +### 🌟 🐢 [An open source tool to speed up iOS app launch](https://blog.sentry.io/open-source-tool-speed-up-ios-app-launch/) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):Emerge Tools 提供了一个轻量级的收集 App 启动阶段内执行到的函数的收集工具,而不用修改编译选项(开启插桩),以此可以用来投喂给 Xcode 进行二进制重排,进而通过减少启动过程中的 Page In 数量来加快启动速度。技术方案是通过 Linkmap 或者 [trick 的方式](https://github.com/getsentry/FaultOrdering/blob/main/Sources/EMGFaultOrdering/Constructor.mm#L137) 收集函数起始的地址。然后对所有函数起始地址替换汇编指令为触发 ARM64_BREAK_INSTRUCTION 。在捕获断点后,记录下此方法,然后跳转原始逻辑继续执行。其中有非常多的细节,推荐对此感兴趣的同学阅读。 + +同时可以对此工具稍加改造,以此适配收集 App 任意阶段内的执行函数(如某个巨大模块),然后执行预热,以加快某个模块的冷启动首次进入耗时;同时其中涉及到与 [SimpleDebugger](https://github.com/EmergeTools/SimpleDebugger) 的联动,可以进行修改优化,目前是每个函数都执行一次 StopTheWorld + 替换单个函数汇编方便断点记录,可以修改为 批量执行一次 StopTheWorld + 替换所有需要函数。 + +### 🐕 [Everything You Should Know About Spacer](https://kyleye.top/posts/everything-you-should-know-about-spacer/) + +[@AidenRao](https://weibo.com/AidenRao):SwiftUI 提供了四种 `Spacer` 类型实现灵活布局:通用 `Spacer` 在可用空间内沿主轴扩展;`_TextBaselineRelativeSpacer` 支持文本基线对齐;`_HSpacer`/`_VSpacer` 严格限定方向。它们通过 `PrimitiveSpacer` 协议共享核心属性(`minLength`, `axis`, `requireTextBaselineSpacing`) + +### 🐕 [Swift 6.2 Java 互操作性实践](https://arturgruchala.com/swift-6-2-java-interoperability-in-practice/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这篇文章展示了如何通过 Swift 6.2 的 swift-java 包实现 Swift 与 Java 的高效互操作。整个过程通过标准工具链(SwiftPM + Makefile)自动化,从 Java 编译到 Swift 调用无缝衔接,大大简化了跨语言开发的复杂度。最终实现了 Swift 程序可以优雅地调用 Java 方法的目标。 + +### 🐕 [What you need to know before migrating to Swift Testing](https://soumyamahunt.medium.com/what-you-need-to-know-before-migrating-to-swift-testing-b9c1d749ebd5) + +[@JonyFang](https://github.com/JonyFang): 一篇 Swift Testing 迁移指南摘要,介绍了从传统 XCTest 框架迁移到 Swift Testing 框架前需要了解的关键信息。如: + +- Swift Testing 框架的主要优势和新特性 +- 迁移过程中可能遇到的常见兼容性问题 +- Swift Testing 与 XCTest 的语法和结构差异 +- 一些迁移策略建议和最佳实践 + +对于正在考虑升级测试框架的 iOS 开发者来说,这是一篇实用的参考指南。 + +## 代码 + +### [部分使用了 Data.bytes 的代码无法正常编译](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5061) + +[@Smallfly](https://github.com/iostalks):iOS 26 SDK 中 ``Foundation.Data`` 扩展了新的属性 ``var bytes: RawSpan { get }``,如果之前的实现里面使用了 CryptoSwift 对 Data 添加的 extension 中的 ``var bytes: Array`` 且未明确 ``import CryptoSwift`` 就会遇到编译器无法正确匹配实现的问题。 + +使用到的位置主动 `import CryptoSwift` 明确实现来源。 + +CryptoSwift 已将 extension 重命名为 byteArray ,[PR](https://github.com/krzyzanowskim/CryptoSwift/pull/1076)。 + +> [CrazyFanFan](https://github.com/CrazyFanFan) 提供信息 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#344-2025.07.28.md b/Reports/2025/#344-2025.07.28.md new file mode 100644 index 000000000..6e56db56b --- /dev/null +++ b/Reports/2025/#344-2025.07.28.md @@ -0,0 +1,73 @@ +# 老司机 iOS 周报 #344 | 2025-07-28 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/344.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [WWDC 2025: What's new for the Apple community?](https://www.createwithswift.com/wwdc-2025-whats-new-for-the-apple-community/) + +[@BluesJiang](https://github.com/bluesjiang):这篇文章快速介绍了 WWDC25 的重要更新,很适合产品、开发者进行速览,快速发现自己关系的功能和相关技术的介绍。文章很贴心的将相关文档的链接内置的其中方便读者快速检阅。其中的液态玻璃的适配和 Apple Intelligent 是重点的更新项目,也是开发者比较值得关注的地方。因为液态玻璃的启用是系统默认行为,可能会带来不少适配的问题。文章也简单介绍了一下 Swift 和 SwiftUI 的更新。不过文章中没有特别介绍 visionOS 的相关更新,其实这方面苹果也开放了很多新能力来发掘 Apple Vision Pro 的潜能,非常值得相关开发者关注一下。 + +### 🐎 [迁移至 Swift Actors](https://juejin.cn/post/7527865199861841947) +[@Smallfly](https://github.com/iostalks):这篇文章聚焦 Swift Actors 在实际项目中的迁移实践,针对传统并发方案(锁、队列)易遗漏保护、无法保证原子性的痛点,给出了 Actor 重构的具体路径。核心内容包括: + +- **数据模型重构**:通过 `actor` 替代传统类,编译器强制属性隔离访问,从源头避免数据竞争;结合 `performInIsolation` 实现多属性原子操作。 +- **环境桥接**:用 `nonisolated` 标记协议方法,通过 `Task` 异步调用隔离逻辑,兼容同步与并发环境。 +- **线程正确性**:`@MainActor` 标记类 / 属性,编译器检查调用链线程,解决 UI 更新等场景的崩溃隐患;解析 `@preconcurrency` 对 OC 导入类的影响,明确编译器警告边界。 +- **内部并发**:`nonisolated` 函数配合 `async let` 处理耗时任务,结合任务取消机制解决重入问题。 + +文章以 `Uploader` 和视图模型为例,串联工具链与代码细节,为老项目迁移至现代并发模型提供了可复用的实践参考。 + +### 🐢 [CursorShenzhen 0608 讲师 PPT](https://pf2n1japaz.feishu.cn/docx/DgAudpiFpoVqFgxEx00czJyonzf) + +[@Cooper Chen](https://github.com/cjlcooper):这是 6 月 8 日深圳 Cursor 技术讲座 PPT 合集,汇集了 6 位专家的精彩分享,其中包括: + +- 生产级 Cursor 应用——企业级开发规范、团队协作优化、工程化实践 +- AI 创业实战 —— 如何用 Cursor 构建 AI 公司,技术栈选择与商业化落地 +- 智能前端开发 —— Cursor + Figma 联动,自动生成高质量前端代码 +- 更多实战技巧——代码优化、Prompt 工程、AI 辅助调试与部署 + +特别适合正在使用 Cursor 的开发者学习参考。 + +### 🐕 [Giving Claude Code Eyes to See Your SwiftUI Views](https://twocentstudios.com/2025/07/13/giving-claude-code-eyes-to-see-your-swiftui-views/) + +[@Barney](https://github.com/BarneyZhaoooo):本文探讨如何为 Claude Code 提供视觉能力来查看 SwiftUI 视图渲染结果,核心方案是通过 Swift Snapshot Testing 实现可视化验证工作流。 + +**技术方案**:配置测试套件,建立"生成快照→分析对比→优化代码→迭代验证"的闭环流程。 +**实战验证**:通过重建用户列表界面测试发现,Claude Code 在图像分析方面存在局限性,难以精确识别字体、间距、颜色等细节差异。 +**结论**:当前技术仍处于研究阶段,建议迭代不超过 3 次即引入人工干预,对于像素级需求直接提供设计稿更有效。 + +### 🐎 [Modern Swift Lock: Mutex & the Synchronization Framework](https://www.avanderlee.com/concurrency/modern-swift-lock-mutex-the-synchronization-framework/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们介绍了 Swift 中的 Mutex 锁,Mutex 锁是 Swift 锁的其中一种,只需要在声明变量时将类型通过 Mutex 关键字包裹起来,后续所有对该变量的访问就都可以通过锁的方式进行从而避免多线程的数据竞争问题。Mutex 也可以和 Swift Concurrency 配合使用。而和 actor 相比 Mutex 更轻量,并且支持同步调用,开发者可以按需在他们之间做出选择。感兴趣的开发者可以阅读一下。 + +## 工具 + +### [Apple Docs MCP - Apple 开发者文档 MCP](https://github.com/kimsungwhee/apple-docs-mcp) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这是一个名为 Apple Docs MCP 的开源项目,提供一个 Model Context Protocol(MCP)服务器,专门用于让 AI 助理(如 Claude、Cursor、VS Code 中的 MCP 客户端等)能够通过自然语言查询访问 Apple 官方开发者文档:包括 iOS/macOS/watchOS/tvOS/visionOS 的框架 API、Sample Code、WWDC 视频内容等。如果你是 iOS/macOS 开发者,尤其需要查询最新 iOS 26 / SwiftUI、UIKit、AlarmKit 等 API,并希望 AI 助理能实时且正确地生成示例代码,这个工具可以极大简化流程。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#345-2025.08.04.md b/Reports/2025/#345-2025.08.04.md new file mode 100644 index 000000000..c4db79cd8 --- /dev/null +++ b/Reports/2025/#345-2025.08.04.md @@ -0,0 +1,103 @@ +# 老司机 iOS 周报 #345 | 2025-08-04 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/345.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [App Store Connect 中的年龄分级现已更新](https://developer.apple.com/cn/news/?id=ks775ehf) + +苹果在 iOS 26 及以后的商店中更新了更细化的年龄分级,在现有的 4+ 和 9+ 分级的基础上,更新后的年龄分级系统新增了三个分级:13+、16+ 和 18+。苹果已经向开发者发送了邮件提醒需要完成新的年龄分级调查问卷。大家可以按需填写更新分级。 + +分级的截止日期为 2026 年 1 月 13 日。 + +## 新手推荐 + +### 🐎 [Deciding between 'let' and 'var' for Swift struct properties](https://www.swiftbysundell.com/articles/let-vs-var-for-swift-struct-properties/) + +[@阿权](https://github.com/bqlin):文章围绕 Swift 结构体中 let 与 var 的最佳实践与注意事项展开,内容如下: + +1. 结构体的可变性规则 + 1. 可变性遵循“整体不可变则部分也不可变”规则(即使属性使用 var 声明)。 + 2. var 声明的实例仅 var 属性可变,let 属性始终不可变。 +2. let 的使用场景 + 1. 唯一 id 属性:一旦创建就不应改变,始终确保实例全局唯一的场景。 + 2. 依赖初始化的属性:值初始化完成后,后续无需改变的场景。 + 3. 声明为 let,表达了本质不可变的语义,避免了意外修改,也保证了数据一致性。 +3. var 的使用场景 + 1. 状态属性:需随业务逻辑动态更新。 + 2. 依赖属性:值需依赖外部条件刷新。 +4. 语义表达 + 1. 两者的使用应更多考虑语义的表达,使其自文档性,let 暗示着永久不可变,var 暗示着可动态调整。 + 2. 应管控 var 的使用,可提升代码的可预测性。 + +合理使用 let 与 var 能提升代码安全性、可读性和可维护性,也是 Swift 结构体设计的核心原则。 + +### 🐎 [New Watch](https://david-smith.org/blog/2025/07/22/new-watch/) + +[@Kyle-Ye](https://github.com/Kyle-Ye):一篇 watchOS UI 设计语言变迁的实践记录与设计取舍思考,推荐给关注 watchOS 适配与视觉一致性的开发者。 + +## 文章 + +### 🐕 [A Peek into My Debugging Process (With Real Examples)](https://www.polpiella.dev/how-i-fix-bugs-in-my-apps/) +[@Smallfly](https://github.com/iostalks):这篇文章通过三个真实案例,分享了 iOS 开发者在实际项目中调试应用的完整流程,涵盖崩溃、性能回归与意外系统提示三类常见问题。核心调试策略包括: + +- **崩溃排查**:结合崩溃日志(含 SwiftUI/AppKit 内部调用栈)、Diagnostics 工具定位网络失败上下文,用 Proxyman 模拟请求失败复现问题,最终通过调整 UI 布局(`HStack` 改 `overlay`)解决。 +- **性能优化**:利用 Xcode Instruments 的 Time Profiler 发现串行网络请求,通过 Swift 结构化并发(`async let` 并行任务)提升加载效率。 +- **系统提示溯源**:通过注释初始化代码、本地克隆第三方库,定位到 `ProcessInfo().hostName` 调用触发网络权限提示,最终通过库代码替换修复。 + +文章强调「调试时间主要花在定位而非修复」,系统掌握工具(崩溃日志、Proxyman、Instruments)与方法(二分排查、上下文分析)是提升效率的关键,为开发者提供了可复用的调试实践参考。 + +### 🐕 [ChatGPT in Xcode 26: there ’ s a hidden prompt!](https://www.swiftwithvincent.com/blog/chatgpt-in-xcode-26-theres-a-hidden-prompt) +[@AidenRao](https://weibo.com/AidenRao):Xcode 26 内置了 ChatGPT 功能,并在对话开始前注入一个隐藏提示词,用于优化 AI 编程助手的输出质量与安全性。了解提示的内容可以让我们更好地理解 ChatGPT 可以访问哪些信息以及苹果给出了什么上下文。 + +### 🐕 [Combine and Swift Concurrency: A threading risk](https://www.avanderlee.com/concurrency/combine-and-swift-concurrency-a-threading-risk/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章探讨了从 Combine 迁移到 Swift Concurrency 过程中的线程安全风险。 + +**核心问题:** 作者在 RocketSim 项目升级到 Swift 6.2 严格并发模式后发现,使用 `Combine` 观察通知并调用 `@MainActor` 标记的方法时,当通知从非主线程发出会导致崩溃。 + +**关键风险:** `Combine` 的 `sink` 闭包缺乏编译时线程安全检查,而直接使用 `NotificationCenter` 的 `addObserver` 方法则会在编译时报错。这种隐蔽性使得问题只在运行时暴露。 + +**解决方案:** 推荐迁移到 `Swift Concurrency` 的 `for await` 语法观察通知,获得编译时安全保障。对于必须保留的 `Combine` 管道,建议在 `sink` 内使用 `Task` 包装或通过 `receive(on:)` 指定执行队列。 + +总结:`Combine` 与 `Swift Concurrency` 混用存在隐性线程风险,应优先迁移到纯 `Swift Concurrency` 方案。 + +### 🐎 [My 10 Tips for Using Claude Code](https://samwize.com/2025/07/08/my-10-tips-for-using-claude-code/) + +[@david-clang](https://github.com/david-clang):这篇文章总结了作者使用 Claude Code 的 10 个高效技巧,推荐给想提升 Claude 使用效率的开发者。包括自定义 Slash 命令、自动生成 commit 信息等加快开发效率的技巧,还有使用 ccusage 统计工具去监控 token 成本的技巧。 + +## 代码 + +### [Foundation Models Framework Example](https://github.com/rudrankriyam/Foundation-Models-Framework-Example) + +[@zhangferry](zhangferry.com):该仓库是 Foundation Models 框架的示例演示,除了基本能力:基础聊天、结构化数据生成、流式响应、Tools 调用的示例,还提供了基于这些能力打造的几个示例应用:语音相关的 AI 应用、健康数据分析的 AI 应用、Pokemon 分析的 AI 应用,作者还把常用的 Tools 封装成了一个 [Tools](https://github.com/rudrankriyam/FoundationModelsTools) 库。 + +Foundation Models 的优势在于本地执行、隐私保证、原生 API,一切看似很美好,但使用前别忘了这些限制:系统版本 26+ 且设备支持 Apple Intelligence。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +- [北京 / 深圳] 抖音基础技术 - 代码分析方向 - iOS 资深研发工程师 +- [上海] BiliBili - 移动端开发实习生(社区生态)- iOS/Android + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#346-2025.08.11.md b/Reports/2025/#346-2025.08.11.md new file mode 100644 index 000000000..18eee0603 --- /dev/null +++ b/Reports/2025/#346-2025.08.11.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #346 | 2025-08-11 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/346.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Uncertain ](https://nshipster.com/uncertainty/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们描述了原生确定的 Bool 值无法精确表达一些概率出现的场景,因此引入了 Uncertain 这样一个库。它将不确定性引入到了编码之中,它可以通过概率建模来描述一个事件的概率而非结果。这可以被用于 GPS 定位或者传感器噪声等含有不确定性的场景。实际使用时,开发者可以通过比对概率值来进行需要的逻辑开发。感兴趣的读者,可以阅读原文进一步了解。 + +### 🐢 [一个半月高强度 Claude Code 使用后感受](https://onevcat.com/2025/08/claude-code/) + +[@JonyFang](https://github.com/JonyFang): Claude Code 在"读懂代码→规划变更→实施改造→文档 / 测试"整链路提效明显,但必须用工程化流程与成本控制兜底。把它当"结对编程伙伴"和"高效审阅者",而不是自动合并器;产出视为草稿,经评审与测试落地更稳。 + +关键优势: +- 跨文件 / 长上下文理解强,能给出可执行的分步计划 +- 重构、迁移、批量机械化改动效率高 +- 文档 / 测试 / 变更摘要产出质量好,便于知识传递 +- 对话式协作体验顺滑,降低思维切换成本 + +主要痛点与对策: +- 成本易失控(重度 API/ 长上下文):设预算 / 配额与告警,精简上下文,结果缓存,订阅 +API 混合 +- 偶发幻觉 / 环境不匹配:在提示中明确版本 / 依赖,强制编译与测试,小步提交 + 代码评审 +- 长会话漂移:阶段性重置,会话内先对齐"当前共识",用固定提示模板 +- 合规与隐私:最小化 / 脱敏,优先企业版或私有部署,审计与密钥扫描 + +适用场景:原型与探索、跨文件重构 / 迁移、批量替换 / 格式化、补齐测试与文档、代码走查与交接 + +回避场景(尽量不让其直接改动): +- 安全 / 核心关键路径:鉴权与权限、加密与密钥、支付 / 交易、隐私合规、一致性与并发、性能临界路径、底层 FFI(可让其做威胁建模 / 测试清单 / 审阅) +- 强环境耦合构建:工具链与版本、依赖与构建系统、签名与发布、架构 /SDK 差异、链接与符号、脚本与环境变量(可让其做日志总结 / 排查清单 / 最小复现) + +与其他工具对比:跨文件理解与规划普遍强于补全型 / 纯 IDE 聊天;但即时补全流畅度与深度 IDE 集成,部分竞品更占优 + +实施建议: +- 工作流:先"读项目→列计划→小步提交 / 分 PR ",以测试 /CI 护栏把关 +- 提示工程:固定模板(项目约束 / 版本 / 风格 / 完成定义),限制改动范围与风险级别 +- 质量保障:单测优先、属性测试 / 回归套件、灰度发布与回滚预案 + +成本策略:设用量监控与告警;合并同类任务批处理;订阅与 API 按场景取舍;重度场景定期复盘性价比(作者实测重度使用可达数千美金级别) + +适合人群:需要频繁跨文件改造与知识传递的团队 / 个人;维护大型代码库或做重构 / 迁移 / 文档化的工程师 + +### 🐕 [@ViewConfigurable — A better way to build SwiftUI components](https://medium.com/grindr-engineering/tl-dr-swiftui-makes-customizing-views-feel-effortless-until-you-build-your-own-reusable-4a3a0cd0e288) + +[@AidenRao](https://weibo.com/AidenRao):如果你想将自定义组件有类似 SwiftUI 的语法,需要针对每一个配置去创建一个新的函数,用于实现链式调用。作者开发了一个名为 @ViewConfigurable 的宏,该宏将根据它在 ViewConfiguration 中看到的变量名自动生成这些链式调用函数,这也会让你的代码文件变的很简洁。 + +## 设计 + +### 🐢 [Designing for the Eye](https://www.nubero.ch/blog/015/) + +[@阿权](https://github.com/bqlin):本文围绕 "视觉错觉矫正" 展开,探讨其在排版与建筑中的应用,内容如下: + +1. 视觉错觉的普遍性 + - 以穆勒・莱尔错觉为例,说明视觉错觉对所有人(无论文化背景)的影响一致,甚至适用于动物与触觉感知。 + - 保罗・雷纳在《排版艺术》中指出:视觉艺术应以 "视觉呈现" 为基准,而非严格的测量数据—— 因为人类感知存在共性偏差。 +2. 排版中的视觉矫正 + - 以字体 "Futura" 为例,说明字体需通过微调来对抗视觉错觉:如字母 "O" 并非完美圆形,而是略宽于高,水平线条稍细于垂直线条,以避免 "蛋形" 错觉。 + - 字母设计需考虑整体协调:如 FF Tisa 的 "O" 上伸部分超出参考线,以平衡与其他字母的视觉重量,避免显得过小。 +3. 建筑中的视觉矫正 + - 以帕特农神庙为例,古希腊建筑师通过系统性调整抵消视觉偏差: + - 柱身 "鼓肚"(entasis):柱子中间微凸,避免因收分导致的 "纤细感"; + - 地基弯曲:柱基呈凸形,防止视觉上的 "塌陷"; + - 柱子倾斜:所有柱子微微内倾,避免 "外倒" 错觉。 + - 这些调整让建筑 "看起来协调",而非追求几何完美,赋予其生命力。 +4. 深层意义:反对平庸,追求美与文化 + - 视觉矫正的本质是对 "视觉真实" 的尊重,体现了对细节与美的极致追求。 + - 对比现代 " Excel 思维" 主导的平庸设计(如冰冷的混凝土建筑),强调这种对微妙之处的关注是人性与文化的体现。 + - 引用乔布斯的观点:人类进步依赖于传播 "精华",让更多人理解美的微妙——这也是希腊人建造神庙、设计师打磨字体的根本原因。 + +文章最终呼吁:拒绝平庸,珍视那些让生活值得的 "美与文化"。 + +## 课程 + +### [Metal Shaders for SwiftUI](https://www.metal.graphics/) + +[@BluesJiang](https://github.com/bluesjiang): 这个是一个在 SwiftUI 框架上如何使用自定义的 Shader 来实现高级渲染效果的课程,包含了渲染相关的基础知识,也包含了 SwiftUI 如何兼容使用 Metal Shader 的相关知识。不算是通识的知识,但是对于那些使用 SwiftUI 作为主力框架,并且需要非常特殊的渲染效果的应用,这门课程是可以去了解一下的。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#347-2025.08.18.md b/Reports/2025/#347-2025.08.18.md new file mode 100644 index 000000000..61a68065f --- /dev/null +++ b/Reports/2025/#347-2025.08.18.md @@ -0,0 +1,71 @@ +# 老司机 iOS 周报 #347 | 2025-08-18 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/347.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [万字长文解码如何玩转Prompt(附实践应用)](https://mp.weixin.qq.com/s/ad6y-pCe1_PV7iNA7Uh1bg) + +[@zhanggferry](zhangferry.com):这是一篇来自淘宝团队,讲解提示词工程(PE)非常全面的文章,包含业界各类优秀方法论,当你苦于 AI 「不听话」时可以从这里获取灵感。除了提示词设计的七个核心原则,还可以结合你的应用场景,考虑使用这六大高级技巧: + +* 思维链:提供「推理过程 + 答案」范例,激发 LLM 深度逻辑思考 +* 零样本思维链:无需范例,仅追加 “让我们一步一步地思考”,触发 LLM 分步推理 +* 自我一致性:调高模型温度,多次独立解答同一问题,按 “少数服从多数” 选最终答案 +* ReAct(思考与行动):以 “思考→行动→观察” 循环,让 LLM 调用外部工具(API、搜索引擎等) +* 生成知识提示:先让 LLM 生成问题相关背景知识,再结合知识回答原问题 +* 结构化提示:用 XML、JSON、YAML 等严格格式定义提示词,消除歧义 + + +### 🐕 [@isolated(any)](https://nshipster.com/isolated-any/) +[@Smallfly](https://github.com/iostalks):在 Swift 并发模型逐渐完善的过程中,@isolated(any) 作为一个相对低调却关键的特性,正在为 API 设计与任务调度提供新的可能性。 + +这篇文章系统地阐释了 @isolated(any) 的设计动机、语义价值以及在实际 API 中的应用方式。作者通过对比 GCD 与 Swift Concurrency,结合异步函数和 actor 隔离的案例,清晰展示了该属性如何让调度系统基于隔离信息做出更合理的决策。 + +对于大多数开发者而言,@isolated(any) 在日常编码中可能并不直接显现;但若你正在编写并发 API、涉及跨 actor 调度,或希望深入理解 Swift 并发体系的演进方向,这篇文章将为你提供扎实的理论支撑与实践启发。 + +### 🐎 [Flutter 3.35 发布,快来看看有什么更新吧](https://mp.weixin.qq.com/s/PPnSmA3XmyS3cZ_m7zgpdw) + +[@david-clang](https://github.com/david-clang):这次更新除了常规的控件更新和性能优化外,还有两点值得关注下: + +1. **多窗口支持**:在 Engine 层已实现在 Windows 和 macOS 中创建和更新窗口的基础逻辑 ( [#168728](https://link.juejin.cn/?target=https%3A%2F%2Fgithub.amrom.workers.dev%2Fflutter%2Fflutter%2Fpull%2F168728 "https://github.com/flutter/flutter/pull/168728") ),后续版本将更新 Linux 系统,并引入实验性 API 以支持多窗口功能。 + - 虽然官方还没提供多窗口 Demo 来展示 API 的使用,但社区已有人提交 Windows Demo 的[PR](https://github.com/flutter/flutter/pull/173715),也可以通过 [Multi Window](https://github.com/orgs/flutter/projects/39/views/1) 了解官方的进度。 + +2. **Dart & Flutter MCP**:Dart 和 Flutter MCP Server 正式 stable 发布,主要是增强了 AI 编码助手的 Dart 和 Flutter 上下文,Dart 和 Flutter MCP Server 充当桥梁,可以让 AI 通过 Dart 和 Flutter 工具链访问项目的更多上下文: + - 修复运行时错误 :检查实时 Widget 树,识别 Flutter RenderFlex 溢出,并自动应用正确的修复。 + - 管理依赖项 :在 pub.dev 上找到针对特定任务的最佳包,将其添加到 `pubspec.yaml` ,然后运行 `pub get`。 + - 编写和纠正代码 :为新功能生成样板,然后自行纠正其在此过程中引入的任何分析错误。 + +## 代码 + +### 🐕 [swiftlang/swift-subprocess: Subprocess is a cross-platform package for spawning processes in Swift.](https://github.com/swiftlang/swift-subprocess) + +[@Barney](https://github.com/BarneyZhaoooo):`Swift Subprocess` 是 Apple 官方提供的一个用于在 `Swift` 中执行外部进程的现代化库。它提供了类型安全、结构化并发的 `API` 来启动和管理子进程,支持灵活的输入输出重定向、环境变量配置和进程控制。相比传统的 `Process/NSTask API`,它采用了 `Swift` 并发模型,让异步执行和错误处理更加优雅。该库是 `Swift` 生态系统中处理外部命令执行的标准解决方案。 + +### 🐎 [Define the scroll edge effect style of a scroll view for Liquid Glass](https://www.createwithswift.com/define-the-scroll-edge-effect-style-of-a-scroll-view-for-liquid-glass/) + +[@AidenRao](https://weibo.com/AidenRao):在 OS 26 的液态玻璃适配中,需要借助 OS 26 中引入的 [`scrollEdgeEffectStyle(_:for:)`](https://developer.apple.com/documentation/swiftui/view/scrolledgeeffectstyle\(_:for:\)) 方法,去控制滚动视图在边缘区域的样式,尤其是在与安全区域或系统 UI(如标签栏)重叠部分的视觉体验。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#348-2025.08.25.md b/Reports/2025/#348-2025.08.25.md new file mode 100644 index 000000000..287a4bbce --- /dev/null +++ b/Reports/2025/#348-2025.08.25.md @@ -0,0 +1,81 @@ +# 老司机 iOS 周报 #348 | 2025-08-25 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/348.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [High Level Anatomy of a Camera Capturing Session](https://mfaani.com/posts/ios/swiftui-camera-learnings/) + +[@AidenRao](https://weibo.com/AidenRao):这边文章用比较简单易懂的话,介绍苹果的相机从拍摄到 Swift 中展示的完整流程。文章不长,比较适合做个相机原理了解。 + +## 文章 + +### 🌟 🐕 [从 DisplayList 到 Transaction: SwiftUI 调试实战](https://kyleye.top/posts/swiftui-debug-analysis) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 文章介绍了如何通过 SwiftUI 中的相关环境变量,使用 DisplayList 输出分析视图渲染问题,通过符号断点和汇编调试深入分析 SwiftUI 内部机制,并使用 AttributeGraph 等调试工具进行问题定位。 + +### 🐕 [Faster Equatable and Hashable conformances with Identifiable](https://erkek.in/faster-equatable-and-hashable-conformances-with-identifiable) + +[@Smallfly](https://github.com/iostalks):这篇文章聚焦 Swift 中 `Equatable` 与 `Hashable` 协议的性能优化,揭示了编译器自动合成实现的潜在瓶颈,并提出结合 `Identifiable` 协议的改进方案。核心内容包括: + +- 问题分析:默认合成的 `Equatable`/`Hashable` 会逐成员比较或哈希,对含大集合(如 `[User]`)或嵌套结构的类型,复杂度达 O(N),在 SwiftUI 视图更新、`Set` 操作中易成性能瓶颈。 +- 优化方案:利用 `Identifiable` 的 `id` 属性(如 `UUID`),仅基于唯一标识实现 `Equatable` 和 `Hashable`,将操作复杂度降至 O(1)。 +- 数据验证:基准测试显示,含 1000+ 员工的 `Company` 类型,`Identifiable` 方案的 `Equatable` 快 3 倍,`Hashable` 快 3 万倍。 + +文章结合编译器源码与 SwiftUI 实践,为性能敏感场景提供了可落地的优化思路。 + +### 🐢 [What's New in UIKit](https://sebvidal.com/blog/whats-new-in-uikit-26/) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章详细总结了 iOS 26 中 UIKit 的全面更新。尽管 UIKit 不再是 WWDC 的主角,但今年仍获得了大量新特性。 +主要更新概况: + • `Liquid Glass` 设计语言:新增 `UIGlassEffect`、`UIButton.Configuration` 的玻璃按钮样式,以及 UIBarButtonItem 的共享背景支持 + • 导航栏增强:`UINavigationItem` 新增 `subtitle`、`largeTitle`、`attributedTitle` 等属性,支持更丰富的标题展示 + • 分割视图改进:`UISplitViewController` 支持新的 `inspector` 列,提供类似 `macOS` 的检查器面板 + • 标签栏配件:`UITabAccessory` 允许在标签栏上方添加浮动工具栏,支持折叠展开动画 + • HDR 色彩支持:`UIColor` 新增 HDR 初始化方法,`UIColorPickerViewController` 支持曝光调节 + • 角落配置 API:`UICornerConfiguration` 提供统一的圆角设置方案,支持容器同心圆角 + • 自然文本选择:`UITextView` 支持混合左右文字的自然选择,`selectedRanges` 替代 selectedRange + • 主菜单系统:`UIMainMenuSystem` 为 `iPadOS` 提供 `macOS` 风格的菜单栏 + • 观察者模式集成:`UIView` 和 `UIViewController` 原生支持 `Swift Observation` 框架 + • 滑块增强:`UISlider` 新增刻度配置和无拖柄样式 +整体而言,iOS 26 的 `UIKit` 更新聚焦于视觉现代化、跨平台一致性和开发便利性的提升。 + +### 🐕 [SwiftUI for Mac 2025](https://troz.net/post/2025/swiftui-mac-2025/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章总结了 SwiftUI 在 macOS 26 上的多项改进,主要亮点包括: + +- **统一图标格式**:Xcode 26 新增 Icon Composer,可用 SVG 分层生成跨平台图标,并向下兼容旧系统。 +- **Liquid Glass 风格**:按钮、滑块、切换等控件拥有玻璃质感与动态反馈,UI 更现代。 +- **原生 WebView**:SwiftUI 首次内置 WebView,无需桥接即可加载网页并追踪导航事件。 +- **列表性能优化**:List 在处理上万条数据时依然流畅,适合大数据量展示。 + +整体来看,SwiftUI 在 Mac 上的易用性与表现力进一步提升,对想要打造现代化界面的开发者非常有参考价值。 + +### 🐎 [Git 2.51 support push/pull stash](https://github.blog/open-source/git/highlights-from-git-2-51/) + +[@david-clang](https://github.com/david-clang):过去 git stash 难以在不同机器之间迁移,Git 在 8 月 18 日发布的 2.51.0 版本支持 push/pull stash,实现跨机器共享 stash。但要在 GUI 工具上应用该特性,还要再等等,目前 Fork 支持的 Git 版本是 2.45.2。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#349-2025.09.01.md b/Reports/2025/#349-2025.09.01.md new file mode 100644 index 000000000..3faf33e0e --- /dev/null +++ b/Reports/2025/#349-2025.09.01.md @@ -0,0 +1,102 @@ +# 老司机 iOS 周报 #349 | 2025-09-01 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/349.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐎 [Why I'm Not Using Xcode 26's AI Chat Integration (And What Could Change My Mind)](https://www.fline.dev/why-im-not-using-xcode-26s-ai-chat-integration-and-what-could-change-my-mind/) + +[@阿权](https://github.com/bqlin):文章者结合自身开发体验,分析了 Xcode 26 中 AI 集成的不足,并建议 Apple 补齐(作者也是恨铁不成钢啊!): + +1. 请求队列:AI 功能会阻塞输入,无法 “边等待边规划”,打断开发思路。 +2. 上下文工程支持:不支持输入上下文文档,需反复解释编码规则,难以调教。 +3. 构建验证能力:无法自行构建、读取错误日志,频繁依赖人工操作,打断开发节奏。 +4. Git 集成:无法搜索历史、对比版本、自动提交,无法利用代码历史辅助开发(如恢复旧代码、更新文档)。 +5. 终端与 CLI 访问:无法通过终端运行自定义的 CLI 工具,简化多任务工作流。 +6. 项目文件限制:无法打开多仓库文件夹,适配复杂项目结构的能力差。 +7. 网页搜索与文档访问:无法获取最新 API / 提案信息,需手动查找,降低信息获取效率。 + +作者认为 Xcode AI 目前更像个 “功能展示”(有但难用),而非真正的生产力工具,核心问题是未围绕 “ AI 驱动开发” 的工作流设计(如频繁的人工干预、缺少自动化能力)。 + +为此,作者也是放弃了 Xcode 转向了 Cursor + Claude Code。 + +### 🐎 [Working with partially generated content in Xcode previews](https://www.artemnovichkov.com/blog/working-with-partially-generated-content-in-xcode-previews) + +[@DylanYang](https://github.com/Dylan19Yang):iOS 26 有了新的 Foundation Models 框架支持开发者通过系统端侧的模型来生成一些数据,本文作者在此之上探索了如何让 Xcode Preview 功能和这些端生成的数据结构进行交互预览。预览 SwiftUI 的静态布局的话我们可以通过代码构造对应的数据结构来 mock 一个实现,此外也可以通过 json 的方式构造一个 GeneratedContent 作为端生成数据结构的初始化参数。如果需要验证流式输出对于 UI 布局的影响,则可以借助 AsyncThrowingStream 来模拟模型生成的场景。 + +### 🐢 [From GPT-2 to gpt-oss: Analyzing the Architectural Advances And How They Stack Up Against Qwen3](https://sebastianraschka.com/blog/2025/from-gpt-2-to-gpt-oss.html) + +[@阿权](https://github.com/bqlin):本文围绕 OpenAI 新发布的开放权重模型 gpt-oss(20B/120B)展开,对比了从 GPT-2 的架构演进,并与 Qwen3 的特性进行对比,最后总结其实用价值和局限。内容可概括为: + +从 GPT-2 到 gpt-oss 的架构演进: + +| 演进点 | 旧设计(GPT-2) | 新设计(gpt-oss) | 收益 | +| :----------- | :---------------- | :-------------------------- | :--------------------------------- | +| 正则化 | Dropout | 无 Dropout | 单轮训练场景无过拟合风险,提升效率 | +| 位置编码 | 绝对位置编码 | RoPE(旋转位置编码) | 支持更长上下文,减少参数 | +| 激活函数 | GELU + 2 层前馈 | SwiGLU + 3 层门控前馈 | 降低计算成本,增强表达能力 | +| 前馈模块 | 单前馈模块 | MoE(混合专家模型) | 平衡模型容量与推理效率 | +| 注意力机制 | MHA(多头注意力) | GQA(分组查询注意力) | 减少显存与计算开销 | +| 长上下文优化 | 无 | 滑动窗口注意力(128 token) | 进一步降低长文本推理成本 | +| 归一化层 | LayerNorm | RMSNorm | 简化计算,提升 GPU 训练效率 | +| 推理控制 | 无 | 推理强度可调(低 / 中 / 高) | 平衡成本与准确率 | + +gpt-oss 与 Qwen3 模型差异较小,在一些特性上各有千秋: + +| 维度 | gpt-oss-20B | Qwen3 30B-A3B | +| :----------- | :----------------------------------------------------------- | :--------------------------------------------------- | +| 架构权衡 | 更宽(嵌入维度 2880)、少量大型专家(32 个) | 更深(48 个 Transformer 块)、大量小型专家(128 个) | +| 长上下文处理 | 滑动窗口(13.1 万 token),但设计了 Attention Bias、Attention Sinks | 纯 GQA 支持更长上下文(26.2 万 token) | + +实用价值与局限: + +- 优势:MXFP4 优化适配单 GPU(20B 需 16GB 显存,120B 需 80GB 显存),推理强度可调,性能接近闭源模型; +- 局限:幻觉率较高,无训练代码 / 数据集(仅开源权重与推理代码),未提供基础模型; +- 未来潜力:随着工具集成成熟,可通过调用外部资源(如搜索引擎)弥补知识遗忘,进一步释放推理能力。 + +总体而言,gpt-oss 的发布丰富了开源 LLM 生态,为需要本地部署、高推理能力的场景提供了新选择,也为研究 Transformer 架构演进提供了重要参考。 + +注意:尽管 gpt-oss 名称中,oss 为 Open-source Software,但官方明确它只是开放权重(Open-weight)模型,仅提供模型权重与推理代码,而非完全开源。 + +### 🐕 [GPT-5 Thinking System Prompts Leak](https://github.com/asgeirtj/system_prompts_leaks/blob/main/OpenAI/gpt-5-thinking.md) + +[@Barney](https://github.com/BarneyZhaoooo):这份提示词让我们看到 GPT-5 Thinking 模型的内部运作机制。核心内容包括: + • **知识边界**:模型知识截止 2024 年 6 月,当前时间设定为 2025 年 8 月,具备 Web 搜索、Python 分析、图像生成等多种工具集成能力 + • **交互规范**:采用三通道架构(analysis、commentary、final),支持富文本 UI 组件(图片轮播、产品卡片、图表),强制要求立即完成任务不可推诿 + • **安全机制**:严格的事实核查要求(需引用来源),时效性信息强制网络验证,设有 1-10 级详细度控制参数 +为理解大语言模型的提示工程和安全设计提供了珍贵的第一手资料,对 AI 应用开发者极具参考价值。 + +### 🐕 [Corner concentricity in SwiftUI on iOS 26](https://nilcoalescing.com/blog/ConcentricRectangleInSwiftUI/) + +[@AidenRao](https://weibo.com/AidenRao):iOS 26 的同心圆角(Corner Concentricity)是苹果在 WWDC 2025 上强调的一项重要设计理念和视觉特性。同心圆角的核心思想是让嵌套的 UI 元素具有和谐一致的圆角,即使它们的大小或层级不同,其圆角的视觉“圆心”也尽可能保持一致,从而营造出统一、精致且富有纵深感的界面效果。 + +SwiftUI 引入了 `ConcentricRectangle` 这个新的 API,帮助开发者更高效地在复杂布局中实现完美的同心圆角效果,让界面设计更加统一与精致。 + +### 🐕 [MNN LLM Chat iOS 流式输出优化实践](https://mp.weixin.qq.com/s/m5J5nLZiPd_yB0y-byyjCg) + +[@JonyFang](https://github.com/JonyFang): 本文针对 iOS 应用中部署大语言模型(LLM)时出现的文字流式输出卡顿问题,提出了一套高效的三层优化方案:通过智能流缓冲解决模型输出与 UI 更新的频率不匹配,利用 UI 更新批处理与节流降低主线程压力,并借助打字机动画渲染增强视觉流畅性。这一方案提升了本地 LLM 应用的交互体验,适合开发高性能 AI 聊天应用的团队参考实践。其开源实现:[MNN GitHub 项目 - https://github.com/alibaba/MNN](https://github.com/alibaba/MNN)。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#350-2025.09.08.md b/Reports/2025/#350-2025.09.08.md new file mode 100644 index 000000000..d4ce4c90b --- /dev/null +++ b/Reports/2025/#350-2025.09.08.md @@ -0,0 +1,84 @@ +# 老司机 iOS 周报 #350 | 2025-09-08 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/350.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐕 [What's New in the Lambda V2 Runtime (Beta)](https://swifttoolkit.dev/posts/lambda-v2) + +[@Kyle-Ye](https://github.com/Kyle-Ye): Lambda V2 Runtime 是 AWS Lambda Swift 运行时的重大升级,核心改进是使用 Swift 结构化并发重写了内部实现。新版本引入了更灵活的执行模型,开发者可以控制 `main` 函数入口,支持后台执行(`LambdaWithBackgroundProcessingHandler`)和流式响应(`StreamingLambdaHandler`)等高级特性。同时提供了统一的服务生命周期管理机制,让 Lambda 函数能够优雅地处理初始化和清理工作。对于需要在 AWS Lambda 上运行 Swift 代码的开发者来说,V2 运行时带来了更强大的控制能力和更好的性能表现,值得关注并适时迁移。 + +### 🐎 [Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer](https://mp.weixin.qq.com/s/ceDt69ue5aV4wGwaGIKmAQ) + +[@Crazy](https://github.com/jiyan135960):骨架图是 app 中经常用来等待网络加载的一种方式,这种方式可以更友好的让用户知道 app 的状态。Skeletonizer 可以让使用者快速的完成骨架图的功能开发,只需把布局包裹在 Skeletonizer 外层,开启 enabled: true 即可得到骨架屏动画。简单来说 skeletonizer 就是通过自定义 PaintingContext 拦截处理 child 的渲染,让原 UI 直接转化为骨架,而不是手写一份骨架版 UI。还可以通过配置来实现更精细的控制骨架化逻辑,比如跳过、合并等。但是越复杂的界面实现起来也就越困难,很多时候需要自己来实现骨架图。这篇文章主要是给大家一个思路,这种实现方案不仅可以用于骨架图,也可以用来其他的功能开发。 + +### 🐕 [果味儿幽灵 -- Xcode 新 AI 助手深度解析](https://mp.weixin.qq.com/s/TzM7MpYCSDrkUuT9eiSFrw) +[@Smallfly](https://github.com/iostalks):这篇文章深度拆解了 Xcode 26 全新 AI 助手的技术内核,从源码到行为策略揭示其「苹果味儿」的设计逻辑。核心内容包括: + +- **架构设计**:采用 Planner-Executor 模型,planner 负责意图分类与方案规划,executor 调用 `edit_file` 等工具执行代码修改,确保行为确定性。 +- **策略驱动**:通过外部 `.idechatprompttemplate` 文件定义「苹果优先」规则,强制使用 Swift Concurrency、Swift Testing 等技术,甚至要求回答「苹果新特性」前必须调用 `search_additional_documentation` 检索内部文档。 +- **扩展潜力**:prompts 外置、工具动态加载的设计,为开发者定制助手提供可能——修改文本模板或注入自定义工具即可调整其「灵魂」。 +- **对比价值**:与 Cursor、Claude Code 等工具对比,突出 Xcode AI 在 IDE 深度集成、企业合规上的优势。 + +文章结合框架源码与实践案例,为开发者理解这一「执拗」助手的行为逻辑,甚至是二次定制提供了关键视角。 + +### 🐎 [iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持](https://mp.weixin.qq.com/s/cYKke432bBzpg365Ia9y7Q) + +[@david-clang](https://github.com/david-clang):Apple 在 iOS 26 中禁止 Debug 时 `mprotect` 的 `RX` 权限,将导致真机无法在 Debug Mode 编译成功的[错误](https://github.com/flutter/flutter/issues/163984),Flutter 之前采取的 hack 方案会导致容易出现 `Timed out *** to update` 错误,现在的[方案](https://github.com/flutter/flutter/pull/173443/)是在  iOS 17+ 和 Xcode 26+ 上利用 `devicectl` 和 `lldb` 突破 `RX` 权限限制, 完成了全新 LLDB 调试的适配迁移。 + +### 🐎 [What makes Claude Code so damn good (and how to recreate that magic in your agent)!?](https://minusx.ai/blog/decoding-claude-code/) + +[@zhangferry](zhangferry.com):在编程领域为什么总感觉 Claude Code 比其他 Agent 要强不少?除了模型本身的差异,更重要的是对 Agent 的设计逻辑上,本文罗列了几点值得借鉴的 Agent 设计原则。 + +1. 控制逻辑设计 + +* 只保留一个主循环,最多增加一个处理分支。过多分支路径下既容易出错,还不容易调试 +* 一些简单工作比如读文件、总结记录等交给小模型处理 + +2. Prompts 设计 + +* 要有一个整体的配置文件(类似 claude.md)以记录用户偏好,比如跳过某些文件夹,使用特定的库。来自 MinusX 的实践,在 AI 首次遇到一些不了解的专有名词时,会自动提醒要不要补充信息到该配置文件。 +* 一些标记或者示例,可以使用 XML 标签或者 Markdown 语法,以强化提醒 + +3. Tools 设计 + +* 在内容搜索时使用 jq、find 这类轻量工具而不是 RAG 这种重工具 +* 给工具分类,低级工具(bash 命令、读文件)、中级工具(grep、glob)、高级工具(网页搜索等 MCP),每个工具都注明其适用场景 +* 让 AI 自己管理 todo list。长任务里,AI 容易忘事,就让它自己写待办、随时看,还能中途改,避免做到一半 “跑偏” + +4. 可控性设计 + +* 语气和风格限制,使得 AI 回答更简洁 +* 对于重要的规则,使用这些关键字 `IMPORTANT`,`NEVER` 会很有效 +* 「什么时候该做什么,不该做什么」不易过多,因为他们容易冲突,处理逻辑的关键步骤需补充一些启发式的方法和处理策略 + +## 代码 + +### [awesome-nano-banana](https://github.com/JimmyLv/awesome-nano-banana) 和 [awesome-gpt4o-images](https://github.com/jamez-bondos/awesome-gpt4o-images) + +[@EyreFree](https://github.com/EyreFree):当下 AI 生图技术发展迅猛,Nano Banana 和 GPT-4o 备受关注。Nano Banana 基于谷歌 Gemini 2.5 Flash Image 架构,解决了角色一致性等难题,能深度理解物理逻辑,支持对话式编辑,在商业、营销及个人创作等领域应用广泛。GPT-4o 是 OpenAI 的多模态大模型,风格多样,构图真实,便于再编辑且响应迅速,常用于广告、艺术、设计等场景。相关的 [JimmyLv/awesome-nano-banana](https://github.com/JimmyLv/awesome-nano-banana) 和 [jamez-bondos/awesome-gpt4o-images](https://github.com/jamez-bondos/awesome-gpt4o-images) 仓库,收集了大量图像案例与提示词,为探索 AI 生图技术提供了丰富资源。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#351-2025.09.15.md b/Reports/2025/#351-2025.09.15.md new file mode 100644 index 000000000..2201c1934 --- /dev/null +++ b/Reports/2025/#351-2025.09.15.md @@ -0,0 +1,56 @@ +# 老司机 iOS 周报 #351 | 2025-09-15 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/351.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### [Memory Integrity Enforcement: A complete vision for memory safety in Apple devices](https://security.apple.com/blog/memory-integrity-enforcement/) + +[@Damien](https://github.com/ZengyiMa):本文章是 Apple 推出的 Memory Integrity Enforcement(MIE)技术,结合自研芯片与系统级安全机制,为 iPhone 17 系列提供业界首个全时开启的内存安全保护,无需用户感知即可防御缓冲区溢出、释放后使用等漏洞。该功能基于增强版 Arm 内存标记扩展(EMTE),配合安全内存分配器与标签保密技术,显著增加间谍软件等高级攻击的开发成本,Apple 称之为“消费级操作系统内存安全史上最大升级”。 + +## 文章 + +### 🐎 [SwiftUI WebView](https://troz.net/post/2025/swiftui-webview/) + +[@DylanYang](https://github.com/Dylan19Yang):作者向我们介绍了 Swift UI 中新引入的 WebView 组件。它有非常简单的初始化方式,同时也兼具了很多我们在使用 WKWebview 时经常会用到的功能,如页面加载各个时机的回调、自定义的 scheme handler、js 注入等。作者提供了一个完善的 demo 来展示这些能力。感兴趣的读者可以阅读下本文。 + +### 🐎 [Debugging Swift Concurrency: “ Am I on the Main Actor? ”](https://www.swiftyplace.com/blog/debugging-swift-concurrency) + +[@JonyFang](https://github.com/JonyFang): Swift Concurrency 调试推荐做思维上的转变:从线程思维转向 Actor 思维,关注"我在哪个 Actor 上"而非"我在哪个线程上"。文中描述了 `MainActor.assertIsolated()` 和 `MainActor.preconditionIsolated()` 在 Debug 和 Release 模式下的差异用法。整体在推荐拥抱 Swift 6 的并发安全模型,让 Actor 成为开发过程中思考并发的基础单元。 + +### 🐎 [Building a design system at Genius Scan](https://www.swiftbysundell.com/articles/building-a-design-system-at-genius-scan/) + +[@david-clang](https://github.com/david-clang):文章详细介绍了如何利用 SwiftUI 的组合思想和环境机制,为应用构建灵活的设计系统。核心是通过创建可复用的基础组件(如 `Row`),并利用 `ViewBuilder` 和 `Environment` 实现样式配置与定制,从而高效解决 UI 一致性与代码复用问题。 + +### 🐕 [Four Corners: the first game in Catalog written in Swift](https://news.play.date/news/four-corners-swift/) + +[@极速男孩](https://github.com/ztlyyznf001):Playdate 游戏《Four Corners》被开发者 Steven Chipman 用 Swift 重写,成为 Catalog 中首款 Swift 游戏。此举旨在探索 Swift 在 Playdate 上的性能潜力。Chipman 熟悉 Swift,选择重写此游戏是因为它相对简单且存在性能瓶颈。尽管遇到了缺少部分 API 和 Foundation 库的挑战,以及调试困难,但 PlaydateKit 库极大地简化了开发。Chipman 认为 Swift 的优势(如 C 级性能和易用性)胜过这些不便,并计划未来继续使用 Swift 开发 Playdate 游戏。他还因此重启了《Four Corners》的 iOS 版本。 + +### 🐎 [Implementing a Refractive Glass Shader in Metal](https://medium.com/@victorbaro/implementing-a-refractive-glass-shader-in-metal-3f97974fbc24) + +[@BluesJiang](https://github.com/BluesJiang):这篇文章使用 Metal Shader 来自己尝试实现类似苹果 Liquid Glass 的效果,介绍了玻璃效果的各个组成部分,已经相关的算法。同时也演示了算法中的各个参数是如何影响最终的效果的。推荐有自定义液态玻璃效果的需求或者是想了解相关的实现方式的开发者阅读。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#352-2025.09.22.md b/Reports/2025/#352-2025.09.22.md new file mode 100644 index 000000000..9f8f9d1e9 --- /dev/null +++ b/Reports/2025/#352-2025.09.22.md @@ -0,0 +1,129 @@ +# 老司机 iOS 周报 #352 | 2025-09-22 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/352.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +### 🌟 🐕 [Swift 6.2 正式发布](https://www.swift.org/blog/swift-6.2-released/) + +[@kemchenj](https://kemchenj.github.io/):随着 Swift 语言本身走向成熟,每年的更新慢慢的已经不是集中在语言功能上,投入了更多的精力到工具链和生态建设上。 + +#### 更加平易近人的 Concurrency + +- 默认使用 `@MainActor`,减少显式的 isolation 标记 +- 更加直观的 `async` 函数,默认在 caller 的上下文里执行,让 `class` 类型里可以用更简洁直观的方式去实现没有数据竞争的逻辑 +- 新增 `@concurrent` 函数注解,把任务派发到全局任务池 + +前两个功能都是可以手动开启和关闭的,由于前面两个功能开启后,非 actor 环境下的 `async` 函数全部都会派发到 `@MainActor` 执行,导致主线程负载变大,所以新增 `@concurrent` 可以制定任务派发到全局线程。这几套组合拳下来大大加强了 Concurrency 的易用性。 + +#### 安全的系统级编程功能 + +- `InlineArray`:固定大小的内联数组 +- `Span`:可以理解为类型安全的 Buffer 类型 +- 嵌入式 Swift:新增全套 `String` / `InlineArray` / `Span` API +- C++ 互操作:可以通过 header 标注混合使用两个语言里的 `Span` 的类型 + +#### 工具链 + +- VSCode 插件更新 +- 更加细化的编译警告控制 +- 更快的 Macro 编译速度(通过下载预编译的 swift-syntax 包) +- 优化 async 调试功能的体验和稳定性 + +#### 核心库更新 + +- Subprocess:一套全新的 Swift 原生进程接口 +- Foundation:NotificationCenter 新增一套类型安全,拥抱 Concurrency 的接口 +- Observation:提供更加易用的 async sequence 接口 +- swift-testing:新增 API 提高测试代码的表达能力 + +更多详细信息请查看原文。 + +## 文章 + +### 🌟 🐢 [KMP on iOS 深度工程化:模块化、并发编译与 98% 增量构建加速](https://mp.weixin.qq.com/s/wOnyjYcka99eFJz8BWlu4Q) + +[@JonyFang](https://github.com/): 本文主要介绍了 Bilibili KMP 在 iOS 工程化的一些深度改造,达成模块化、并发编译与 98% 增量构建加速的目标。主要通过对 Kotlin/Native 编译管线的深度拆解与重构,系统性地解决了其在模块化、编译并发和增量构建方面的核心瓶颈。 + +**在构建系统与编译速度上** :实现了 `Parallel Compilation`,将每个 Kotlin 模块独立编译为 `.a` 文件,在一些日常的底层修改的场景下最终产物编译耗时降低 98% 。这充分释放了 Bazel 的高并发优势,结合可靠的 `remote cache` 机制达到 Never clean build 的预期。 + +**在编码与跨语言交互上**:摆脱了 KMP 默认的“大一统”框架模式。通过为每个 Kotlin 模块生成独立的 `Clang module` ,并以 `@ObjCExport` 注解精确控制导出,实现了真正的模块化。 + +**在调试与工程化上**:通过修复 `source-map` 路径和实现可靠的 `implementation_deps` ,保证了跨语言调试的稳定性和构建的确定性,解决了社区方案中的常见痛点。 + +也推荐几篇前几期的相关阅读: +- [探讨跨平台技术与跨平台 UI 框架及 Kotlin Multiplatform 在 bilibili 的实践](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247499203&idx=1&sn=67aea00aa5c15999f97791311938bc53&scene=21&poc_token=HLpTz2ijWQWLwFf6XFfk8Q_WpxxZDQY6efKAoW3r) +- [工程化视角的 Kotlin Multiplatform 核心解读及优化](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247499744&idx=1&sn=f3c7bff956a066c30b70b5be1236a308&scene=21&poc_token=HNFTz2ij1E8hZViL6RNPunbfKHVS25LeC66WMyXt) +- [B 站在 KMP 跨平台的业务实践之路](https://mp.weixin.qq.com/s?__biz=Mzg3Njc0NTgwMg%3D%3D&mid=2247502999&idx=1&sn=9213bf3505748c329053a5b583450a18&scene=21&poc_token=HOdTz2ijemHOj_WW4N95gPA12ZTRq-q99qX9m5aI) + + +### 🐎 [Automating Github Action Workflows For Swift](https://elegantchaos.com/2025/08/28/action-builder.html) + +[@Damien](https://github.com/ZengyiMa):作者重启搁置的 ActionBuilder 项目,通过扫描 Package.swift 实现零配置生成 GitHub Actions tests.yml,借 Swiftly 自动识别 Swift 版本并调度 Linux/macOS runner,对 iOS 等 Apple 平台则调用 Xcode 构建且已适配 Swift 6.0-6.2,未来将以轻量 CLI 取代插件,可直接嵌入 Xcode build phase 随编译自动更新工作流。 + +### 🐕 [认知负荷才是关键](https://github.com/zakirullin/cognitive-load/blob/main/README.zh-cn.md) + +[@zhangferry](zhangferry.com):编程领域有很多指导性的理论知识,但这些业界的实践,为什么并非总是有效呢?基于这个问题本文引出认知负荷这个概念:认知负荷是指开发者为了完成一项任务需要动多少脑子。从人的视角出发,以是否便于理解来衡量代码好坏,并给出了以下 4 个降低认知负荷的原则: + +* 模块设计:不应一味的强调小方法,小模块,这会导致过多的接口和代码关联,增加认知负荷。深方法,深模块,一定程度把复杂度限定在特定范围,整体维护成本更低。 + +* 架构选择:不应为体现技术水平采用过于复杂的架构,易懂、易理解的架构才更合适。文中还建议在架构评审时可以让初级开发者参与,以识别过于复杂的设计。 + +* 抽象和代码组织:不应过于追求 DRY(不要重复自己),而大量使用设计模式,微服务等,少量的重复比不必要的依赖更好。 + +* 心智模型:传统推崇的心智模型(领域驱动设计 DDD)有其优势,但副作用是会引入很多主观理解,这个基础之上开发的代码往往会有更高的认知负荷。好的代码应该便于理解,而不是追求优雅和复杂。 + +延伸的几种观念,可能只看名称你就能知道个大概了:「可能是时候停止推荐《代码整洁之道》」、「小型函数的弊端」、「为什么我讨厌“框架”」、「设计牺牲」 + +### 🐢 [阿权的开发经验小集](https://juejin.cn/post/7550466215790886927) + +[@阿权](https://github.com/bqlin):阿权的日常开发小集,记录了日常开发中踩过的大小坑,内容主要涵盖 Git、iOS、Swift、Xcode 等方面问题的总结。按需搜索,说不定有意外的惊喜。 + + +### 🐕 [iOS26 Runtime Changes:Concurrent mutation of nonatomic properties](https://github.com/SwiftOldDriver/iOS-Weekly/issues/5148) + +[@ChengzhiHuang](https://github.com/ChengzhiHuang):对于 NSObject 的 property 是 nonatomic 的对象类型时,多线程的 set/get 会存在线程安全问题(非对象一样存在问题,只是不会崩溃),一个简单的修改方案是改为 atomic,注意这个只对一般对象有效。如果是 NSMutableDictionary 等容器对象,还需要考虑对其容器内内容的修改也要注意线程安全,一般得加锁解决;更极端需要多个属性同时保持同步则也得加锁。问题不仅在 property 中存在,全局变量也一样存在问题。具体可以参考我们推荐过的 [头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患](https://mp.weixin.qq.com/s/chR42Vq4kACIEJBDYlbddg) 。 + +在 iOS 26 以前,一般概率发生的崩溃崩溃的栈顶也在 objc_retain/objc_release 中;在 iOS 26 及之后,则如果发生这种线程安全问题,栈顶函数不变的情况下,会有明确的 EXC_BAD_ACCESS(KERN_INVALID_ADDRESS) 地址为 0x400000000000bad0 让这种情况更容易被辨识。 + +当然这也会带来一定的副作用,由于实现方式是通过 objc_storeStrong 方法中插入汇编,实现在调用 objc_retain 前,将 0x400000000000bad0 写入 x0 指向的地址 ,再正常调用 objc_retain 方法(正常 objc_retain 只接收一个参数,因此只需要 x0 即可)。因此原本偶现的问题,概率是会被放大的(以前即使有问题,但也有概率不崩溃),因此 iOS 26 的崩溃率对大部分应用来说会上升。稳定性同学要面临年末指标上涨的压力了,毕竟 iOS 26 的覆盖率会快速提升。 + +但从更长的视角来看,在 iOS 26 暴露了更多问题后,开发者修复后,后续的新版本对低 OS 的用户也带来体验的提升,所以总体我还是偏正常得看待这个 feature 的,等于苹果开启了对一类问题的线上 TSan ,并且对性能的影响微乎其微。短期的阵痛后带来的是更长期的体验提升。美中不足的就是如果这项 feature 能像 malloc 的一些开关(malloc stack logging 等),能让开发者自主控制按一定比例开启就更好了,能有更多时间修复以及控制对升级到 iOS 26 用户的影响。 + +> 更具体的一些细节可以看链接。 + +### 🐕 [How to disable Liquid Glass](https://www.swiftwithvincent.com/blog/how-to-disable-liquid-glass) + +[@Cooper Chen](https://github.com/cjlcooper):在 iOS 26 中,苹果推出了全新的 Liquid Glass 设计系统,为界面带来了更透明、流动的视觉体验。但如果你的 App 还没做好适配,用户可能会遇到界面错乱的问题。作者在文章中给出了一个简洁的解决方案:通过在 `Info.plist` 中新增键值 `UIDesignRequiresCompatibility = YES`,就能让应用暂时保持旧版设计,避免因 Liquid Glass 引发的兼容性 bug。不过要注意,这只是临时方案,苹果计划在 iOS 27 移除该选项。也就是说,开发者需要尽快着手适配 Liquid Glass,以确保用户体验的连贯性和未来的稳定性。对于想稳妥过渡到新系统的团队来说,这是一个既务实又必须关注的技巧。 + +## 设计 + +### 🐕 [marioaguzman Design Guidelines layout](https://marioaguzman.github.io/design/layoutguidelines/) [marioaguzman Design Guidelines toolbar ](https://marioaguzman.github.io/design/toolbarguidelines/) + +[@含笑饮砒霜](https://weibo.com/chinafishnews/):这两篇文章系统阐述了 macOS 应用在窗口布局和工具栏设计上的核心规范与实践原则:在窗口布局上,需要遵循中心均衡、对齐、留白和视觉平衡的原则,合理安排常规、小型和迷你控件的位置与间距,并通过空白、分隔线或分组框组织控件,确保界面简洁一致;在工具栏设计上,应基于用户的心智模型挑选并排序常用功能,合理区分全局与界面项,正确处理侧边栏和检查器的切换,注意标题、副标题、溢出优先级与居中项的使用,同时结合不同样式(统一、紧凑、扩展、偏好)以及底部栏、附加栏和系统内置特殊控件,实现美观、直观且高效的用户体验。 + + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#353-2025.09.29.md b/Reports/2025/#353-2025.09.29.md new file mode 100644 index 000000000..3c889ce56 --- /dev/null +++ b/Reports/2025/#353-2025.09.29.md @@ -0,0 +1,65 @@ +# 老司机 iOS 周报 #353 | 2025-09-29 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/353.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 文章 + +### 🐢 [We Need to Talk About Observation](https://jaredsinclair.com/2025/09/10/observation.html) + +[@Smallfly](https://github.com/iostalks):这篇文章深度探讨了 Swift 观察机制的新旧范式更迭,从 `ObservableObject` + `Combine` 的旧时代到 `@Observable` 宏 + `Observations` 结构体的新生态,揭示了迁移过程中的关键挑战与设计考量。核心内容包括: + +- **旧范式的价值**:回顾 `@Published` + `Combine` 在对象间观察(如 `UserCoordinator` 与 `SyncEngine`)的简洁性——自动管理订阅生命周期、支持跨对象响应,为复杂业务逻辑提供低耦合解决方案。 +- **新范式的突破与局限**:分析 `@Observable` 宏在 SwiftUI 集成(属性访问优化、嵌套支持)的优势,同时指出 `withObservationTracking`(单次触发需递归调用)与 `Observations` 结构体(任务生命周期管理复杂)在非 UI 场景的不足——订阅取消需手动管理 `Task`、对象弱引用易出错。 +- **迁移建议**:强调选择方案时需超越 UI 层考量,关注业务逻辑中对象间观察的实际需求,避免因新特性的「表面简洁」忽略生命周期管理的潜在风险。 + +文章以开发者视角对比新旧机制的工程实践差异,为理解 Swift 观察体系演进提供了务实的参考。 + +### 🐕 [Xcode Migrations: From Stone Age to AI Mastery](https://medium.com/qonto-way/xcode-migrations-from-stone-age-to-ai-mastery-d2590657e809) + +[@Barney](https://github.com/BarneyZhaoooo):这篇文章讲述了 Qonto 团队如何将 Xcode 升级从三周噩梦转变为一天自动化流程。 +**背景:** 60+ iOS 工程师团队面临 Xcode 升级瘫痪开发流程的问题,依赖管理冲突和构建失败频发。 +**核心改进:** +* **架构优化**:移除 CocoaPods,统一使用 Swift Package Manager +* **自动化监控**:Swift 构建的 Xcode Release Checker,CI 监控版本发布并 Slack 通知 +* **沟通策略**:建立迁移门户和可视化时间线,团队理解度从 33% 提升至 90% +* **CLI 工具**:Swift 自动化迁移流程,包括分支创建、构建清理、版本更新等 +* **AI 集成**:构建 Swift MCP 工具和 Xcode Migrator AI 助手,提供 24/7 技术支持 + +⠀**效果:** 迁移时间从 21+ 天缩短至 5 天(75% 减少),60+ 工程师零工作中断。通过持续改进理念,将最大痛点转化为竞争优势,目标进一步缩短至 1 小时。 + +### 🐢 [iOS Rendering Documentation](https://github.com/EthanArbuckle/ios-rendering-docs/blob/main/README.md) + +[@Kyle-Ye](https://github.com/Kyle-Ye): 这份文档深入剖析了 iOS 渲染系统的底层架构,详细阐述了从 UIView 到 CALayer、CAContext 再到 FBSScene 的完整渲染管道。文档特别解释了 Front Board Scene (FBS) 的工作机制以及 CAContext 的 contextID 如何用于跨进程 IPC 通信。内容涵盖了层级合成模型、场景管理、渲染同步、动画协调等核心概念,为理解 iOS 图形系统提供了前所未有的技术深度。对于需要进行系统级渲染研究、性能优化或底层拦截开发的高级 iOS 开发者来说,这是一份极其宝贵的参考资料。 + +### 🐎 [Should you opt-in to Swift 6.2 ’ s Main Actor isolation?](https://www.donnywals.com/should-you-opt-in-to-swift-6-2s-main-actor-isolation/) + +[@DylanYang](https://github.com/Dylan19Yang):Xcode26 为工程带来了新的 actor 隔离默认配置值,允许全局的代码默认运行在 main actor 上。作者通过一些 demo 讲述了启动此配置后能帮助我们简化大量的标记 @MainActor 的代码,降低了并发代码的复杂度。同时作者建议大部分情况下可以默认开启此配置,并通过 @concurrent 标记来让特定代码去后台线程运行。感兴趣的开发者可以阅读本文详细了解下开关带来的实际影响。 + +### 🐎 [Flutter 官方 LLM 动态 UI 库 flutter_genui 发布,让 App UI 自己生成 UI](https://mp.weixin.qq.com/s/zrmuFMvcQDPUyun9c_N_Iw) + +[@Crazy](https://github.com/jiyan135960):现今在开发者领域 AI 已经进入了日常开发的方方面面,AI 生成 UI 也是大模型落地的一个方面,Flutter 官方更是开发了一个可以利用大模型动态生成 UI 的库,该库用“受控、可组合、可回传状态”的运行时 UI 替代文本,显著提升 AI 交互质量,并且与主流 LLM 框架的顺滑对接。但是更新也更加频繁,UI 的更新消耗也是很大的。该库主要的五个概念分别为 :UiAgent、Widget Catalog、AiClient、GenUiManager、GenUiSurface。关于具体的生成,可以看文章中的实例与图片演示。文章中提到的 Filebase 与 Gemini,都是由 Google 开发的,对国内开发者都不是很友好。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#354-2025.10.13.md b/Reports/2025/#354-2025.10.13.md new file mode 100644 index 000000000..b43358cd9 --- /dev/null +++ b/Reports/2025/#354-2025.10.13.md @@ -0,0 +1,66 @@ +# 老司机 iOS 周报 #354 | 2025-10-13 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/354.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新手推荐 + +### 🐎 [Understanding Deflate](https://jjrscott.com/to-deflate-or-not/) + +[@xiaofei86](https://github.com/xiaofei86):本文通过手工解码一个 gzip 文件,简单探究了其压缩算法 Deflate 的工作机制,Deflate 结合了 LZ77 算法与 Huffman 编码,通过用 “复制指令” 替代重复片段实现无损压缩。作者以字符串 "TOBEORNOTTOBEORTOBEORNOT" 为例,先解析 gzip 文件头尾结构,再根据 Deflate 规范逐位还原压缩块内容,实现了从 24 字节到 16 字节的压缩。感兴趣的同学可以阅读更多文章了解 ~ + +## 文章 + +### 🐢 [Code along with the Foundation Models framework](https://developer.apple.com/videos/play/meet-with-apple/205/) + +[@Cooper Chen](https://github.com/cjlcooper):这篇文章介绍了 Apple 在 WWDC 2025 推出的 **Foundation Models 框架**,展示了如何在 iOS 与 macOS 应用中直接调用系统内置的大语言模型,实现真正的 **on-device AI**。通过一个“旅行行程生成器”的示例,作者带你一步步完成从文本生成到结构化输出的全过程,深入展示 Apple Intelligence 的开发潜力。 + +主要亮点包括: + +- 隐私与安全:模型完全在设备上运行,无需上传数据或调用云端接口。 +- 结构化输出:利用 `@Generable` 让模型直接生成 Swift 类型的数据,而非普通文本。 +- 提示优化技巧:通过 instructions、示例(one-shot)提升输出质量与稳定性。 +- 流式响应:实时展示生成过程,让用户体验更自然流畅。 +- 工具调用(Tool Calling):让模型能主动调用外部函数或服务,融合实时数据与智能生成。 + +这篇文章不仅是一份技术指南,更是 Apple 对 AI 未来方向的实践展示。 +它强调 **隐私优先、系统原生、开发高效** 的理念,是每位希望深入了解 Apple Intelligence 的开发者必读之作。 + + +### 🐎 [Enabling enhanced security for your app](https://developer.apple.com/documentation/Xcode/enabling-enhanced-security-for-your-app) + +[@Damien](https://github.com/ZengyiMa):这篇文章介绍了如何在 Xcode 中为应用启用增强安全性的方法,包括启用地址空间布局随机化(ASLR)、栈保护、堆保护、整数溢出检查和缓冲区溢出检查等编译器安全功能,以防御常见漏洞并提升应用抗攻击能力。 + + +### 🐕 [How to install Xcode 26's Metal Toolchain on CI/CD](https://www.polpiella.dev/metal-toolchain-ci-cd/) + +[@Barney](https://github.com/BarneyZhaoooo):我来帮您获取并总结这篇文章的内容。这篇文章介绍了 Xcode 26 不再默认包含 Metal 工具链的问题及解决方案。在本地开发时可通过 Xcode 偏好设置安装,但在 CI/CD 环境(包括 Xcode Cloud)中需要使用 xcodebuild 命令行工具手动下载和安装。文章提供了具体的脚本代码,建议在 Xcode Cloud 中作为 post clone 脚本运行。 + +## 工具 + +### [swift-profile-recorder](https://swiftpackageindex.com/apple/swift-profile-recorder) +[@Smallfly](https://github.com/iostalks):Swift Profile Recorder 是一款「进程内」采样分析器,专为受限容器环境而生:不需要 CAP_SYS_PTRACE,就能在 Linux 与 macOS 上抓取 on-CPU 与 off-CPU 样本,定位真实的性能瓶颈。你只需以 Swift 包集成并启用内置服务器,即可用一次 `curl` 拿到已符号化的 Linux perf 格式数据,直接拖到 Speedscope / Firefox Profiler 或用 FlameGraph 生成火焰图。集成轻量、开销可控,特别适合线上 Kubernetes/Docker 场景的故障排查与持续优化。 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/Reports/2025/#355-2025.10.20.md b/Reports/2025/#355-2025.10.20.md new file mode 100644 index 000000000..55b23584d --- /dev/null +++ b/Reports/2025/#355-2025.10.20.md @@ -0,0 +1,66 @@ +# 老司机 iOS 周报 #355 | 2025-10-20 + +![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/355.jpg?raw=true) +老司机 iOS 周报,只为你呈现有价值的信息。 + +你也可以为这个项目出一份力,如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们,我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。 + +## 新闻 + +> 行业相关的新闻、趣事、看法 + +##  Developer - 设计开发加速器 + +> 设计开发加速器相关活动 + +## 新手推荐 + +> 收集一些对新手友好且质量不错的文章 + +## 文章 + +> 写的不错的技术博客,包含但不局限于 iOS、多端统一、设计、产品等 + +### 🐎 [使用 @_private(sourceFile:) 测试 Swift 私有成员](https://kyleye.top/posts/swift-private-imports/) + +[@阿权](https://github.com/bqlin):私有成员一直是单元测试的难题,以往的做法要么公开其成员,要么封装供测试的接口,本文提出可以用 `@_private(sourceFile:)` 测试私有成员。该标识是非公开 API,是编译器专用的接口,可绕过访问控制。不过前提需要为目标模块添加编译标志 `-enable-private-imports`,允许其私有成员被外部测试访问,并需用条件编译宏包裹,以防后续编译器更新导致 API 不可用。 + +通过这种方式,可以在完全不修改原有接口的前提下自由地编写单元测试代码。 + +## 工具 + +> 开发过程中常用的工具,及一些新工具的介绍 + +## 代码 + +> 库,代码段,开源app + +## 书 + +> 比较不错的书的推荐和书评 + +## 音视频 + +> 比较不错的书的推荐和书评 + +## 内推 + +重新开始更新「iOS 靠谱内推专题」,整理了最近明确在招人的岗位,供大家参考 + +具体信息请移步:https://www.yuque.com/iosalliance/article/bhutav 进行查看(如有招聘需求请联系 iTDriverr) + +## 关注我们 + +我们是「老司机技术周报」,一个持续追求精品 iOS 内容的技术公众号,欢迎关注。 + +**关注有礼,关注【老司机技术周报】,回复「2024」,领取 2024 及往年内参** + +![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true) + +同时也支持了 RSS 订阅:https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。 + +## 说明 + +🚧 表示需某工具,🌟 表示编辑推荐 + +预计阅读时间:🐎 很快就能读完(1 - 10 mins);🐕 中等 (10 - 20 mins);🐢 慢(20+ mins) diff --git a/assets/author/100mango.png b/assets/author/100mango.png new file mode 100644 index 000000000..cf5c18802 Binary files /dev/null and b/assets/author/100mango.png differ diff --git a/assets/author/BluesJiang.jpeg b/assets/author/BluesJiang.jpeg new file mode 100644 index 000000000..012eba5e5 Binary files /dev/null and b/assets/author/BluesJiang.jpeg differ diff --git a/assets/author/ChinaFishNews.png b/assets/author/ChinaFishNews.png new file mode 100644 index 000000000..de49ca1cf Binary files /dev/null and b/assets/author/ChinaFishNews.png differ diff --git a/assets/author/CooperChen.png b/assets/author/CooperChen.png new file mode 100644 index 000000000..ca37d5552 Binary files /dev/null and b/assets/author/CooperChen.png differ diff --git a/assets/author/CrazyCoderShi.png b/assets/author/CrazyCoderShi.png new file mode 100644 index 000000000..14ebed26b Binary files /dev/null and b/assets/author/CrazyCoderShi.png differ diff --git a/assets/author/Damonvvong.png b/assets/author/Damonvvong.png new file mode 100644 index 000000000..c4646d1c7 Binary files /dev/null and b/assets/author/Damonvvong.png differ diff --git a/assets/author/David.png b/assets/author/David.png new file mode 100644 index 000000000..408f2bd8b Binary files /dev/null and b/assets/author/David.png differ diff --git a/assets/author/DylanYang.png b/assets/author/DylanYang.png new file mode 100644 index 000000000..09015f813 Binary files /dev/null and b/assets/author/DylanYang.png differ diff --git a/assets/author/EyreFree.png b/assets/author/EyreFree.png new file mode 100644 index 000000000..c88b426ad Binary files /dev/null and b/assets/author/EyreFree.png differ diff --git a/assets/author/GesanTung.png b/assets/author/GesanTung.png new file mode 100644 index 000000000..e9ab714e3 Binary files /dev/null and b/assets/author/GesanTung.png differ diff --git a/assets/author/JonyFang.png b/assets/author/JonyFang.png new file mode 100644 index 000000000..668094616 Binary files /dev/null and b/assets/author/JonyFang.png differ diff --git a/assets/author/Kyle-Ye.png b/assets/author/Kyle-Ye.png new file mode 100644 index 000000000..4db60d13a Binary files /dev/null and b/assets/author/Kyle-Ye.png differ diff --git a/assets/author/KyoLi.png b/assets/author/KyoLi.png new file mode 100644 index 000000000..8fec1e92b Binary files /dev/null and b/assets/author/KyoLi.png differ diff --git a/assets/author/LeoMobileDeveloper.jpeg b/assets/author/LeoMobileDeveloper.jpeg new file mode 100644 index 000000000..7d1b0ae50 Binary files /dev/null and b/assets/author/LeoMobileDeveloper.jpeg differ diff --git a/assets/author/ParsifalC.png b/assets/author/ParsifalC.png new file mode 100644 index 000000000..af154d50e Binary files /dev/null and b/assets/author/ParsifalC.png differ diff --git a/assets/author/SatanWoo.png b/assets/author/SatanWoo.png new file mode 100644 index 000000000..aab26325f Binary files /dev/null and b/assets/author/SatanWoo.png differ diff --git a/assets/author/ZengyiMa.png b/assets/author/ZengyiMa.png new file mode 100644 index 000000000..325157fb7 Binary files /dev/null and b/assets/author/ZengyiMa.png differ diff --git a/assets/author/aaaron7.png b/assets/author/aaaron7.png new file mode 100644 index 000000000..f56ed07d8 Binary files /dev/null and b/assets/author/aaaron7.png differ diff --git a/assets/author/anotheren.png b/assets/author/anotheren.png new file mode 100644 index 000000000..053effe63 Binary files /dev/null and b/assets/author/anotheren.png differ diff --git a/assets/author/awhisper.png b/assets/author/awhisper.png new file mode 100644 index 000000000..172f26451 Binary files /dev/null and b/assets/author/awhisper.png differ diff --git a/assets/author/barney.png b/assets/author/barney.png new file mode 100644 index 000000000..e2486eb57 Binary files /dev/null and b/assets/author/barney.png differ diff --git a/assets/author/bq.png b/assets/author/bq.png new file mode 100644 index 000000000..253524785 Binary files /dev/null and b/assets/author/bq.png differ diff --git a/assets/author/chengzhi.png b/assets/author/chengzhi.png new file mode 100644 index 000000000..b7ac70a2d Binary files /dev/null and b/assets/author/chengzhi.png differ diff --git a/assets/author/iblacksun.png b/assets/author/iblacksun.png new file mode 100644 index 000000000..bbee91cfd Binary files /dev/null and b/assets/author/iblacksun.png differ diff --git a/assets/author/iostalks.png b/assets/author/iostalks.png new file mode 100644 index 000000000..bc668271b Binary files /dev/null and b/assets/author/iostalks.png differ diff --git a/assets/author/jiyan135960.png b/assets/author/jiyan135960.png new file mode 100644 index 000000000..fc4cbb9e3 Binary files /dev/null and b/assets/author/jiyan135960.png differ diff --git a/assets/author/josephchang10.png b/assets/author/josephchang10.png new file mode 100644 index 000000000..44bd32009 Binary files /dev/null and b/assets/author/josephchang10.png differ diff --git a/assets/author/kemchenj.png b/assets/author/kemchenj.png new file mode 100644 index 000000000..4c4763173 Binary files /dev/null and b/assets/author/kemchenj.png differ diff --git a/assets/author/knightsj.png b/assets/author/knightsj.png new file mode 100644 index 000000000..9a261d9ff Binary files /dev/null and b/assets/author/knightsj.png differ diff --git a/assets/author/lacklock.png b/assets/author/lacklock.png new file mode 100644 index 000000000..1b45e1e9d Binary files /dev/null and b/assets/author/lacklock.png differ diff --git a/assets/author/linwenbang.png b/assets/author/linwenbang.png new file mode 100644 index 000000000..89483e405 Binary files /dev/null and b/assets/author/linwenbang.png differ diff --git a/assets/author/looping.png b/assets/author/looping.png new file mode 100644 index 000000000..7cb30e4b3 Binary files /dev/null and b/assets/author/looping.png differ diff --git a/assets/author/mmoaay.png b/assets/author/mmoaay.png new file mode 100644 index 000000000..1384d3227 Binary files /dev/null and b/assets/author/mmoaay.png differ diff --git a/assets/author/nianran.png b/assets/author/nianran.png new file mode 100644 index 000000000..235508159 Binary files /dev/null and b/assets/author/nianran.png differ diff --git a/assets/author/olddonkey.png b/assets/author/olddonkey.png new file mode 100644 index 000000000..c6f530258 Binary files /dev/null and b/assets/author/olddonkey.png differ diff --git a/assets/author/raozhizhen.png b/assets/author/raozhizhen.png new file mode 100644 index 000000000..d449544e3 Binary files /dev/null and b/assets/author/raozhizhen.png differ diff --git a/assets/author/tom510230.png b/assets/author/tom510230.png new file mode 100644 index 000000000..afd031d28 Binary files /dev/null and b/assets/author/tom510230.png differ diff --git a/assets/author/waterXu.png b/assets/author/waterXu.png new file mode 100644 index 000000000..c162fdd6c Binary files /dev/null and b/assets/author/waterXu.png differ diff --git a/assets/author/waz0820.png b/assets/author/waz0820.png new file mode 100644 index 000000000..86c03e4da Binary files /dev/null and b/assets/author/waz0820.png differ diff --git a/assets/author/xiaofei86.png b/assets/author/xiaofei86.png new file mode 100644 index 000000000..67bc9bf19 Binary files /dev/null and b/assets/author/xiaofei86.png differ diff --git a/assets/author/yxztj.png b/assets/author/yxztj.png new file mode 100644 index 000000000..1604c14d5 Binary files /dev/null and b/assets/author/yxztj.png differ diff --git a/assets/author/zangqilong198812.png b/assets/author/zangqilong198812.png new file mode 100644 index 000000000..e6017e8ad Binary files /dev/null and b/assets/author/zangqilong198812.png differ diff --git a/assets/author/zoeGuo.png b/assets/author/zoeGuo.png new file mode 100644 index 000000000..67999d1ba Binary files /dev/null and b/assets/author/zoeGuo.png differ diff --git a/assets/author/ztlyyznf001.png b/assets/author/ztlyyznf001.png new file mode 100644 index 000000000..7b441808c Binary files /dev/null and b/assets/author/ztlyyznf001.png differ diff --git a/assets/author/zvving.png b/assets/author/zvving.png new file mode 100644 index 000000000..6b8657a83 Binary files /dev/null and b/assets/author/zvving.png differ diff --git a/assets/iOSdev.jpg b/assets/iOSdev.jpg new file mode 100644 index 000000000..22f6e1d21 Binary files /dev/null and b/assets/iOSdev.jpg differ diff --git a/assets/ios-weekly-avatar-transparent.png b/assets/ios-weekly-avatar-transparent.png new file mode 100644 index 000000000..e7df040b3 Binary files /dev/null and b/assets/ios-weekly-avatar-transparent.png differ diff --git a/assets/ios-weekly-avatar.png b/assets/ios-weekly-avatar.png new file mode 100644 index 000000000..8edc44009 Binary files /dev/null and b/assets/ios-weekly-avatar.png differ diff --git a/assets/ios-weekly-juejin.png b/assets/ios-weekly-juejin.png index 642515d5e..01c100c0d 100644 Binary files a/assets/ios-weekly-juejin.png and b/assets/ios-weekly-juejin.png differ diff --git a/assets/ios-weekly-logo.png b/assets/ios-weekly-logo.png new file mode 100644 index 000000000..a2e4fc384 Binary files /dev/null and b/assets/ios-weekly-logo.png differ diff --git a/assets/ios-weekly-wechat.png b/assets/ios-weekly-wechat.png new file mode 100644 index 000000000..50b980e5c Binary files /dev/null and b/assets/ios-weekly-wechat.png differ diff --git a/assets/ios-weekly.png b/assets/ios-weekly.png index 6efd9ec10..50b980e5c 100644 Binary files a/assets/ios-weekly.png and b/assets/ios-weekly.png differ diff --git a/assets/ios-weekly.psd b/assets/ios-weekly.psd deleted file mode 100644 index b52287112..000000000 Binary files a/assets/ios-weekly.psd and /dev/null differ diff --git a/assets/qrcode_for_wechat.jpg b/assets/qrcode_for_wechat.jpg index 3f12d0c4b..3b1545b73 100644 Binary files a/assets/qrcode_for_wechat.jpg and b/assets/qrcode_for_wechat.jpg differ diff --git a/assets/release_only.png b/assets/release_only.png new file mode 100644 index 000000000..6907ab4bc Binary files /dev/null and b/assets/release_only.png differ diff --git a/assets/weekly-header/247.png b/assets/weekly-header/247.png new file mode 100644 index 000000000..f78c99879 Binary files /dev/null and b/assets/weekly-header/247.png differ diff --git a/assets/weekly-header/248.jpg b/assets/weekly-header/248.jpg new file mode 100644 index 000000000..e60a5ce15 Binary files /dev/null and b/assets/weekly-header/248.jpg differ diff --git a/assets/weekly-header/249.png b/assets/weekly-header/249.png new file mode 100644 index 000000000..88987a7e5 Binary files /dev/null and b/assets/weekly-header/249.png differ diff --git a/assets/weekly-header/250.png b/assets/weekly-header/250.png new file mode 100644 index 000000000..838b191cd Binary files /dev/null and b/assets/weekly-header/250.png differ diff --git a/assets/weekly-header/251.png b/assets/weekly-header/251.png new file mode 100644 index 000000000..5dc929959 Binary files /dev/null and b/assets/weekly-header/251.png differ diff --git a/assets/weekly-header/252.png b/assets/weekly-header/252.png new file mode 100644 index 000000000..6117c6cf1 Binary files /dev/null and b/assets/weekly-header/252.png differ diff --git a/assets/weekly-header/253.png b/assets/weekly-header/253.png new file mode 100644 index 000000000..982579206 Binary files /dev/null and b/assets/weekly-header/253.png differ diff --git a/assets/weekly-header/254.png b/assets/weekly-header/254.png new file mode 100644 index 000000000..bb97c97d5 Binary files /dev/null and b/assets/weekly-header/254.png differ diff --git a/assets/weekly-header/255.png b/assets/weekly-header/255.png new file mode 100644 index 000000000..45184461b Binary files /dev/null and b/assets/weekly-header/255.png differ diff --git a/assets/weekly-header/256.png b/assets/weekly-header/256.png new file mode 100644 index 000000000..49f833653 Binary files /dev/null and b/assets/weekly-header/256.png differ diff --git a/assets/weekly-header/257.png b/assets/weekly-header/257.png new file mode 100644 index 000000000..49a9f6424 Binary files /dev/null and b/assets/weekly-header/257.png differ diff --git a/assets/weekly-header/258.png b/assets/weekly-header/258.png new file mode 100644 index 000000000..f1a0ad54a Binary files /dev/null and b/assets/weekly-header/258.png differ diff --git a/assets/weekly-header/259.png b/assets/weekly-header/259.png new file mode 100644 index 000000000..557dc925f Binary files /dev/null and b/assets/weekly-header/259.png differ diff --git a/assets/weekly-header/260.png b/assets/weekly-header/260.png new file mode 100644 index 000000000..469ec07c4 Binary files /dev/null and b/assets/weekly-header/260.png differ diff --git a/assets/weekly-header/261.png b/assets/weekly-header/261.png new file mode 100644 index 000000000..8943d46b9 Binary files /dev/null and b/assets/weekly-header/261.png differ diff --git a/assets/weekly-header/262.png b/assets/weekly-header/262.png new file mode 100644 index 000000000..6be9e8b00 Binary files /dev/null and b/assets/weekly-header/262.png differ diff --git a/assets/weekly-header/263.png b/assets/weekly-header/263.png new file mode 100644 index 000000000..e78b1a665 Binary files /dev/null and b/assets/weekly-header/263.png differ diff --git a/assets/weekly-header/264.png b/assets/weekly-header/264.png new file mode 100644 index 000000000..15d4e6473 Binary files /dev/null and b/assets/weekly-header/264.png differ diff --git a/assets/weekly-header/265.png b/assets/weekly-header/265.png new file mode 100644 index 000000000..0b0443b1a Binary files /dev/null and b/assets/weekly-header/265.png differ diff --git a/assets/weekly-header/266.jpg b/assets/weekly-header/266.jpg new file mode 100644 index 000000000..3084daa51 Binary files /dev/null and b/assets/weekly-header/266.jpg differ diff --git a/assets/weekly-header/267.jpg b/assets/weekly-header/267.jpg new file mode 100644 index 000000000..93f41d359 Binary files /dev/null and b/assets/weekly-header/267.jpg differ diff --git a/assets/weekly-header/268.jpg b/assets/weekly-header/268.jpg new file mode 100644 index 000000000..1439055d3 Binary files /dev/null and b/assets/weekly-header/268.jpg differ diff --git a/assets/weekly-header/269.jpg b/assets/weekly-header/269.jpg new file mode 100644 index 000000000..82457ca36 Binary files /dev/null and b/assets/weekly-header/269.jpg differ diff --git a/assets/weekly-header/270.jpg b/assets/weekly-header/270.jpg new file mode 100644 index 000000000..d28fa2f1f Binary files /dev/null and b/assets/weekly-header/270.jpg differ diff --git a/assets/weekly-header/271.jpg b/assets/weekly-header/271.jpg new file mode 100644 index 000000000..ffa28e54b Binary files /dev/null and b/assets/weekly-header/271.jpg differ diff --git a/assets/weekly-header/272.jpg b/assets/weekly-header/272.jpg new file mode 100644 index 000000000..f5e85d481 Binary files /dev/null and b/assets/weekly-header/272.jpg differ diff --git a/assets/weekly-header/273.jpg b/assets/weekly-header/273.jpg new file mode 100644 index 000000000..239928c04 Binary files /dev/null and b/assets/weekly-header/273.jpg differ diff --git a/assets/weekly-header/274.jpg b/assets/weekly-header/274.jpg new file mode 100644 index 000000000..7cf72d4ec Binary files /dev/null and b/assets/weekly-header/274.jpg differ diff --git a/assets/weekly-header/275.jpg b/assets/weekly-header/275.jpg new file mode 100644 index 000000000..94db58835 Binary files /dev/null and b/assets/weekly-header/275.jpg differ diff --git a/assets/weekly-header/276.jpg b/assets/weekly-header/276.jpg new file mode 100644 index 000000000..d6da4c89a Binary files /dev/null and b/assets/weekly-header/276.jpg differ diff --git a/assets/weekly-header/277.jpg b/assets/weekly-header/277.jpg new file mode 100644 index 000000000..ef7e00f00 Binary files /dev/null and b/assets/weekly-header/277.jpg differ diff --git a/assets/weekly-header/278.jpg b/assets/weekly-header/278.jpg new file mode 100644 index 000000000..690816b76 Binary files /dev/null and b/assets/weekly-header/278.jpg differ diff --git a/assets/weekly-header/279.jpg b/assets/weekly-header/279.jpg new file mode 100644 index 000000000..6186d672a Binary files /dev/null and b/assets/weekly-header/279.jpg differ diff --git a/assets/weekly-header/280.jpg b/assets/weekly-header/280.jpg new file mode 100644 index 000000000..a1a4fc4ff Binary files /dev/null and b/assets/weekly-header/280.jpg differ diff --git a/assets/weekly-header/281.jpg b/assets/weekly-header/281.jpg new file mode 100644 index 000000000..a7f090a07 Binary files /dev/null and b/assets/weekly-header/281.jpg differ diff --git a/assets/weekly-header/282.jpg b/assets/weekly-header/282.jpg new file mode 100644 index 000000000..f4e2c0f0e Binary files /dev/null and b/assets/weekly-header/282.jpg differ diff --git a/assets/weekly-header/283.jpg b/assets/weekly-header/283.jpg new file mode 100644 index 000000000..b43dd535c Binary files /dev/null and b/assets/weekly-header/283.jpg differ diff --git a/assets/weekly-header/284.jpg b/assets/weekly-header/284.jpg new file mode 100644 index 000000000..dc8f08a8a Binary files /dev/null and b/assets/weekly-header/284.jpg differ diff --git a/assets/weekly-header/285.jpg b/assets/weekly-header/285.jpg new file mode 100644 index 000000000..ac7a61dba Binary files /dev/null and b/assets/weekly-header/285.jpg differ diff --git a/assets/weekly-header/286.jpg b/assets/weekly-header/286.jpg new file mode 100644 index 000000000..2714a7784 Binary files /dev/null and b/assets/weekly-header/286.jpg differ diff --git a/assets/weekly-header/287.jpg b/assets/weekly-header/287.jpg new file mode 100644 index 000000000..f9a48647a Binary files /dev/null and b/assets/weekly-header/287.jpg differ diff --git a/assets/weekly-header/288.jpg b/assets/weekly-header/288.jpg new file mode 100644 index 000000000..b41d47e1f Binary files /dev/null and b/assets/weekly-header/288.jpg differ diff --git a/assets/weekly-header/289.jpg b/assets/weekly-header/289.jpg new file mode 100644 index 000000000..54b41fe11 Binary files /dev/null and b/assets/weekly-header/289.jpg differ diff --git a/assets/weekly-header/290.jpg b/assets/weekly-header/290.jpg new file mode 100644 index 000000000..18da7e552 Binary files /dev/null and b/assets/weekly-header/290.jpg differ diff --git a/assets/weekly-header/291.jpg b/assets/weekly-header/291.jpg new file mode 100644 index 000000000..567ed5f60 Binary files /dev/null and b/assets/weekly-header/291.jpg differ diff --git a/assets/weekly-header/292.jpg b/assets/weekly-header/292.jpg new file mode 100644 index 000000000..c8b71fff9 Binary files /dev/null and b/assets/weekly-header/292.jpg differ diff --git a/assets/weekly-header/293.jpg b/assets/weekly-header/293.jpg new file mode 100644 index 000000000..f570fefa4 Binary files /dev/null and b/assets/weekly-header/293.jpg differ diff --git a/assets/weekly-header/294.jpg b/assets/weekly-header/294.jpg new file mode 100644 index 000000000..174b5f3a3 Binary files /dev/null and b/assets/weekly-header/294.jpg differ diff --git a/assets/weekly-header/295.jpg b/assets/weekly-header/295.jpg new file mode 100644 index 000000000..b5db3f3f5 Binary files /dev/null and b/assets/weekly-header/295.jpg differ diff --git a/assets/weekly-header/296.jpg b/assets/weekly-header/296.jpg new file mode 100644 index 000000000..49c0a5b3a Binary files /dev/null and b/assets/weekly-header/296.jpg differ diff --git a/assets/weekly-header/297.jpg b/assets/weekly-header/297.jpg new file mode 100644 index 000000000..285529ed3 Binary files /dev/null and b/assets/weekly-header/297.jpg differ diff --git a/assets/weekly-header/298.jpg b/assets/weekly-header/298.jpg new file mode 100644 index 000000000..2c18d08d1 Binary files /dev/null and b/assets/weekly-header/298.jpg differ diff --git a/assets/weekly-header/299.jpg b/assets/weekly-header/299.jpg new file mode 100644 index 000000000..aa08057e2 Binary files /dev/null and b/assets/weekly-header/299.jpg differ diff --git a/assets/weekly-header/300.jpg b/assets/weekly-header/300.jpg new file mode 100644 index 000000000..7fb5a3808 Binary files /dev/null and b/assets/weekly-header/300.jpg differ diff --git a/assets/weekly-header/301.jpg b/assets/weekly-header/301.jpg new file mode 100644 index 000000000..ed99022d2 Binary files /dev/null and b/assets/weekly-header/301.jpg differ diff --git a/assets/weekly-header/302.jpg b/assets/weekly-header/302.jpg new file mode 100644 index 000000000..cfef34d4c Binary files /dev/null and b/assets/weekly-header/302.jpg differ diff --git a/assets/weekly-header/303.jpg b/assets/weekly-header/303.jpg new file mode 100644 index 000000000..ffd9fb972 Binary files /dev/null and b/assets/weekly-header/303.jpg differ diff --git a/assets/weekly-header/304.jpg b/assets/weekly-header/304.jpg new file mode 100644 index 000000000..028b52e6d Binary files /dev/null and b/assets/weekly-header/304.jpg differ diff --git a/assets/weekly-header/305.jpg b/assets/weekly-header/305.jpg new file mode 100644 index 000000000..df0602e7c Binary files /dev/null and b/assets/weekly-header/305.jpg differ diff --git a/assets/weekly-header/306.jpg b/assets/weekly-header/306.jpg new file mode 100644 index 000000000..e218bed09 Binary files /dev/null and b/assets/weekly-header/306.jpg differ diff --git a/assets/weekly-header/307.jpg b/assets/weekly-header/307.jpg new file mode 100644 index 000000000..4647ccbc4 Binary files /dev/null and b/assets/weekly-header/307.jpg differ diff --git a/assets/weekly-header/308.jpg b/assets/weekly-header/308.jpg new file mode 100644 index 000000000..59cdbd96e Binary files /dev/null and b/assets/weekly-header/308.jpg differ diff --git a/assets/weekly-header/309.jpg b/assets/weekly-header/309.jpg new file mode 100644 index 000000000..5b31c9cb4 Binary files /dev/null and b/assets/weekly-header/309.jpg differ diff --git a/assets/weekly-header/310.jpg b/assets/weekly-header/310.jpg new file mode 100644 index 000000000..3e56eac59 Binary files /dev/null and b/assets/weekly-header/310.jpg differ diff --git a/assets/weekly-header/311.jpg b/assets/weekly-header/311.jpg new file mode 100644 index 000000000..c937879f2 Binary files /dev/null and b/assets/weekly-header/311.jpg differ diff --git a/assets/weekly-header/312.jpg b/assets/weekly-header/312.jpg new file mode 100644 index 000000000..b34761f55 Binary files /dev/null and b/assets/weekly-header/312.jpg differ diff --git a/assets/weekly-header/313.jpg b/assets/weekly-header/313.jpg new file mode 100644 index 000000000..b888efbdf Binary files /dev/null and b/assets/weekly-header/313.jpg differ diff --git a/assets/weekly-header/314.jpg b/assets/weekly-header/314.jpg new file mode 100644 index 000000000..fb788ebb3 Binary files /dev/null and b/assets/weekly-header/314.jpg differ diff --git a/assets/weekly-header/315.jpg b/assets/weekly-header/315.jpg new file mode 100644 index 000000000..2f4e3b3df Binary files /dev/null and b/assets/weekly-header/315.jpg differ diff --git a/assets/weekly-header/316.jpg b/assets/weekly-header/316.jpg new file mode 100644 index 000000000..d5b89b777 Binary files /dev/null and b/assets/weekly-header/316.jpg differ diff --git a/assets/weekly-header/317.jpg b/assets/weekly-header/317.jpg new file mode 100644 index 000000000..45fa6c559 Binary files /dev/null and b/assets/weekly-header/317.jpg differ diff --git a/assets/weekly-header/318.jpg b/assets/weekly-header/318.jpg new file mode 100644 index 000000000..ee4c5b4ae Binary files /dev/null and b/assets/weekly-header/318.jpg differ diff --git a/assets/weekly-header/319.jpg b/assets/weekly-header/319.jpg new file mode 100644 index 000000000..e3c365859 Binary files /dev/null and b/assets/weekly-header/319.jpg differ diff --git a/assets/weekly-header/320.jpg b/assets/weekly-header/320.jpg new file mode 100644 index 000000000..809bef0d7 Binary files /dev/null and b/assets/weekly-header/320.jpg differ diff --git a/assets/weekly-header/321.jpg b/assets/weekly-header/321.jpg new file mode 100644 index 000000000..ed22f88b1 Binary files /dev/null and b/assets/weekly-header/321.jpg differ diff --git a/assets/weekly-header/322.jpg b/assets/weekly-header/322.jpg new file mode 100644 index 000000000..acd90bd2f Binary files /dev/null and b/assets/weekly-header/322.jpg differ diff --git a/assets/weekly-header/323.jpg b/assets/weekly-header/323.jpg new file mode 100644 index 000000000..b81ccd013 Binary files /dev/null and b/assets/weekly-header/323.jpg differ diff --git a/assets/weekly-header/324.jpg b/assets/weekly-header/324.jpg new file mode 100644 index 000000000..44f617d25 Binary files /dev/null and b/assets/weekly-header/324.jpg differ diff --git a/assets/weekly-header/325.jpg b/assets/weekly-header/325.jpg new file mode 100644 index 000000000..93afdf2c4 Binary files /dev/null and b/assets/weekly-header/325.jpg differ diff --git a/assets/weekly-header/326.jpg b/assets/weekly-header/326.jpg new file mode 100644 index 000000000..732180aea Binary files /dev/null and b/assets/weekly-header/326.jpg differ diff --git a/assets/weekly-header/327.jpg b/assets/weekly-header/327.jpg new file mode 100644 index 000000000..593fe8223 Binary files /dev/null and b/assets/weekly-header/327.jpg differ diff --git a/assets/weekly-header/328.jpg b/assets/weekly-header/328.jpg new file mode 100644 index 000000000..50ac028b5 Binary files /dev/null and b/assets/weekly-header/328.jpg differ diff --git a/assets/weekly-header/329.jpg b/assets/weekly-header/329.jpg new file mode 100644 index 000000000..8c2b6bc22 Binary files /dev/null and b/assets/weekly-header/329.jpg differ diff --git a/assets/weekly-header/330.jpg b/assets/weekly-header/330.jpg new file mode 100644 index 000000000..4474e7444 Binary files /dev/null and b/assets/weekly-header/330.jpg differ diff --git a/assets/weekly-header/331.jpg b/assets/weekly-header/331.jpg new file mode 100644 index 000000000..7fff179e4 Binary files /dev/null and b/assets/weekly-header/331.jpg differ diff --git a/assets/weekly-header/332.jpg b/assets/weekly-header/332.jpg new file mode 100644 index 000000000..b6ea59968 Binary files /dev/null and b/assets/weekly-header/332.jpg differ diff --git a/assets/weekly-header/333.jpg b/assets/weekly-header/333.jpg new file mode 100644 index 000000000..4b206a1d4 Binary files /dev/null and b/assets/weekly-header/333.jpg differ diff --git a/assets/weekly-header/334.jpg b/assets/weekly-header/334.jpg new file mode 100644 index 000000000..1e6ca69e1 Binary files /dev/null and b/assets/weekly-header/334.jpg differ diff --git a/assets/weekly-header/335.jpg b/assets/weekly-header/335.jpg new file mode 100644 index 000000000..86f00128a Binary files /dev/null and b/assets/weekly-header/335.jpg differ diff --git a/assets/weekly-header/336.jpg b/assets/weekly-header/336.jpg new file mode 100644 index 000000000..c895b1d64 Binary files /dev/null and b/assets/weekly-header/336.jpg differ diff --git a/assets/weekly-header/337.jpg b/assets/weekly-header/337.jpg new file mode 100644 index 000000000..0be4a141f Binary files /dev/null and b/assets/weekly-header/337.jpg differ diff --git a/assets/weekly-header/338.jpg b/assets/weekly-header/338.jpg new file mode 100644 index 000000000..bfc85bba4 Binary files /dev/null and b/assets/weekly-header/338.jpg differ diff --git a/assets/weekly-header/339.jpg b/assets/weekly-header/339.jpg new file mode 100644 index 000000000..9fe318572 Binary files /dev/null and b/assets/weekly-header/339.jpg differ diff --git a/assets/weekly-header/340.jpg b/assets/weekly-header/340.jpg new file mode 100644 index 000000000..ad8fb7b90 Binary files /dev/null and b/assets/weekly-header/340.jpg differ diff --git a/assets/weekly-header/341.jpg b/assets/weekly-header/341.jpg new file mode 100644 index 000000000..5e35e310f Binary files /dev/null and b/assets/weekly-header/341.jpg differ diff --git a/assets/weekly-header/342.jpg b/assets/weekly-header/342.jpg new file mode 100644 index 000000000..c8eef5c08 Binary files /dev/null and b/assets/weekly-header/342.jpg differ diff --git a/assets/weekly-header/343.jpg b/assets/weekly-header/343.jpg new file mode 100644 index 000000000..cf5dd8792 Binary files /dev/null and b/assets/weekly-header/343.jpg differ diff --git a/assets/weekly-header/344.jpg b/assets/weekly-header/344.jpg new file mode 100644 index 000000000..5c166bd56 Binary files /dev/null and b/assets/weekly-header/344.jpg differ diff --git a/assets/weekly-header/345.jpg b/assets/weekly-header/345.jpg new file mode 100644 index 000000000..45cfc0965 Binary files /dev/null and b/assets/weekly-header/345.jpg differ diff --git a/assets/weekly-header/346.jpg b/assets/weekly-header/346.jpg new file mode 100644 index 000000000..98d0d140d Binary files /dev/null and b/assets/weekly-header/346.jpg differ diff --git a/assets/weekly-header/347.jpg b/assets/weekly-header/347.jpg new file mode 100644 index 000000000..daac64e59 Binary files /dev/null and b/assets/weekly-header/347.jpg differ diff --git a/assets/weekly-header/348.jpg b/assets/weekly-header/348.jpg new file mode 100644 index 000000000..721b2bd4e Binary files /dev/null and b/assets/weekly-header/348.jpg differ diff --git a/assets/weekly-header/349.jpg b/assets/weekly-header/349.jpg new file mode 100644 index 000000000..284ceb65d Binary files /dev/null and b/assets/weekly-header/349.jpg differ diff --git a/assets/weekly-header/350.jpg b/assets/weekly-header/350.jpg new file mode 100644 index 000000000..f33e3c42b Binary files /dev/null and b/assets/weekly-header/350.jpg differ diff --git a/assets/weekly-header/351.jpg b/assets/weekly-header/351.jpg new file mode 100644 index 000000000..52b95b9dd Binary files /dev/null and b/assets/weekly-header/351.jpg differ diff --git a/assets/weekly-header/352.jpg b/assets/weekly-header/352.jpg new file mode 100644 index 000000000..0c9197d69 Binary files /dev/null and b/assets/weekly-header/352.jpg differ diff --git a/assets/weekly-header/353.jpg b/assets/weekly-header/353.jpg new file mode 100644 index 000000000..76f498d53 Binary files /dev/null and b/assets/weekly-header/353.jpg differ diff --git a/assets/weekly-header/354.jpg b/assets/weekly-header/354.jpg new file mode 100644 index 000000000..ac1727dff Binary files /dev/null and b/assets/weekly-header/354.jpg differ diff --git a/assets/weekly-header/355.jpg b/assets/weekly-header/355.jpg new file mode 100644 index 000000000..2f0514442 Binary files /dev/null and b/assets/weekly-header/355.jpg differ diff --git a/assets/weekly-header/356.jpg b/assets/weekly-header/356.jpg new file mode 100644 index 000000000..fcd5d2ca5 Binary files /dev/null and b/assets/weekly-header/356.jpg differ diff --git a/assets/weekly-header/357.jpg b/assets/weekly-header/357.jpg new file mode 100644 index 000000000..ede486ad2 Binary files /dev/null and b/assets/weekly-header/357.jpg differ