iOS11でのクリップボードに文字列を渡す方法 - UIPasteboard

概要

これまでだと、以下の様にする事でクリップボードに文字列を渡すことが出来ました。

let pasteboard: UIPasteboard = UIPasteboard.general
pasteboard.setValue("渡したい文字列", forPasteboardType: "public.text")

ただ、このやり方はiOS11からは出来なくなります。
実際にこのやり方で実装されたアプリでコピー&ペーストを行おうと、例えばSafariの検索窓とかに貼り付けても何も起きません。

原因と解決策

元々Appleのドキュメントにも、setVaueはObjectをクリップボードに渡すと記載されているので、あるべき姿となった形でしょうか。
(stringオブジェクトを貼り付けたので、何も起きていない。)
試しに、冒頭の

let pasteboard: UIPasteboard = UIPasteboard.general
pasteboard.setValue("渡したい文字列", forPasteboardType: "public.text")

を、標準のメモ帳に貼り付けると、以下のスクショのようになります。

f:id:project-unknown:20171013001743p:plain

では、解決策ですが、以下のように処理を変更するだけです。

let pasteboard: UIPasteboard = UIPasteboard.general
pasteboard.string = "渡したい文字列"

見ての通り、UIPasteboardのstringに値を渡すだけで、これまで同等の機能を実現できます。

さいごに

最後に宣伝となってしまいますが、提供しているKeyHolderでも上記で記載した機能を利用しております。
もし興味があればダウンロード宜しくお願いします

www.project-unknown.jp