无法使用 table 视图加载 Today Extension

Unable to load Today Extension with table view

我真的需要一些帮助...

我尝试使用今天的扩展来获取一些内容并使用来自 SOAP 请求的数据刷新单元格。它在模拟器中就像一个魅力,但在实际设备上(iPhone 6 Plus)小部件更新单元格并不久之后切换到 "Unable to Load".

该应用程序在分析器中显示 > 20 MB,我读到的最大大小仅为 10 MB 左右。但是,当我只显示 - 大多数情况下 - 一个 table 视图单元格时,这怎么可能呢?整个 SOAP Framework 有 2.6 MB...这让我抓狂...

而且...日志中不会有一些内存错误而不是 "Feature not available in extensions of type com.apple.widget-extension" 吗?我认为我的崩溃与大小无关,下面的屏幕截图显示了小部件大小为 4 MB 的崩溃。

有没有人有过这种挣扎的经历?

我能提供的:

我的 TodayViewController:

import CoreData
import NotificationCenter

class TodayViewController: UITableViewController, NCWidgetProviding {

    struct CellConstants {
        static let parkingProcess = "ParkingProcessCell"
        static let login = "LoginCell"
        static let noTransactions = "NoTransactionsCell"
    }

    var loadedParkingProcesses: [MCParkingProcess] = []
    var loggedInInternal = false
    var noTransactions = false
    var reload = true
    var fetchingData = false
    var loggedIn: Bool {
        get {
            let defaults = NSUserDefaults(suiteName:     "group.not.relevant.here")
            loggedInInternal = defaults?.stringForKey("username") != nil &&
            defaults?.stringForKey("password") != nil
                ? true : false

            return loggedInInternal
        }
    }

    func resetTimer() {
        print("timer reset")
        reload = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        print("memory warning!")
    }

    func loadData(username: String, password: String) {

        if fetchingData {
            return
        }

        fetchingData = true

        guard reload == true else {
            let _ = NSTimer(timeInterval: 10, target: self, selector:     #selector(TodayViewController.resetTimer), userInfo: nil,     repeats: false)
            return
        }

        reload = false

        let locale = NSLocale.preferredLanguages()[    0].componentsSeparatedByString("-")[0]
        MCSoapClient.sharedInstance().loadRunningParkingProcessesForUsername    (username, password: password, language: locale, completion: {     statusCode, result in

            guard let dict = result as? [String: AnyObject] else {
                // no dict. something's wrong.
                return
            }

            if Int(dict["statuscode"] as! String)! % 100 != 0 {
                // some error from our backend
                return
            }

            if let parkingProcess = dict["parkvorgang"] {
                self.noTransactions = false

                if let pp = parkingProcess as? [AnyObject] {
                    // more than one
                    self.loadedParkingProcesses =     MCParkingProcess.parkingProcessesFromJSON(pp) as! [    MCParkingProcess]
                } else {
                    // only one process
                    self.loadedParkingProcesses = [MCParkingProcess(    fromJSON: parkingProcess as! [String: AnyObject])]
                }
            } else {
                // no transactions
                self.noTransactions = true
            }

            self.fetchingData = false

            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
                self.resetContentSize()
            })

            }, failed: { result, error in

            print("failed with error: \(error)")
            print("result: \(result)")
            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
                self.resetContentSize()
            })

