Swift 週報 第十二期

語言: CN / TW / HK

前言

本期是 Swift 編輯組自主整理週報的第三期,每個模組還在調整磨合期。各位讀者如果有好的提議,歡迎在文末留言。

歡迎投稿或推薦內容。目前計劃每兩週週一釋出,歡迎志同道合的朋友一起加入週報整理。

夏夜恬靜月色柔,綿綿思緒埋心頭,Swift社群常逗留,今夕明朝百事歐。尤拉尤拉👊👊👊

週報精選

新聞和社群:蘋果曝出嚴重安全漏洞!黑客或可完全接管裝置

提案:改進指標系列初始化和緩衝區

Swift 論壇:使用 Swift 5.5 / Xcode 14 構建後崩潰

推薦博文:iOS16 引入 SwiftUI Charts

新聞和社群

蘋果曝出嚴重安全漏洞!黑客或可完全接管裝置

當地時間 8 月 19 日(週五),蘋果公司(Apple)呼籲使用者立刻下載最新更新。就在兩天前,該公司報告了一個重大的安全漏洞,據稱可以讓黑客接管蘋果裝置。 在週三釋出的安全更新中,蘋果表示該漏洞可能已被用於攻擊行為。

“這就是我們所說的零日漏洞,也就是在公司發現並能夠做出迴應之前,已經被黑客所使用過的漏洞,” 美國麥迪安網路安全公司(Mandiant)的高階威脅情報顧問傑米·科利爾(Jamie Collier)介紹道。

據介紹,受本次漏洞影響的裝置涵蓋了幾乎所有的蘋果產品。其中,手機包括 iPhone 6S 及以後的型號;平板包括第五代及以後的 iPad,所有 iPad Pro,以及 iPad Air 2;電腦則是執行 MacOS Monterey 的 Mac。此外,該漏洞還能影響到部分型號的 iPod。@看看新聞

App 和 app 內購買專案即將實行稅率和價格調整

2022 年 8 月 19 日的下週開始,迦納和土耳其 App Store 的 App 及 App 內購買專案 (自動續期訂閱除外) 的價格將有所提高。迦納的價格提升將包含 12.5% 的新增值稅和 6% 的附加稅。

您的收益將隨之進行調整,並會根據不含稅的價格來進行計算。《付費 App 協議》的附錄 B 已更新,表明 Apple 在加納徵收和匯付適用稅款。

此外,如果您在 App Store Connect. 中選擇了適當的稅收類別,愛沙尼亞的電子出版物的收益已經進行了調整,以反映增值稅從 9% 下調至 5%。

以上調整生效後,在“我的 App”中“價格與銷售範圍”部分會隨即更新。您可以隨時在 App Store Connect 中更改您的 App 和 App 內購買專案的價格 (包括自動續期訂閱)。如果您有提供訂閱專案,您可以選擇為現有訂閱者保留當前價格。

蘋果發言人沒有立即透露這個電池百分比調整是否會延續到 iOS 16 的最終版本。這次更新目前只出現在開發者版和公測版。新 iOS 系統將於今年秋天釋出,可能是在 9 月份,屆時蘋果預計將釋出 iPhone 14。@鳳凰網科技

蘋果 AppleOne 將捆綁銷售電話套餐:英國運營商EE是第一家

英國運營商 EE 近日宣佈,它將成為第一家將蘋果 Apple One 與電話套餐捆綁在一起的運營商。EE表示,蘋果 Apple One 將從 8 月 31 日起包含在其 Full Works 計劃中。該計劃將包括 Apple One 的個人版訂閱,每月費用為 14.95 英鎊(約 122.44 元人民幣)。

蘋果 Apple One 訂閱包將最多六項蘋果服務捆綁到一個訂閱中,個人版單獨訂閱價格為每月 14.95 美元(約 101.51 元人民幣),包括四項蘋果服務:50GB 的 iCloud+、Apple Music、Apple TV+ 和 Apple Arcade 訂閱。

