SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Contents Blocker on
iOS9
@TachibanaKaoru
© TachibanaKaoru 1
自己紹介
Tachibana Kaoru
- iOS Engineer at VOYAGE GROUP
- Twitter: @TachibanaKaoru
- Blog: http://www.toyship.org/
• WWDCは2010,2015に参加
© TachibanaKaoru 2
What is
Contents
Blocker
© TachibanaKaoru 3
What is Contents Blocker
• iOSやMacでSafariに表示する項目を、自動的に制限する機能
• Macでは、Safari Pluginとして提供される
• iOSでは、Today WidgetやShare ExtensionのようにApp
Extensionとして提供される
© TachibanaKaoru 4
What is Contents Blocker
• ブロックする対象
• cssで指定された特定の要素を非表示にする
• 特定のファイルを読みこまないようにする
• 特定のクッキーを読みこまないようにする
© TachibanaKaoru 5
What is Contents Blocker
• 適用範囲
• Safari以外のブラウザ(Chromeなど)には影響しない
• iOS9から導入された SFSafariViewControllerには適用され
る
• UIWebView/MKWebViewには影響しない
© TachibanaKaoru 6
How to
implement
Contents
Blocker for iOS
© TachibanaKaoru 7
How to implement Contents
Blocker for iOS
iOSではコンテンツブロッカーは、App Extensionとして提供さ
れているため、まずは本体となるアプリを作成します。
Xcodeでアプリを作ったら、メニューから File - New - Target
を選び、iOS-Application Extension の Content Blocker
Extension を選びます。
© TachibanaKaoru 8
How to implement Contents
Blocker for iOS
コンテンツブロッカーのターゲットが追加され、
ActionRequestHandler.swift と blockerList.json のファイル
が生成されます。
ブロックする要素と条件は blockerList.json ファイルで設定し
ます。
© TachibanaKaoru 9
試しにこちらのページの要素
にコンテンツブロッカーを適
用させてみましょう
© TachibanaKaoru 10
hide contents
CSSの特定の要素を非表示にする方法です。
blockerList.json には、複数の表示設定を追加することがで
き、ファイルの先頭から順番に適用されていきます。
action要素 処理内容についての設定
trigger要素 処理の適用箇所の設定
© TachibanaKaoru 11
hide contents
タイトルの下の日付や著者名を消してみましょう。
この部分のclass属性は「byline」なので、
blockerList.jsonにtype:css-display-noneのaction要素を追加
することでこの部分を非表示にすることができます。
action要素のselectorにはdiv.bylineを指定します。
trigger要素でこの条件の適用場所の指定をします。
© TachibanaKaoru 12
blockerList.json
[
{
"action": {
"type": "css-display-none",
"selector" : "div.byline"
},
"trigger": {
"url-filter": ".*"
}
}
]
© TachibanaKaoru 13
hide contents
facebookのlikeボタンも消してみましょう。
この部分のdivのclass属性はwsblfacebooklikeです
blockerList.json にこの要素を追加します
© TachibanaKaoru 14
blockerList.json
[
{
"action": {
"type": "css-display-none",
"selector" : "div.wsbl_facebook_like"
},
"trigger": {
"url-filter": ".*"
}
}
]
© TachibanaKaoru 15
hide contents
この設定でさきほどのページを表示する
と、こうなります。
タイトルの下の日付や著者名の部分と、
facebookのlikeボタンの表示が消えてい
ますね。
© TachibanaKaoru 16
© TachibanaKaoru 17
block contents
次は、コンテンツの読み込みをブロックしてみましょう。
画像のURLは http://www.toyship.org/wp-content/uploads/
2014/03/XcodeScreen-636×310.png です。
blockerList.json に type:block のaction要素を追加すると、こ
の画像の読み込みをブロックすることができます。
© TachibanaKaoru 18
blockerList.json
[
{
"action": {
"type": "block"
},
"trigger": {
"url-filter": "/wp-content/uploads/2014/03/",
"if-domain": ["www.toyship.org"]
}
}
]
© TachibanaKaoru 19
block contents
この設定でさきほどのページを表示する
と、こうなります。
画像の表示が消えていますね。
© TachibanaKaoru 20
© TachibanaKaoru 21
block contents
• ブロックは、画像だけではなく、特定のjsファイルやcssファ
イルのブロックも可能。
• コンテンツブロッカーで、実際にどんなコンテンツがブロッ
クされたのかはアプリで知ることはできない
• もしブロックされた要素がキャッシュされていた場合にも、
読み込みはブロックされます。
© TachibanaKaoru 22
block cookies
同様にtype:block-cookiesのaction要素を追加することでクッ
キーのブロックもできます。
© TachibanaKaoru 23
How to apply
Contents
Blocker for iOS
© TachibanaKaoru 24
How to apply Contents Blocker
for iOS
-ユーザーがSafariで有効にするためには下記の手順が必要です。
-コンテンツブロッカーを含むアプリをダウンロードする
-Safariの設定の「コンテンツブロッカー」の項目から、インス
トールしたアプリのコンテンツブロッカーを選んでonにする
© TachibanaKaoru 25
Webkit
詳しい blockerList.json の設定方法
は、Introduction to WebKit Content
Blockersを参照してください。
Benjamin Poulain(@awfulben)
なお、ソースコードも公開されていま
す。
© TachibanaKaoru 26
Matome
© TachibanaKaoru 27
Matome
コンテンツブロッカーをonにすると、特定のcss要素を非表示に
したり、特定のファイルやクッキーの読み込みをブロックする
ことができる
コンテンツブロッカーはToday WidgetやShare Extensionのよう
に、既存のアプリの一部として提供される
何をブロックしたのかという情報は、コンテンツブロッカーを
含むアプリで取得することはできない
© TachibanaKaoru 28

