需求
開發(fā)的時(shí)候斑胜,每次改動(dòng)代碼都要重新run
然后跑一遍app來測(cè)試改動(dòng)代碼。那么問題來了嫌吠,有木有方案就是改完代碼不用重新run
就能及時(shí)看到效果的呢止潘,答案是YES
。
現(xiàn)在解決這一需求的方案網(wǎng)上也不算多辫诅,在此筆者特意分享一下筆者使用的工具和方案來提高開發(fā)效率凭戴。(不講底層原理,只是純屬的分享一款app)
大神或者已經(jīng)知道Injection的請(qǐng)繞道炕矮,本篇只是純屬分享技巧的文章么夫,只是想讓大家提高開發(fā)效率而已者冤。
Xcode8以前(過期)
xcode8以前可以裝插件的時(shí)代,可以利用dyci-main
和Injection
插件來進(jìn)行代碼注入档痪。不過現(xiàn)在網(wǎng)上也有很多方法讓Xcode8支持裝插件涉枫,但是這樣打包上傳就會(huì)審核不過,而且略麻煩腐螟。(反正筆者現(xiàn)在是習(xí)慣了)
ps:
dyci-main
和Injection
在github
上自行搜索即可愿汰。
Xcode8之后(含)
Xcode8之后要?jiǎng)討B(tài)注入代碼要使用Injection
app,作者正是制作Injection
插件的人乐纸。因?yàn)閤code8不支持了插件衬廷,特意有制作了一個(gè)app,下載地址:http://johnholdsworth.com/injection.html
國外的網(wǎng)站汽绢,下載有點(diǎn)慢吗跋。
按照官方的使用,打開Xcode和Injection app宁昭,然后在運(yùn)行Xcode里的項(xiàng)目跌宛,之后在點(diǎn)擊Injection app菜單里的Inject Source即可。操作就是這么簡單积仗,but....
注入的代碼要重新執(zhí)行才生效秩冈,假設(shè)你a push b,然后在b里修改了代碼并且
Inject Source
操作之后斥扛,首先從b pop a然后在從a push b里運(yùn)行的就是你b頁面修改后的代碼了。
問題
- 如果出現(xiàn)
Timeout waiting for connection from client app
的問題丹锹,請(qǐng)點(diǎn)擊菜單macOS Project -> Patch
然后會(huì)在項(xiàng)目的main
文件里生成一些DEBUG
代碼稀颁,之后你再去修改你的代碼,然后在進(jìn)行Inject Source
玩玩吧
其他問題請(qǐng)自行去作者github上提issues楣黍。https://github.com/johnno1962/InjectionApp
- 其次匾灶,這個(gè)app是不注入get方法的。比如你使用了懶加載租漂,想在get方法里多加一些變量的初始化屬性阶女,用這個(gè)app就辦不到,因此筆者一般采用
LLDB
方式在get方法里注入代碼哩治。- 首先在get方法里打一個(gè)斷點(diǎn)秃踩,然后在
LLDB
控制臺(tái)里輸入p
命令即可。之后在鍵入你要注入的代碼业筏,代碼輸入完之后在連續(xù)按兩下回車鍵即可退出LLDB
控制臺(tái)憔杨,然后釋放斷點(diǎn)就見證神奇的一刻了。
- 首先在get方法里打一個(gè)斷點(diǎn)秃踩,然后在
此方法是一次性蒜胖,也就是說第二次調(diào)用這個(gè)get方法是不會(huì)執(zhí)行剛那個(gè)
LLDB
操作里的代碼滴消别。
結(jié)語
本篇提升開發(fā)效率的動(dòng)態(tài)注入代碼就分享到這抛蚤,如果有更好的方案歡迎聯(lián)系筆者。