Replacing Launch Images with Storyboards using Xamarin.iOS

by Runar Ovesen Hjerpbakk


As of iOS 8 you can now use storyboards instead of images for your app's launch image. This is convenient, as you only need to create one storyboard instead of multiple launch images (one for each device form factor). This post by Ole Begemann outlines the procedure for a regular iOS app, I'll now show you how it's done using Xarmarin.iOS.

Instructions

  1. Create an empty storyboard in Xamarin Studio and name it LaunchScreen.storyboard.
  2. Open Options for your Xamarin.iOS project and set the newly created storyboard as the launch image.
  3. Edit your storyboard using Xamarin iOS Designer or Xcode Interface Builder. The iOS Human Interface Guidelines specifies that:

Design a launch image that is identical to the first screen of the app, except for: [1] Text. … [2] UI elements that might change.

After you're satisfied with your design, remember to tick the Is Initial View Controller checkbox. Without it, your View Controller will not be loaded and you're stuck with a black only launch image.

Note that storyboard launch images do not work in the iOS Simulator at the moment, so be sure to test it on a real device.

Caveat

After replacing your launch images with a storyboard, your app will appear in full size on all devices. This includes the iPad, even if you've created an iPhone only app. If your app is unusable on the iPad in this state, I would hold off until / if this bug is fixed.

Book Scanner will use a storyboard launch images from version 1.5, which is under development.

(If you liked this, you might enjoy Xamarin.Forms - App Store Rejection.)


Windows Forms + CefSharp = grey content?

by Runar Ovesen Hjerpbakk


I've lately been evaluating CefSharp to use as an embedded browser in an old Windows Forms project.

The examples are great and the packages from nuget are easy to use, but I ran into an annoying issue. The content of the loaded page was sometimes grey. Nothing but grey. However, when I resized the embedded browser window, the page appeared. Just as it should. What is going on here?

The browser-control was added to the Form in a normal fashion:

The appearance of the page content after resize was a clue. Perhaps the content was loaded correctly, but the control was too small to show it? Curious that DockStyle.Fill didn't do the trick as it usually does, but worth a try:

Now the browser always has the correct size and all is well, or rather, as well as can be while working with Windows Forms...


Xamarin.Forms - App Store rejection

by Runar Ovesen Hjerpbakk


My new app Personal Trainer Worksheet - Time Tracking for Professional PTs is written using Xamarin.Forms and is currently available on the App Store. It's been a pleasure developing it using the Xamarin tools and I decided to release a iOS version first. However the App Store did not quite agree this time...

Application Loader

While submitting the App using Application Loader, it complained that the API usage info to be sent to Apple was too big, and that the analysis would continue on Apples servers. Okay, I thought and submitted anyway.

Moments later, this mail arrived in my inbox:

We have discovered one or more issues with your recent delivery for "Personal Trainer Worksheet - Time Tracking for Professional PTs". To process your delivery, the following issues must be corrected:

Non-public API usage:

The app references non-public selectors in PersonalTraineriOS: artwork, command, finished, initWithSendPort:receivePort:components:, isContainer, isNegative, playbackProgress, playbackRate, rating, removeTarget:, setArtwork:, setContainer:, setLocalizedTitle:, setPlayable:, setPlaybackProgress:

That was quite a mouthful.

Enable linking for SDK assemblies

The app doesn't use many third party dependencies, so I was quite certain the error was on my part.

The Monotouch linker can remove unused classes from your Xamarin iOS App, thus decreasing its size. The "too big" error message in Application Loader was actually a good hint that the linker had not run.

Sure enough, my project settings were set to Don't link. After changing it to Link SDK assemblies only, the API usage analysis ran successfully and the app was approved.

Enable linking for SDK assemblies.png

I don't know why the non-linked binary was rejected, but this thread on the Xamarin Forums shows that I'm not alone.

(If you liked this, you might enjoy Xamarin.Forms 24 hour TimePicker on iOS.)