Ad

Our DNA is written in Swift
Jump

Author Archives rss

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

The Lion’s Full Screen Mode

Native Mac apps can and should support full screen mode. Apple calls it providing users “with a more immersive, cinematic experience”. While there a a few apps that would not reap any benefit for the user taking over the entire monitor, there are some apps that can benefit from it greatly. In my case a productivity app like iCatalog Editor.

Read more

In-House Mac App Distribution with Sparkle

Last Friday I felt the time being ripe – after over a month of intense work – to roll out the first 1.0 version of iCatalog Editor. This Mac app is meant to revolutionize the work flow of creating digital catalog editions at my partner International Color Services. All those people who are are tasked with converting the raw material for paper catalogs into their feature-rich interactive digital counterparts where lacking such a tool for the past two years.

Not any more. Two years ago I had promised that there would be a Mac-based editor, but until now I was lacking the guts to dive into Mac development. I was afraid that my iOS development knowledge would not do me any good and that being an iOS development pro wouldn’t do me any good on the big intimidating Mac platform.

It turned out to be an unfounded fear. There are quite a few pitfalls, but I am pretty sure any experienced iOS developer can put together a good-sized Mac app in about a month or so. That’s what I did.

Development goes on, but from here on forth I will bunch fixes and new features together in releases that I need to push out to the guys and girls using the Editor app. Since it is sharply targeted at the unique needs of ICS I abandoned an earlier thought of putting it on the Mac app store. So how would I go about releasing the updates in a way that is as convenient as the app store, but would allow me to supply only the select group of Catalog Editors?

The answer to this question is: the same way most professional apps had been distributed before there ever was a Mac app store: Sparkle.

Read more

Ziner is using DTCoreText

The developer of an upcoming Google Reader client wanted to share the following with me, and – with his permission – also with you dear reader.

I’m Jay Zhao, the developer of Ziner and I’m very happy to tell you that DTCoreText is great!  Thank you for writing such a great library!

Ziner uses DTCoreText everywhere!

DTCoreText is my open source solution for parsing HTML and rendering attributed text from it. Built on top of it is my commercial component for rich text editing DTRichTextEditor.

Read more

Fusion Drive for Everybody!

… well, almost. Of course you need to have both an SSD drive as well as an HDD drive present in your system. I just bought this Mac in April, 7 months ago. And of course I had gotten the dual drive option with a 256 GB SSD plus a 1TB HDD.

Manually having to manage what to place where is a pain. When I started to run out of space on the SSD I had moved my user folder to the HDD which was mounted at /Volumes/HDD effectively negating any speed benefit I would have gotten for working with my files. Like, for example, building apps since all my project files are located there as well.

Changing the Xcode temp folder wouldn’t net much of a measurable benefit as well, the bottleneck seems to be loading the project files from disk.

My heart jumped when I heard that Apple had invented the FusionDrive technology promising to end these managing pains.

Read more