kUTType〜 was deprecated in iOS 15.0. Use UTTypeImage instead. の対応
こんにちは。
久々の投稿になります
業務でちょっと調べて日本語記事があまり見当たらなかったので書いておこうと思います。誰かの役に立てば幸いです。
ざっくり
iOS 15.0から、kUTTypeが廃止され、UTTypeが代わりに使用されるようになりました。
現在MobileCoreServices
を使ってkUTTypeImageとかkUTTypeMovieとかを使っているところはwarningが出ると思います。
その対応をした時にwarning通りにするとErrorになったのでその時の対応を書きます。
説明しないこと
Uniform Type Identifiers
に関しては説明しません。
旧来のMobileCoreServices
は何をやっているのかとかは説明しません。
どんなwarning?
以下のwarningが出ます。
で、単純に変更してもErrorになります。そんな簡単にはいかないですねw
そのほかにも
UTTypeCreatePreferredIdentifierForTag
の実装や、UTTypeCopyPreferredTagWithClass
などでも deprecatedでwarningになります。
対応方法
UniformTypeIdentifiers
の利用が推奨になったのでそれを使っていきます。
以下UniformTypeIdentifiers
の説明はこちらに載っていましたので引用します。
実装は以下の感じです。
import UniformTypeIdentifiers
...
myImagePickerController.mediaTypes = [ UTType.image.identifier ]
上記のような感じで実装できるようになりました。
UTTypeCreatePreferredIdentifierForTag
などは
extension URL {
func mimeType() -> String {
let pathExtension = self.pathExtension
if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() {
if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
return mimetype as String
}
}
return "application/octet-stream"
}
...
上記の実装が
extension URL {
func mimeType() -> String {
let pathExtension = self.pathExtension
if let type = UTType(filenameExtension: pathExtension) {
if let mimetype = type.preferredMIMEType {
return mimetype as String
}
}
return "application/octet-stream"
}
...
このように簡潔に書けるようになりました。
より簡潔にかけるので素晴らしいですね!
まとめ
こういった細かな変更などはちゃんとキャッチしてかなければならないねと、改めて学んだ内容でした。
具体的な内容は公式を読むのが一番なのでこれはメモ要素を含めたまとめ記事とさせていただきます。
同じような対応で力になれたら幸いです。
ではまた!
参考