Slide 1

Slide 1 text

Embedded Framework in Action @TachibanaKaoru 2016/11/29

Slide 2

Slide 2 text

ࣗݾ঺հ • @TachibanaKaoru • ϑϦʔϥϯεiOSΤϯδχΞ • น޷͖Ͱ͢ɻ • http://www.toyship.org/

Slide 3

Slide 3 text

Embedded Frameworkͱ͸ • iOSΞϓϦͰιʔείʔυΛଞͷϓϩηεͱڞ༗͢Δ࢓ ૊Έɻ • ओʹExtensionʢWatch ExtensionɺSiri ExtensionͳͲʣ Ͱ࢖ΘΕ·͢ɻ

Slide 4

Slide 4 text

Embedded Frameworkͱ͸ • ιʔείʔυΛڞ༗Ͱ͖Δϓϩηε͸ɺಉ͡Bundle಺ ͷଞͷExtension͚ͩͰ͋ΓɺଞͷΞϓϦϓϩηεͱͷ ιʔείʔυͷڞ༗͕Ͱ͖ΔΘ͚Ͱ͸ͳ͍ɻ • ͨͩ͠ɺEmbedded Frameworkͱͯ͠ڞ௨ॲཧΛ੾Γ ग़͓͚ͯ͠͹ɺPortability͕ߴ͘ͳΓɺEmbedded Framework୯ҐͰଞͷΞϓϦʹ૊ΈࠐΉ͜ͱ΋༰қʹ ͳΔɻ

Slide 5

Slide 5 text

Embedded Framework Pros/Cons • Pros • ExtensionͱຊମͰಉ͡ίʔυΛڞ༗Ͱ͖Δ • Ϗϧυ͕ૣ͘ͳΔ • Namespace͕෼཭Ͱ͖Δ • ઃܭ͕ϒϥογϡΞοϓ͞ΕΔ

Slide 6

Slide 6 text

Embedded Framework Pros/Cons • Cons • ਐߦதͷϓϩδΣΫτͰ෼ׂ͠Α͏ͱ͢Δͱઃܭͷ ݟ௚͕͠ඞཁʹͳΔ͜ͱ΋͋Δ • ࢖༻͍ͯ͠ΔϥΠϒϥϦʹΑͬͯEmbedded FrameworkʹػೳΛ͖Γͩͤͳ͍৔߹͕͋Δ

Slide 7

Slide 7 text

How to add Embedded Framework • ৽نλʔήοτͷ௥ՃͰ Cocoa Touch FrameworkΛબ ୒

Slide 8

Slide 8 text

How to make

Slide 9

Slide 9 text

check "Allow app extension API only"

Slide 10

Slide 10 text

check "Allow app extension API only" • Ұ෦ͷiOSͷAPI͸extension͔Β͸࢖༻ෆՄೳʹͳͬͯ ͍Δɻ • "Allow app extension API only"Λonʹ͓ͯ͘͠ͱɺ࢖༻ ෆՄೳAPI͕࢖ΘΕͨ࣌ʹϏϧυΤϥʔͱͳΔɻ • ౰ॳ͸Extensionͱͯ͠࢖Θͳ͍Embedded Framework Ͱ΋ɺকདྷతʹ࢖͏͜ͱʹͳͬͨ৔߹ʹۤ࿑͢Δ͜ ͱ΋ଟ͍ͷͰɺνΣοΫΛೖΕ͓ͯ͘ํ͕ແ೉ɻ

Slide 11

Slide 11 text

check "Allow app extension API only" • ͲΜͳAPI͕࢖༻ෆՄೳͳͷ͔ • ྫʣUIApplication.sharedApplication

Slide 12

Slide 12 text

check "Allow app extension API only" • Objective-Cͷheaderʹ͸࢖༻ෆՄೳAPIʹ͸ NS_EXTENSION_UNAVAILABLE_IOS ͕هࡌ͞Ε͍ͯΔ

Slide 13

Slide 13 text

check "Allow app extension API only" • Swiftͷheaderʹ͸NS_EXTENSION_UNAVAILABLE_IOS ͸ͳ͍ɻ

Slide 14

Slide 14 text

Write public init to every class/struct • Embedded framework͸ผϞδϡʔϧͱͳΔͨΊɺ֎෦ ͔ΒΞΫηεՄೳͳͷ͸publicͰએݴ͞Εͨ΋ͷͷΈͱ ͳΔɻ • Ϋϥεɾߏ଄ମͰ҉໧తʹੜ੒͞ΕΔinitializer͸internal ͷͨΊɺ໌ࣔతʹpublic initΛهड़͢Δඞཁ͕͋Δɻ

Slide 15

Slide 15 text

Do not include Bundle into embedded framework • Embedded Frameworkʹ֎෦ϑϨʔϜϫʔΫΛ૊Έࠐ ΜͩࡍʹɺͦͷϑϨʔϜϫʔΫ͕BundleΛؚΜͰ͍Δ ͱ໰୊͕ൃੜ͢Δɻ

Slide 16

Slide 16 text

Do not include Bundle into embedded framework MyApp. app Info.plist Frameworks MyLib. framework GoogleMaps bundle A. framework B. framework GoogleMaps. bundle

Slide 17

Slide 17 text

Do not use framework with Bundle • ֎෦ϥΠϒϥϦ͕Bundle͔ΒͷϦιʔεΑͼ͕ͩ͠͏ ·͍͔ͣ͘ɺSDK͕ਖ਼ৗʹಈ࡞͠ͳ͍ɻ • nested bundleͱͯ͠ɺApp Store΁Submitͨ͠ࡍʹΤ ϥʔ͕ൃੜ͢Δ৔߹͕͋Δɻ

Slide 18

Slide 18 text

Do not embed same framework to embedded framework • ಉ͡ϑϨʔϜϫʔΫΛEmbedded Framework ͱMain Applicationɺ·ͨ͸ɺEmbedded FrameworkͱExtension Ͱembed͢ΔͱΤϥʔ͕ൃੜ͢Δɻ • Class GMSStreetViewService is implemented in both /.../ MyApp.app/Frameworks/MyLib.framework/MyLib and /.../ Bundle/Application/.../MyApp.app/MyApp. 
 One of the two will be used. Which one is undefined. • CrashlyticsɺFirebaseSDKɺGoogleMapsSDKΛembed͢Δ ͱൃੜ