{"id":21347,"date":"2018-04-27T17:00:05","date_gmt":"2018-04-27T21:00:05","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=21347"},"modified":"2018-04-28T23:02:26","modified_gmt":"2018-04-29T03:02:26","slug":"xcode-treasures","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2018\/04\/27\/xcode-treasures\/","title":{"rendered":"Xcode Treasures"},"content":{"rendered":"<p><a href=\"http:\/\/subfurther.com\/blog\/2018\/04\/25\/xcode-treasures-now-available\/\">Chris Adamson<\/a>:<\/p>\n<blockquote cite=\"http:\/\/subfurther.com\/blog\/2018\/04\/25\/xcode-treasures-now-available\/\">\n<p>The book&rsquo;s working title was <i>No Regrets Xcode<\/i>, and at one point, I toyed with proposing <i>Xcode for People Who Hate Xcode<\/i> as a title. But a full-throated defense of Xcode is an essay or a blog, not a programming book. Instead, I hope to prove by example &mdash; many, <strong>many<\/strong> examples &mdash; that Xcode is better than you think it is.<\/p>\n<p>[&#8230;]<\/p>\n<p>So, yes, Xcode is flawed. But is it <em>fundamentally<\/em> flawed? Is there some core concept &mdash; its multi-paned single window UI, its scriptable build system, the nature of app bundles and code signing &mdash; that makes it impossible for Xcode to <em>ever<\/em> be good? I don&rsquo;t believe anyone is making this argument. The closest you get to this is storyboard haters who build their UIs in code.<\/p>\n<\/blockquote>\n<p>All these years <a href=\"https:\/\/mjtsai.com\/blog\/2011\/09\/02\/the-part-of-xcode-4-that-tires-me-out\/\">later<\/a>, I still miss Xcode 3&rsquo;s multi-window interface. I&rsquo;ve gotten used to living without it, though. The Xcode 4 rewrite introduced a lot of breakage and problems, but I would say that all the major ones have been fixed (probably since 7.x or so). Mainly, Xcode 9 is plagued by a variety of <a href=\"https:\/\/mjtsai.com\/blog\/2018\/04\/01\/xcode-9-3\/\">minor but annoying issues<\/a>. One would not expect them to be fundamental flaws, yet they have persisted for a long time.<\/p>\n\n<p>Yes, I&rsquo;m one of <em>those people<\/em> who doesn&rsquo;t use storyboards and eventually came around to disliking nibs. But for me this is mostly about abstraction and modularity in creating interfaces, and making testing, version control, and localization easier. I would blame less than half of it on Xcode. Yes, it has some interface issues, but&mdash;aside from the breakage of older files&mdash;it seems to do a decent job at solving a really hard problem.<\/p>\n\n<blockquote cite=\"http:\/\/subfurther.com\/blog\/2018\/04\/25\/xcode-treasures-now-available\/\">\n<p>So, I&rsquo;m making the case that it&rsquo;s time to take a fresh look at Xcode. Acknowledge the bugs, sure. Hope that they get better. But beyond that, look at how nice the code editor is (and how you can customize it to suit your own tastes). Look at how the build system is smart about resolving dependencies, how you can set up your own build properties on a per-configuration basis or even run arbitrary scripts during the build, or run the whole thing from the command line and let Jenkins handle your CI. Think about how app slicing and on-demand resources make things better for your users by making smarter use of their limited on-device storage, and how Xcode gives you a UI for managing these assets visually. Behold the wonderfully clever power of LLDB to give you powerful breakpoint capabilities, and tools like Instruments, Main Thread Checker, Address Sanitizer and more.<\/p>\n<\/blockquote>\n\n<p>Previously: <a href=\"https:\/\/mjtsai.com\/blog\/2016\/10\/18\/working-without-a-nib\/\">Working Without a Nib<\/a>.<\/p>\n\n<p>Update (2018-04-28): See also: <a href=\"https:\/\/mdhughes.tech\/2018\/04\/27\/xcode-is-flawed\/\">Mark Hughes<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Chris Adamson: The book&rsquo;s working title was No Regrets Xcode, and at one point, I toyed with proposing Xcode for People Who Hate Xcode as a title. But a full-throated defense of Xcode is an essay or a blog, not a programming book. Instead, I hope to prove by example &mdash; many, many examples &mdash; [&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":"2018-04-27T21:00:07Z","apple_news_api_id":"06c2fbc6-adfb-427a-a951-97e4d04d7c3f","apple_news_api_modified_at":"2018-04-29T03:02:30Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAA==","apple_news_api_share_url":"https:\/\/apple.news\/ABsL7xq37QnqpUZfk0E18Pw","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":[],"tags":[63,370,30,1529,71,226],"class_list":["post-21347","post","type-post","status-publish","format-standard","hentry","tag-book","tag-interfacebuilder","tag-mac","tag-macos-10-13","tag-programming","tag-xcode"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21347","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=21347"}],"version-history":[{"count":2,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21347\/revisions"}],"predecessor-version":[{"id":21353,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/21347\/revisions\/21353"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=21347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=21347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=21347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}