<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">FYI, here is the GitHub commit that addressed this issue:<div class=""><br class=""></div><div class=""><a href="https://github.com/apple/swift/commit/1f11ef2fd29f214bd9d9a5fa85246d36c04448f0" class="">https://github.com/apple/swift/commit/1f11ef2fd29f214bd9d9a5fa85246d36c04448f0</a></div><div class=""><br class=""></div><div class="">It was also reported as SE-0140.</div><div class=""><br class=""></div><div class="">Basically, optional values were getting bridged to an opaque-to-Foundation “_SwiftValue” class, which means NSJSONSerialization couldn’t figure out what to do with it.</div><div class=""><br class=""></div><div class="">- Tony</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Nov 18, 2016, at 11:46 AM, Dan Loewenherz via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I've encountered a similar bug and filed a radar a few months ago. My report was marked as a duplicate but besides that I haven't received any follow-up. It does appear to have been fixed in Xcode 8.1 / Swift 3.0.1. <a href="http://www.openradar.me/28365419" target="_blank" class="">http://www.openradar.me/283654<wbr class="">19</a><div class=""><div class=""><br class=""></div><div class="">Essentially, NSJSONSerialization would (does?) crash if you ask it to encode an array/dictionary of Anys containing an optional value containing a bridged Foundation type. The below snippet was the easiest demonstration of the runtime exception.</div><div class=""><br class=""></div><div class=""><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(16,16,16);font-size:11.199999809265137px;white-space:pre-wrap;max-width:800px" class="">    let name: String? = "Spike"
    let dogNames: [Any] = [name]

    do {
        try JSONSerialization.data(withJSO<wbr class="">NObject: dogNames, options: .prettyPrinted)
    } catch {
        print("HI")
    }</pre></div></div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">What version of Swift is the user of your framework using?<br class=""></div><div class="gmail_extra"><br class=""></div><div class="gmail_extra">Dan</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Nov 18, 2016 at 1:37 PM, Jens Alfke via swift-users <span dir="ltr" class="">&lt;<a href="mailto:swift-users@swift.org" target="_blank" class="">swift-users@swift.org</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class="">A developer using the framework I work on&nbsp;<a href="https://forums.couchbase.com/t/exception-caught-in-map-block-of-view-invalid-type-in-json-write--swiftvalue/10808" target="_blank" class="">just reported</a>&nbsp;an exception which is triggered by NSJSONSerialization (see backtrace below.) Basically an NSDictionary gets parsed from JSON data (in Obj-C), passed to a Swift function, which then calls another function (written in Obj-C) that serializes it back to JSON data. That last step is crashing due to some problem with bridging.</div><div class=""><br class=""></div><div class="">The events leading up to this are:</div><div class=""><br class=""></div><div class="">1. The framework (written in Obj-C) parses some JSON data using NSJSONSerialization, resulting in an NSDictionary.</div><div class="">2. The NSDictionary is passed as a parameter to a block; the parameter is typed as `NSDictionary*`.</div><div class="">3. The block is part of the application, which is written in Swift.</div><div class="">4. The block in turn passes that NSDictionary to a function in the framework (through a parameter is typed as `id`)</div><div class="">5. The framework uses NSJSONSerialization to convert that id to data.</div><div class=""><br class=""></div><div class="">Step 5 is triggering an assertion failure in Foundation. Apparently it failed to un-bridge a Swift value in an array back into an NSObject. (From the contents of the dictionary I know that the single-object array in question contains a string.)</div><div class=""><br class=""></div><div class="">Any idea what’s going on here? I’ve never seen this happen before, and this part of our framework has been around for 2 ½ years. People have successfully built Swift apps using the framework. (This app was built with Xcode 8.0; don’t know what the OS is, though.)</div><div class=""><br class=""></div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>Invalid type in&nbsp;JSON write (_SwiftValue)<div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>3 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x0000000111263284 _writeJSONValue + 668</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>4 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x00000001112636d9 ___writeJSONArray_block_invoke + 132</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>5 &nbsp; CoreFoundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x0000000118e1ce2a -[__NSSingleObjectArrayI enumerateObjectsWithOptions:us<wbr class="">ingBlock:] + 58</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>6 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x00000001112633df _writeJSONArray + 330</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>7 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x0000000111263204 _writeJSONValue + 540</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>8 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x0000000111262f94 -[_NSJSONWriter dataWithRootObject:options:err<wbr class="">or:] + 124</div><div class=""><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>9 &nbsp; Foundation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0x0000000111262e74 +[NSJSONSerialization dataWithJSONObject:options:err<wbr class="">or:] + 333</div><span class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-tab-span" style="white-space:pre-wrap">        </span>...<span class="m_-7546214095940446111gmail-m_-931482524993042869HOEnZb"><font color="#888888" class=""><br class="m_-7546214095940446111gmail-m_-931482524993042869m_-5987654839235104880Apple-interchange-newline"><br class=""></font></span></div><span class="m_-7546214095940446111gmail-m_-931482524993042869HOEnZb"><font color="#888888" class=""><div class="">—Jens</div></font></span></div><br class="">______________________________<wbr class="">_________________<br class="">
swift-users mailing list<br class="">
<a href="mailto:swift-users@swift.org" target="_blank" class="">swift-users@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailma<wbr class="">n/listinfo/swift-users</a><br class="">
<br class=""></blockquote></div><br class=""></div></div>
_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></div></blockquote></div><br class=""></div></body></html>