            self.fetchingData = false
        })
        self.resetContentSize()
    }

    override func viewDidLoad() {
        tableView.backgroundColor = UIColor.clearColor()
    }

    override func viewWillAppear(animated: Bool) {
        performFetch()
    }

    override func tableView(tableView: UITableView,
        numberOfRowsInSection section: Int) -> Int {
            return !loggedIn || noTransactions
                ? 1
                : loadedParkingProcesses.count
    }

    func RGBColor(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) ->     UIColor {
        return UIColor(red: (r / 255), green: (g / 255), blue: (b / 255),     alpha: (a))
    }

    func loadDetailsForCell(cell: MCParkingProcessCell, withParkingProcess     parkingProcess: MCParkingProcess) {

        let locale = NSLocale.preferredLanguages()[    0].componentsSeparatedByString("-")[0]
        let defaults = NSUserDefaults(suiteName: "group.not.relevant.here")
        if let username = defaults?.stringForKey("username")
        , password = defaults?.stringForKey("password") {

                // Load current parkingProcess costs
                MCSoapClient.sharedInstance().loadCurrentCostsforParkingProc    essesID(parkingProcess.ID, username: username, password:     password, parkingProcessStartTimeStamp: "", language:     locale, completion: { statusCode, result in

                    guard let dict = result as? [String: AnyObject] else {
                        // no dict. something's wrong.
                        return
                    }

                    if Int(dict["statuscode"] as! String)! % 100 != 0 {
                        // some error from our backend
                        return
                    }

                    var elapsedMinutes = Int(dict["dauer"] as! String)!
                    if parkingProcess.parkingZone.isAboZone {
                        let serverTime = Int(dict["serverzeit"] as! String)
                        let usedParkingTimeInSeconds = Double(serverTime!)     - parkingProcess.startedAt.timeIntervalSince1970
                        elapsedMinutes = Int(usedParkingTimeInSeconds) / 60
                    }

                    // update currentCosts
                    parkingProcess.updateCurrentCostsFromJSON(    dict["parkvorgang"] as? [String: AnyObject])
                    parkingProcess.updateCurrentParkingTime(elapsedMinutes)

                    // set label text
                    let someNumber = parkingProcess.currentCosts
                    let numberFormatter: NSNumberFormatter =     NSNumberFormatter()
                    numberFormatter.numberStyle =     NSNumberFormatterStyle.DecimalStyle
                    numberFormatter.minimumFractionDigits = 2
                    numberFormatter.maximumFractionDigits = 2
                    numberFormatter.decimalSeparator = ","
                    cell.costsLabel.text = "\(    numberFormatter.stringFromNumber(someNumber)!) €"
                    cell.timeLabel.text = String.formatMinutesToCorrectTime(    parkingProcess.currentParkingTime.intValue)

                    }, failed: { result, error in
                    print("failed with error: \(error)")
                    print("result: \(result)")
                })
        }
    }

    func configureRunningParkingProcessCell(cell: MCParkingProcessCell,     withParkingProcess parkingProcess: MCParkingProcess) {
        cell.backgroundView?.backgroundColor = UIColor.clearColor()
        cell.addressLabel.textColor = UIColor.whiteColor()
        cell.parkingZoneIDLabel.text = parkingProcess.parkingZone.number
        cell.addressLabel.text = parkingProcess.parkingZone.parkingZoneID
        cell.costsLabel.text = parkingProcess.parkingZone.costs
        cell.carPlateLabel.text = parkingProcess.usedCarPlate
        cell.maxDurationLabel.text = NSDateFormatter.localizedStringFromDate    (parkingProcess.endedAt, dateStyle:     NSDateFormatterStyle.MediumStyle, timeStyle:     NSDateFormatterStyle.ShortStyle)
        cell.dateLabel.text = NSDateFormatter.localizedStringFromDate(    parkingProcess.startedAt, dateStyle:     NSDateFormatterStyle.MediumStyle, timeStyle:     NSDateFormatterStyle.ShortStyle)

        // starts an async request to get current costs and time
        self.loadDetailsForCell(cell, withParkingProcess: parkingProcess)
    }

    override func tableView(tableView: UITableView,
        cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

            if !loggedInInternal {
                let cell = tableView.dequeueReusableCellWithIdentifier(    CellConstants.login) as! LoginCell
                cell.extensionContext = extensionContext
                return cell
            }

            if noTransactions {
                return tableView.dequeueReusableCellWithIdentifier(    CellConstants.noTransactions)!
            }

            let cell = tableView.dequeueReusableCellWithIdentifier(    CellConstants.parkingProcess, forIndexPath: indexPath) as!     MCParkingProcessCell

            // empty here. will be filled with second request
            cell.timeLabel.text = ""
            cell.costsLabel.text = ""

            cell.accessoryView = MSCellAccessory(type:     MSCellAccessoryType.DISCLOSURE_INDICATOR, color: RGBColor(91,     g: 181, b: 148, a: 1))

            configureRunningParkingProcessCell(cell, withParkingProcess:     self.loadedParkingProcesses[indexPath.row])

            return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath     indexPath: NSIndexPath) -> CGFloat {
        return !loggedInInternal || noTransactions
            ? 50
            : 120
    }

    func resetContentSize() {
         dispatch_async(dispatch_get_main_queue(), {
              self.preferredContentSize = self.tableView.contentSize
         })
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        resetContentSize()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        resetContentSize()
    }

    func performFetch() {

        let defaults = NSUserDefaults(suiteName: "group.not.relevant.here")

        if let username = defaults?.stringForKey("username")
        , password = defaults?.stringForKey("password") {
                loadData(username, password: password)
        } else {
            // not updated in loaddata(), so it is here
            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
                self.resetContentSize()
            })
        }
    }

    func widgetMarginInsetsForProposedMarginInsets
    (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
        return UIEdgeInsetsZero
    }

    func widgetPerformUpdateWithCompletionHandler(
        completionHandler: ((NCUpdateResult) -> Void)) {

            performFetch()

            completionHandler(NCUpdateResult.NoData)
    }

    override func tableView(tableView: UITableView,
        didSelectRowAtIndexPath indexPath: NSIndexPath) {

            if !loggedInInternal || noTransactions {
                return
            }

            let urlAsString = "mcsmartparking://parkingProcess=\(    loadedParkingProcesses[indexPath.row].ID)"
            let url = NSURL(string: urlAsString)
            self.extensionContext!.openURL(url!, completionHandler: nil)
            tableView.deselectRowAtIndexPath(indexPath, animated: false)
    }
}

