需求
開發的時候,每次改動代碼都要重新run
然后跑一遍app來測試改動代碼。那么問題來了,有木有方案就是改完代碼不用重新run
就能及時看到效果的呢,答案是YES
。
現在解決這一需求的方案網上也不算多,在此筆者特意分享一下筆者使用的工具和方案來提高開發效率。(不講底層原理,只是純屬的分享一款app)
大神或者已經知道Injection的請繞道,本篇只是純屬分享技巧的文章,只是想讓大家提高開發效率而已。
Xcode8以前(過期)
xcode8以前可以裝插件的時代,可以利用dyci-main
和Injection
插件來進行代碼注入。不過現在網上也有很多方法讓Xcode8支持裝插件,但是這樣打包上傳就會審核不過,而且略麻煩。(反正筆者現在是習慣了)
ps:
dyci-main
和Injection
在github
上自行搜索即可。
Xcode8之后(含)
Xcode8之后要動態注入代碼要使用Injection
app,作者正是制作Injection
插件的人。因為xcode8不支持了插件,特意有制作了一個app,下載地址:http://johnholdsworth.com/injection.html
國外的網站,下載有點慢。
按照官方的使用,打開Xcode和Injection app,然后在運行Xcode里的項目,之后在點擊Injection app菜單里的Inject Source即可。操作就是這么簡單,but....
注入的代碼要重新執行才生效,假設你a push b,然后在b里修改了代碼并且
Inject Source
操作之后,首先從b pop a然后在從a push b里運行的就是你b頁面修改后的代碼了。
問題
- 如果出現
Timeout waiting for connection from client app
的問題,請點擊菜單macOS Project -> Patch
然后會在項目的main
文件里生成一些DEBUG
代碼,之后你再去修改你的代碼,然后在進行Inject Source
玩玩吧
其他問題請自行去作者github上提issues。https://github.com/johnno1962/InjectionApp
- 其次,這個app是不注入get方法的。比如你使用了懶加載,想在get方法里多加一些變量的初始化屬性,用這個app就辦不到,因此筆者一般采用
LLDB
方式在get方法里注入代碼。- 首先在get方法里打一個斷點,然后在
LLDB
控制臺里輸入p
命令即可。之后在鍵入你要注入的代碼,代碼輸入完之后在連續按兩下回車鍵即可退出LLDB
控制臺,然后釋放斷點就見證神奇的一刻了。
- 首先在get方法里打一個斷點,然后在
此方法是一次性,也就是說第二次調用這個get方法是不會執行剛那個
LLDB
操作里的代碼滴。
結語
本篇提升開發效率的動態注入代碼就分享到這,如果有更好的方案歡迎聯系筆者。