{"id":27894,"date":"2020-01-20T15:34:19","date_gmt":"2020-01-20T20:34:19","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=27894"},"modified":"2020-02-24T15:45:10","modified_gmt":"2020-02-24T20:45:10","slug":"rejected-for-working-around-macos-bugs","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2020\/01\/20\/rejected-for-working-around-macos-bugs\/","title":{"rendered":"Rejected for Working Around macOS Bugs"},"content":{"rendered":"<p><a href=\"https:\/\/twitter.com\/danielpunkass\/status\/1218269321530695680\">Daniel Jalkut<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/danielpunkass\/status\/1218269321530695680\">\n<p>It&rsquo;s a dramatic day for @MarsEdit and compatiblity, as App Review has suddenly become more interested in private WebKit SPI. I patch WebHTMLView to work around serious bugs which I have filed. One of them is a crasher. I don&rsquo;t think WebKit1 is the best focus for App Review?<\/p>\n<\/blockquote>\n\n<p>A truly unfortunate situation to be in as a developer. Apple will likely never fix the bugs, as <code>WebView<\/code> is now deprecated. Its replacement, <code>WKWebView<\/code>, is not fully ready yet, and will require a complete rewrite in a different language to get the same functionality, if that&rsquo;s even possible.<\/p>\n\n<p><a href=\"https:\/\/twitter.com\/danielpunkass\/status\/1218775871236005891\">Daniel Jalkut<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/danielpunkass\/status\/1218775871236005891\"><p>Spending my whole weekend, apart from celebrating the delightful birthday of my little baby 8yo, working around issues that App Store review put on my plate. The price I pay for playing this game, I know. I just wish the game were a little different.<\/p>\n<p>[&#8230;]<\/p>\n<p>Overall I am pretty chill about App Store review and the goals of bringing developers into line. I do think it would be massively improved by a graduated system of warning of future rejection while allowing immediate fixes to pass through.<\/p>\n<p>As a Mac App Store developer whose apps have been in the store since the beginning, it&rsquo;s not a great feeling to know that any critical update might be held up because Apple decided to get more uptight about something that was OK for the past 8 years.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/danielpunkass\/status\/1218912688404910082\">Daniel Jalkut<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/danielpunkass\/status\/1218912688404910082\"><p>Generally I would say the thing for other developers to look out for is Apple may be improving its ability to detect things like patches as opposed to outright &ldquo;use&rdquo; of private API, and they may also be getting less forgiving of some behaviors, even if in the name of better UX.<\/p><\/blockquote>\n\n<p>This is the thanks you get for filing Radars and putting up with bugs for all those years.<\/p>\n\n<p>It&rsquo;s not exactly <a href=\"https:\/\/twitter.com\/glenda_atom\/status\/1218884998788341760\">altering the deal<\/a> because the Mac App Store has always banned private API. As was <a href=\"http:\/\/openradar.appspot.com\/radar?id=777401\">said at the outset<\/a>, this is not realistic. There will always be (different) OS bugs. Even in the best case, they will <a href=\"https:\/\/mjtsai.com\/blog\/2019\/10\/11\/mail-data-loss-in-macos-10-15\/\">take time to fix<\/a>. Nobody&mdash;not customers, developers, nor Apple&mdash;wants apps to exhibit bugs, but that&rsquo;s the inevitable result of a policy that forbids patching to work around buggy API.<\/p>\n<p>When the Mac App Store debuted with this policy, some people said it would force Apple to fix the bugs faster. I don&rsquo;t think that&rsquo;s happened. Rather, developers kept doing what they were doing&mdash;I bet most large or popular apps are using private API to work around bugs&mdash;and Apple either failed to detect this or chose to look the other way.<\/p>\n\n<p>Now, the rules haven&rsquo;t changed, but perhaps enforcement has. This is a problem both because of increased user-visible bugs and fairness. Some apps like MarsEdit will eat up development time to end up with something buggier than they started with. Other apps will get a different reviewer and slide right through. Apps that Apple deems sufficiently important will be exempt from the rule.<\/p>\n\n<p>With out-of-process Web views, increasing use of Swift, and direct Objective-C properties, patching will be more difficult. This will level the playing field&mdash;but to the lowest common denominator.<\/p>\n\n<p><a href=\"https:\/\/twitter.com\/danielpunkass\/status\/1219049630438174720\">Daniel Jalkut<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/danielpunkass\/status\/1219049630438174720\">\n<p>My compromise build was approved by Apple this afternoon. I found another way around one of the bugs I was fixing, but have no fix for the other one, yet. It&rsquo;s a fairly minor thing, but the Mac App Store version is now buggier than it was, thanks to App Review.<\/p>\n<\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/12\/24\/app-store-to-ban-deprecated-uiwebview\/\">App Store to Ban Deprecated UIWebView<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/11\/19\/direct-objective-c-properties\/\">Direct Objective-C Properties<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/11\/04\/electron-apps-rejected-from-the-mac-app-store\/\">Electron Apps Rejected From the Mac App Store<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2018\/07\/19\/apple-doubling-down-on-blocking-private-api-use\/\">Apple Doubling Down on Blocking Private API Use<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2016\/09\/27\/unfortunate-app-store-rejections\/\">Unfortunate App Store Rejections<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2014\/09\/25\/private-api-and-open-source\/\">Private API and Open Source<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2014\/08\/18\/its-a-coup\/\">&ldquo;It&rsquo;s a Coup&rdquo;<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2012\/03\/26\/app-rejections-are-a-lousy-way-to-communicate-policy-changes\/\">App Rejections Are a Lousy Way to Communicate Policy Changes<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2010\/10\/22\/mac-app-store\/\">Mac App Store<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2010\/04\/08\/private-api-is-the-wrong-question\/\">Private API Is the Wrong Question<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2010\/04\/06\/ibooks-and-private-apis\/\">iBooks and Private APIs<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2008\/11\/20\/google-mobile-uses-private-iphone-apis\/\">Google Mobile Uses Private iPhone APIs<\/a><\/li>\n<\/ul>\n\n<p>Update (2020-01-20): <a href=\"https:\/\/twitter.com\/lapcatsoftware\/status\/1219366500961792000\">Jeff Johnson<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/lapcatsoftware\/status\/1219366500961792000\">\n<p>Apple currently lets Catalyst apps use private API as workarounds, but at some unpredictable time they&rsquo;ll get rejected for it.<\/p>\n<\/blockquote>\n\n<p id=\"rejected-for-working-around-macos-bugs-update-2020-01-24\">Update (2020-01-24): <a href=\"https:\/\/twitter.com\/jesse_squires\/status\/1219441048193159168\">Jesse Squires<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/jesse_squires\/status\/1219441048193159168\">\n<p>Anyone who's worked at any big company knows Apple lets private API use slide.<\/p>\n<p>IG and FB both used private iOS APIs. Appple knew and always approved. Big Apps&trade; are too important to reject.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Daniel Jalkut: It&rsquo;s a dramatic day for @MarsEdit and compatiblity, as App Review has suddenly become more interested in private WebKit SPI. I patch WebHTMLView to work around serious bugs which I have filed. One of them is a crasher. I don&rsquo;t think WebKit1 is the best focus for App Review? A truly unfortunate situation [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2020-01-20T20:34:23Z","apple_news_api_id":"3e0a284f-2152-4373-b892-6899c82d53a5","apple_news_api_modified_at":"2020-02-24T20:45:15Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAABA==","apple_news_api_share_url":"https:\/\/apple.news\/APgooTyFSQ3O4kmiZyC1TpQ","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":[2],"tags":[130,131,1621,30,32,39,1666,207,1013,71,328,1926],"class_list":["post-27894","post","type-post","status-publish","format-standard","hentry","category-technology","tag-rejection","tag-bug","tag-marzipan","tag-mac","tag-macapp","tag-macappstore","tag-macos-10-15","tag-marsedit","tag-private-api","tag-programming","tag-webkit","tag-wkwebview"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/27894","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=27894"}],"version-history":[{"count":4,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/27894\/revisions"}],"predecessor-version":[{"id":27935,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/27894\/revisions\/27935"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=27894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=27894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=27894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}