而我的错误:

2016-04-14 12:56:08.322 TodayExtension_Dev[11656:320804] *** Assertion failure in void _UIApplicationAssertForExtensionType(NSArray *__strong)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.10/UIApplication.m:2521
* thread #1: tid = 0x4e524, 0x00000001801d7f48 libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
  * frame #0: 0x00000001801d7f48 libobjc.A.dylib`objc_exception_throw
    frame #1: 0x0000000180b72d20 CoreFoundation`+[NSException raise:format:arguments:] + 108
    frame #2: 0x00000001814f81c0 Foundation`-[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:] + 88
    frame #3: 0x0000000185f76ff0 UIKit`_UIApplicationAssertForExtensionType + 484
    frame #4: 0x0000000186143818 UIKit`_UIAlertControllerCommonInit + 112
    frame #5: 0x0000000186143aa8 UIKit`-[UIAlertController initWithNibName:bundle:] + 104
    frame #6: 0x0000000186143b24 UIKit`+[UIAlertController alertControllerWithTitle:message:preferredStyle:] + 100
    frame #7: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398 a2489290]_block_invoke + 64
    frame #8: 0x00000001805bd4bc libdispatch.dylib`_dispatch_call_block_and_release + 24
    frame #9: 0x00000001805bd47c libdispatch.dylib`_dispatch_client_callout + 16
    frame #10: 0x00000001805c2b84 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1844
    frame #11: 0x0000000180b28df0 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    frame #12: 0x0000000180b26c58 CoreFoundation`__CFRunLoopRun + 1628
    frame #13: 0x0000000180a50e80 CoreFoundation`CFRunLoopRunSpecific + 384
    frame #14: 0x0000000182338088 GraphicsServices`GSEventRunModal + 180
    frame #15: 0x0000000185d3a0c8 UIKit`UIApplicationMain + 204
    frame #16: 0x0000000180814ce0 libxpc.dylib`_xpc_objc_main + 784
    frame #17: 0x00000001808169dc libxpc.dylib`xpc_main + 200
    frame #18: 0x0000000181633d60 Foundation`-[NSXPCListener resume] + 172
    frame #19: 0x0000000187e72c48 PlugInKit`-[PKService run] + 544
    frame #20: 0x0000000187e728dc PlugInKit`+[PKService main] + 56
    frame #21: 0x0000000187e72c6c PlugInKit`+[PKService _defaultRun:arguments    :] + 20
    frame #22: 0x0000000181446058 libextension.dylib`NSExtensionMain + 64
    frame #23: 0x00000001805ee8b8 libdyld.dylib`start + 4