Más contenido relacionado

Destacado

iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編Shuichi Tsutsumi
 
What's New in Core Location - WWDC 2015
What's New in Core Location - WWDC 2015What's New in Core Location - WWDC 2015
What's New in Core Location - WWDC 2015Kosuke Ogawa
 
WWDC 2015 情報共有会
WWDC 2015 情報共有会WWDC 2015 情報共有会
WWDC 2015 情報共有会大介 束田
 
Search APIs in Spotlight and Safari
Search APIs in Spotlight and SafariSearch APIs in Spotlight and Safari
Search APIs in Spotlight and SafariYusuke Kita
 
How to make workout app for watch os 2
How to make workout app for watch os 2How to make workout app for watch os 2
How to make workout app for watch os 2Yusuke Kita
 
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Shuichi Tsutsumi
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight今城 善矩
 
watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話Shuichi Tsutsumi
 
UI/UX に影響の大きい watchOS 2 の新機能 3つ
UI/UX に影響の大きい watchOS 2 の新機能 3つUI/UX に影響の大きい watchOS 2 の新機能 3つ
UI/UX に影響の大きい watchOS 2 の新機能 3つShuichi Tsutsumi
 
Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9Shuichi Tsutsumi
 
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングI os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングTakahiro Yamamoto
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasChris Adamson
 
Swiftではじめる動画再生
Swiftではじめる動画再生Swiftではじめる動画再生
Swiftではじめる動画再生Yusuke Ariyoshi
 
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) Taketo Sano
 
iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトShuichi Tsutsumi
 
Reflectionのパフォーマンス
ReflectionのパフォーマンスReflectionのパフォーマンス
Reflectionのパフォーマンス明 高橋
 
高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツ高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツInnami Satoshi
 

Destacado (20)

iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編
 
What's New in Core Location - WWDC 2015
What's New in Core Location - WWDC 2015What's New in Core Location - WWDC 2015
What's New in Core Location - WWDC 2015
 
20150707 wwdc21cafe
20150707 wwdc21cafe20150707 wwdc21cafe
20150707 wwdc21cafe
 
Watch connectivity
Watch connectivityWatch connectivity
Watch connectivity
 
WWDC 2015 情報共有会
WWDC 2015 情報共有会WWDC 2015 情報共有会
WWDC 2015 情報共有会
 
Search APIs in Spotlight and Safari
Search APIs in Spotlight and SafariSearch APIs in Spotlight and Safari
Search APIs in Spotlight and Safari
 
How to make workout app for watch os 2
How to make workout app for watch os 2How to make workout app for watch os 2
How to make workout app for watch os 2
 
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight
 
watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話
 
UI/UX に影響の大きい watchOS 2 の新機能 3つ
UI/UX に影響の大きい watchOS 2 の新機能 3つUI/UX に影響の大きい watchOS 2 の新機能 3つ
UI/UX に影響の大きい watchOS 2 の新機能 3つ
 
Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9Core Image Tips & Tricks in iOS 9
Core Image Tips & Tricks in iOS 9
 
I018145157
I018145157I018145157
I018145157
 
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピングI os*ble簡単プロトタイピング
I os*ble簡単プロトタイピング
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las Vegas
 
Swiftではじめる動画再生
Swiftではじめる動画再生Swiftではじめる動画再生
Swiftではじめる動画再生
 
objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望) objc2swift (続・自動変換の野望)
objc2swift (続・自動変換の野望)
 
iOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクトiOSエンジニア in ハードウェア・プロジェクト
iOSエンジニア in ハードウェア・プロジェクト
 
Reflectionのパフォーマンス
ReflectionのパフォーマンスReflectionのパフォーマンス
Reflectionのパフォーマンス
 
高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツ高速な広告配信サーバの作り方のコツ
高速な広告配信サーバの作り方のコツ
 

Más de toyship

Time for Xcode Behavior
Time for Xcode BehaviorTime for Xcode Behavior
Time for Xcode Behaviortoyship
 
Notifications in iOS10
Notifications in iOS10Notifications in iOS10
Notifications in iOS10toyship
 
Universal Link
Universal LinkUniversal Link
Universal Linktoyship
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?toyship
 
Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selectortoyship
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3toyship
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 
My first tvOS
My first tvOSMy first tvOS
My first tvOStoyship
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOStoyship
 
Embedded framework and so on
Embedded framework and so onEmbedded framework and so on
Embedded framework and so ontoyship
 
はじめてのWKInterfaceController
はじめてのWKInterfaceControllerはじめてのWKInterfaceController
はじめてのWKInterfaceControllertoyship
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOStoyship
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するtoyship
 
Xcode bot
Xcode botXcode bot
Xcode bottoyship
 
AVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケールAVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケールtoyship
 

Más de toyship (15)

Time for Xcode Behavior
Time for Xcode BehaviorTime for Xcode Behavior
Time for Xcode Behavior
 
Notifications in iOS10
Notifications in iOS10Notifications in iOS10
Notifications in iOS10
 
Universal Link
Universal LinkUniversal Link
Universal Link
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?
 
Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selector
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
My first tvOS
My first tvOSMy first tvOS
My first tvOS
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOS
 
Embedded framework and so on
Embedded framework and so onEmbedded framework and so on
Embedded framework and so on
 
はじめてのWKInterfaceController
はじめてのWKInterfaceControllerはじめてのWKInterfaceController
はじめてのWKInterfaceController
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOS
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更する
 
Xcode bot
Xcode botXcode bot
Xcode bot
 
AVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケールAVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケール
 

Contents blocker on iOS9