「変化と戦うロガー開発(iOS_App_Extensions編)」#yjdsw4

>100 Views

April 15, 16

スライド概要

http://yahoo-ds-event.connpass.com/event/24511/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

変化と戦うロガー開発 (iOS App Extensions編) ヤフー株式会社 D&S本部ソリューション本部 手塚 賢太郎

2.

自己紹介 てづか けんたろう 手塚 賢太郎

3.

自己紹介 入社3年目 iOSエンジニア

4.

本日ご紹介するのは iOSアプリ向け 汎用クラス作成時のTips

5.

背景

6.

主な担当業務 ロガー開発 (iOSアプリ用)

7.

主な担当業務 ロガー開発 = ログを取得するための ライブラリ作り

8.

ロガーの機能 データを取得して

9.

ロガーの機能 データを送信する

10.

ロガーの機能 データを送信する (だけ)

11.

ロガー開発 It's so simple !

12.

ロガー開発 but …

13.

ロガー開発 「良いロガー」 には条件がありそう

14.

見えてきた「良いロガー」 価値あるデータを見極められる 導入が「とても」簡単である て そし 変化に対応できる!

15.

アプリをとりまく環境は 劇的に変化する

16.

アプリ環境は劇的に変化する

17.

アプリ事情は急激に変化する 知りたい指標 重要なデータ アプリが動作する環境 どんどん変化!

18.

アプリ事情は急激に変化する 変化への対応が 大切そう!

19.

最近大変だったのが

20.

App Extensions

21.

コレとか

22.

コレとか コレとか

23.

new! コレとか コレとか コ レ

24.

Extensionsは大変! ※いちライブラリ開発者の感想です

25.

ここが大変!App Extensions! 本体と同じコードだと 動かない

26.

ここが大変!App Extensions! 種類がたくさん 微妙に仕様が違う (そしてどんどん増える)

27.

最初に見た時

28.

最近

29.

ちょっとしたノウハウ 共有します 汎用クラスの作成時にぜひ!

30.

Tips

31.

Extension対応のコツ ビルドエラーを回避 Extensionの種類で条件分岐

32.

Extension対応のコツ ビルドエラーを回避 Extensionの種類で条件分岐

33.

ビルドエラーを回避 UIApplication *app = [UIApplication sharedApplication]; 本体アプリでよく書くコード

34.

ビルドエラーを回避 UIApplication *app = [UIApplication sharedApplication]; NS̲EXTENSION̲UNAVAILABLE̲IOS()

35.

ビルドエラーを回避 UIApplication *app = [UIApplication sharedApplication]; NS̲EXTENSION̲UNAVAILABLE̲IOS() Extensionではビルドエラー

36.

ビルドエラーを回避 UIApplicationクラス と明示的に書かなければよいので…

37.

ビルドエラーを回避 Class class = NSClassFromString(@“UIApplication"); if (class) { UIApplication *app = [class sharedApplication]; } NSClassFromString() で書く!

38.

ビルドエラーを回避 Class class = NSClassFromString(@“UIApplication"); if (class) { UIApplication *app = [class sharedApplication]; } NSClassFromString() で書く!

39.

Extension対応のコツ ビルドエラーを回避 Extensionの種類で条件分岐

40.

Extensionの種類で条件分岐 Extensionは種類が沢山 処理を分けたい

41.

Extensionの種類で条件分岐 Info.plistの参照が Good!

42.

Extensionの種類で条件分岐 <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>ここに種類が書いてある</string> </dict>

43.
[beta]
Extensionの種類で条件分岐
NSString* extid = [[[[NSBundle mainBundle] infoDictionary]
valueForKey:@"NSExtension"]
valueForKey:@"NSExtensionPointIdentifier"];
if ([extid length] == 0) {
// 本体アプリです
} else if ([extid isEqualToString:@"com.apple.widget-extension"]) {
// Today Extensionです
} else if ([extid isEqualToString:@"com.apple.watchkit"]) {
// WatchKit Extensionです
}

44.
[beta]
Extensionの種類で条件分岐
NSString* extid = [[[[NSBundle mainBundle] infoDictionary]
valueForKey:@"NSExtension"]
valueForKey:@"NSExtensionPointIdentifier"];
if ([extid length] == 0) {
// 本体アプリです
} else if ([extid isEqualToString:@"com.apple.widget-extension"]) {
// Today Extensionです
} else if ([extid isEqualToString:@"com.apple.watchkit"]) {
// WatchKit Extensionです
}

45.

まとめ NSClassFromString()でエラー回避 Info.plist見て条件分岐 Extension対応はバッチリ!

46.

眼鏡Extension が来ても

47.

ロボット Extension が来ても

48.

楽 勝

49.

汎用クラスをExtension対応して 来たるべき変化に備えよう! キイテクレテ アリガトォォォ