* thread #1: tid = 0x4e524, 0x00000001801ca7d4 libc++abi.dylib`__cxa_throw, queue = 'com.apple.main-thread', stop reason = breakpoint 1.2
  * frame #0: 0x00000001801ca7d4 libc++abi.dylib`__cxa_throw
    frame #1: 0x00000001801d8094 libobjc.A.dylib`objc_exception_throw + 332
    frame #2: 0x0000000180b72d20 CoreFoundation`+[NSException raise:format:    arguments:] + 108
    frame #3: 0x00000001814f81c0 Foundation`-[NSAssertionHandler     handleFailureInFunction:file:lineNumber:description:] + 88
    frame #4: 0x0000000185f76ff0 UIKit`_UIApplicationAssertForExtensionType +     484
    frame #5: 0x0000000186143818 UIKit`_UIAlertControllerCommonInit + 112
    frame #6: 0x0000000186143aa8 UIKit`-[UIAlertController initWithNibName:    bundle:] + 104
    frame #7: 0x0000000186143b24 UIKit`+[UIAlertController     alertControllerWithTitle:message:preferredStyle:] + 100
    frame #8: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398     a2489290]_block_invoke + 64
    frame #9: 0x00000001805bd4bc libdispatch.    dylib`_dispatch_call_block_and_release + 24
    frame #10: 0x00000001805bd47c libdispatch.dylib`_dispatch_client_callout     + 16
    frame #11: 0x00000001805c2b84 libdispatch.    dylib`_dispatch_main_queue_callback_4CF + 1844
    frame #12: 0x0000000180b28df0 CoreFoundation    `__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
    frame #13: 0x0000000180b26c58 CoreFoundation`__CFRunLoopRun + 1628
    frame #14: 0x0000000180a50e80 CoreFoundation`CFRunLoopRunSpecific + 384
    frame #15: 0x0000000182338088 GraphicsServices`GSEventRunModal + 180
    frame #16: 0x0000000185d3a0c8 UIKit`UIApplicationMain + 204
    frame #17: 0x0000000180814ce0 libxpc.dylib`_xpc_objc_main + 784
    frame #18: 0x00000001808169dc libxpc.dylib`xpc_main + 200
    frame #19: 0x0000000181633d60 Foundation`-[NSXPCListener resume] + 172
    frame #20: 0x0000000187e72c48 PlugInKit`-[PKService run] + 544
    frame #21: 0x0000000187e728dc PlugInKit`+[PKService main] + 56
    frame #22: 0x0000000187e72c6c PlugInKit`+[PKService _defaultRun:arguments    :] + 20
    frame #23: 0x0000000181446058 libextension.dylib`NSExtensionMain + 64
    frame #24: 0x00000001805ee8b8 libdyld.dylib`start + 4