iPhone13 系列成美國最暢銷手機機型# 2022 年 Q2 美國最暢銷的 10 款智慧手機機型,包括蘋果、三星、聯想三個品牌。其中,蘋果 iPhone 13、iPhone 13 Pro Max、iPhone 13 Pro 包攬前三位。三星 Galaxy S21、Galaxy S22 / Ultra 等 5 款新機進入暢銷榜前十,Galaxy S22 Ultra 5G 為 2022 年 Q2 美國最暢銷的安卓機型。(來源:(來源: 極目新聞))

賠償 2 億元!蘋果因搜包耽誤員工下班,遭 1 萬多人集體起訴

據路透社 8 月 15 日報道訊息,當地時間 13 日,美國加州一名法官已經簽署了蘋果公司的 3050 萬美元(約合人民幣 2 億元)的和解協議。該訴訟持續 9 年,訴訟稱蘋果公司沒有為下班時檢查員工行李的時間付費。

起訴源於蘋果之前的一項規定,這項規定要求在下班時檢查蘋果員工的包和個人物品。2013 年,一群蘋果公司員工因被迫接受行李檢查起訴蘋果公司,稱公司沒有為搜包的時間付費。原告稱,蘋果零售員工在下班後通常要等幾分鐘,有時甚至更長時間,才能檢查完他們的行李,然後才能離開他們工作的商店。在被提起訴訟後,蘋果不再對員工下班前進行搜包檢查。

據紐約郵報 2015 年 6 月的報道,公佈的一份法庭檔案顯示,至少有兩名蘋果零售店員工直接向執行長庫克投訴,稱該公司將檢查零售員工行李作為安全預防措施的規定令人尷尬和有辱人格。

集體訴訟於 2015 年被駁回,隨後他們決定上訴。州法院在 2020 年對蘋果作出裁決,稱期望員工不帶個人物品上班是不切實際的。聯邦法院隨後恢復了此案,美國地方法院法官威廉·阿爾蘇普去年表示,他計劃對原告作出簡易判決,並下令對損害賠償進行審判。

8 月 13 日,阿爾蘇普在集體訴訟中批准了和解協議。這標誌著該州歷史上最大的安全搜查案和解。3050 萬美元的和解金將支付給包括居住在加州的 14683 名蘋果員工在內的一個群體,平均每位員工獲得 1328 美元賠償金。(來源:極目新聞)

提案

通過的提案

SE-0367 優化新屬性的條件編譯 提案已通過。該提案已在上期週報正在審查的提案模組做了詳細介紹。

正在審查的提案

SE-0371 Isolated synchronous deinit 提案正在審查。

此功能允許 deinitactorglobal-actorisolated 型別 (GAIT), 訪問 non-sendableisolated 狀態,從而解除 SE-0327 施加的限制。這是通過在 __deallocating_deinit() 中實現,為跳轉到執行程式提供執行時支援。

SE-0370 改進指標系列初始化和緩衝區 提案正在審查。

UnsafeMutablePointer 系列中的型別通常需要手動管理記憶體分配,包括管理其初始化狀態。但是,並非該系列中的每個相關型別都具有一定的功能來管理記憶體的初始化狀態。分配後涉及的狀態如下:

  1. 沒有繫結和沒有初始化(從 UnsafeMutableRawPointer.allocate() 返回)
  2. 繫結到型別,沒有未初始化(從 UnsafeMutablePointer<T>.allocate() 返回)
  3. 繫結到型別,並初始化

只要記憶體未初始化,就可以安全地釋放記憶體。

我們打算完善該系列中每個相關成員的初始化功能:UnsafeMutablePointerUnsafeMutableRawPointerUnsafeMutableBufferPointerUnsafeMutableRawBufferPointerSlice<UnsafeMutableBufferPointer>Slice<UnsafeMutableRawBufferPointer>。該功能將允許在更多種類的情況下管理初始化狀態,包括更輕鬆地處理部分初始化的緩衝區。

