Slide 1

Slide 1 text

طଘΞϓϦΛJ1BE04Ͱෳ਺8JOEPXରԠ *OUSPEVDJOH.VMUJQMF8JOEPXTPOJ1BE
 4FTTJPO ྩ࿨࠷ॳͷ%FWFMPQFST-JWJOHʙ88%$ʙ

Slide 2

Slide 2 text

1SPpMF struct Profile { let name = "Kazuya Ueoka" let twitter = "@fromkk" let github = "fromkk" let qiita = "fromkk" let company = "Timers Inc." } •

Slide 3

Slide 3 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻

Slide 4

Slide 4 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻

Slide 5

Slide 5 text

IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

Slide 6

Slide 6 text

)PXUPJNQMFNFOUT

Slide 7

Slide 7 text

࠷ॳʹνΣοΫΛೖΕΔ ☑4VQQPSUTNVMUJQMFXJOEPXT IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻

Slide 8

Slide 8 text

*OGPQMJTU UIApplicationSceneManifest UISceneConfigurations UIWindowSceneSessionRoleApplication UISceneDelegateClassName $(PRODUCT_MODULE_NAME).SceneDelegate UISceneConfigurationName Default Configuration UILaunchStoryboardName LaunchScreen.storyboard UIApplicationSupportsMultipleScenes

Slide 9

Slide 9 text

"QQ%FMFHBUFʹ௥ه @available (iOS 13.0, *) func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration”, sessionRole: connectingSceneSession.role) } ˞OBNF͸*OGPQMJTUʹهड़ͨ͠6*4DFOF$POpHVSBUJPO/BNFͱ߹ΘͤΔ

Slide 10

Slide 10 text

4DFOF%FMFHBUF import UIKit @available(iOS 13.0, *) final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo _: UISceneSession, options _: UIScene.ConnectionOptions) { let rootViewController = RootViewController() let window = UIWindow(windowScene: scene as! UIWindowScene) window.rootViewController = rootViewController window.backgroundColor = .systemBackground window.makeKeyAndVisible() self.window = window } }

Slide 11

Slide 11 text

.JHSBUJPO IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻

Slide 12

Slide 12 text

΢Οϯυ΢ͷૢ࡞ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻

Slide 13

Slide 13 text

஫ҙ఺ w MFUXJOEPX6*8JOEPX XJOEPX4DFOFTDFOFBT6*8JOEPX4DFOF PS
 XJOEPXXJOEPX4DFOFTDFOFBT 6*8JOEPX4DFOF͠ͳ͍ͱը໘͕ਅͬ ࠇʹͳΔ w ಉ͡σʔλΛࢀর͍ͯ͠Δ৔߹ʹίϯϑϦΫτ͢Δࣄ͕͋ΔͷͰ஫ҙ͕ඞཁ w ,70ͳͲΛ׆༻


Slide 14

Slide 14 text

஫ҙ఺ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXEDΑΓҾ༻ w MFUXJOEPX6*8JOEPX XJOEPX4DFOFTDFOFBT6*8JOEPX4DFOF PS
 XJOEPXXJOEPX4DFOFTDFOFBT 6*8JOEPX4DFOF͠ͳ͍ͱը໘͕ਅͬ ࠇʹͳΔ w ಉ͡σʔλΛࢀর͍ͯ͠Δ৔߹ʹίϯϑϦΫτ͢Δࣄ͕͋ΔͷͰ஫ҙ͕ඞཁ w ,70ͳͲΛ׆༻


Slide 15

Slide 15 text

J04ҎԼΛ౿·࣮͑ͨ૷ͷߟ͑ํ w 4VQQPSUTNVMUJQMFXJOEPXTʹνΣοΫΛೖΕΔ w దٓ*OGPQMJTUΛमਖ਼ w 4DFOF%FMFHBUFTXJGUΛ࡞੒ˍ"QQ%FMFHBUFʹϝιου௥Ճ !BWBJMBCMF J04 w "QQ%FMFHBUFTXJGUͱॲཧΛڞ௨Խ Ұ౓͔͠ݺ͹Εͨ͘ͳ͍΋ͷͳͲʹ ஫ҙ͕ඞཁ w ෳ਺8JOEPXಠࣗͷػೳͳͲΛ࣮૷͍ͯ͘͠

