ShareExtension で処理をして後にアプリを起動していたのですが、Xcode をバージョンアップしたらエラーになってしまいました。
APPLICATION_EXTENSION_API_ONLY で怒られたので、その対処法(という名の応急処置)を記載します。
他にいい方法あるんじゃないかと思ってますので、知ってたら教えてください!
開発環境(前提条件)
・Xcode12.5(21年05月02日に再確認済み)
・Swift5
・ShareExtension の APPLICATION_EXTENSION_API_ONLY を NO に設定
実装していた方法
Xcode12.5 にアップデートをしてビルドしたら、以下のようなエラーが発生しました。
(執筆時はベータ版でしたが、改めてリリース版で確認しました)
APPLICATION_EXTENSION_API_ONLY
build setting set to YES.APPLICATION_EXTENSION_API_ONLY を YES にしろって言われてます。
ShareExtension の画面を閉じてからアプリに戻りたかったので、APPLICATION_EXTENSION_API_ONLY は NO に設定して、以下のようにコードを記載していました。
1 2 3 |
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: { _ in UIApplication.shared.open(URL.scheme, completionHandler: nil) }) |
これがエラーになったわけです。
とりあえず YES にしないといけないわけですが、それやっちゃうと open(_:options:completionHandler:) が使えなくなるんですよ。
開きたいアプリ側にも処理書きまくってたので、修正すんのめんどくせぇなと思ったら、別の方法がありました。
解決方法
以下のようにセレクタ使う方法が stackoverflow にありました。
1 2 3 4 5 6 7 8 |
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: { _ in let selector = sel_registerName("openURL:") var responder = self as UIResponder? while let r = responder, !r.responds(to: selector) { responder = r.next } _ = responder?.perform(selector, with: URL.scheme) }) |
セレクタ名でわかると思いますが、iOS10 で非推奨になった openURL を使っています。
非推奨になってからだいぶ経っているので、近々廃止になるんじゃないかと思ってます (´·ω·)
open(_:options:completionHandler:) 使いたいけど、セレクタ使えんし...何かいい方法あるか考えたのですが、ちっとも浮かびませんでした!
ので、こんな方法あるよって方いたら教えてください。
さいごに
アプリ間の疎結合ハンパなさすぎてつらい (´×ω×)
APPLICATION_EXTENSION_API_ONLY を NO にしたまま処理できるのかな…一応調べたのですが分からなかったので、情報あれば教えてくださいませ。
コメント