2

今日の拡張機能を含むアプリを開いたときにクラッシュする可能性があります。

カスタム URL スキームを使用して、today 拡張ウィジェットから含まれているアプリを開こうとしています。拡張機能内で使用しているコードは次のとおりです。

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

ただし、含まれているアプリを開くとクラッシュします。

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

他の場所から開いた場合、同じカスタム URL スキームが機能します。

Xcode 6.1.1、デプロイ ターゲット 8.1 を使用します。

4

1 に答える 1

4

これを自分で解決することができたので、解決策を投稿すると思いました。

結局のところ、Xcode の以前のバージョンのいずれかによってオートコンプリートされた UIApplicationDelegate 宣言は正しくありませんでした。

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

本当にあるべきです:

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

(sourceApplicationである必要がありString?、 NOT String!)

これが誰かに役立つことを願っています。

于 2015-01-14T11:46:42.943 に答える