ios - Splash Screen Issue iPhone -
i using launch screen in xcode splash screen app.
there image on splash screen, no api hit in background.
taking long on splash screen time exceed of 20 sec , app crashed there, have checked on device log well.
sometime crashes , runs takes long.
not able move next screen there. , shows white screen before splash screen iphone 6 plus (no white screen on other devices).
how come out white screen issue iphone 6 plus , resolve splash screen time long issue ?
func application(application: uiapplication, didfinishlaunchingwithoptions launchoptions: [nsobject: anyobject]?) -> bool { // override point customization after application launch. // self.prepareforcontact() if let a: anyobject = (nsuserdefaults.standarduserdefaults().objectforkey("isfirsttime")) { if let a: anyobject = (nsuserdefaults.standarduserdefaults().objectforkey("userid")) { self.createappfromhomepage() } } else { self.createappfromwelcomescreen() } isallimagedownloading = false // save data hit friend service on login on every launch... nsuserdefaults.standarduserdefaults().setobject("1", forkey: "hitfriendservice") let credentialsprovider = awscognitocredentialsprovider(regiontype: cognitoregiontype, identitypoolid: cognitoidentitypoolid) let configuration = awsserviceconfiguration(region: defaultserviceregiontype, credentialsprovider: credentialsprovider) awsservicemanager.defaultservicemanager().defaultserviceconfiguration = configuration //print(credentialsprovider.secretkey) if let event_id: anyobject = nsuserdefaults.standarduserdefaults().objectforkey("eventid") { self.geteventdescription() self.uploadeventremainingimages() } let session1 = avaudiosession.sharedinstance() session1.setcategory(avaudiosessioncategoryplayandrecord, withoptions: avaudiosessioncategoryoptions.mixwithothers|avaudiosessioncategoryoptions.defaulttospeaker|avaudiosessioncategoryoptions.allowbluetooth, error: nil) session1.setactive(true, error: nil) uiapplication.sharedapplication().beginreceivingremotecontrolevents() let nsdocumentdirectory = nssearchpathdirectory.documentdirectory let nsuserdomainmask = nssearchpathdomainmask.userdomainmask if let paths = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, true) { if let dirpath = paths[0] as? string { self.excludefrombackuptoicloud(dirpath) } } if application.respondstoselector("registerusernotificationsettings:") { let types:uiusernotificationtype = (.alert | .badge | .sound) let settings:uiusernotificationsettings = uiusernotificationsettings(fortypes: types, categories: nil) application.registerusernotificationsettings(settings) application.registerforremotenotifications() } else { // register push notifications before ios 8 // application.registerforremotenotificationtypes(.alert | .badge | .sound) } if let isfirsttime: anyobject = nsuserdefaults.standarduserdefaults().objectforkey("isfirsttime") { } else { uiapplication.sharedapplication().applicationiconbadgenumber = 0 // nsuserdefaults.standarduserdefaults().setobject("1", forkey: "isfirsttime") } return true }
you being killed watchdog. app not crash per say.
investigate
profile app under instruments: see right away taking long.
fix
allow didfinishlaunchingwithoptions
return immediately. factor out hard work in separate method, can invoke so:
swift
func application(application: uiapplication, didfinishlaunchingwithoptions launchoptions: [nsobject: anyobject]?) -> bool { self.performselectoronmainthread("didfinishlaunching", withobject: nil, waituntildone: false) return true }
and hard work after returning (next event loop)
func didfinishlaunching() { // time consuming work goes here }
objective-c
[self performselectoronmainthread:@selector(didfinishlaunching) withobject:nil waituntildone:no]; - (void) didfinishlaunching { // time consuming work goes here }
Comments
Post a Comment