2016-10-14 13 views
0

iosフレームワーク(cocoapodを使用してインストールできます)を開発しています。このフレームワークのメソッドが呼び出されると、サファリのURLが開きます。他のアプリがユニバーサルリンクを使用してそのURLを処理できる場合、そのアプリを起動します。iosフレームワークからSafariでアプリを起動するかリンクを開く

私は、IOSに(ターゲットと9.3シミュレータを呼び出すようにしようとしていた展開IOS 8.0コードの上

[[UIApplication sharedApplication] openURL:url]; 

は、任意のiOSアプリで完璧に動作します。しかし、私は私の枠組みの中で同じコードを置いたときに、別のアプリに含まれています、それは例外とアプリがクラッシュを与えます。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString scheme]: unrecognized selector sent to instance 0x7fc070717e00' 

物事が正しい方法でしょうか?フレームワーク内で異なる動作をするようにしてください。この例では、私は定期的なHTTPSリンクを開くしようとしていた。

したがって NSString

[[UIApplication sharedApplication] openURL:url]; 

が実際にNSURLなかった引数で呼ばれていたが、:210の

おかげ

+0

ターゲットプラットフォームと展開ターゲットは何ですか?この2番目の方法は、iOS 10以降で使用できます。 – Eiko

+0

ターゲットデプロイメントはios 8.0です。シミュレータのiOS 9.3で実行していました。私は最初に最初に試しました。どちらもうまくいきませんでした。 – hridayesh

+0

その後、最初の方法を使用して正確な使用法と正確なエラーメッセージを表示してください。 – Eiko

答えて

1

これは便利かもかもしれませんが、ここには、問題を引き起こしていると思われるものですNSInvalidArgumentExceptionがこのプロセスでスローされました。間違ったタイプの記述にヒントがあります。

コンパイラはここで少なくとも警告を発行する必要があります。

編集する前に、別の方法を述べた。

[[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) { 
    NSLog(@"opened url %d", success); 
}]; 

が、これが失敗する理由は異なっていた:メソッドが故にNSInvalidArgumentExceptionがIOSを実行するテスト環境でスローされたiOSの10、以降のみ利用可能であること9.3。

+0

それはどのスレッドでも呼び出すことができるか、それともメインスレッドでのみ呼び出されるべきですか? – hridayesh

+0

わかりませんが、回答が見つかりませんでした。概念的には、とにかくアプリケーションのライフサイクル(メインスレッドで発生するはずです)とおそらく相互作用するため、メインスレッドでこれらの呼び出しをスケジュールすると思います。しかしここには確かな証拠はない。 – Eiko

+0

洞察に感謝します!答えを見つけようとする – hridayesh

関連する問題