Tracking UIKit access on main thread
This is just a Swift port of PSPDFUIKitMainThreadGuard.m using swizzling on UIView extension
Call Guard.setup
func application(_ application:UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->Bool{
// setup
Guard.setup()returntrue}It works by swizzling in the following methods
- setNeedsLayout
- setNeedsDisplay
- setNeedsDisplayInRect:
Try accessing UIKit from another thread and MainThreadGuard will assert
classViewController:UIViewController{overridefunc viewDidLoad(){
super.viewDidLoad()
view.backgroundColor =UIColor.white
letlabel=UILabel()
view.addSubview(label)DispatchQueue.global(qos:DispatchQoS.QoSClass.background).async{
label.text ="Setting text on background thread"}}}Xcode 9+ has Main Thread Checker, which detects invalid use of AppKit, UIKit, and other APIs from a background thread.
MainThreadGuard is available through CocoaPods. To install it, simply add the following line to your Podfile:
You should add this to Debug configuration only
pod"MainThreadGuard",git: 'https://github.com/onmyway133/MainThreadGuard',configurations: 'Debug'Khoa Pham, onmyway133@gmail.com
MainThreadGuard is available under the MIT license. See the LICENSE file for more info.
