iOSで出力したファイルをAirDropでMacに送信する
iOSアプリで作成、保存したファイルをMac側で使うのにずっとiTunes経由で取得してた。Application supports iTunes file sharingをYESにしとく方法ね。でもこれやっぱり面倒。そこでAirDrop使えばいいんじゃね?と思ってやってみた。
UIActivityViewController Tutorial: Sharing Data
↑Info.plistの設定はこのあたりを参考に。ただ面倒なのでアイコンとかは使ってない(俺のはリリース目的じゃないし)。
public.mime-typeもセットしてない。
拡張子はなんでもいい。.hogeでも.fooでも。
送信するためのiOS側のUIActivityViewControllerあたりのコードがこんな感じ。
(2)saveStringもNSStringオブジェクトで中身はたんにxmlファイル。これをNSDataオブジェクトに変えて保存する。
(3)ここで指定するactivityItemsはNSURLオブジェクト。当初urlではなくdataもしくはurl,dataを記述しててうまくいかなかった。Info.plistのUTIの設定でConforms to UTIsにpublic.dataってしてるからNSDataオブジェクトを送信する必要があるのかと思ってた。
ともかく、これでめでたく送信することができた。MacのFinderでダウンロードフォルダーに入ってる。長かったなあ、、、
おまけ

↑UIActivityViewController でCancelなり処理後にDoneしたらどうこうしたい時の記述はこんな感じで。
*versions
macOS Sierra 10.12.6
iOS 11.1.1
Xcode 9.1
UIActivityViewController Tutorial: Sharing Data
↑Info.plistの設定はこのあたりを参考に。ただ面倒なのでアイコンとかは使ってない(俺のはリリース目的じゃないし)。
public.mime-typeもセットしてない。
拡張子はなんでもいい。.hogeでも.fooでも。
送信するためのiOS側のUIActivityViewControllerあたりのコードがこんな感じ。
{ //(1) NSURL *url = [NSURL fileURLWithPath:fileName]; //(2) NSError *error = nil; NSData *data = [saveString dataUsingEncoding:NSUTF8StringEncoding]; BOOL succeed = [data writeToURL:url options:NSDataWritingAtomic error:&error]; //(3) if (succeed) { UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:@[]]; [self presentViewController:activityViewController animated:YES completion:nil]; } }(1)ここでfileNameはNSStringオブジェクト、ファイルの保存先で拡張子まで含む。
(2)saveStringもNSStringオブジェクトで中身はたんにxmlファイル。これをNSDataオブジェクトに変えて保存する。
(3)ここで指定するactivityItemsはNSURLオブジェクト。当初urlではなくdataもしくはurl,dataを記述しててうまくいかなかった。Info.plistのUTIの設定でConforms to UTIsにpublic.dataってしてるからNSDataオブジェクトを送信する必要があるのかと思ってた。
ともかく、これでめでたく送信することができた。MacのFinderでダウンロードフォルダーに入ってる。長かったなあ、、、
おまけ

↑UIActivityViewController でCancelなり処理後にDoneしたらどうこうしたい時の記述はこんな感じで。
{ UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[url] applicationActivities:@[]]; [activityViewController setCompletionWithItemsHandler: ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { // 処理 }]; }
*versions
macOS Sierra 10.12.6
iOS 11.1.1
Xcode 9.1