SlideShare a Scribd company logo
Swift オープンソース
勉強会
山下 大輔
• 自己紹介 https://github.com/daisuke0131
• ビズリーチのiOSエンジニア
• https://github.com/daisuke0131/
ViewMonitor を作っています。星ください。PR
下さい。
What s ViewMonitor
開発初期段階でよくある風景
デザイナ
エンジニア
プロトタイプ レイアウト指示書
デザイン反映
比較
配布
テスター
(チームメンバ)
フィードバック
ポテトチップスについて
レイアウト指示書 実際の実装(テスト配布アプリ)
比較
60 60
8
こういう状況で問題点をみつけないといけない
14pt #000000
8
ポテトチップスはしお味よりものりしお味
を選ぶ傾向にあります。コンソメ味も捨て
がたいですがのりしお味が食べたい。
ポテトチップスについて
ポテトチップスはしお味よりものりしお味
を選ぶ傾向にあります。コンソメ味も捨て
がたいですがのりしお味が食べたい。
13pt #0000008
背景 #FFFFFF
import ViewMonitor
func application(application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [NSObject: AnyObject]?) -> Bool {
ViewMonitor.start()
return true
}
・1line execution
->色々設定しないと使えないアプリはめんどい(引数たくさん渡すとか)
method swizzling
extension UIViewController{
class func monitor_methodSwizzling_didAppearWillDisappear() {
monitor_methodSwizzling_exchange(fromSelector: "viewDidAppear:", toSelector:
"monitor_methodSwizzling_viewDidAppear:")
}
private class func monitor_methodSwizzling_exchange(fromSelector fromSelector:
Selector, toSelector: Selector) {
let fromMethod = class_getInstanceMethod(UIViewController.self, fromSelector)
let toMethod = class_getInstanceMethod(UIViewController.self, toSelector)
method_exchangeImplementations(fromMethod, toMethod)
}
func monitor_methodSwizzling_viewDidAppear(animated: Bool) {
monitor_methodSwizzling_viewDidAppear(animated)
ViewMonitor.detectedViewDidAppear(self)
}
}
->viewの描画イベントをフックする必要がある。
view view
観測対象のviewをマークングしてタップを検出したい。
x:100
y:100
view view
観測対象のviewをマークングしてタップを検出したい。
x:100
y:100
->アプリのkeyWindowから再帰的に子のviewを取得
->UIbuttonを配置して対象のviewにaddSubview
->UIButton自体に重ねたviewのオブジェクトを所有させる
ボタン押せなくなる問題
view
userInteractionEnabled = false
に設定されているとその上のview
のタップが取得できない。
ボタン押せなくなる問題
view
userInteractionEnabled = false
に設定されているとその上のview
のタップが取得できない。
->一旦userInteractionEnabledをtrueに設定しなおして
オブジェクトの参照を保持する。機能リセット時に元の状態に
戻す。
いけてないところ
->cocoaPodsでstoryboardの利用がうまくいかずコードで無理くり
画面実装。
->実際に目に見えないviewもたくさん存在しているので対象のview Object
を絞った。
やったら面白そうだなと思っていること
->injectionとreplace(挿入と置き換え)
->UILabelを実行時に動的に書き換えたり、新しいviewを挿入するなどして
 簡易的にレイアウトをいじれるようにしたら面白そう。
Swift(iOS) Java(Android)  Ruby(Rails)
のオープンソース勉強会を
やる予定

More Related Content

What's hot

JUCEではじめるVST/AUプラグイン開発@NoMaps2017
JUCEではじめるVST/AUプラグイン開発@NoMaps2017JUCEではじめるVST/AUプラグイン開発@NoMaps2017
JUCEではじめるVST/AUプラグイン開発@NoMaps2017
Tatsuya Shiozawa
 
Camera API 3.0を触ってみた
Camera API 3.0を触ってみたCamera API 3.0を触ってみた
Camera API 3.0を触ってみた
Masaki Otsuki
 
Screenshots Test spoon + espresso
Screenshots Test spoon + espressoScreenshots Test spoon + espresso
Screenshots Test spoon + espresso
Shinobu Okano
 
Ninja Testing at Toteka03
Ninja Testing at Toteka03Ninja Testing at Toteka03
Ninja Testing at Toteka03
Nakajima Shigeru
 
About GROOVE
About GROOVEAbout GROOVE
About GROOVE
SIGDance
 
jsおじさん#5 ペッパーとjavascript
jsおじさん#5 ペッパーとjavascriptjsおじさん#5 ペッパーとjavascript
jsおじさん#5 ペッパーとjavascript
Nishida Kansuke
 

What's hot (6)

JUCEではじめるVST/AUプラグイン開発@NoMaps2017
JUCEではじめるVST/AUプラグイン開発@NoMaps2017JUCEではじめるVST/AUプラグイン開発@NoMaps2017
JUCEではじめるVST/AUプラグイン開発@NoMaps2017
 
Camera API 3.0を触ってみた
Camera API 3.0を触ってみたCamera API 3.0を触ってみた
Camera API 3.0を触ってみた
 
Screenshots Test spoon + espresso
Screenshots Test spoon + espressoScreenshots Test spoon + espresso
Screenshots Test spoon + espresso
 
Ninja Testing at Toteka03
Ninja Testing at Toteka03Ninja Testing at Toteka03
Ninja Testing at Toteka03
 
About GROOVE
About GROOVEAbout GROOVE
About GROOVE
 
jsおじさん#5 ペッパーとjavascript
jsおじさん#5 ペッパーとjavascriptjsおじさん#5 ペッパーとjavascript
jsおじさん#5 ペッパーとjavascript
 

Similar to Swift open source library - ViewMonitor -

Titanium Nagoya Chatroom vol.2 はじめの一歩
Titanium Nagoya Chatroom vol.2 はじめの一歩Titanium Nagoya Chatroom vol.2 はじめの一歩
Titanium Nagoya Chatroom vol.2 はじめの一歩
Mori Shingo
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Yasuhiko Yamamoto
 
アジャイル入門
アジャイル入門アジャイル入門
アジャイル入門
Kenji Morita
 
UIPageViewControllerとContainerViewでこんな見た目を実現するTips
UIPageViewControllerとContainerViewでこんな見た目を実現するTipsUIPageViewControllerとContainerViewでこんな見た目を実現するTips
UIPageViewControllerとContainerViewでこんな見た目を実現するTips
Fumiya Sakai
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドTsuyoshi Yumoto
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピング
wariemon
 
20170131 新潟セミナー
20170131 新潟セミナー20170131 新潟セミナー
20170131 新潟セミナー
Nishida Kansuke
 
スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめよう
Koji Hasegawa
 
【Photoshop】レイヤーのフィルタリングを活用しよう!
【Photoshop】レイヤーのフィルタリングを活用しよう!【Photoshop】レイヤーのフィルタリングを活用しよう!
【Photoshop】レイヤーのフィルタリングを活用しよう!Hiroyuki Makishita
 
はじめてのScrum
はじめてのScrumはじめてのScrum
はじめてのScrum
Kenji Morita
 
20140913 ディレクション講演資料(山盛り)
20140913 ディレクション講演資料(山盛り)20140913 ディレクション講演資料(山盛り)
20140913 ディレクション講演資料(山盛り)
Kenta Nakamura
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
hiroya akita
 
デザイナーだった記憶を忘れないために自分なりに気をつけていること
デザイナーだった記憶を忘れないために自分なりに気をつけていることデザイナーだった記憶を忘れないために自分なりに気をつけていること
デザイナーだった記憶を忘れないために自分なりに気をつけていること
Fumiya Sakai
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Naoki Umehara
 
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツMori Keita
 
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
Fumiya Sakai
 
プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1
Hiroki Toyokawa
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
NakaiYusaku
 
デザイン系の学校に通っていない学生のためのポートフォリオことはじめ
デザイン系の学校に通っていない学生のためのポートフォリオことはじめデザイン系の学校に通っていない学生のためのポートフォリオことはじめ
デザイン系の学校に通っていない学生のためのポートフォリオことはじめ
Aimi Shinohara
 
福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために
Miho Yamamori
 

Similar to Swift open source library - ViewMonitor - (20)

Titanium Nagoya Chatroom vol.2 はじめの一歩
Titanium Nagoya Chatroom vol.2 はじめの一歩Titanium Nagoya Chatroom vol.2 はじめの一歩
Titanium Nagoya Chatroom vol.2 はじめの一歩
 
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
Visual Studio 2015 の新機能: Pex はユニットテストの福音となるか!?
 
アジャイル入門
アジャイル入門アジャイル入門
アジャイル入門
 
UIPageViewControllerとContainerViewでこんな見た目を実現するTips
UIPageViewControllerとContainerViewでこんな見た目を実現するTipsUIPageViewControllerとContainerViewでこんな見た目を実現するTips
UIPageViewControllerとContainerViewでこんな見た目を実現するTips
 
WACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライドWACATE 2010夏 ゆもつよ講演スライド
WACATE 2010夏 ゆもつよ講演スライド
 
人と向き合うプロトタイピング
人と向き合うプロトタイピング人と向き合うプロトタイピング
人と向き合うプロトタイピング
 
20170131 新潟セミナー
20170131 新潟セミナー20170131 新潟セミナー
20170131 新潟セミナー
 
スマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめようスマートフォンアプリの テスト自動化をはじめよう
スマートフォンアプリの テスト自動化をはじめよう
 
【Photoshop】レイヤーのフィルタリングを活用しよう!
【Photoshop】レイヤーのフィルタリングを活用しよう!【Photoshop】レイヤーのフィルタリングを活用しよう!
【Photoshop】レイヤーのフィルタリングを活用しよう!
 
はじめてのScrum
はじめてのScrumはじめてのScrum
はじめてのScrum
 
20140913 ディレクション講演資料(山盛り)
20140913 ディレクション講演資料(山盛り)20140913 ディレクション講演資料(山盛り)
20140913 ディレクション講演資料(山盛り)
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
 
デザイナーだった記憶を忘れないために自分なりに気をつけていること
デザイナーだった記憶を忘れないために自分なりに気をつけていることデザイナーだった記憶を忘れないために自分なりに気をつけていること
デザイナーだった記憶を忘れないために自分なりに気をつけていること
 
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
 
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
ABC2013 Spring デザインナーとエンジニアの連携プレイのコツ
 
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
実装とアプリ開発と独学でiOSアプリ開発と向き合うこと
 
プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1プロ文.com 勉強会 Phase 1
プロ文.com 勉強会 Phase 1
 
FriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみたFriendlyとTestAssistantProでテスト自動化やってみた
FriendlyとTestAssistantProでテスト自動化やってみた
 
デザイン系の学校に通っていない学生のためのポートフォリオことはじめ
デザイン系の学校に通っていない学生のためのポートフォリオことはじめデザイン系の学校に通っていない学生のためのポートフォリオことはじめ
デザイン系の学校に通っていない学生のためのポートフォリオことはじめ
 
福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために福井で「しあわせデザイナー」になるために
福井で「しあわせデザイナー」になるために
 

More from Daisuke Yamashita

potatotips_77.pdf
potatotips_77.pdfpotatotips_77.pdf
potatotips_77.pdf
Daisuke Yamashita
 
State management for ios development
State management for ios developmentState management for ios development
State management for ios development
Daisuke Yamashita
 
Static analysis for go lang
Static analysis for go langStatic analysis for go lang
Static analysis for go lang
Daisuke Yamashita
 
