精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊 Swift 中的熱重載

移動開發 iOS
如果您只需要做一次的話,聽起來還不錯。但是如果您和我一樣,在特別的一天中,對代碼庫進行 200 - 500 次迭代,該怎么辦呢?它增加了。

?前言

這一年是2040年,我們最新的 MacBook M30X 處理器可以感知到瞬間編譯大型 Swift 項目,聽起來很神奇,對吧?除此之外,編譯代碼庫只是我們迭代周期的一部分。包括:

  • 重新啟動它(或將其部署到設備)
  • 導航到您在應用程序中的先前位置
  • 重新生成您需要的數據。

如果您只需要做一次的話,聽起來還不錯。但是如果您和我一樣,在特別的一天中,對代碼庫進行 200 - 500 次迭代,該怎么辦呢?它增加了。

有一種更好的方法,被其他平臺所接受,并且可以在 Swift/iOS 生態系統中實現。我已經用了十多年了。

從今天開始,您想每周節省多達 10 小時的工作時間嗎?

熱重載

熱重載是關于擺脫編譯整個應用程序并盡可能避免部署/重新啟動周期,同時允許您編輯正在運行的應用程序代碼并且能立即看到更改。

這種流程改進可以每天為您節省數小時的開發時間。我跟蹤我的工作一個多月,對我來說,每天節省了 1-2 小時。

坦白地說,如果每周節省10個小時的開發時間都不能說服您去嘗試,那么我認為任何方法都不能說服你。

其他平臺在做什么?

如果您只使用 Apple 平臺,您會驚訝地發現有好多平臺幾十年前已經采用了熱重載。無論您是編寫 Node 還是任何其他 JS 框架,都有一個使用熱重載的設置。Go 也提供了熱重載(本博客使用了該特性)

另一個例子是谷歌的 Flutter 架構,從一開始就設計用于熱重載。如果您與從事 Flutter 工作的工程師交談,你會發現他們最喜歡 Flutter 開發者體驗的一點就是能夠實時編寫他們的應用程序。當我為《紐約時報》寫了一個拼字游戲時,我很喜歡它。

微軟最近推出了 Visual Studio 2022,并為 .NET 和 標準 C++ 應用程序提供熱重載,在過去的十年中,微軟在開發工具和經驗方面一直在大殺四方,所以這并不令人驚訝。

蘋果生態系統怎么樣?

早在 2014 年推出時,很多人都對 Swift Playgrounds 感到敬畏,因為它們允許我們快速迭代并查看代碼的結果,但它們并不能很好地工作,因為它存在崩潰、掛起等問題。不能支持整個iPad環境。

在它們發布后不久,我啟動了一個名為 Objective-C Playgrounds 的開源項目,它比官方 Playgrounds 運行得更快、更可靠。我的想法是設計一個架構/工作流程,利用我已經使用了幾年的 DyCI 代碼注入工具,該工具已經由 Paul 制作。

自從 Swift Playgrounds 存在以來,已經過去了八年,而且它們變得更好了,但它們可靠嗎?人們是否在使用它們來推動開發?

以我的經驗:并非如此。Playgrounds 在大型項目中往往不太可靠或適用。

SwiftUI 出現了,它是一項了不起的技術(盡管仍然存在錯誤),它引入了與 Playgrounds 非常相似的 Swift Previews 的想法,它們有什么好處嗎?

類似的故事,當它工作的時候是很好的,但是在更大的項目中,它的工作是不可靠的,而且往往中斷的次數比它們工作的次數多。如果你有任何錯誤,他們不會為你提供調試代碼的能力,因此,采用的情況有限。

我們需要等待 Apple 嗎?

如果你關注我一段時間,你就已經知道答案了,絕對不要。畢竟,我的職業生涯是構建普通 Apple 解決方案無法解決的問題:從像 Sourcery 這樣的語言擴展、像 Sourcery Pro 這樣的 Xcode 改進,再到 LifetimeTracker 以及許多其他開源工具。

我們可以利用我最初在 2014 Playgrounds 中使用的相同方法。我已經使用它十多年了,并且在數十個 Swift 項目中使用它并取得了巨大的成功!

許多年前,我從使用  DyCI[1] 切換到 InjectionForXcode,通過利用 LLVM 互操作而不是任何 swizzling ,它的效果更好。它是一個完全免費的開源工具,您可以在菜單欄中運行,它是由多產的工程師 John Holdsworth 創建的。你應該看看他的書 Swift Secrets[2]。

我意識到 Playgrounds 的方法可能過于笨重,所以今天,我開源了。一個非常專注的名為 Inject 的微型庫,與 InjectionForXcode 搭配使用時,將使您的 Apple 開發更加高效和愉快!