2016-04-14 12:56:08.401 TodayExtension_Dev[11656:320804] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Feature not available in extensions of type com.apple.widget-extension'
*** First throw call stack:
(0x180b72e50 0x1801d7f80 0x180b72d20 0x1814f81c0 0x185f76ff0 0x186143818 0x186143aa8 0x186143b24 0x100133518 0x1805bd4bc 0x1805bd47c 0x1805c2b84 0x180b28df0 0x180b26c58 0x180a50e80 0x182338088 0x185d3a0c8 0x180814ce0 0x1808169dc 0x181633d60 0x187e72c48 0x187e728dc 0x187e72c6c 0x181446058 0x1805ee8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException

以及崩溃的屏幕截图:

还有更多:

dlopen(/System/Library/Frameworks/CoreText.framework/CoreText, 0x00000002)
  dlopen(/System/Library/Frameworks/CoreText.framework/CoreText) ==> 0xffeeddcc00007000
dlsym(0xffeeddcc00007000, CTFontCreateWithGraphicsFont)
  dlsym(0xffeeddcc00007000, CTFontCreateWithGraphicsFont) ==> 0x183a68cf4
dlsym(0xffeeddcc00007000, CTFontGetGlyphsAndAdvancesForCharacterRange)
  dlsym(0xffeeddcc00007000, CTFontGetGlyphsAndAdvancesForCharacterRange) ==> 0x183a79754
dlsym(0xffeeddcc00007000, CTFontCopyAvailableTables)
  dlsym(0xffeeddcc00007000, CTFontCopyAvailableTables) ==> 0x183abe2b8
dlsym(0xffeeddcc00007000, CTFontCopyCharacterSet)
  dlsym(0xffeeddcc00007000, CTFontCopyCharacterSet) ==> 0x183a6c2dc
dlsym(0xffeeddcc00007000, CTFontCopyGraphicsFont)
  dlsym(0xffeeddcc00007000, CTFontCopyGraphicsFont) ==> 0x183a67acc
dlsym(0xffeeddcc00007000, CTFontGetUnitsPerEm)
  dlsym(0xffeeddcc00007000, CTFontGetUnitsPerEm) ==> 0x183a8fe20
dlsym(0xffeeddcc00007000, CTFontGetAscent)
  dlsym(0xffeeddcc00007000, CTFontGetAscent) ==> 0x183a6a380
dlsym(0xffeeddcc00007000, CTFontGetDescent)
  dlsym(0xffeeddcc00007000, CTFontGetDescent) ==> 0x183a6c020
dlsym(0xffeeddcc00007000, CTFontGetLeading)
  dlsym(0xffeeddcc00007000, CTFontGetLeading) ==> 0x183a6c0bc
dlsym(0xffeeddcc00007000, CTFontIsLastResort)
  dlsym(0xffeeddcc00007000, CTFontIsLastResort) ==> 0x183a6c274
dlsym(0xffeeddcc00007000, CTFontGetSymbolicTraits)
  dlsym(0xffeeddcc00007000, CTFontGetSymbolicTraits) ==> 0x183a84a30
dlsym(0xffeeddcc00007000, CTFontGetSize)
  dlsym(0xffeeddcc00007000, CTFontGetSize) ==> 0x183a65118
dlsym(0xffeeddcc00007000, CTFontCopyFamilyName)
  dlsym(0xffeeddcc00007000, CTFontCopyFamilyName) ==> 0x183a6a088
dlsym(0xffeeddcc00007000, CTFontCopyFullName)
  dlsym(0xffeeddcc00007000, CTFontCopyFullName) ==> 0x183a8febc
dlsym(0xffeeddcc00007000, CTFontSwapDefaultSize)
  dlsym(0xffeeddcc00007000, CTFontSwapDefaultSize) ==> 0x183a65114
dlsym(0xffeeddcc00007000, CTFontGetClientObject)
  dlsym(0xffeeddcc00007000, CTFontGetClientObject) ==> 0x183a651a0
dlsym(0xffeeddcc00007000, CTFontSetClientObject)
  dlsym(0xffeeddcc00007000, CTFontSetClientObject) ==> 0x183a698a4
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateForUIType)
  dlsym(0xffeeddcc00007000, CTFontDescriptorCreateForUIType) ==> 0x183a77ac0
dlsym(0xffeeddcc00007000, CTFontDescriptorCreateCopyWithSymbolicTraits)
  dlsym(0xffeeddcc00007000, CTFontDescriptorCreateCopyWithSymbolicTraits) ==> 0x183a828d0
dlsym(0xffeeddcc00007000, CTFontCreateWithFontDescriptorAndOptions)
  dlsym(0xffeeddcc00007000, CTFontCreateWithFontDescriptorAndOptions) ==> 0x183abc2c8
dlsym(0xffeeddcc00007000, CTFontCopyFontDescriptor)
  dlsym(0xffeeddcc00007000, CTFontCopyFontDescriptor) ==> 0x183a616f0
dlsym(0xffeeddcc00007000, CTFontDescriptorIsSystemUIFont)
  dlsym(0xffeeddcc00007000, CTFontDescriptorIsSystemUIFont) ==> 0x183a6a06c
dlsym(0xffeeddcc00007000, CTFontManagerInstalledFontsChanged)
  dlsym(0xffeeddcc00007000, CTFontManagerInstalledFontsChanged) ==> 0x183b35e04
dlsym(0xffeeddcc00007000, CTFontRemoveFromCaches)
  dlsym(0xffeeddcc00007000, CTFontRemoveFromCaches) ==> 0x183abf878
dlopen(/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation, 0x00000002)
  dlopen(/System/Library/PrivateFrameworks/UIFoundation.framework/UIFoundation) ==> 0xffeeddcc00009000
