简体   繁体   English

打开包含今日扩展的应用程序时崩溃

[英]Crash when open containing app from today extension

I created today extension and add a button to open containing app. 我今天创建了扩展程序,并添加了一个按钮以打开包含应用程序。 Inside extension view controller: 内部扩展视图控制器:

@IBAction func pressed() {
    extensionContext?.openURL(NSURL(string:"myApp://")!, completionHandler: nil)
}

So, I also add URL Scheme to containing app plist: 因此,我还将URL方案添加到包含应用程序的plist中:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myApp</string>
        </array>
    </dict>
</array>

Widget works fine, but when I try to press widget my app crashes inside containing app AppDelegate.swift. 窗口小部件工作正常,但是当我尝试按下窗口小部件时,我的应用程序在包含应用程序AppDelegate.swift的内部崩溃。 Breakpoint inside application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) can't be reached. 无法到达application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?)内部的断点application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) Backtrace: 回溯:

* thread #1: tid = 0x27fb0, 0x00000001861bd698 CoreFoundation`CFStringCreateCopy + 36, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x00000001861bd698 CoreFoundation`CFStringCreateCopy + 36
    frame #1: 0x00000001019f7954 libswiftFoundation.dylib`Foundation._convertNSStringToString (ObjectiveC.NSString) -> Swift.String + 152
    frame #2: 0x000000010030172c myApp`@objc myApp.AppDelegate.application (myApp.AppDelegate)(ObjectiveC.UIApplication, openURL : ObjectiveC.NSURL, sourceApplication : Swift.String, annotation : Swift.Optional<Swift.AnyObject>) -> Swift.Bool + 104 at AppDelegate.swift:0
    frame #3: 0x000000018ad172f0 UIKit`-[UIApplication _applicationOpenURL:payload:] + 216
    frame #4: 0x000000018ad1b4c8 UIKit`-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:] + 2420
    frame #5: 0x000000018ad1f810 UIKit`-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:] + 2220
    frame #6: 0x000000018ad1ecec UIKit`__88-[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:]_block_invoke + 140
    frame #7: 0x000000018ad1ec44 UIKit`-[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:] + 380
    frame #8: 0x000000018ad12578 UIKit`-[UIApplication scene:didUpdateWithDiff:transitionContext:completion:] + 512
    frame #9: 0x000000018e54562c FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke + 28
    frame #10: 0x000000018628ea28 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20
    frame #11: 0x000000018628db30 CoreFoundation`__CFRunLoopDoBlocks + 312
    frame #12: 0x000000018628c154 CoreFoundation`__CFRunLoopRun + 1756
    frame #13: 0x00000001861b90a4 CoreFoundation`CFRunLoopRunSpecific + 396
    frame #14: 0x000000018f35b5a4 GraphicsServices`GSEventRunModal + 168
    frame #15: 0x000000018aaee3c0 UIKit`UIApplicationMain + 1488
  * frame #16: 0x0000000100307df4 myApp`top_level_code + 76 at AppDelegate.swift:15
    frame #17: 0x0000000100307f0c myApp`main + 48 at AppDelegate.swift:0
    frame #18: 0x000000019709aa08 libdyld.dylib`start + 4

If I open myApp:// in Safari, app open correctly w/o crash. 如果我在Safari中打开myApp:// ,则应用不会崩溃也可以正确打开。

I ran into a very similar issue. 我遇到了一个非常相似的问题。 I'd implemented application:openURL:sourceApplication:annotation: with this Swift code: 我使用以下Swift代码实现了application:openURL:sourceApplication:annotation: ::

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool {

But it turns out that sourceApplication should actually be optional: 但是事实证明sourceApplication实际上应该是可选的:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {

No idea how I got that wrong (I'm assuming Xcode autocomplete, but it seems to be doing the right thing now), but changing that fixed it for me. 我不知道我怎么弄错了(我假设Xcode是自动完成的,但是现在看来好像做对了),但是为我修改了它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从今天扩展名打开时,iOS应用程序崩溃 - iOS app crash when opened from today extension 从Swift 4中的Today扩展打开时,包含应用程序崩溃 - Containing App crashes when opened from Today extension in swift 4 今日应用扩展小部件点击以打开包含应用 - Today App Extension Widget Tap To Open Containing App 当主应用程序未打开时,Swift 如何从今天的扩展中打开特定的视图控制器 - Swift how to open specific viewcontroller from today extension when main app is not open 点击扩展程序(今天的扩展程序)后是否可以打开特定的viewcontroller(包含应用程序)? - is it possible to open specific viewcontroller(containing app) after tap on extension(today extension)? 从我的应用程序中的“今日扩展”(窗口小部件)打开Safari - Open Safari from my Today Extension (widget) within my app 无法从今天的分机上打开主机应用程序 - Can't open host app from today extension 来自Today Extension的打开网址 - Open url from Today Extension 共享扩展以打开包含应用程序 - Share Extension to open containing app 调试/运行iOS8 App Today Extension时,Xcode将多个包含应用程序安装到设备上 - Xcode installs multiple containing apps onto device when debugging/running iOS8 App Today Extension
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM