SlideShare a Scribd company logo
1 of 67
Download to read offline
iOS 8 Widget 
導入から Tips まで 
田邉 裕貴 
iOS 8 / Swift エンジニア勉強会 
2014/10/18 (Sat.)
このスライドの情報 
http://bit.ly/ios8_widget
どんな人向けの発表か 
・iOS アプリ開発経験者 
・Widget の開発未経験者 
 もしくは軽く触ってみた程度
発表の流れ 
・Widget とは 
・Hello World 
・詰まりどころ& Tips 集
発表の流れ 
・Widget とは 
・Hello World 
・詰まりどころ& Tips 集
Widget とは 
http://imgc.appbank.net/c/wp-content/uploads/2014/06/140603ios8widget-2.jpg
Widget とは 
通知センターに Today タブが 
新しく追加された 
Widget のコンテンツ 
Today という名前の通り 
リアルタイム性の高い 
コンテンツが並ぶ 
・カレンダー 
・天気 
・リマインダー 
・株価 
 など 
http://imgc.appbank.net/c/wp-content/uploads/2014/06/140603ios8widget-2.jpg
DEMO
発表の流れ 
・Widget とは 
・Hello World 
・詰まりどころ& Tips 集
前提知識 
Extension はそれだけを申請することが出来ない。 
そのため通常通りプロジェクトを作り、 
本体アプリの中に Extension を追加して実装する流れとなる。 
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Art/simple_communication_2x.png
前提知識
前提知識 
作成する Widget 
本体アプリ 
Widget の呼び出し元 
今回だと通知センター
前提知識 
作成する Widget 
本体アプリ 
Widget の呼び出し元 
今回だと通知センター 
両方を Xcode の1プロジェクトにまとめる
1. プロジェクト作成(いつも通りに)
2. プロジェクト作成(いつも通りに)
3. プロジェクト作成(いつも通りに)
プロジェクト作成完了
4. Target を追加
5. Application Extension > Today Extension 
3 
2 
1
6. Product Name を設定 
今回は Widget と入力
Widget のファイル群が追加された
MainInterface.storyboard 
はじめから Hello World の 
UILabel がセットされている
7. Widget 起動 
2 1
Hello World が表示される
Hello World 
簡単に作れる! 
が 
詰まりどころが多い
発表の流れ 
・Widget とは 
・Hello World 
・詰まりどころ& Tips 集
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
Widget の表示名変更 
Product name が表示されている
Widget の表示名変更 
Bundle display name を変更
Widget の表示名変更
Widget の表示名変更 
before after
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
左余白の消し方 
デフォルトだと余白ができる
左余白の消し方 
TodayViewController.m
左余白の消し方 
UIEdgeInsetsZero 指定すると余白が消える
左余白の消し方 
あくまでデフォルトは余白ありなので、 
必要な場合のみ検討したほうが良い。
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
ビューのライフサイクル 
表示のタイミング非表示のタイミング 
-­‐ viewDidLoad 
-­‐ viewWillAppear 
-­‐ viewDidAppear 
-­‐ viewWillDisappear 
-­‐ viewDidDisappear 
表示、非表示の度に上記メソッドが呼ばれる
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
Widget からアプリを起動 
カスタム URL スキーマでアプリを開く 
TodayViewController.m 
NSExtensionContext に openURL メソッドが用意されている 
(逆にアプリからウィジェットを開くことは出来ない。)
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
本体アプリとデータ共有 
本体アプリのプロセス 
Widget のプロセス 
本体アプリのデータ保存領域 
Widget のデータ保存領域 
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Art/app_extensions_container_restrictions_2x.png
本体アプリとデータ共有 
本体アプリのプロセス 
Widget のプロセス 
本体アプリのデータ保存領域 
保存領域が異なる 
Widget のデータ保存領域
本体アプリとデータ共有
本体アプリとデータ共有 
共有して保存できる領域
本体アプリとデータ共有 
共有して保存できる領域 
App Group により定義される 
- group.jp.co.yahoo.search 
- group.jp.co.yahoo.weather 
- group.jp.co.yahoo.news 
>この文字列が識別子となる 
(アプリ~ウィジェット間に留まらず、 
 Developer が同じであれば他のアプリでもデータ共有が可能)
本体アプリとデータ共有 
データ共有のための手順 
1. App Group の作成 
2. 本体、ウィジェットで App Group を有効化 
3. コーディング
本体アプリとデータ共有 /A pp Group の作成の前に 
iOS Dev Center の Certificates のページにアクセス 
ここで App Group 一覧を確認できる
1 
2 
本体アプリとデータ共有 / App Group の作成
本体アプリとデータ共有 / App Group の作成
本体アプリとデータ共有 / App Group の作成 
グループの識別子を設定する
本体アプリとデータ共有 / App Group の作成 
今回は group.<Bundle ID> とする
本体アプリとデータ共有 / App Group の作成 
App Groups に追加された 
同時に手順2の有効化も完了
本体アプリとデータ共有 / App Group の作成 
App Groups に追加されたことを確認
本体アプリとデータ共有 / App Group の作成 
編集・削除が可能
本体アプリとデータ共有 / 本体、ウィジェットで App Group を有効化 
1 
ウィジェットでも App Group を有効化しておく 
2
実装方法 
本体アプリとデータ共有 / 
NSUserDefaults の場合
実装方法 
本体アプリとデータ共有 / 
NSUserDefaults の場合 
作成した App Group を指定 
(あとの操作は通常通り) イニシャライズメソッドが異なる
本体アプリとデータ共有 / まとめと補足 
・本体アプリとのデータ共有には App Group を利用 
・同一 Developer なら複数アプリのデータ共有も可能 
・NSUserDefaults, CoreData, SQLite などの共有が可能
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
本体とコード共有 
本体アプリのプロセス 
Widget のプロセス 
プロセスが別なので、相互にクラスを import できない
本体とコード共有 
Embedded Framework を利用 
手順は以下が参考になる 
http://dev.classmethod.jp/references/ios-8-embedded-framework/
詰まりどころ& Tips 集 
・Widget 表示名変更 
・左余白の消し方 
・ビューのライフサイクル 
・Widget からアプリを起動 
・本体アプリとデータ共有 
・本体アプリとコード共有 
・NG 事項
NG 事項 
・キーボード使用 
・スクロールビューの配置 
・大きすぎるコンテンツ(高さ) 
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/NotificationCenter.html
参考文献 
App Extension Programming Guide 
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/index.html 
WWDC2014 資料 
https://developer.apple.com/videos/wwdc/2014/ 
Creating Extensions for iOS and OS X, Part 1 
Creating Extensions for iOS and OS X, Part 2
ご清聴ありがとうございました

More Related Content

What's hot

Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
Yoshiki Ushida
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOS
toyship
 

What's hot (19)

Swift入門
Swift入門Swift入門
Swift入門
 
Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
NSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansaiNSNotification in Swift #cocoa_kansai
NSNotification in Swift #cocoa_kansai
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
Css nite(2010.09.23)
Css nite(2010.09.23)Css nite(2010.09.23)
Css nite(2010.09.23)
 
ABS2015 のセッション紹介
ABS2015 のセッション紹介ABS2015 のセッション紹介
ABS2015 のセッション紹介
 
Android Hacks - Hack40
Android Hacks - Hack40Android Hacks - Hack40
Android Hacks - Hack40
 
Android Hacks - Hack59
Android Hacks - Hack59Android Hacks - Hack59
Android Hacks - Hack59
 
Core Graphics on watchOS 2
Core Graphics on watchOS 2Core Graphics on watchOS 2
Core Graphics on watchOS 2
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOS
 
Android Hacks - Hack8
Android Hacks - Hack8Android Hacks - Hack8
Android Hacks - Hack8
 
Swift 構造体の時代 #yidev
Swift 構造体の時代 #yidevSwift 構造体の時代 #yidev
Swift 構造体の時代 #yidev
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
 
Swift ドキュメントコメント
Swift ドキュメントコメントSwift ドキュメントコメント
Swift ドキュメントコメント
 
Study Swift
Study Swift Study Swift
Study Swift
 
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
Meteor勉強会発表資料「MeteorでiOSアプリを作ろう!」
 
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidevSwift : クラス継承とプロトコル拡張を比べてみる #yidev
Swift : クラス継承とプロトコル拡張を比べてみる #yidev
 
20141018 selenium appium_cookpad
20141018 selenium appium_cookpad20141018 selenium appium_cookpad
20141018 selenium appium_cookpad
 
Xcode 7で始めるCI
Xcode 7で始めるCIXcode 7で始めるCI
Xcode 7で始めるCI
 

Viewers also liked

虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
Taketo Sano
 

Viewers also liked (7)

虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
 
Ios8yahoo swift-json
Ios8yahoo swift-jsonIos8yahoo swift-json
Ios8yahoo swift-json
 
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
 
大人のHomekit
大人のHomekit大人のHomekit
大人のHomekit
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
 
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahooもしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
 

Similar to iOS 8 Widget ~ 導入から Tips まで

Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
takeuchi-tk
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
Takayoshi Tanaka
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
Nobuhiro Sue
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
 

Similar to iOS 8 Widget ~ 導入から Tips まで (20)

スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向スマートフォンアプリケーション開発の最新動向
スマートフォンアプリケーション開発の最新動向
 
Web Intents入門
Web Intents入門Web Intents入門
Web Intents入門
 
Windows storeアプリ brekky
Windows storeアプリ brekkyWindows storeアプリ brekky
Windows storeアプリ brekky
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
jQuery MobileとPhoneGapでスマートフォンアプリ楽々クッキング
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
OpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクルOpenID ConnectとAndroidアプリのログインサイクル
OpenID ConnectとAndroidアプリのログインサイクル
 
Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発Webエンジニアによるスマートフォンアプリ開発
Webエンジニアによるスマートフォンアプリ開発
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
121117 metro styleapp_templateapp
121117 metro styleapp_templateapp121117 metro styleapp_templateapp
121117 metro styleapp_templateapp
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
Ncmb勉強会 #8 cocos2d x 資料「Cocos2d-xとNCMBを組み合わせるには」
Ncmb勉強会 #8 cocos2d x 資料「Cocos2d-xとNCMBを組み合わせるには」Ncmb勉強会 #8 cocos2d x 資料「Cocos2d-xとNCMBを組み合わせるには」
Ncmb勉強会 #8 cocos2d x 資料「Cocos2d-xとNCMBを組み合わせるには」
 
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
 
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSourceMashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
Mashup Caravan in オープンソースカンファレンス2011 Hiroshima: infoScoop OpenSource
 
[2013/12/03] Developer Camp / Windows ストア アプリ 開発概要
[2013/12/03] Developer Camp /  Windows ストア アプリ開発概要[2013/12/03] Developer Camp /  Windows ストア アプリ開発概要
[2013/12/03] Developer Camp / Windows ストア アプリ 開発概要
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Solution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-newSolution semniar vs2013_multi_device-1209-new
Solution semniar vs2013_multi_device-1209-new
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
NET MAUI for .NET 7 for iOS, Android app development
 NET MAUI for .NET 7 for iOS, Android app development  NET MAUI for .NET 7 for iOS, Android app development
NET MAUI for .NET 7 for iOS, Android app development
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 

iOS 8 Widget ~ 導入から Tips まで