但不要只相信我的話??纯?Alexandra 和 Nate 的反饋,在我將這個工作流程引入  The Browser Company 設置之前,他們已經非常精通了,這使得它更加令人印象深刻。

圖片

Inject

這個小型庫是完全通用的,無論您使用 UIKit?、 AppKit? 還是 SwiftUI,您都可以使用它。

您無需為生產應用程序添加條件或刪除 Inject 代碼。它變成了無操作內聯代碼,將在非調試版本中被編譯過程剝離。您可以在每個視圖中集成一次,并持續使用數年。

請參考 GitHub repo[3] 中關于配置項目的說明?,F在讓我們來看看您有哪些工作流程選項。

工作流

SwiftUI

只需要兩行字就可以使任何 SwiftUI 啟用實時編程,而當您這樣做時,您將擁有比使用 Swift Previews 更快的工作流程,同時能夠使用實際的生產數據。

這是我的 Sourcery Pro[4] 應用程序的示例,其中加載了我所有的實際數據和邏輯,使我能夠即時快速迭代整個應用程序設計,而無需任何重新啟動、重新加載或類似的事情。

看看這個開發工作流程有多快吧,告訴我你寧愿在我每次接觸代碼時等待Xcode的重新構建和重新部署。

UIKit / AppKit

我們需要一種方法來清理標準命令式UI框架的代碼注入階段之間的狀態。

我創建了 Host 的概念并且在這種情況下工作的很好。有兩個:

- Inject.ViewHost
- Inject.ViewControllerHost

我們如何集成它?我們把我們想迭代的類包裝在父級,因此我們不修改要注入的類型,而是改變父級的調用站點。

例如,如果你有一個 SplitViewController ,它創建了 PaneA 和 PaneB ,而你想在PaneA 中迭代布局/邏輯代碼,你就修改 SplitViewController 中的調用站點。

paneA = Inject.ViewHost(
PaneAView(whatever: arguments, you: want)
)

這就是你需要做的所有改變。注入現在允許你更改 PaneAView 中的任何東西,除了它的初始化API。這些變化將立即反映在你的應用程序中。

一個更具體的例子?

  • 我下載了 Covid19 App
  • 添加 -Xlinker -interposable 到 Other Linker Flags
  • 交換了一行 Covid19TabController.swift:L63 行

從這句:

let vc = TwitterViewController(title: Tab.twitter.name, usernames: Twitter.content)

替換為:

let vc = Inject.ViewControllerHost(TwitterViewController(title: Tab.twitter.name, usernames: Twitter.content))

現在,我可以在不重新啟動應用程序的情況下迭代控制器設計。

這是如何運作的呢?

Hosts 利用了自動閉包,因此每次您注入代碼時,我們都會使用與最初相同的參數創建您類型的新實例,從而允許您迭代任何代碼、內存布局和其他所有內容。你唯一不能改變的是你的初始化 API。

Host 的變化不能完全內聯,所以這些類在 Release 構建中被刪除。最簡單的方法是做一個單獨的提交,交換此單行代碼,然后在工作流程的最后刪除它。

邏輯注入如何呢?

像 MVVM / MVC 這樣的標準架構可以獲得免費的邏輯注入,重新編譯你的類,當方法重新執行時,你已經在使用新代碼了。

如果像我一樣,你喜歡 PointFree Composable Architecture[5],你可能想要注入 reducer 代碼。Vanilla TCA 不允許這樣做,因為 reducer 代碼是一個免費功能,不能直接用注入替換,但我們在 The Browser Company 的分支 支持它。

當我最初開始咨詢 TBC 時,我想要的第一件事是將 Inject? 和 XcodeInjection 集成到我們的工作流程中。公司管理層非常支持。

如果您切換到我們的 TCA 分支(我們保持最新),你可以在 UI 和 TCA 層上使用 Inject 。

它有多可靠?

沒有什么是完美的,但我已經使用它十多年了。它比 Apple 技術(Playgrounds / Previews)可靠得多。

如果您投入時間學習它,它將為您和您的團隊節省數千小時!

參考資料

[1] DyCI: https://github.com/DyCI/dyci-main

[2] Swift Secrets: http://books.apple.com/us/book/id1551005489

[3] GitHub repo: https://github.com/krzysztofzablocki/Inject

[4] Sourcery Pro: http://merowing.info/sourcery-pro/

[5] PointFree Composable Architecture: https://github.com/pointfreeco/swift-composable-architecture

[6] Demo 源碼: https://github.com/krzysztofzablocki/Inject