dlsym(0xffeeddcc00009000, UINewFont)
  dlsym(0xffeeddcc00009000, UINewFont) ==> 0x186506a24
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib, 0x00000002)
dyld: loaded: /System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib
dyld_image_path_containing_address(0x1958cc000)
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib, 0x00000010)
  dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib) ==> 0xffeeddcc0002d400
  dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libGSFontCache.dylib) ==> 0xffeeddcc0002d400
dlsym(0xffeeddcc0002d400, GSFontCacheGetDictionary)
  dlsym(0xffeeddcc0002d400, GSFontCacheGetDictionary) ==> 0x1958cd1f0
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
  dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlsym(0xffeeddcc00009100, _UIApplicationUsesAlternateUI)
  dlsym(0xffeeddcc00009100, _UIApplicationUsesAlternateUI) ==> 0x186810224
dlsym(0xffeeddcc00009100, _UIApplicationLinkedOnOrAfter)
  dlsym(0xffeeddcc00009100, _UIApplicationLinkedOnOrAfter) ==> 0x186563cc0
dlopen(/usr/lib/libAccessibility.dylib, 0x00000005)
  dlopen(/usr/lib/libAccessibility.dylib) ==> 0xffeeddcc00008500
dlsym(0xffeeddcc00008500, _AXSEnhanceTextLegibilityEnabled)
  dlsym(0xffeeddcc00008500, _AXSEnhanceTextLegibilityEnabled) ==> 0x184a709d8
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
  dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib, 0x00000005)
  dlopen(/System/Library/PrivateFrameworks/FontServices.framework/libFontParser.dylib) ==> 0xffeeddcc00006d00
dlsym(0xffeeddcc00006d00, FPFontCreateFontsWithPath)
  dlsym(0xffeeddcc00006d00, FPFontCreateFontsWithPath) ==> 0x1838f4b68
dlsym(0xffeeddcc00006d00, FPFontRetain)
  dlsym(0xffeeddcc00006d00, FPFontRetain) ==> 0x1838f7f30
dlsym(0xffeeddcc00006d00, FPFontCopyTable)
  dlsym(0xffeeddcc00006d00, FPFontCopyTable) ==> 0x1838f81e0
dlsym(0xffeeddcc00006d00, FPFontCopyTable)
  dlsym(0xffeeddcc00006d00, FPFontCopyTable) ==> 0x1838f81e0
dlsym(0xffeeddcc00006d00, FPFontCopyNames)
  dlsym(0xffeeddcc00006d00, FPFontCopyNames) ==> 0x1838f88ec
dlsym(0xffeeddcc00006d00, FPFontGetPostScriptName)
  dlsym(0xffeeddcc00006d00, FPFontGetPostScriptName) ==> 0x1838f8bd4
dlsym(0xffeeddcc00006d00, FPFontGetNumberOfGlyphs)...
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly)
  dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly) ==> 0x1838fd100
dlsym(0xffeeddcc00006d00, FPFontGetGlyphIdealAdvanceWidth)
  dlsym(0xffeeddcc00006d00, FPFontGetGlyphIdealAdvanceWidth) ==> 0x1838fd28c
dlsym(0xffeeddcc00006d00, FPFontGetUnitsPerEm)
  dlsym(0xffeeddcc00006d00, FPFontGetUnitsPerEm) ==> 0x1838fa254
dlopen(/System/Library/Frameworks/UIKit.framework/UIKit, 0x00000002)
  dlopen(/System/Library/Frameworks/UIKit.framework/UIKit) ==> 0xffeeddcc00009100
dlsym(0xffeeddcc00009100, UIGraphicsGetCurrentContext)
  dlsym(0xffeeddcc00009100, UIGraphicsGetCurrentContext) ==> 0x1865718e8
dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly)
  dlsym(0xffeeddcc00006d00, FPFontIsBitmapOnly) ==> 0x1838fd100
dlsym(0xffeeddcc00006d00, FPFontCopyGlyphPath)
  dlsym(0xffeeddcc00006d00, FPFontCopyGlyphPath) ==> 0x1838fdbb0
dlopen(/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics, 0x00000009)
  dlopen(/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics) ==> 0xffeeddcc00004000
dlsym(0xffeeddcc00004000, CGPathCreateMutable)
  dlsym(0xffeeddcc00004000, CGPathCreateMutable) ==> 0x1829117fc
