<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Nov 3, 2017, at 5:17 AM, Mike Kluev &lt;<a href="mailto:mike.kluev@gmail.com" class="">mike.kluev@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">On 3 November 2017 at 03:05, Adam Kemp <span dir="ltr" class="">&lt;<a href="mailto:adam.kemp@apple.com" target="_blank" class="">adam.kemp@apple.com</a>&gt;</span> wrote:<br class=""><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="gmail-"><br class=""></span><br class="">
Would it be an error to have an entry in the “ledger” but not a corresponding implementation?<br class="">
</blockquote></div><br class=""></div><div class="gmail_extra"><div class="gmail_extra">definitely so. and vice versa.</div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">Mike<br class=""></div><div class=""><br class=""></div></div></div>
</div></blockquote></div><br class=""><div class="">If that’s the case then this wouldn’t solve one of the major use cases I listed for this: splitting up cross-platform classes into platform-specific files. The idea is that each target contains a different subset of the files. Consider a case where two platforms are similar enough to share some code but not all code. For instance:</div><div class=""><br class=""></div><div class="">Class.swift</div><div class="">Class.UIKit.swift // Used by iOS + watchOS</div><div class="">Class.iOS.swift</div><div class="">Class.watchOS.swift</div><div class="">Class.macOS.swift</div><div class=""><br class=""></div><div class="">There are three targets, and two of the targets include Class.UIKit.swift but not the third. So what do you put in the ledger?</div><div class=""><br class=""></div><div class="">For a real-world example, consider a custom view that is used for presenting content in an app that shares code on iOS, tvOS, and macOS. Much of the logic for this is shared, including rendering which is done using CoreGraphics. You could write that class something like this:</div><div class=""><br class=""></div><div class="">PresentationView.swift:</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">import CoreGraphics</div><div class=""><br class=""></div><div class="">partial class PresentationView {</div><div class=""><br class=""></div><div class="">private func draw(inContext context: CGContext) {</div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">// Shared CoreGraphics drawing</div></blockquote></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">}</div><div class=""><br class=""></div><div class="">}</div></blockquote><br class=""><div class="">PresentationView.UIKit.swift: // Used by iOS + tvOS</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">import UIKit</div></blockquote><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">partial class PresentationView : UIView {</div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">func draw(_ rect: CGRect) {</div></blockquote></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">self.draw(inContext: UIGraphicsGetCurrentContext())</div></blockquote>}</blockquote></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">}</div></blockquote><div class=""><br class=""></div>PresentationView.AppKit.swift:<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">import AppKit</div><div class=""><br class=""></div><div class="">partial class PresentationView : NSView {</div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class="">func&nbsp;draw(_&nbsp;dirtyRect:&nbsp;NSRect) {</blockquote></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class="">self.draw(inContext: NSGraphicsContext.currentContext()?.CGContext)</blockquote>}</blockquote>}</blockquote><div class=""><div class=""><br class=""></div></div><div class="">This is exactly the technique that I’ve used in the past (in C#) to share code across iOS, Android, macOS, and WPF. It’s really powerful, but the ledger would make it much harder.</div></body></html>