watch kit pitfalls. developing ios app for dribbble

Post on 13-Aug-2015

119 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

WatchKit Pitfalls

Developing iOS App for Dribbble

Zgonik Vova

Register your application

• Website URL

• Callback URL

• Client ID

• Client Secret

• Client Access Tokenhttps://dribbble.com/account/applications/new

OAuth2 solutions

NXOauth2Client GTMOAuth2

• Detailed error handling

• Block callbacks

• No response body on auth

error

• NSNotificationCenter

Dribbble API understanding of HTTP response codes

422 Unprocessable

Entity

400 Bad request

500 Internal server

error

403 Operation is

forbidden

• upload shot or attachment

without mimeType

• follow more than 1800 followers

• follow own userId

• incorrect parameter name

• upload limit:

- 48 shots per month

- 5 shots per day

• access denied (canUplodShot =

NO)

429Too many requests

304Content not

modified

404Not found

204No content

API restrictions:

• 60 requests per minute

• 10000 requests per day

• no like shot, like comment

transaction entry found

• no following transaction entry

«A follows B» found

• presence of transaction entry

for

user «A follows user B»

• response on delete request

for:

like comment, like shot

• if the resource has not

changed in conditional request

with parameter

If-Modified-Since

• POST incorrect JSON

Requests Rate Limiting

low-priority

• check if like shot

• check if follow user

• 60 per minute

• 10000 per day

high-priority

• account request

• switch & load category of shots

• like shot

• follow user

Apple Watch

watchOS App

WatchKit App

WatchKit app Target

Storyboard

Resources

WatchKit Extension

WatchKit extension target

WatchKit codeand Resources

WatchKit App

IOS App

iOS app target

iOS Code

WatchKit Extension

WatchKit app stores on watch device and consist of storyboard and static resources (images, fonts)

WatchKit Extension stores on iPhone and consist of

source and resources

all source executes on iPhone, without iPhone

Watch app won’t launch

NOT SURE OF WHAT IS GOING ON HERE

iPhone

Extension Communication

Glance

Notification

WKInterfaceControll

er

Apple Watch

WatchKit App

Storyboard

Resources

WatchKit Extension

Code

Resources

WatchKitWatchKit

WatchKit Launch Flow

Launch WatchKit

APP

Load initialinterface controller

Initialize UI

Display UI

Storyboard

Interface controller

init willActivate

• user launches app on watch

• watchKit finds initial controller in storyboard and notifies iPhone

• watchKit Extension should be launched and specified class of controller is instantinated

WatchKit Extension

Glance

• no interactive items: buttons, switches

• no vertical scrolling

• San Francisco system font only

• Apple doesn’t recommend use maps and

tables

Notification short look

• no interactive items: buttons, switches,

sliders

• allow different typefaces of system font

• allow change tint color with app Name

Notification long looksystem stuff

application content

action definedin watch app

two types activation mode:

background & foreground

• openParentApplication:reply:

• App Groups

• Darwin-notification

• Handoff

WatchKit Extension and App Communication

Communication• model classes, web services,

credentials

• restricted API:

! any API marked with

NS_EXTENSION_UNAVAILABLE

! calls to UIApplication

+sharedApplication

! access the camera or microphone on

an iOS device

! receive data using AirDrop

Sharing code

openParentApplicationAPI on watch App [WKInterfaceController openParentApplication:reply:]

API on main application: implement

(:handleWatchKitExtensionRequest:reply:)

• main app launches in background

• error handling available

- slower than other methods + API calls time increases

- objects should conform <NSCoding>

App Groups

• com.apple.security.application-groups entitlement

• initWithSuiteName: (NSUserDefaults)

• containerURLForSecurityApplicationGroupIdentifier: (NSFileManager)

- main app can’t notify watch about new data

Darwin-notifications

Exchange messages between processes in iOS by means of Darwin-notifications

pod ‘MMWormHole’

Sending processNotification

notifyd

routines allow processes to exchange stateless

notification events

process 1

process 2

process 3

Client processesnotification is just a signalit can't transport any data apart from

the notification identifier

Handoff

• NSUserActivity in main app’s Info.plist

• perform updateUserActivity:userInfo:webpageURL: in

WKInterfaceController

• handle activity event in AppDelegate:

- application:willContinueUserActivity

- application:continueUserActivity:restorationHandler

Shot Bucket App

ApiClient

AppDelegate

ShotsViewController

WKInterfaceControllerWatch App

Main App

Core structure

ShotsControllerData source

Networking

ShotBucketCore Framework

App ModelsOauth2Clients

Api ClientsActionManager

Gallery on WatchKit

. . . . . . . . .

Gallery on WatchKit

reloadRootControllersWithNames:contexts:

swipe

InitialInterfaceController

swipe

12:0012-0012-00

12-00

Load more

Modal controller

12-00Close

ContentContent

More pictures?

Page-based Controller Life Cycle Changes

Smart personalized notifications without backend

Background fetch

Conditional requestLast-Modified: Sat, 22 Feb 2014 17:10:33 GMT

HTTP/1.1 304 Not ModifiedHTTP/1.1 200 OK

Local notification No action

BG Fetch issues

- [UIApplication performFetchWithCompletionHandler:]

UIBackgroundFetchResult

• UIBackgroundFetchResultNewData

• UIBackgroundFetchResultNoData

• UIBackgroundFetchResultFailed

https://github.com/agilie/dribbble-ios-sdk

top related