SE-0365 增加對協議 CustomDebugStringConvertible 到 AnyKeyPath 的一致性 提案正在審查。

Swift論壇

  1. 圍繞 提議 Async buffered channel 進行的討論

內容概括:建立一個總集 channel 可以在 Tasks 之間交流,主要用於一個 task 產生的 value 可以被另一個 task 使用。

  1. 新問題:使用 Swift 5.5 / Xcode 14 構建後崩潰

內容概括:swift 程式碼使用地址引用傳入 NSMutableArray 型別給 Objective-C,Objective-C會返回 Array 的地址給 Swift 程式碼,當 iteration loop 返回的 array 時發生崩潰。可能原因:Swift ARC 記憶體優化釋放指標引起的崩潰。

  1. 用於 SwiftSyntax 的新 Swift 解析器

內容概括:SwiftSyntax 是一個 Swift Package,它可以解析 Swift 程式碼成一個樹狀的語義,可以對樹進行操控也可以將樹狀的語義變回 Swift 程式碼。目前 SwiftSyntaxParser 是一個基於 C++ 庫並且 Swift compiler 非常依賴於 C++ 庫。 專案目標:完全取代 Swift parser 對 C++ 庫的依賴

  1. 圍繞 SE-0370 pointer family initialization improvements and better buffer slice 展開的討論

  2. 提議:標準庫的穩定排序

穩定排序是:在比較相同元素的情況下保持輸入的順序:例子:

var roster = [
   Player(first: "Sam", last: "Coffey"),
   Player(first: "Ashley", last: "Hatch"),
   Player(first: "Kristie", last: "Mewis"),
   Player(first: "Ashley", last: "Sanchez"),
   Player(first: "Sophia", last: "Smith"),
]

roster.sort(by: { $0.first < $1.first })
// roster == [
//    Player(first: "Ashley", last: "Hatch"),
//    Player(first: "Ashley", last: "Sanchez"),
//    Player(first: "Kristie", last: "Mewis"),
//    Player(first: "Sam", last: "Coffey"),
//    Player(first: "Sophia", last: "Smith"),
// ]

從例子中看出有兩個一樣的 first: "Ashley", 由於輸入 "Hatch" 在 "Sanchez" 之前, 穩定排序之後順序不變。

  1. 訪問變數時只執行一次函式的最佳方法

  2. 確保 viewDidLoad 中的巢狀閉包在函式執行之前完成的最佳方法

推薦博文

在 iOS 16 中使用 SwiftUI Charts 建立折線圖

摘要: Apple 在 WWWDC 2022 上推出了 SwiftUI Charts,在 SwiftUI 檢視中實現圖表功能變得非常容易。如下圖:

在 iOS 16 中使用 SwiftUI Charts 自定義折線圖

摘要: iOS 16 中引入的 SwiftUI Charts,可以快速的實現各種統計圖,通過圖表直觀的呈現資料。本文介紹了幾種自定義的折線統計圖。

如何在 SwiftUI 中建立條形圖

摘要: 本文展示瞭如何建立一個垂直條形圖,其中 Y 軸表示每個型別的值。如下圖:

如何在 SwiftUI 中建立水平條形圖

摘要: 根據 UI 設計以及互動需求,有時候統計圖需要調整 X 和 Y 軸。本文主要介紹瞭如何建立水平的條形圖,如下圖:

使用 SwiftUI 的 Eager Grids

摘要: 本篇文章主要講解如何使用 Eager Grids 繪製網格檢視,其中講解了十幾種網格的實現方法,並詳細介紹了網格的實現原理。

關於我們

Swift社群是由 Swift 愛好者共同維護的公益組織,我們會分享以 Swift實戰SwiftUlSwift基礎為核心的技術內容,也整理收集優秀的學習資料。

特別感謝 Swift社群 編輯部的每一位編輯,感謝大家的辛苦付出,為 Swift社群 提供優質內容,為 Swift 語言的發展貢獻自己的力量。