責任編輯:武曉燕 來源: Swift社區
相關推薦

2022-05-11 09:01:54

Swift類型系統幻象類型

2022-06-13 09:02:06

Swift類型占位符

2022-05-25 09:15:01

Swift 5.6占位符

2021-07-07 11:41:38

Swift key paths

2021-04-19 10:45:52

Webpack熱更新前端

2021-09-15 16:41:20

京東零售云Flutter熱重載

2022-04-13 21:07:30

Vue 3函數重載

2021-11-17 08:11:35

MySQL

2021-08-31 07:54:24

SQLDblink查詢

2024-04-26 00:00:00

Rust檢查器代碼

2023-11-09 11:56:28

MySQL死鎖

2022-02-28 08:17:24

重載函數JS前端

2023-07-28 09:54:14

SQL數據Excel

2021-03-08 00:11:02

Spring注解開發

2024-04-15 00:00:00

RabbitMQ死信隊列消息

2021-09-03 06:46:34

SQL分組集功能

2021-08-16 08:12:04

SQLMerge用法

2022-08-03 08:11:58

數據測試同類型

2021-10-30 19:56:10

Flutter按鈕 Buttons

2023-08-29 09:46:12

SQLCTE遞歸
點贊
收藏

51CTO技術棧公眾號

一区二区三区四区不卡| 日韩av免费在线播放| 久久久久无码精品| 欧美人动性xxxxz0oz| www.欧美.com| 国产精品白嫩初高中害羞小美女| 欧美肥妇bbwbbw| 6080亚洲理论片在线观看| 午夜精品久久久久久久久久| 色之综合天天综合色天天棕色| 国产精品综合在线| 午夜亚洲视频| 自拍偷拍亚洲综合| 99久久免费国| 乱子伦一区二区三区| 午夜精品视频| 亚洲天堂色网站| 国产在线a视频| 天堂av在线网| 亚洲欧美另类在线| 色噜噜狠狠一区二区三区| 六月婷婷中文字幕| 久久99久久精品| 欧美做受高潮电影o| 印度午夜性春猛xxx交| 欧美日韩一区二区三区视频播放| 日韩欧美国产wwwww| 日本中文字幕高清| 国产不卡人人| 亚洲永久免费av| 老司机av福利| 福利成人在线观看| 2021中文字幕一区亚洲| 动漫3d精品一区二区三区| 一级片aaaa| 日韩精品亚洲专区| 日本成人精品在线| 久久夜靖品2区| 国产真实久久| 欧美俄罗斯乱妇| 成人在线观看免费完整| 久久亚洲在线| 中文字幕一区电影| 国产三级在线观看完整版| 丝袜久久网站| 日韩成人高清在线| 国产+高潮+白浆+无码| 综合激情网...| 日韩女优制服丝袜电影| 青青草原播放器| 亚洲福利影视| 91.com视频| 天天操狠狠操夜夜操| 91九色综合| 欧美中文字幕一区二区三区亚洲| 亚洲色欲综合一区二区三区| 中文在线中文资源| 欧美性猛交xxx| 50路60路老熟妇啪啪| 成人做爰视频www网站小优视频| 天天综合网天天综合色| 国产一区二区在线视频播放| 国模私拍一区二区国模曼安| 欧美视频在线观看免费网址| 狠狠爱免费视频| 韩国精品主播一区二区在线观看| 91黄色免费看| jizz欧美性11| 网站一区二区| 亚洲黄色av网站| 亚洲免费精品视频| 日本中文字幕在线看| 亚洲人成小说网站色在线 | 亚洲欧美日韩中文播放| 欧美日韩一级在线| 国产乱妇乱子在线播视频播放网站| 一区二区在线电影| 久久国产精品免费一区| 三级国产在线观看| 中文字幕不卡一区| 黄色片免费在线观看视频| 1区2区3区在线| 欧美性xxxx在线播放| 久久人人爽av| jazzjazz国产精品麻豆| 亚洲另类激情图| 麻豆精品国产免费| 亚洲乱码视频| 国产日韩欧美黄色| 日韩在线视频第一页| 国产日韩欧美在线一区| 日韩精品久久一区二区| 小视频免费在线观看| 欧美日本在线视频| 麻豆短视频在线观看| 精品国产中文字幕第一页| 久久视频精品在线| 九九九在线观看| 韩国一区二区三区| 欧美不卡在线一区二区三区| 麻豆传媒在线观看| 日韩欧美中文在线| 色哟哟免费视频| 国产aⅴ精品一区二区三区久久| 精品国产美女在线| av一级在线观看| 国产成人自拍在线| 日韩区国产区| www成人免费观看| 在线不卡中文字幕播放| 黄色工厂在线观看| 午夜国产欧美理论在线播放| 国产精品com| 色欲av永久无码精品无码蜜桃| 国产精品久久久一本精品 | 国产传媒在线观看| 日韩一区二区三区在线视频| 成人无码av片在线观看| 亚洲麻豆av| 97久久夜色精品国产九色| 成人在线免费公开观看视频| 黄色一区二区在线| 亚洲少妇中文字幕| 亚洲成av人片一区二区密柚| 国产福利精品在线| 视频在线观看你懂的| 一区二区三区四区亚洲| 想看黄色一级片| 青青草国产免费一区二区下载 | 99精品视频在线播放观看| 欧美三级午夜理伦三级老人| 日韩一区精品| 亚洲色图色老头| 国产精品久久久久久99| 国产91在线观看| 黑人巨茎大战欧美白妇| 久久91视频| 日韩在线视频免费观看| 欧美国产一级片| 久久精品亚洲国产奇米99| 浮妇高潮喷白浆视频| 好吊妞国产欧美日韩免费观看网站| 理论片在线不卡免费观看| 国产一区二区在线不卡| 国产精品麻豆久久久| 天天爽人人爽夜夜爽| 精品国产123区| 国产精品爽黄69天堂a| 成年人在线视频| 欧美色成人综合| 国产第一页精品| 秋霞av亚洲一区二区三| 色一情一乱一伦一区二区三区丨 | 99re在线视频上| 丝袜美腿av在线| 亚洲精品一区二区三区精华液| 亚洲av无码一区二区三区在线| 国内精品久久久久影院一蜜桃| 一区不卡字幕| 精品视频一二| 欧美激情视频播放| 姝姝窝人体www聚色窝| 精品久久久在线观看| 成年人网站免费看| 日韩 欧美一区二区三区| 亚洲人一区二区| 久久av网站| 国内揄拍国内精品| 男人天堂亚洲二区| 欧美日韩高清影院| 欧美成人黄色网| 不卡av在线免费观看| 黑森林福利视频导航| 日韩在线观看电影完整版高清免费悬疑悬疑 | 欧美日韩一区综合| 成人国产激情| 欧美男插女视频| 欧美69xxxxx| 717成人午夜免费福利电影| 午夜免费激情视频| 26uuu精品一区二区三区四区在线| 无人在线观看的免费高清视频| 四虎8848精品成人免费网站| 国产 高清 精品 在线 a| 中文字幕在线高清| www.亚洲天堂| 少妇无码一区二区三区| 欧美日韩成人一区| 日韩精品一区三区| 国产精品视频线看| 大尺度做爰床戏呻吟舒畅| 日韩激情视频在线观看| 视色,视色影院,视色影库,视色网| 精品少妇一区| 成人激情视频小说免费下载| 国产v日韩v欧美v| 精品国偷自产在线视频| 少妇av一区二区| 9191成人精品久久| 国产成人精品777777| 亚洲人成电影网站色mp4| 女同毛片一区二区三区| 国产成人免费高清| 亚洲色图 在线视频| 亚洲乱亚洲高清| 好吊色视频988gao在线观看| 精品国产美女| 国模一区二区三区私拍视频| 黄色欧美视频| 国产91免费观看| av女在线播放| 久久国产精品首页| 在线观看美女网站大全免费| 亚洲精品美女在线观看播放| 99国产在线播放| 欧美日韩在线亚洲一区蜜芽| 特级做a爱片免费69| 亚洲资源中文字幕| 国产一区二区播放| 国产精品女主播av| 成人国产精品久久久网站| 成人午夜短视频| 欧美体内she精高潮| 久久激情五月婷婷| 欧美日韩亚洲自拍| 天堂影院一区二区| 国产一区二区三区精彩视频| 亚洲福利一区| 欧美乱大交xxxxx潮喷l头像| 亚洲精品一区二区妖精| 亚洲v国产v在线观看| 国产99久久久国产精品成人免费| 国产在线一区二| 精品一区二区男人吃奶| 国产精品二区三区| 亚洲精品一区二区三区中文字幕| 国产噜噜噜噜久久久久久久久| 日本精品在线中文字幕| 国产成人福利网站| 日韩电影免费观| 欧美有码在线观看| 欧美大片免费| 国产成人精品久久二区二区| 亚洲伦理影院| 国产精品va在线| 美女网站视频一区| 国产精品99一区| 成人日韩精品| 国产玖玖精品视频| 日韩av综合| 成人av影视在线| 国产精品极品在线观看| 精品久久精品久久| 夜夜春成人影院| 日韩精品在在线一区二区中文| 国产成人精品一区二区免费看京| 欧美色图亚洲自拍| 日韩理论电影| 99re8这里只有精品| 影音先锋一区| 国产高清精品在线观看| 石原莉奈一区二区三区在线观看| 毛片av免费在线观看| 麻豆精品在线播放| 国产性生活一级片| 成人午夜视频在线| 在线免费观看成年人视频| 国产欧美视频在线观看| 四虎884aa成人精品| 一区二区三区四区在线| 少妇一级淫片免费放中国| 在线这里只有精品| 国产又粗又猛又爽又黄的| 欧美成人激情免费网| 手机福利小视频在线播放| 国产一区二区动漫| h网站久久久| 91成人在线播放| 成人在线黄色| 福利精品视频| 国产一区毛片| 日韩中文字幕亚洲精品欧美| 国产精品主播| 国产成人美女视频| 99精品视频一区二区三区| 无码人妻精品中文字幕 | 久久精品国产亚洲精品2020| wwww亚洲| 国产精品视频专区| 国产精品18hdxxxⅹ在线| 日韩欧美99| 欧美三级特黄| 性刺激的欧美三级视频| 成人黄色av电影| 国产调教在线观看| 亚洲成人精品一区| 91无套直看片红桃| 精品一区二区三区三区| 国产黄色小视频在线| 1769国内精品视频在线播放| 国产精品久一| 四虎一区二区| av不卡免费看| 日韩高清在线一区二区| 国产午夜精品久久久久久免费视| 青青草原免费观看| 精品视频1区2区| 男人的天堂在线免费视频| 色综合视频一区中文字幕| 精品无人乱码一区二区三区| 国产一区精品在线| 你懂的国产精品永久在线| 日本免费观看网站| 99麻豆久久久国产精品免费| 五月天丁香激情| 欧美精选午夜久久久乱码6080| 青青久在线视频| 久久久噜噜噜久久久| 精品国产三级| 日韩视频在线观看视频| 日本亚洲天堂网| av直播在线观看| 亚洲成年人网站在线观看| 国产xxxxxx| 久久精品国产亚洲精品| 国产亚洲精彩久久| 日韩欧美一区二区三区四区五区| 午夜亚洲性色视频| 亚洲 欧美 日韩在线| 亚洲愉拍自拍另类高清精品| av手机免费看| 久久精品久久久久久国产 免费| 国产成人精品一区二区三区免费| 欧美福利一区二区三区| 国产精品美女| 大地资源二中文在线影视观看| 亚洲国产精品久久艾草纯爱| 国产黄色免费大片| 欧美另类高清videos| 精品一级视频| 996这里只有精品| 成人小视频在线| 国产稀缺真实呦乱在线| 亚洲福利影片在线| 男女羞羞在线观看| 麻豆传媒一区二区| 日韩精品电影一区亚洲| 欧美人妻一区二区三区| 欧洲日韩一区二区三区| 成人免费一区二区三区视频网站| 国产精品1234| 成人激情视频| 污网站在线免费| 亚洲欧美激情一区二区| 超碰在线观看99| 韩剧1988免费观看全集| 婷婷综合福利| 中文久久久久久| 中文字幕一区二区三区四区| 国产福利免费视频| 97精品国产97久久久久久免费| 亚洲电影一级片| 亚洲娇小娇小娇小| 亚洲美女免费视频| 欧美一级在线免费观看| 热久久美女精品天天吊色| 欧美综合一区| 中文字幕一区二区三区四| 亚洲一区二区三区美女| 欧美男男激情freegay| 国产精品永久免费在线| 欧美日韩一区二区三区四区在线观看| 国产chinese中国hdxxxx| 在线精品国精品国产尤物884a| 日本在线免费| 国产偷久久久精品专区| 视频在线观看国产精品| 九九精品视频免费| 亚洲国产精彩中文乱码av在线播放| 国产免费不卡| 亚洲自拍偷拍一区二区三区| 成人性色生活片| 中文字幕乱码在线观看| 欧美激情国产精品| 精品国产一区二区三区小蝌蚪| www.亚洲自拍| 精品国产精品自拍| 欧美成人视屏| 久久99精品久久久久久久青青日本| 日本sm残虐另类| 中文字幕一区二区三区手机版| 在线观看亚洲区| 国产成人精品福利| 国内外成人免费在线视频| 亚洲地区一二三色| 午夜小视频在线| 精品国产一区二区三区免费| 激情国产一区二区| 天堂网视频在线| 久久久久久久久久国产|