dlsym(0xffeeddcc00004000, CGPathRelease)
  dlsym(0xffeeddcc00004000, CGPathRelease) ==> 0x182912294
dlsym(0xffeeddcc00004000, CGPathMoveToPoint)
  dlsym(0xffeeddcc00004000, CGPathMoveToPoint) ==> 0x182912380
dlsym(0xffeeddcc00004000, CGPathAddLineToPoint)
  dlsym(0xffeeddcc00004000, CGPathAddLineToPoint) ==> 0x182912440
dlsym(0xffeeddcc00004000, CGPathAddCurveToPoint)
  dlsym(0xffeeddcc00004000, CGPathAddCurveToPoint) ==> 0x182912630
dlsym(0xffeeddcc00004000, CGPathAddQuadCurveToPoint)
  dlsym(0xffeeddcc00004000, CGPathAddQuadCurveToPoint) ==> 0x18291252c
dlsym(0xffeeddcc00004000, CGPathCloseSubpath)
  dlsym(0xffeeddcc00004000, CGPathCloseSubpath) ==> 0x18291274c
dlsym(0xffeeddcc00004000, CGFontIndexMapAddRange)
  dlsym(0xffeeddcc00004000, CGFontIndexMapAddRange) ==> 0x1829c53a4
dlsym(0xffeeddcc00004000, CGPathCreateByNormalizingGlyphPath)
  dlsym(0xffeeddcc00004000, CGPathCreateByNormalizingGlyphPath) ==> 0x182913c64
dlsym(0xffeeddcc00004000, CGPathCreateCopyByTransformingPath)
  dlsym(0xffeeddcc00004000, CGPathCreateCopyByTransformingPath) ==> 0x182911cc4
dlsym(0xffeeddcc00004000, CGPathRetain)
  dlsym(0xffeeddcc00004000, CGPathRetain) ==> 0x182912268
dlsym(0xffeeddcc00004000, CGPathIsEmpty)
  dlsym(0xffeeddcc00004000, CGPathIsEmpty) ==> 0x18291353c
dlsym(0xffeeddcc00004000, CGPathGetBoundingBox)
  dlsym(0xffeeddcc00004000, CGPathGetBoundingBox) ==> 0x1829139dc
dyld_image_header_containing_address(0x181f15cf4)
_dyld_get_image_slide(0x181ce8000)
_dyld_get_image_slide(0x181ce8000)
2016-06-13 15:22:33.862 TodayExtension_Dev[5335:67225] *** Assertion failure in void _UIApplicationAssertForExtensionType(    NSArray *__strong)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3512.60.12/UIApplication.m:2521
dyld_image_header_containing_address(0x181614e32)
_dyld_get_image_slide(0x1812dc000)
_dyld_get_image_slide(0x1812dc000)
2016-06-13 15:22:33.863 TodayExtension_Dev[5335:67225] *** Terminating app due to uncaught exception     'NSInternalInconsistencyException', reason: 'Feature not available in extensions of type com.apple.widget-extension'
*** First throw call stack:
(0x181406db0 0x180a6bf80 0x181406c80 0x181d8c1c0 0x18680afb0 0x1869d77d8 0x1869d7a68 0x1869d7ae4 0x1000b2f68 0x180e514bc     0x180e5147c 0x180e56b84 0x1813bcd50 0x1813babb8 0x1812e4c50 0x182bcc088 0x1865ce088 0x1810a8ce0 0x1810aa9dc 0x181ec7d60     0x188706c48 0x1887068dc 0x188706c6c 0x181cda058 0x180e828b8)
libc++abi.dylib: terminating with uncaught exception of type NSException

从您的堆栈跟踪来看,您似乎正在尝试显示 UIAlertController:

frame #6: 0x0000000186143b24 UIKit`+[UIAlertController alertControllerWithTitle:message:preferredStyle:] + 100
frame #7: 0x0000000100133518 TodayExtension_Dev`__20+[a5987398 a2489290]_block_invoke + 64

UIAlertController 以模态方式呈现在整个屏幕上,您的小部件无法访问整个屏幕,因此它们不允许出现在 Today Widgets 中。

我认为您需要弄清楚显示警报的原因。也许是您的 SOAP 客户端的副作用?