{"id":42614,"date":"2024-03-22T15:17:17","date_gmt":"2024-03-22T19:17:17","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=42614"},"modified":"2025-10-27T15:30:58","modified_gmt":"2025-10-27T19:30:58","slug":"_eventfirstresponderchaindescription","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2024\/03\/22\/_eventfirstresponderchaindescription\/","title":{"rendered":"_eventFirstResponderChainDescription"},"content":{"rendered":"<p><a href=\"https:\/\/twitter.com\/stephancasas\/status\/1769831710915539224\">Stephan Casas<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/stephancasas\/status\/1769831710915539224\"><p>AppKit includes a private category on <code>NSApplication<\/code> that adds <code>_eventFirstResponderChainDescription<\/code> &mdash; a string describing the current responder chain. This can be a really useful debugging tool!<\/p><p>When your views aren&rsquo;t handling input events in the way you&rsquo;d expect, consider <a href=\"https:\/\/gist.github.com\/stephancasas\/7580e4970503970390c903ec16edc109\">dropping this extension<\/a> into your project to see what&rsquo;s what[&#8230;]<\/p><\/blockquote>\n\n<p id=\"_eventfirstresponderchaindescription-update-2024-03-25\">Update (2024-03-25): You <a href=\"https:\/\/mjtsai.com\/blog\/2024\/03\/22\/_eventfirstresponderchaindescription\/#comment-4059578\">can also<\/a> set the <code>_NS_4445425547<\/code> user default to see a <a href=\"https:\/\/twitter.com\/hrumarek\/status\/1190942518080397317\">Cocoa debug menu<\/a>. I tend to just leave this enabled in my apps.<\/p>\n\n<p id=\"_eventfirstresponderchaindescription-update-2024-04-11\">Update (2024-04-11): <a href=\"https:\/\/twitter.com\/CoreSerena\/status\/1778083259466817720\">Antoine<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/CoreSerena\/status\/1778083259466817720\">\n<p>Today&rsquo;s Darwin crazy hidden debugging tool of the day: iOS has a built in HUD for showing performance statistics like FPS, frame duration etc. [&#8230;] This HUD can be activated by calling the private <code>CARenderServerSetDebugOption<\/code> function<\/p>\n<\/blockquote>\n\n<p>See also: <a href=\"https:\/\/twitter.com\/krzyzanowskim\/status\/1777409442771784176\">Marcin Krzyzanowski<\/a>.<\/p>\n\n<p id=\"_eventfirstresponderchaindescription-update-2025-10-27\">Update (<a href=\"#_eventfirstresponderchaindescription-update-2025-10-27\">2025-10-27<\/a>): <a href=\"https:\/\/mastodon.social\/@ccgus\/115444175840059442\">Dave DeLong<\/a> on <code>_NS_4445425547<\/code>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@ccgus\/115444175840059442\">\n<p>that&rsquo;s the hex digits for &ldquo;DEBUG&rdquo;<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@stroughtonsmith\/115447782453022117\">Steve Troughton-Smith<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@stroughtonsmith\/115447782453022117\"><p>you can set &ldquo;NS&#x1F41E;&rdquo; instead of &ldquo;_NS_4445425547&rdquo; &mdash; it&rsquo;s a little easier to remember &#x1F92A;<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Stephan Casas: AppKit includes a private category on NSApplication that adds _eventFirstResponderChainDescription &mdash; a string describing the current responder chain. This can be a really useful debugging tool!When your views aren&rsquo;t handling input events in the way you&rsquo;d expect, consider dropping this extension into your project to see what&rsquo;s what[&#8230;] Update (2024-03-25): You can also [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2024-03-22T19:17:19Z","apple_news_api_id":"2262bdb6-421e-4c0c-b1ba-4c881d772979","apple_news_api_modified_at":"2025-10-27T19:31:00Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAABQ==","apple_news_api_share_url":"https:\/\/apple.news\/AImK9tkIeTAyxukyIHXcpeQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[4],"tags":[69,56,649,31,2321,30,2385,71,901,1227],"class_list":["post-42614","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-cocoa","tag-debugging","tag-esoteric-preferences","tag-ios","tag-ios-17","tag-mac","tag-macos-14-sonoma","tag-programming","tag-swift-programming-language","tag-top-posts"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=42614"}],"version-history":[{"count":7,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42614\/revisions"}],"predecessor-version":[{"id":49801,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/42614\/revisions\/49801"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=42614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=42614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=42614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}