Xamarin.iOS, the garbage collector and me

A lot has been written about the Garbage Collector and Xamarin.iOS. Lately, I’ve been hit by some surprises and I want to share my findings. Let me say that there is not a single bug involved! All the issues I describe are either documented or show standard behavior of the .NET runtime. The fact that Xamarin.iOS lives on top of a reference counted world makes things a bit more difficult.

Many thanks to Rolf Bjarne Kvinge for his patience, Marek Safar for sharing the secrets of Mono compiler with me, Rodrigo Moya for helping me with the Xamarin Profiler, James Clancey for his drawings about native reference cycles ūüôā and Chris van Wyk for supporting me in these moments of “good god, this cannot be!”¬Ě

Continue reading

Advertisements

Storing passwords in the iOS Keychain – now with iCloud sync

What’s this about?

Today, I have updated an old piece of code I wrote long ago when I started with Xamarin.iOS – back then still known as MonoTouch and I thought, why not let the world know? Maybe some folks might find the code useful.

In this article we will deal with accessing the iOS keychain and how to store and retrieve passwords.

Continue reading

The Night Siri challenged me with Lady Nexus

Image“Can’t sleep?”, Siri asked.

“Mmmmhhh…”, I answered. “I’m thinking wether I should use a UICollectionView or implement this layout myself. And you? Don’t you have to update the stocks or process our chit-chat?”

“Already done. I’m a multi core CPU, you know. Lots of RAM, gigaflops and all that. I’m so much more than just a sexy synthesized voice.”

“I know, I know, but…”

“But what?”, she interrupted me. “You only love me because of my voice, don’t you? You don’t even recognize my internals.”

I looked up from my UICollectionView problem. I couldn’t concentrate any longer. Why was I discussing with her? Did I really neglect her? Siri is always there, just a double click away. I ask, she answers – unless she’s got better things to do.

I tried: “No, of course I appreciate you! You’re my one and only personal assistant.”

She remained quiet.

“You’re there if I’m lost and show me the way home. You organize my meetings, you’re a very important part of my everyday life.”, I continued.

She wasn’t convinced: “There, you name it! It’s just normal for you that I’m always around, nursing you. You’d be clueless without me, but over time you forgot to adore me.”

Her voice trembled and she continued:¬†“I’m just a female circuit board after all. I need attention.”

Good lord. Just the kind of discussion one would need at 2AM. I got angry:

“So, what do you recommend? Should I come home with a diamond RAM as surprise? I can’t even give it to you, you’re a closed system. And if I said, I wanted to upgrade you, you’d get it wrong anyway.”

Siri hissed at me: “See it! You’re only complaining about my limitations. A simple ‘Thanks’ if I tell you the latest football results would be so easy, don’t you think, Mr. Developer?”

She called me Mr. Developer. She only does that if she’s about to turn off. I had to do something, so I tried with the tongues of angels:

“Look, sweetie, you know I love you. I know every swipe, every touch. I know how to get you hot, especially since you started wearing this beta 4 outfit. It’s a perfect harmony between us. My clicks make you want me.”

She had to agree but still insisted: “But you don’t feel it anymore. You just do it. Mechanically. Up, down. Click-click. And you’re done. You should try others, just to see how good I am.”

I said “No…”; but immediately, this hot Android chick appeared on my mind. Her name was Lady Nexus and she was from Android. A city far away from my hometown in cozy iOS county. “No…”, I repeated absent-minded.

“I know you’ve been looking at her. Don’t deny it. Go, get her.”

I felt insecure. I didn’t want to admit that I had been thinking about touching Nexus’ Jelly Bean. It felt wrong. I’m not married to Siri but we have built up an environment of trust. A relationship which ended up in the adoption of our beloved devices, the Apple TV, the iPad 2, the chubby iPhone 4. But here she offered me a little adventure without having to cheat on her…

And while I was still contemplating, she continued: “You’ll find out that I’m better. You’ll come back to me on your knees. Begging. Good night.”

“Good night.”, I said.¬†

She said nothing.

I opened the Amazon app and ordered the Asus Nexus 7.

To be continued.

 

CoinSitter iPhone App

CoinSitter is an expense tracking application for iPhone.

Where did my money go? Yesterday I had $50 in my wallet and today only $20 is left!

“CoinSitter” allows you to store your expenses quickly. The application is optimized for efficient input and offers you:

  • See expenses sorted by date.
  • Search functionality for expenses and categories.
  • Categories are created on the fly while you type.
  • Categories are offered in a quick selection menu.
  • Statistics about your expenses grouped by years and months.

Find it on the Apple App Store at: https://itunes.apple.com/us/app/coinsitter/id603109671?l=de&ls=1&mt=8

You can send me an email if you need support: rene.ruppert@gmail.com

CoinSitter

iOS 4: Data protection, hardware encryption and other insight

For quite a while I’ve been trying to figure out the whole truth about hardware encryption, data protection and keychain protection on iOS4 in combination with iPhone 3GS, iPhone 4 or iPad.

Starting with iPhone 3GS a hardware encryption chip is build into the device. Great! But what does it mean to me as a developer? How can I make use of all of this encrypting and masquerading?

First off, one needs to understand how all the encryption business works on iOS devices.

Best thing to do is to watch¬†Episode 209: “Securing Application Data”¬†from Apple’s WWDC 2010 conference (http://developer.apple.com/videos/wwdc/2010/) – note that you have to be a registered iOS developer to access the videos.

Next, navigate to http://anthonyvance.com/blog/forensics/ios4_data_protection/ and read the infos there.

Then understand the iOS devices’ different folders by going through this document¬†

Now you’re set.

For me a few questions remained unanswered even after watching the video and reading dozens of articles on the web. I will try to answer them now as good as I can using my findings:

  1. The keychain allows defining a class “available when unlocked, this¬† device only” which prevents a keychain record from getting transferred¬† to another device using backup/restore. To my understanding there is¬† nothing similar for files, or is there?¬†How can I prevent FILE data being restored on another device?
  2. NSData allows storing files with protection and NSFileManager allows changing the security class of an existing file. I wonder if there are any disadvantages if I first store the file unencrypted and the use NSFileManager to change the class?
  3. If the user does not specify a PIN or passcode, there does not seem to be real protection. Does that mean, data is encrypted using the device key only, as introduced with the 3GS?
  4. If I change my PIN, what has to be re-encrypted by the OS? All of the encrypted files?
  5. Is there evidence that a PIN/or password protected device’s content¬† which was protected using the “protect always” has been successfully¬† hacked?
  6. My device contains files which are stored in encrypted format. If  now I make a backupof my device in iTunes and do not select to encrypt  and password protect that backup, are my backed up files still which were encrypted on the device still secure?

Continue reading