LoginSignup
0
0

More than 1 year has passed since last update.

iOS15でAirPrintの印刷処理でエラーが発生するようになったので対策する

Last updated at Posted at 2021-10-22

iOS15に上げると印刷を行う処理でアプリがクラッシュするようになった

参考) https://developer.apple.com/forums/thread/689876

UIPrintInteractionControllerを使うことで、iOSのアプリからプリンターに印刷指示を出すことができるようになりますが、iOS15にアップデートするとアプリがクラッシュするようになりました。
UIPrintInteractionControllerでは、
①予め設定しておいたプリンタの情報を渡すことで自動で印刷する方法
②iOS標準のプリンタ設定画面を挟んで、そこで印刷指示する方法
があります。

今回はこの①の場合にクラッシュすることを確認しています。
そこで不本意ではありますが、①→②の方法に変更して一旦凌ぐことにしました。

実際のコード修正(swift)

①予め設定しておいたプリンタの情報を渡すことで自動で印刷する方法

UIPrintInteractionController
func print(to printer: UIPrinter, completionHandler completion: 
UIPrintInteractionController.CompletionHandler? = nil) -> Bool


②iOS標準のプリンタ設定画面を挟んで、そこで印刷指示する方法

UIPrintInteractionController
func present(animated: Bool, completionHandler completion: 
UIPrintInteractionController.CompletionHandler? = nil) -> Bool

実際のコード修正(objective-c)

①予め設定しておいたプリンタの情報を渡すことで自動で印刷する方法

UIPrintInteractionController
- (BOOL)printToPrinter:(UIPrinter *)printer completionHandler:(nullable UIPrintInteractionCompletionHandler)completion;


②iOS標準のプリンタ設定画面を挟んで、そこで印刷指示する方法

UIPrintInteractionController
// iPhoneの場合
- (BOOL)presentAnimated:(BOOL)animated completionHandler:(nullable UIPrintInteractionCompletionHandler)completion;  
// iPadの場合
- (BOOL)presentFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated completionHandler:(nullable UIPrintInteractionCompletionHandler)completion; 

まとめ

そもそも根本解決できていおらず、緊急措置的な意味合いが強い対応をしました。
修正方法でもっといい方法あるよという情報をお持ちの方はコメントお待ちしています!

2021/11/10 追記

参考) https://developer.apple.com/forums/thread/689876
に対応策の投稿がありました。

UIPrintInteractionController
printer.contactPrinter { (available) -> Void in
    if (available) {
        printController.print(to: printer, completionHandler: printCompletionHandler)
    }
}

のように一回 printer.contactPrinter を挟んでコネクションのチェックをしてOKだったら呼び出す形にするとクラッシュせずに動くようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0