iOS

Fix “App may slow down your iPhone” popup for Xamarin apps

Geert van der Cruijsen

For a while now (september 2015)  Apple requires apps that are submitted to iTunes to be 64 bit. When building your app for the simulator this isn’t required because app doesn’t go through the Apple screening. Since iOS 10.1 update however Apple added a little popup that checks if an app supports X64 and otherwise will show you a popup telling: “[App name] may slow down your iPhone”. It will only show the error message once and is meant for old apps which are added to the store before september 2015 and are still on peoples phones/tablets who need to update to X64.

Popup message: [App name] may slow down your iPhone

Screen Shot 2016-11-08 at 22.09.46

The fix is quite easy. just set the iOS build to support X64 also when building for the simulator.

Xamarin Studio

in Xamarin Studio go to properties of your iOS project. by rightclicking your iOS project. -> iOS Build tab  -> make sure that Supported Architecture for each configuration contains X86_64 or i386 + x86_64

Screen Shot 2016-11-08 at 22.08.58

Visual Studio

in Visual Studio right click your iOS project and select properties. -> go to iOS Build -> Advance tab ->make sure that Supported Architecture for each configuration contains X86_64 or i386 + x86_64

Screen Shot 2016-11-08 at 21.45.38

 

Although this is a small issue i got some questions by new developers what this message meant. so hopefully this blogposts helps those who were questioning why this message is showing up all of a sudden.

Happy coding!

Geert van der Cruijsen

The post Fix “App may slow down your iPhone” popup for Xamarin apps appeared first on Mobile First Cloud First.

Filtering objects to Optionals

Lammert Westerhoff

A while ago I stumbled upon a Blog post by Natascha the Robot about Configuring a Constant Using Shorthand Argument Names in Swift. Which by itself is a great post, but I was most inspired by the Then library mentioned at the end of her post. Seeing how such a small amount of code could change the way we configure constants everywhere gave me the idea to create something in a very similar fashion. But instead of configuring a variable it’s used to filter one based on a condition. Because why should filter only be applicable to collection types?

The usage of it is extremely simple and very useful:

extension String: Filter {}

"12345".filter { $0.characters.count > 4 } // Optional("12345")
"12".filter { $0.characters.count > 4 } // Optional(nil)

Only very little code is required to make this work:

extension Filter {

    /// Allows filtering of non sequence types.
    ///
    ///     let label = UILabel().then {
    ///         $0.textAlignment = .Center
    ///         $0.textColor = UIColor.blackColor()
    ///         $0.text = "Hello, World!"
    ///     }
    public func filter(@noescape condition: Self -> Bool) -> Self? {
        return condition(self) ? self : nil
    }

}

extension NSObject: Filter {}

Not enough code to make a library out of it in my opinion. Just copy this code into your project. I did create a GitHub Gist which I will update if needed.

With this code, any object that inherits from NSObject will work by default. For pure Swift objects, just add the one liner to let the object adhere to the Filter protocol.

I’d love to hear your comments and hear about alternatives to this.

Automated UI Testing with React Native on iOS

wvenema@xebia.com

React Native is a technology to develop mobile apps on iOS and Android that have a near-native feel, all from one codebase. It is a very promising technology, but the documentation on testing can use some more depth. There are some pointers in the docs but they leave you wanting more. In this blog post I will show you how to use XCUITest to record and run automated UI tests on iOS.
 Read more

Uncovering the mysteries of Swift property observers

Lammert Westerhoff

One of the cool features of Swift are property observers, perhaps better known as the willSet and didSet. Everyone programming in Swift must have used them. Some people more than others. And some people might use them a little bit too much, changing many of them together (me sometimes included). But it’s not always completely obvious when they are called. Especially when dealing with struct, because structs can be a bit odd. Let’s dive into some situations and see what happens.

 Read more

The power of map and flatMap of Swift optionals

Lammert Westerhoff

Until recently, I always felt like I was missing something in Swift. Something that makes working with optionals a lot easier. And just a short while ago I found out that the thing I was missing does already exist. I'm talking about the map and flatMap functions of Swift optionals (not the Array map function). Perhaps it's because they're not mentioned in the optionals sections of the Swift guide and because I haven't seen it in any other samples or tutorials. And after asking around I found out some of my fellow Swift programmers also didn't know about it. Since I find it an amazing Swift feature that makes your Swift code often a lot more elegant I'd like to share my experiences with it.

If you didn't know about the map and flatMap functions either you should keep on reading. If you did already know about it, I hope to show some good, real and useful samples of it's usage that perhaps you didn't think about yet.

 Read more

Simplification of iOS View Controllers: MVVM or Presentation Controls?

Lammert Westerhoff

We've all seen View Controllers consisting of hundred or even thousands of lines of code. One popular strategy of reducing view controller complexity is using the Model-View-ViewModel (MVVM) design pattern. But that's not the only way to separate the view controllers into smaller, easier to understand components. This post will explore using small Presentation Control classes to achieve a similar effect. They can even be used together with MVVM components.

 Read more

Parallax image scrolling using Storyboards

Lammert Westerhoff

Parallax image scrolling is a popular concept that is being adopted by many apps these days. It's the small attention to details like this that can really make an app great. Parallax scrolling gives you the illusion of depth by letting objects in the background scroll slower than objects in the foreground. It has been used in the past by many 2d games to make them feel more 3d. True parallax scrolling can become quite complex, but it's not very hard to create a simple parallax image scrolling effect on iOS yourself. This post will show you how to add it to a table view using Storyboards.

 Read more

Understanding the 'sender' in segues and use it to pass on data to another view controller

Lammert Westerhoff

One of the downsides of using segues in storyboards is that you often still need to write code to pass on data from the source view controller to the destination view controller. The prepareForSegue(_:sender:) method is the right place to do this. Sometimes you need to manually trigger a segue by calling performSegueWithIdentifier(_:sender:), and it's there you usually know what data you need to pass on. How can we avoid adding extra state variables in our source view controller just for passing on data? A simple trick is to use the sender parameter that both methods have.

 Read more

Increasing the tap area of UIButtons made with PaintCode

Lammert Westerhoff

Whether you're a developer or not, every iPhone user has experienced the case where he or she tries to tap a button (with an image and nothing happens. Most likely because the user missed the button and pressed next to it. And that's usually not the fault of the user, but the fault of the developer/designer because the button is too small. The best solution is to have bigger icons (we're only talking about image buttons, no text only buttons) so it's easier for the user to tap. But sometimes you (or your designer) just wants to use a small icon, because it simply looks better. What do you do then?

For buttons with normal images this is very easy. Just make the button bigger. However, for buttons that draw themselves using PaintCode, this is slightly harder. In this blogpost I'll explain why and show two different ways to tackle this problem.

 Read more

Working with PaintCode and Interface Builder in XCode

Freek Wielstra

Every self-respecting iOS developer should know about PaintCode by now, an OSX app for drawing graphics that don't save as images, but as lengths of code that draw graphics. The benefits of this are vastly reduced app installation size - no need to include three resolutions of the same image for every image - and seamlessly scalable graphics.

One thing that I personally struggled with for a while now was how to use them effectively in combination with Interface Builder, the UI development tool for iOS and OSX apps. In this blog I will explain an effective and simple method to draw PaintCode graphics in a way where you can see what you're doing in Interface Builder, using the relatively new @IBDesignable annotation. I will also go into setting colors, and finally about how to deal with views that depend on dynamic runtime data to draw themselves.

 Read more