iOS 11 的 Electra JB 釋出有一段時間了,但是身為 Gogoro 車主,一直有一個困擾,就是 Electra 一旦啟用後,會造成 Gogoro App 在開啟時就 crash。
根據一些研究之後,發現是因為
[NSBundle mainBundle]在 TweakInject 的時候,可能當時 Gogoro 的 App 尚未初始化完畢,導致會出錯。
因此,我寫了一個 Loader 來替換原本的 TweakInjector,故意用延遲的方式來讓 Gogoro App 初始化之後再載入原本的 Injector,就可以了。
#import <dlfcn.h> #import <objc/runtime.h> __attribute__ ((constructor)) static void ctor(void) { @autoreleasepool { void *dl = dlopen([@"/usr/lib/TweakInject2.dylib" UTF8String], RTLD_LAZY | RTLD_GLOBAL); if (dl == NULL) { NSLog(@"Injection failed: '%s'", dlerror()); } } }
不會編譯沒關係,有檔案可以直接下載:
https://github.com/hirakujira/TweakInjector_delay/releases
使用方法也很簡單,進去 SSH 之後,找到 /usr/lib/TweakInject.dylib,改名為 TweakInject2.dylib,然後把下載的修正檔放在 /usr/lib/TweakInject.dylib(等於放在原本的位置) 即可。需要注意的是,一旦 TweakInject 在 Cydia 有更新,在更新之後必須重複上面步驟一次,這樣就可以了。
這篇文章 在 Electra 下讓 Gogoro 正常執行 最早出現於 Hiraku Dev。