{"id":11993,"date":"2015-08-17T16:53:00","date_gmt":"2015-08-17T20:53:00","guid":{"rendered":"http:\/\/mjtsai.com\/blog\/?p=11993"},"modified":"2015-08-17T16:53:45","modified_gmt":"2015-08-17T20:53:45","slug":"microsoft-winobjc","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2015\/08\/17\/microsoft-winobjc\/","title":{"rendered":"Microsoft WinObjC"},"content":{"rendered":"<p><a href=\"http:\/\/blogs.windows.com\/buildingapps\/2015\/08\/06\/windows-bridge-for-ios-lets-open-this-up\/\">Salmaan Ahmed<\/a> (via <a href=\"http:\/\/bitsplitting.org\/2015\/08\/06\/microsoft-winobjc\/\">Daniel Jalkut<\/a>):<\/p>\n<blockquote cite=\"http:\/\/blogs.windows.com\/buildingapps\/2015\/08\/06\/windows-bridge-for-ios-lets-open-this-up\/\"><p>Today I&rsquo;m going to take you a bit deeper on what&rsquo;s in the Windows Bridge for iOS (previously referred to as &lsquo;Project Islandwood&rsquo;), how it enables iOS developers to bring their code and skills to Windows, and why we&rsquo;ve decided to make this particular Windows bridge available as <a href=\"http:\/\/www.github.com\/Microsoft\/WinObjC\/\">open-source on GitHub<\/a>.<\/p>\n<p>[&#8230;]<\/p>\n<p>Our goal with the iOS bridge has never been simply to run iOS apps on Windows. Rather, our goal is to help you write great <em>Windows<\/em> apps that use as much of your existing code and knowledge as possible. We will, of course, continue to work to expand our iOS compatibility, but it&rsquo;s important to note that there is much more you can do with the bridge.<\/p><\/blockquote>\n<p>Previously: <a href=\"http:\/\/mjtsai.com\/blog\/2015\/04\/30\/microsofts-new-middleware-islandwood-and-astoria\/\">Microsoft&rsquo;s New Middleware: Islandwood and Astoria<\/a>.<\/p>\n\n<p><a href=\"http:\/\/blog.iconfactory.com\/2015\/08\/yep\/\">Craig Hockenberry<\/a>:<\/p>\n<blockquote cite=\"http:\/\/blog.iconfactory.com\/2015\/08\/yep\/\"><p>This work was based on our own <a href=\"http:\/\/chameleonproject.org\/\">Chameleon Project<\/a>, written by <a href=\"https:\/\/twitter.com\/BigZaphod\">Sean Heber<\/a>.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/cjwl\/status\/629851932144869376\">Christopher Lloyd<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/cjwl\/status\/629851932144869376\"><p>So far I know of 3 iOS compatibility layers built with Cocotron: Inception Mobile (now MS), Apportable and Stella<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/gte\/status\/629786877751529472\">Guy English<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/gte\/status\/629786877751529472\"><p>Looks like Microsoft played fast and loose with licenses of open source projects they used for WinObjC. They should work hard to fix this.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/steipete\/status\/629593107193925634\">Peter Steinberger<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/steipete\/status\/629593107193925634\"><p>WinObjC&rsquo;s source code is well worth a read. Some parts are super interesting, others just plain scary.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/AriX\/status\/629394877239857152\">Ari Weinstein<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/AriX\/status\/629394877239857152\"><p>WinObjC is chock full of crude shortcuts, questionable design decisions, and ridiculously incomplete implementations.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/landonfuller\/status\/629702482734678016\">Landon Fuller<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/landonfuller\/status\/629702482734678016\"><p>When including an actual copy of arc4random involves borrowing a single .c from the BSDs, there&rsquo;s really no excuse<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/mikeash\/status\/629704047898050560\">Mike Ash<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/mikeash\/status\/629704047898050560\"><p>That&rsquo;s the cryptographic equivalent of leaving brown liquid high-level nuclear waste sitting around in sealed Coke bottles.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/logancollins\/status\/629800794254999552\">Logan Collins<\/a> (compare with <a href=\"http:\/\/mjtsai.com\/blog\/2014\/05\/21\/making-dispatch_once-fast\/\">Apple&rsquo;s<\/a>):<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/logancollins\/status\/629800794254999552\"><p>Ladies and Gents, WinObjC&rsquo;s implementation of the (supposedly) thread-safe dispatch_once.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/praeclarum\/status\/629360406767775744\">Frank A. Krueger<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/praeclarum\/status\/629360406767775744\"><p>Ouch the NSLayoutConstraint solver is pretty weak :-( Single-pass, only 2 levels of priority. Still fun to read.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/rosyna\/status\/629361121670098948\">Rosyna<\/a> <a href=\"https:\/\/twitter.com\/rosyna\/status\/629361411219693568\">Keller<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/rosyna\/status\/629361121670098948\"><p>This Objective-C bridge Microsoft released the source to is so bizarre. Many things not implemented (CFUUID), strange coding conventions&#8230;<\/p><\/blockquote>\n<blockquote cite=\"https:\/\/twitter.com\/rosyna\/status\/629361411219693568\"><p>Some of it just makes you want to curl into a ball and cry. Also, check <a href=\"https:\/\/github.com\/Microsoft\/WinObjC\/blob\/master\/Frameworks\/UIKit\/UICollectionView.mm#L1\">UIFont.mm<\/a>!<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/tdierks\/status\/629365994335653888\">Tim Dierks<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/tdierks\/status\/629365994335653888\"><p>WTF code from Microsoft. None of these are correct; some are just crazy.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/twitter.com\/bwebster\/status\/629374243508199425\">Brian Webster<\/a>:<\/p>\n<blockquote cite=\"https:\/\/twitter.com\/bwebster\/status\/629374243508199425\"><p>Soooo Microsoft basically reimplemented Objective-C synthesized accessors <a href=\"https:\/\/github.com\/Microsoft\/WinObjC\/blob\/master\/include\/Foundation\/NSObject.h#L152\">in C++<\/a>?<\/p><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Salmaan Ahmed (via Daniel Jalkut): Today I&rsquo;m going to take you a bit deeper on what&rsquo;s in the Windows Bridge for iOS (previously referred to as &lsquo;Project Islandwood&rsquo;), how it enables iOS developers to bring their code and skills to Windows, and why we&rsquo;ve decided to make this particular Windows bridge available as open-source on [&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":"","apple_news_api_id":"","apple_news_api_modified_at":"","apple_news_api_revision":"","apple_news_api_share_url":"","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":[75,880,31,37,54,74,219],"class_list":["post-11993","post","type-post","status-publish","format-standard","hentry","category-programming-category","tag-developertool","tag-grand-central-dispatch-gcd","tag-ios","tag-microsoft","tag-objective-c","tag-opensource","tag-windows"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11993","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=11993"}],"version-history":[{"count":1,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11993\/revisions"}],"predecessor-version":[{"id":11994,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/11993\/revisions\/11994"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=11993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=11993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=11993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}