Slide 16

Slide 16 text

ڞ௨Ϋϥεͷྫ import UIKit final class AppEventHandler { @available(iOS 13.0, *) func createWindow(with windowScene: UIWindowScene) -> UIWindow { let window = UIWindow(windowScene: windowScene) window.backgroundColor = UIColor.systemBackground configureRootViewController(for: window) return window } func createWindow() -> UIWindow { let window = UIWindow(frame: UIScreen.main.bounds) window.backgroundColor = .white configureRootViewController(for: window) return window } private func configureRootViewController(for window: UIWindow) { window.rootViewController = UIViewController() } func willEnterForeground() {} func didBecomeActive() {} func willResignActive() {} func didEnterBackground() {} }

Slide 17

Slide 17 text

4DFOF%FMFHBUFͷྫ import UIKit @available(iOS 13.0, *) class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? lazy var appEventHandler = AppEventHandler() func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { if let windowScene = scene as? UIWindowScene { window = appEventHandler.createWindow(with: windowScene) window?.makeKeyAndVisible() } } func sceneDidDisconnect(_ scene: UIScene) {} func sceneDidBecomeActive(_ scene: UIScene) { appEventHandler.didBecomeActive() } func sceneWillResignActive(_ scene: UIScene) { appEventHandler.willResignActive() } func sceneWillEnterForeground(_ scene: UIScene) { appEventHandler.willEnterForeground() } func sceneDidEnterBackground(_ scene: UIScene) { appEventHandler.didEnterBackground() } }

Slide 18

Slide 18 text

"QQ%FMFHBUFͷྫ import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? lazy var appEventHandler = AppEventHandler() func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { if #available(iOS 13.0, *) {} else { window = appEventHandler.createWindow() window?.makeKeyAndVisible() } return true } func applicationWillTerminate(_ application: UIApplication) {} func applicationWillEnterForeground(_ application: UIApplication) { if #available(iOS 13.0, *) {} else { appEventHandler.willEnterForeground() } } func applicationDidBecomeActive(_ application: UIApplication) { if #available(iOS 13.0, *) {} else { appEventHandler.didBecomeActive() } } func applicationWillResignActive(_ application: UIApplication) { if #available(iOS 13.0, *) {} else { appEventHandler.willResignActive() } } func applicationDidEnterBackground(_ application: UIApplication) { if #available(iOS 13.0, *) {} else { appEventHandler.didEnterBackground() } } // MARK: UISceneSession Lifecycle @available(iOS 13.0, *) func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } @available(iOS 13.0, *) func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {} }

Slide 19

Slide 19 text

·ͱΊ w 6*8JOEPX4DFOF4DFOF%FMFHBUFͱ͍͏৽͍֓͠೦͕ग़དྷͨ w ಉ͡ΞϓϦ͕ෳ਺ىಈग़དྷΔͷ͸ָ͍͕͠σʔλͷ؅ཧ͕େม w ͨ͘͞Μςετ͠Α͏$ w ೥݄·Ͱʹ͸ରԠ͕ඞཁͳͷͰૣΊʹ४උ

Slide 20

Slide 20 text

13

Slide 21

Slide 21 text

• αʔόʔαΠυΤϯδχΞ (PHP, Golang, AWS) • AndroidΤϯδχΞ (Kotlin) • iOSΤϯδχΞ (Swift) TimersͰ͸ݱࡏΤϯδχΞશ৬छ࠾༻தʂ
 ৄ͘͠͸”Timers”Ͱݕࡧ

Slide 22

Slide 22 text

5IBOLZPV& ϕʔλ൛ͷ಺༰ʹ͸มߋ͕ՃΘΔՄೳੑ͕͋Γ·͢ɻ
 ਖ਼֬ੑͷ୲อ͸ग़དྷͳ͍ࢫΛྃ͝ঝ͍ͩ͘͞ɻ