Convert the notification feature to the notification microservice
Convert the notification feature to the notification microserviceConvert the notification feature to the notification microservice
Convert the notification feature to the notification microservice
Daisuke Yamashita
 
歯磨き.go #2
歯磨き.go #2歯磨き.go #2
歯磨き.go #2
Daisuke Yamashita
 
歯磨き.go Go言語の静的解析とコード生成勉強会
歯磨き.go Go言語の静的解析とコード生成勉強会歯磨き.go Go言語の静的解析とコード生成勉強会
歯磨き.go Go言語の静的解析とコード生成勉強会
Daisuke Yamashita
 
ライブラリを作って5年たったので振り返る
ライブラリを作って5年たったので振り返るライブラリを作って5年たったので振り返る
ライブラリを作って5年たったので振り返る
Daisuke Yamashita
 
Tensorflow
TensorflowTensorflow
Tensorflow
Daisuke Yamashita
 
Introduction of ios-chart in oss-labs#3
Introduction of ios-chart in oss-labs#3Introduction of ios-chart in oss-labs#3
Introduction of ios-chart in oss-labs#3
Daisuke Yamashita
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -
Daisuke Yamashita
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
 
Unity Introduction from 2D shooting game.
Unity Introduction from 2D shooting game.Unity Introduction from 2D shooting game.
Unity Introduction from 2D shooting game.
Daisuke Yamashita
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
Daisuke Yamashita
 
Introduction of Swift from Machine Learning
Introduction of Swift from Machine LearningIntroduction of Swift from Machine Learning
Introduction of Swift from Machine LearningDaisuke Yamashita
 
Introduction of Swift from Game Development
Introduction of Swift from Game DevelopmentIntroduction of Swift from Game Development
Introduction of Swift from Game DevelopmentDaisuke Yamashita
 
How to measure UIView position on Native App
How to measure UIView position on Native AppHow to measure UIView position on Native App
How to measure UIView position on Native App
Daisuke Yamashita
 

More from Daisuke Yamashita (16)

potatotips_77.pdf
potatotips_77.pdfpotatotips_77.pdf
potatotips_77.pdf
 
State management for ios development
State management for ios developmentState management for ios development
State management for ios development
 
Static analysis for go lang
Static analysis for go langStatic analysis for go lang
Static analysis for go lang
 
Convert the notification feature to the notification microservice
Convert the notification feature to the notification microserviceConvert the notification feature to the notification microservice
Convert the notification feature to the notification microservice
 
歯磨き.go #2
歯磨き.go #2歯磨き.go #2
歯磨き.go #2
 
歯磨き.go Go言語の静的解析とコード生成勉強会
歯磨き.go Go言語の静的解析とコード生成勉強会歯磨き.go Go言語の静的解析とコード生成勉強会
歯磨き.go Go言語の静的解析とコード生成勉強会
 
ライブラリを作って5年たったので振り返る
ライブラリを作って5年たったので振り返るライブラリを作って5年たったので振り返る
ライブラリを作って5年たったので振り返る
 
Tensorflow
TensorflowTensorflow
Tensorflow
 
Introduction of ios-chart in oss-labs#3
Introduction of ios-chart in oss-labs#3Introduction of ios-chart in oss-labs#3
Introduction of ios-chart in oss-labs#3
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
 
Unity Introduction from 2D shooting game.
Unity Introduction from 2D shooting game.Unity Introduction from 2D shooting game.
Unity Introduction from 2D shooting game.
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
 
Introduction of Swift from Machine Learning
Introduction of Swift from Machine LearningIntroduction of Swift from Machine Learning
Introduction of Swift from Machine Learning
 
Introduction of Swift from Game Development
Introduction of Swift from Game DevelopmentIntroduction of Swift from Game Development
Introduction of Swift from Game Development
 
How to measure UIView position on Native App
How to measure UIView position on Native AppHow to measure UIView position on Native App
How to measure UIView position on Native App
 

Swift open source library - ViewMonitor -