[CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
-
Upload
cocoaheads-tricity -
Category
Software
-
view
58 -
download
0
Transcript of [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps
![Page 1: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/1.jpg)
Modern iOS app Architecture
Michał TuszyńskiiOS Developer, Schibsted Tech Polska
![Page 2: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/2.jpg)
Agenda
1. Real time apps2. Modern asynchronous Core Data3. Embedded frameworks
![Page 3: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/3.jpg)
What’s wrong?
![Page 4: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/4.jpg)
What’s wrong?
func startPolling() { let timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "update:", userInfo: nil, repeats: true) NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSDefaultRunLoopMode) } @objc func update(timer: NSTimer) { let request = NSURLRequest(URL: NSURL(string: "https://myawsomeapp.com/get_something")!) let task = session.dataTaskWithRequest(request, completionHandler: handler) task.resume() }
![Page 5: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/5.jpg)
What’s wrong?
Continuous polling is (usually) bad.
![Page 6: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/6.jpg)
What’s wrong?
Alternative?
![Page 7: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/7.jpg)
What’s wrong?
Silent Notifications!
![Page 8: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/8.jpg)
{ "aps": { "content-available": 1, "sound": "" }, "object": { "value": "test" } }
Silent Notifications!
![Page 9: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/9.jpg)
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler handler: (UIBackgroundFetchResult) -> Void)
Silent Notifications!
![Page 10: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/10.jpg)
Background fetch
Silent Notifications!
![Page 11: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/11.jpg)
Background fetch
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)
![Page 13: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/13.jpg)
What’s wrong?
let context = NSManagedObjectContext() context.persistentStoreCoordinator = persistentStore
![Page 14: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/14.jpg)
What’s wrong?
Thread confinement is obsolete and left for backwards compatibility
![Page 15: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/15.jpg)
What’s wrong?
Parent-child contexts are the way to go
![Page 16: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/16.jpg)
Asynchronous Core Data?
![Page 17: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/17.jpg)
Asynchronous Core Data?
- Separate context for writing to persistent store- NSAsynchronousFetchRequest- NSBatchUpdateFetchRequest
![Page 18: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/18.jpg)
Embedded Frameworks
![Page 19: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/19.jpg)
Frameworks vs static libraries
![Page 20: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/20.jpg)
Choosing the right option
![Page 21: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/21.jpg)
Use dlopen() on iOS 7
![Page 22: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/22.jpg)
if (SystemVersionGreaterOrEqual(@"8.0")) { NSString *frameworkPath = [[NSBundle mainBundle] pathForResource:@"HockeySDK" ofType:@"framework"]; NSString *libraryPath = [frameworkPath stringByAppendingPathComponent:@"HockeySDK"]; void *handle = dlopen([libraryPath cStringUsingEncoding:NSUTF8StringEncoding], RTLD_LAZY); if (handle == NULL) { NSString *error = [NSString stringWithUTF8String:dlerror()]; NSLog(@"dlopen failed: %@", error); return; } id hockeyManager = [[NSClassFromString(@"BITAuthenticator") alloc] init]; dlclose(handle); }
![Page 23: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/23.jpg)
Wrap up
![Page 24: [CocoaHeads Tricity] Michał Tuszyński - Modern iOS Apps](https://reader030.fdocuments.in/reader030/viewer/2022032620/55ce4b28bb61eb73088b4805/html5/thumbnails/24.jpg)
Thank you!