debug環境下動態注入代碼 for iOS

圖片來源于網絡

需求

開發的時候,每次改動代碼都要重新run然后跑一遍app來測試改動代碼。那么問題來了,有木有方案就是改完代碼不用重新run就能及時看到效果的呢,答案是YES。
現在解決這一需求的方案網上也不算多,在此筆者特意分享一下筆者使用的工具和方案來提高開發效率。(不講底層原理,只是純屬的分享一款app)

大神或者已經知道Injection的請繞道,本篇只是純屬分享技巧的文章,只是想讓大家提高開發效率而已。

Xcode8以前(過期)

xcode8以前可以裝插件的時代,可以利用dyci-mainInjection插件來進行代碼注入。不過現在網上也有很多方法讓Xcode8支持裝插件,但是這樣打包上傳就會審核不過,而且略麻煩。(反正筆者現在是習慣了)

ps:dyci-mainInjectiongithub上自行搜索即可。

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方法是不會執行剛那個LLDB操作里的代碼滴。

結語

本篇提升開發效率的動態注入代碼就分享到這,如果有更好的方案歡迎聯系筆者。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容