Ad

Our DNA is written in Swift
Jump

Radar: UITextView Ignores Minimum/Maximum Line Height in Attributed String

I’m working on making DTCoreText iOS 6 compatible and when implementing line heights I found this problem. Naturally I filed a radar.

This is one of many shortcomings of UIKit’s support for attributed strings. A workaround for this was described as having to omit font attributes from the attributed string. So you can either have multiple fonts and unchanging line height or only the font you set on the font property of UITextView.

Other people are having the same problem, as outlined by this question on StackOverflow.

Filed as rdar://12863734

Read more

Our Revenues

I received a spreadsheet from our accountant that totals our company revenues over the various categories of income that we receive. I figured, why not share this with you? I won’t tell you the absolute numbers, but I think the relative distribution might be interesting.

19 months ago I wrote about the various kinds of income an iOS development outfit can have, when I was basically still in the discovery phase. Taking a long hard look at the distribution over those categories should yield some insights as to how to tweak the amount of effort you put into the various items.

Read more

Image Decompression Benchmark: iPad 4 + Mini

It’s been a while since the unveiling of the iPad mini and new new Retina iPad (aka iPad 4). I like to compare image decompression performance between device generations because personally I believe that this tells a more tangible story than any other benchmark where you end up with some score.

We were told that iPad 4 would be twice as fast as the iPad 3 and that the iPad mini would be at the same performance level as the iPad 2. So we shall compare the results for these devices to see if these statements hold. Also we would like to know if there is any sort of tangible benefit from including armv7s code in our apps.

Read more

Please Respect Your iOS Artists

I am so angry right now. It is taking a lot of restraint to not be resorting to swear words about this one well-known corporation. Trust me, every time I have to cancel an invoice for a component from my Parts Store I am contemplating creating a black list page on my site. Those would be the companies to not do business with.

But I never carry this through. I don’t like to burn bridges. At least not fully.

Read more

Bug: Quartz PDF Rendering with CMYK Page-Level Transparency Blending Color Space

That’s certainly a mouth full. We stumbled on this weirdness when working on PDF Importing for our iCatalog Editor. I am filing this as a Mac bug at the same time as communicating with DTS to see if they can offer a workaround for this problem.

The problem appears if a PDF is using a CMYK color blending space on a page for transparency blending. That causes this effect. Left side is how the PDF comes out on Mac, right side how it looks correctly on iOS (Simulator/Device). Also if you view the PDF in Preview or Pixelmator it looks weird, only in Adobe’s tools do they look correct.

If the behavior were the same on Mac and iOS then I would have thought to be Adobe using some weird special extension, but since the output is correct on iOS we think that this must actually be a bug. Maybe the Mac version of Quartz PDF rendering tries to do something smart since it is aware of color calibration but doing so messes up the colors.

Read more

First Good Auto-Layout Use-Case

While developing away on my iCatalog Editor I found what I believe to be the first instance in my career as developer where Auto-Layout actually saves me a lot of work.

Before Auto-Layout you would have to calculate view frames and apply them, usually in a layoutSubviews on iOS. The problem being that it usually takes lots of experimentation to get all the cases right.

In my use case I wanted to create a panel for my Mac app that would dynamically adjust to an optional icon on the left side and an optional cancel button on the right, with a progress bar in between. Auto-Layout (after some initial non-understanding on my part) made this a sinch.

While I am exploring constraints for a Mac app, the exact same methods also apply for iOS development.

Read more

NSValue for Custom Structs

Apple provides extensions for NSValue to store most CoreAnimation-related structs in there: CGAffineTransform, UIEdgeInsets, CGPoint, CGSize, CGRect, UIOffset. And of course the inverse methods for getting the structs back out.

This is quite useful if you need to store these structs in an Objective-C container object, like a dictionary. On Mac I found these methods missing, even though I needed to put an affine transform into a object property.

Fortunately NSValue can easily be extended to handle any kind of custom struct.

Read more

Black Friday Sale

Don’t miss our Black Friday sale. 

SAVE 50% ON EVERY APP!

GeoCorder

$2.99 $0.99

Linguan (Mac)

$19.99 $9.99

iWoman

$3.99 $1.99

Summertime

$1.99 $0.99

SpeakerClock

$0.99 Free

iFR Cockpit

Free

 

ONE DAY ONLY!

 

SpeakerClock 1.1.3

We have totally modernized the code base of our talk timing app SpeakerClock so that we can bring you some exciting new features in the next major release.

Changes

  • ADDED: Launch images for all devices and resolutions
  • ADDED: iOS 6 and iPhone 5 support
  • FIXED: Preset values not getting saved if the app gets terminated
  • FIXED: Presets might not be showing after purchase

The update has been submitted to Apple and is waiting for review.

Update Nov 27th: The update has been approved by Apple.

Revisited

The last update for SpeakerClock came out in March 2012, about time that I had a look at a few issues that users have reported and maybe add some fancy new stuff.

With every old app of mine I am looking at I find that I was still using the old paradigm for creating a window and root view controller. Though ever since iOS 6 and the iPhone 5 this has become outmoded.

In this blog post I will have a look at some old code and how it can be properly modernized. Maybe I can give you a slight nudge with it to do the same on some of your own old projects.

Read more