简体   繁体   中英

iOS app crash when opened from today extension

Possible duplicate of Crash when open containing app from today extension .

I'm trying to open the containing app from a today extension widget using a custom URL scheme. The code i'm using inside the extension is:

let urlStr = String(format: "myapp://?device_id=%@", deviceId!)
let url = NSURL(string: urlStr)
self.extensionContext!.openURL(url!, completionHandler: nil)

However, the containing app crashes when opened:

Thread : Crashed: com.apple.main-thread
0  CoreFoundation                 0x0000000103e572dc CFStringCreateCopy + 28
1  libswiftFoundation.dylib       0x0000000105f02a44 _TF10Foundation24_convertNSStringToStringFCSo8NSStringSS + 148
2  MyApp                          0x00000001017a9055 @objc MyApp.CLAppDelegate.application (MyApp.CLAppDelegate)(ObjectiveC.UIApplication, openURL : ObjectiveC.NSURL, sourceApplication : Swift.String, annotation : Swift.Optional<Swift.AnyObject>) -> Swift.Bool (CLAppDelegate.swift)
3  UIKit                          0x0000000104898685 -[UIApplication _applicationOpenURL:payload:] + 185
4  UIKit                          0x00000001048a0816 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:] + 2380
5  UIKit                          0x00000001048a42e8 __88-[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:]_block_invoke + 196
6  UIKit                          0x00000001048a4215 -[UIApplication _handleApplicationLifecycleEventWithScene:transitionContext:completion:] + 349
7  UIKit                          0x000000010488f31a -[UIApplication scene:didUpdateWithDiff:transitionContext:completion:] + 486
8  FrontBoardServices             0x000000010903a2a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
9  CoreFoundation                 0x0000000103eb553c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
10 CoreFoundation                 0x0000000103eab285 __CFRunLoopDoBlocks + 341
11 CoreFoundation                 0x0000000103eaaa43 __CFRunLoopRun + 851
12 CoreFoundation                 0x0000000103eaa486 CFRunLoopRunSpecific + 470
13 GraphicsServices               0x0000000106e6e9f0 GSEventRunModal + 161
14 UIKit                          0x0000000104891420 UIApplicationMain + 1282
15 MyApp                       0x00000001017ac57e top_level_code (CLAppDelegate.swift:16)
16 MyApp                       0x00000001017ac5ba main (CLAppDelegate.swift)
17 libdyld.dylib                  0x0000000106155145 start + 1

The same custom URL scheme is working when opened from anywhere else.

Using Xcode 6.1.1, Deployment target 8.1.

Managed to solve this myself and thought I'll post the solution.

Turns out, the UIApplicationDelegate declaration as auto-completed by one of Xcode's previous versions was incorrect:

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

should really be:

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

( sourceApplication needs to be String? and NOT String! )

Hope this helps someone.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM