iOS app launch takes too long to display - objective-c

Working on first app, have most of the programming done but app is taking too long at launch to display first tableview on tabbar. It takes 8-10 seconds on launch to display. Looking for help on tracking down what code is taking so long, etc. Here is the general app setup: tabbar with 5 tabs including navigation bars, mix of tableviews with detail views and scrollviews. The data for the tableviews is from multiple json feed from a remote web server. In the appdelegate.m I'm setting up the full tab/navigation bars. I get the json data feeds in each individual view controllers that setup on the tabbar. I've used the Profiler but don't know what I'm looking for and where. What is loaded on launch? Any advice on general setup of app that could be causing the delay? Does it load all views associated on the tabbar? Thanks in advance for any help.

Run your program through instruments. Always. All the time. It will tell you most of the problems.
That said, you probably need to delegate your startup tasks to background threads, and update the UI as data comes available.
Use NSOperation, GCD, and related technologies for executing your background tasks.

Related

WatchKit crash due to accepted event even if not everything is loaded

I have made an extension with a storyboard and some table view. In the simulator all is running ok, but when I try the app on Apple Watch I have some troubles. Since the Apple Watch is slower than the simulator it takes about one second to display the table views. During this time in the place of the table view is displayed nothing. If the user press the empty area that will be filled by the table view, as soon as the table view become visible it will be processed the event associated to the table view. I do not know why but this causes the app crash!!! I think everything would be solved if I do like in the other applications on my Apple Watch that while loading the view shows the rotating circle and not the elements of the view that are already in the storyboard (like buttons and labels) added at compile time.
I have to say that maybe the crashed are due to an use of NSTimer that modify some variables modified by the app, maybe I should use a mutex. But I do not figure how in the Apple Watch the application crashes (or it appears the rotating circle and keep rotating) but in the simulator is ALL OK. What can I do? Do you need additional information? Thanks!

progress bar during loading

i wrote an app with different views, the main one is basically a web view that displays a PDF on the web (with a specific url). the problem is that this pdf is a bit big (around 5-10 MB) and it takes a lot to load it. during this loading period the screen remains white. i thought to add a sort of progress bar that appears and disappers automatically, based on the file loading, but i have no idea about how to do this… can someone help me?
(if you have better ideas you are free to tell)
if you are using web view to load the pdf then you can use the webview delegate methods to show the progress bar

cocos2d mac application how to add splash screen when launching (Default.png)

i am migrating my iOS app onto mac. the loading time is a bit long (around 5 seconds) thus i need a splash loading screen (Just like Default.png image for iOS) but the project made from cocos2d template just shows a white screen. not sure about other apps. so is there anyway to set it?
I know that the screen size is not fixed on a mac app. but i have set a default size. and use auto scale in case of full screen mode.
EDIT:
I have tried a light weight loading scene as well but failed since the MainScene itself is light weight as well. I think the major loading time is due to the cocos2d environment set up.
In OS X a window appears when the application launches, it's not designed to use splash screens.You might want to reconsider that choice.
But if the window is still to slow to load or to display its contents, you can still do that but manually, it isn't easy like in iOS.You need to display another view inside the window until it loads.
EDIT
A little more of context: for example you can set in your xib file an image view containing the image do display.
Then you make start another thread that loads all the content that you need.After this, run a selector on the main thread that updates the window.
Based on my tests in Cocos2d 1.0.1 & 2.0 the basic Cocos2d OS X app launches really quickly.
This makes it seem pretty likely that it's something about your first scene that is taking a long time to load, or something else. Instruments can help you gather information about what your app is doing.
I suggest you make an initial lightweight cocos2d scene that will load quickly at startup and then load your second scene and transition to it. Ideally the loading of the assets for your second scene would be asynchronous (at least the ones that are slow). There are numerous blog posts on how to do this. (search for "cocos2d asynchronous loading" and you'll find many, such as this one: How to preload your game assets in a loading scene, though something more recent might be preferable).

iOS: Update UI while in Running in Location Services Background

I have a simple app that uses location services, and registers to run in the background. I update a simple tableView with location data. This data is still being received when the user leaves the app and does something else.
Currently I am calling a method in my - (void)applicationWillEnterForeground:(UIApplication *)application to update the UI, but there is still a split second when the app opens, and the UI gets updated.
I have also tried to do periodic UI updates when in the background, but not surprisingly this doesn't seem to work.
Are there any solutions out there so that I can have the UI fully updated when the user brings the app back into the foreground?
The best solution would probably be to profile and see why you have any delay at all before displaying new data. It's quite possible you could do some things to get ready for the display to arrive, like doing Core Data queries ahead of time (they can take a significant amount of time).
An alternative would be to dump a blank UI bitmap from the screen as you were being suspended, and write to it directly based on activity - then when the application resumes, briefly show that bitmap as a screen overlay before showing the real complete UI.

How to create a Tab Bar Based program with 5 Views

I am relatively new to ObjectiveC, but not with programming in which I have experience with both C and Python. I was wondering how to make an application that has a tab bar on the bottom, and five views all with labels and a certain amount of text on them. Then, also, I want to migrate an image on too one of the files and have audio on in the background. Does anyone know how to do this, and I am also open to suggestions that incorporate using C as part of the program.
Check out this video tutorial and then just modify it to add in an extra couple of view controllers to connect to your UITabBarController. I try to avoid using the Tab Bar template in XCode as you don't get an option to include the Core Data stack. Even though you might not think you will use CD, it is nice to have it available, and starting with an empty application is much easier to work with IMO.
Launch Xcode and select file->new->new project->Tabbed Application
Since you are new to XCode/Objective C, I recommend that you create a new Project in XCode choosing "Tabbed application", play around and understand the project that loads.
When the project loads by default you will get 2 tabbar items only, but you can add more View Controllers and associate them with the Tab Bar Controller to have your total 5 views
You can also change image and text for each of the tabbar items based on your needs.
I think looking at this a Video tutoral : http://youtu.be/aorBSWbhGEE will be helpful to understand it quickly. You can search on Youtube for more similar videos