Enviar búsqueda
Cargar
iOS8勉強会@Yahoo! JAPAN "Document Provider"
•
12 recomendaciones
•
25,684 vistas
智也 大西
Seguir
iOS8勉強会で話した「Document Provider」についての資料です。話せなかった部分は追加の資料で補っています。
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 52
Descargar ahora
Descargar para leer sin conexión
Recomendados
Angular の紹介
Angular の紹介
Neo Xrea
Microsoft Edgeでサポートされる新しい API について
Microsoft Edgeでサポートされる新しい API について
Osamu Monoe
Microsoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツール
Yoshihisa Ozaki
Windows 10 の あたらしい Web ブラウザー について
Windows 10 の あたらしい Web ブラウザー について
Osamu Monoe
Cocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイ
Masayuki Nii
Internet Explorer 10 概要と変更点
Internet Explorer 10 概要と変更点
Microsoft
Microsoft edge deep dive
Microsoft edge deep dive
Osamu Monoe
Microsoft によるオープンなweb デバッグ環境 comm tech festival-
Microsoft によるオープンなweb デバッグ環境 comm tech festival-
Yoshihisa Ozaki
Recomendados
Angular の紹介
Angular の紹介
Neo Xrea
Microsoft Edgeでサポートされる新しい API について
Microsoft Edgeでサポートされる新しい API について
Osamu Monoe
Microsoft Edge F12 開発者ツール
Microsoft Edge F12 開発者ツール
Yoshihisa Ozaki
Windows 10 の あたらしい Web ブラウザー について
Windows 10 の あたらしい Web ブラウザー について
Osamu Monoe
Cocoa勉強会#50-ストーリーボードとセグウェイ
Cocoa勉強会#50-ストーリーボードとセグウェイ
Masayuki Nii
Internet Explorer 10 概要と変更点
Internet Explorer 10 概要と変更点
Microsoft
Microsoft edge deep dive
Microsoft edge deep dive
Osamu Monoe
Microsoft によるオープンなweb デバッグ環境 comm tech festival-
Microsoft によるオープンなweb デバッグ環境 comm tech festival-
Yoshihisa Ozaki
Xcode 6の新機能
Xcode 6の新機能
Shingo Sato
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
Yuki Tanabe
大人のHomekit
大人のHomekit
Ken Haneda
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
大介 束田
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
Yahoo!デベロッパーネットワーク
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
yohei sugigami
Ios8yahoo swift-json
Ios8yahoo swift-json
dankogai
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
niwatako
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
ikikko
20080524
20080524
小野 修司
Firefoxosハンズオン
Firefoxosハンズオン
Kazutoshi Kashimoto
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Toshiaki Maki
Clrh 20121215
Clrh 20121215
Tomoyuki Obi
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
HTML5最新動向
HTML5最新動向
Shumpei Shiraishi
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
Shinichi Hirauchi
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
Hori Tasuku
Djangoのチュートリアル
Djangoのチュートリアル
sakihohoribe
Más contenido relacionado
Destacado
Xcode 6の新機能
Xcode 6の新機能
Shingo Sato
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
Yuki Tanabe
大人のHomekit
大人のHomekit
Ken Haneda
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
大介 束田
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
Yahoo!デベロッパーネットワーク
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
yohei sugigami
Ios8yahoo swift-json
Ios8yahoo swift-json
dankogai
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
niwatako
Destacado
(11)
Xcode 6の新機能
Xcode 6の新機能
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
大人のHomekit
大人のHomekit
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
Ios8yahoo swift-json
Ios8yahoo swift-json
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
Similar a iOS8勉強会@Yahoo! JAPAN "Document Provider"
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
ikikko
20080524
20080524
小野 修司
Firefoxosハンズオン
Firefoxosハンズオン
Kazutoshi Kashimoto
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Toshiaki Maki
Clrh 20121215
Clrh 20121215
Tomoyuki Obi
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
HTML5最新動向
HTML5最新動向
Shumpei Shiraishi
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
Shinichi Hirauchi
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
Hori Tasuku
Djangoのチュートリアル
Djangoのチュートリアル
sakihohoribe
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
Wataru Kimura
Android勉強会 1
Android勉強会 1
shotaueda3
140917運用管理勉強会job scheduler
140917運用管理勉強会job scheduler
OSSラボ株式会社
SubversionとSugarsync
SubversionとSugarsync
Hidenori Goto
関西FirefoxOS勉強会6thGiG「アプリ間通信」
関西FirefoxOS勉強会6thGiG「アプリ間通信」
Noritada Shimizu
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
NTT DATA Technology & Innovation
HTML5&API総まくり
HTML5&API総まくり
Shumpei Shiraishi
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
Clrh 110716 wcfwf
Clrh 110716 wcfwf
Tomoyuki Obi
Similar a iOS8勉強会@Yahoo! JAPAN "Document Provider"
(20)
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
20080524
20080524
Firefoxosハンズオン
Firefoxosハンズオン
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
Clrh 20121215
Clrh 20121215
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
HTML5最新動向
HTML5最新動向
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
Xamarin.formsで作成する翻訳機能付きtwitterクライアント
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
Djangoのチュートリアル
Djangoのチュートリアル
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
Android勉強会 1
Android勉強会 1
140917運用管理勉強会job scheduler
140917運用管理勉強会job scheduler
SubversionとSugarsync
SubversionとSugarsync
関西FirefoxOS勉強会6thGiG「アプリ間通信」
関西FirefoxOS勉強会6thGiG「アプリ間通信」
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
HTML5&API総まくり
HTML5&API総まくり
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Clrh 110716 wcfwf
Clrh 110716 wcfwf
iOS8勉強会@Yahoo! JAPAN "Document Provider"
1.
Document Provider ヤフー株式会社
大西智也 2014/10/18
2.
自己紹介 • 大西智也
• 新卒2年目 • iOS歴4年 • iOSアプリ中心に業務
3.
アジェンダ • 何ができるのか?
• Document Providerの構成 • 実装方法 • まとめ
4.
何ができるのか?
5.
DocumentProviderを実装すると 自分のアプリに対して他のアプリが ファイルの操作をすることができる
6.
DocumentProviderを実装すると 自分のアプリに対して他のアプリが ファイルの操作をすることができる
Import Export Open Move
7.
HostApp Document Provider
8.
Import HostApp Document
Provider ドキュメントを渡す
9.
Export HostApp Document
Provider ドキュメントをもらう
10.
• Open •
ドキュメントを直接編集させる • Move • ドキュメントを移動させる
11.
4つの操作モード Import Export
Open Move • 最低1つ、最大4つサポートできる • それぞれについてUIとロジックを実装しなければな らない
12.
Document Providerの構成
13.
Document Providerの構成 •
DocumentPickerViewController Extension • UI • Import, Exportのサポート • FileProvider Extension • Open, Moveのサポート
14.
Document Providerの構成 •
DocumentPickerViewController Extension • UI • Import, Exportのサポート • FileProvider Extension • Open, Moveのサポート 別々のターゲットとして追加されるので注意
15.
実装方法
16.
Import Export Open
Move
17.
エクステンションを追加
18.
エクステンションを追加
19.
エクステンションを追加 Open, Moveをサポートするならチェックを入れる
20.
Document Providerの構成 •
DocumentPickerViewController Extension • UI • Import, Exportのサポート • FileProvider Extension • Open, Moveのサポート
21.
各種ファイルが追加される • DocumentPickerViewController
• MainInterface.storyboard • info.plist
22.
info.plist <key>NSExtension</key> <dict>
<key>NSExtensionAttributes</key> <dict> <key>UIDocumentPickerModes</key> <array> <string>UIDocumentPickerModeImport</string> <string>UIDocumentPickerModeExportToService</string> </array> <key>UIDocumentPickerSupportedFileTypes</key> <array> <string>public.content</string> </array> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.fileprovider-ui</string> </dict> サポートするモード
23.
info.plist <key>NSExtension</key> <dict>
<key>NSExtensionAttributes</key> <dict> <key>UIDocumentPickerModes</key> <array> <string>UIDocumentPickerModeImport</string> <string>UIDocumentPickerModeExportToService</string> </array> <key>UIDocumentPickerSupportedFileTypes</key> <array> <string>public.content</string> </array> </dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.fileprovider-ui</string> </dict> サポートするUTI
24.
MainInterface.storyboard UIの一部はシステムが 提供する
25.
DocumentPickerViewController class DocumentPickerViewController:
UIDocumentPickerExtensionViewController • UIを管理する • Import, Exportのロジックを実装する • Document Pickerと略される
26.
Importで主に利用するメソッド func prepareForPresentationInMode(mode:
UIDocumentPickerMode) • Document Providerが表示される直前に呼ばれる • 操作モードによってUIを変更する
27.
Importで主に利用するメソッド func dismissGrantingAccessToURL(url:
NSURL!) • ドキュメントのURLをHostAppに返す • UIを閉じる
28.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
29.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
30.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
31.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
32.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
33.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
34.
class DocumentPickerViewController: UIDocumentPickerExtensionViewController
{ override func prepareForPresentationInMode(mode: UIDocumentPickerMode) { super.prepareForPresentationInMode(mode) switch mode { // Import, ExportのUIに変更 } } /** UIの処理など */ ! // ユーザがドキュメントを選んだとき、例えばCollectionViewのセルをタップした時 func didSelectDocument() { let URL = self.documentStorageURL.URLByAppendingPathComponent("hoge1.png") self.dismissGrantingAccessToURL(URL) } }
35.
Export @NSCopying var
originalURL: NSURL? { get } • HostAppから渡されたドキュメントのURL
36.
FileProvider Extension •
Open, Moveをサポートする • ファイルに対して直接アクセスされるので非常に複 雑になる • コンフリクト • リモートファイル(ダウンロード、変更のアップロード、 通信状況の監視)
37.
まとめ • 他のアプリとのドキュメントのやりとりができるように
なった • Import, Exportは比較的簡単、Open, Moveは複雑 • ストレージ系、写真管理アプリはぜひ
38.
参考資料 • 公式ドキュメント
• https://developer.apple.com/library/ios/ documentation/General/Conceptual/ExtensibilityPG/ FileProvider.html • Dropbox • https://itunes.apple.com/jp/app/dropbox/ id327630330?mt=8
39.
追加資料
40.
Document Providerの表示方法
41.
表示 delegate HostApp
Document Provider
42.
準備 • プロジェクトのiCloudのiCloud
Documentsにチェックを入れる iCloudのDocument Providerがデフォルトで表示されるため
43.
UIDocumentMenuViewController • DocumentPickerを呼び出すために使う
• 操作モードを指定して表示する
44.
let menu =
UIDocumentMenuViewController(documentTypes: self.UTIs, inMode: .Import) ! menu.delegate = self self.showViewController(menu, sender: nil) HostApp側に実装する
45.
Document Providerの一覧が 表示される
46.
47.
// MARK: UIDocumentMenuDelegate
func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { ! documentPicker.delegate = self self.showViewController(documentPicker, sender: nil) ! } ユーザが開きたいDocumentProviderを選んだ時
48.
// MARK: UIDocumentMenuDelegate
func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { ! documentPicker.delegate = self self.showViewController(documentPicker, sender: nil) ! } documentPickerはDocument ProviderのUI部分
49.
さきほどのスライド DocumentPickerViewController class
DocumentPickerViewController: UIDocumentPickerExtensionViewController • UIを管理する • Import, Exportのロジックを実装する • Document Pickerと略される
50.
// MARK: UIDocumentMenuDelegate
func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { ! documentPicker.delegate = self self.showViewController(documentPicker, sender: nil) ! } documentPickerを表示する
51.
52.
DocumentProvider側で以下のメソッドを呼ぶ self.dismissGrantingAccessToURL(URL) //
MARK: UIDocumentPickerDelegate func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) { ! println(url) ! } デリゲートでドキュメントのURLが渡される
Descargar ahora