The Long and Winding Road

Filed under: Cornerstone — Simon @ 3:16 am

Cornerstone’s release to the Mac App Store yesterday marked the end of a 6-month process.

We made a couple of mistakes along the way, so we thought that we’d document some of them in the hope that it might be useful to others intending to submit their apps to the Mac App Store.

The Sitdown

Apple approached us back at the beginning of November to discuss getting Cornerstone into the Mac App Store at launch. They even took the time to meet us in Zurich to help us get started and to answer any technical questions.

We immediately set about registering with the Mac Developer Program and modifying the app to meet Apple’s requirements.

The fruit of these labors has been visible for some time and some users probably noticed that the software update-related preferences were moved to their own preference pane in 2.0.3.

This was in preparation for our first submission to the Mac App Store back in mid-November.

A Little Less Sparkle

Unfortunately Cornerstone was rejected at the beginning of January. Apple’s review guidelines state that an app may not use any installation technology other than the Mac App Store and Cornerstone inadvertently violated that rule.

Cornerstone has historically used Sparkle to check for updates and although we completely removed the Sparkle framework along with all related UI, the app’s .plist file contained a vestigial configuration entry for Cornerstone’s appcast feed.

Lesson learned:

Make absolutely sure that all traces of Sparkle or alternative installation or updating technologies are removed before submitting an app for review.

Obvious in hindsight, but nonetheless easily overlooked.

Info.plist Permissions

Our solution for the Sparkle .plist entries involved using the defaults command-line tool to remove the SUFeedURL entry during the Cornerstone build.

An unfortunate side effect of using the defaults tool is that the Info.plist file is converted from XML to binary format in the process. Luckily we spotted this during testing and implemented a fix: the modified Info.plist file is now converted back to XML using the plutil -convert xml1 command.

What we didn’t expect is that the plutil tool changes the permissions of the output file to be:

-rw-------

Erm, oops! With an Info.plist file like that Cornerstone can only be launched by the person that installed the app. This isn’t a problem for most users but it is for apps installed from the Mac App Store.

Thankfully, Apple’s review procedure caught this issue and Cornerstone was rejected a second time.

Lesson learned:

Test app installation with the installer tool provided by Apple. Be sure to run the tool as an admin user other than yourself.

We should have been doing this but hadn’t done our homework: Apple’s Submitting to the Mac App Store documentation clearly mandates that developers perform this test in advance of submission.

Window Resizing

We were rejected a third time in March. The reason? Resizing the main application window to a very small size resulted in unrecoverable layout issues.

We promptly fixed this in 2.2 by defining a minimum size for the main window. We also improved the collapsing behavior of the inspector to better deal with small window sizes.

Lesson learned:

Test the behavior of your app’s UI when the window is resized to it’s minimum size. If you haven’t defined a minimum size for your app’s window then you should probably consider doing so.

Some might claim that Apple is being overly pedantic, but we disagree. An app’s UI should be predictable at all sizes and fixing this improved the quality of Cornerstone.

In Summary

It’s been a long and winding road. And we’ve only described a couple of the roadblocks we encountered along the way.

There were many other things that we had to do to get Cornerstone into the Mac App Store:

  • Create a build without PPC code
  • Remove the licensing and Sparkle UIs
  • Remove their accompanying frameworks
  • Add Mac App Store receipt verification and authentication
  • Adapt the app’s configuration to meet Mac App Store requirements

The list goes on and on.

But it was worth it. We strive to make excellent Mac software and part of the challenge is providing a user experience consistent with Mac conventions and idioms.

Before January 6th 2011 that meant shipping your app as a .zip file or disk image. Now it means being on the Mac App Store.

Thanks

Finally, we’d like to take this opportunity to thank the guys at Apple that supported us on numerous occasions over the last six months.

We won’t mention any names, but if you’re reading this: Thanks. Your help was very greatly appreciated!

Cornerstone 2 Available on the Mac App Store » Press Release

Filed under: Cornerstone,News,Press Releases — Administrator @ 7:34 am

Mac App Store

ZURICH, Switzerland – April 26th 2011

Zennaware is pleased to announce that Cornerstone, the ultimate Subversion app for Mac OS X is immediately available for purchase on the Mac App Store.

Cornerstone is priced at $59.

Zennaware will also continue to sell Cornerstone direct to customers through the online store on zennaware.com.

About Zennaware

Zennaware is a small independent software vender which develops high-quality applications exclusively for Apple’s Mac line of computers to run on Mac OS X. Zennaware is located in Zurich, Switzerland.

Press Contacts

For press-related questions please contact press@zennaware.com.

Release Notes for 2.2.1

Filed under: Cornerstone,Release Notes — Administrator @ 4:40 am

2.2.1 is a maintenance release which solves issues uncovered since the release of 2.2.

See Release Notes for 2.2 for more information on the new features and improvements introduced with 2.2.

Resolved Issues

# Description
1148 Non-default values for the Subversion global-ignores option are not displayed in the “Global Ignores” field in the Subversion preference pane when the window is opened
1149 Some activities (e.g. commit) which result in errors re-appear in the “ACTIVITIES” area when subsequent operations are started
1150 Inspector fields for standard properties do not revert to display working state when “Revert to Saved” is clicked

Release Notes for 2.2

Filed under: Cornerstone,Release Notes — Administrator @ 3:39 am

2.2 is a free upgrade for all Cornerstone 2 license holders.

New Features

  1. Full support added for user-defined Subversion properties

    Cornerstone 2.2 adds support for user-defined Subversion properties (also known as custom properties.)

    The approach taken by Cornerstone differs somewhat to other Subversion client applications, which generally display user-defined properties as simple key-value pairs.

    We believe this approach has several disadvantages for the user:

    1. It is easy to misspell both property names and values. The UI does nothing to reduce the cognitive load for the user.
    2. The properties are not necessarily self-describing, i.e. semantics of the properties are not clear to the end-user and possible values are not described by the UI, often necessitating additional guidelines or documentation.
    3. Values are assumed to be textual. Binary values are not well supported, if they’re supported at all.
    4. Values are assumed to be single-line. Multi-line text is not well supported.

    Instead, Cornerstone allows the user to extend the property tab of the Inspector to add custom fields for user-defined properties. The following field types are supported:

    1. Multi-line text field
    2. Checkbox
    3. Pop-up list
    4. File

    For each field, the name of the underlying property and a descriptive label is specified in the new User Properties preference pane. The property name and (if appropriate) possible values are managed internally by Cornerstone, thus relieving the user from the burden of remembering these details and ensuring that these values are always entered correctly.

    The checkbox field type displays a boolean value as a checkbox and the user can configure the value of the property when the button is checked.

    The pop-up list field type allows the user to define a set of possible choices for the property, along with (optional) textual labels shown in the pop-up list.

    The file field type allows the user to drag a file from Finder to the Inspector to store the contents of the file as a user property. Cornerstone stores additional metadata about the file (e.g. original name, type and thumbnail) in a sidecar property (this behavior can be disabled if inappropriate.) This information is used to restore the file with the correct name and type information when the file is dragged from Cornerstone to Finder.

    User property fields support multiple-selection in just the same way as the standard property fields displayed in the Inspector. As a result user properties can be inspected and assigned for multiple files at once.

    Finally, user property preferences can be shared between multiple Cornerstone users using the Export… button in the user property preference pane. The resultant file can be distributed to other users who can import the user property definitions by double-clicking the property file in Finder. (#141)

  2. Cornerstone sends Growl notifications on completion of long-running commands

    Cornerstone 2.2 notifies Growl of completion of the following commands:

    • Checkout
    • Commit
    • Export
    • Import
    • Switch
    • Update

    Please note that Cornerstone does not include or install the Growl application or preference pane.

    If you wish to receive notifications via Growl then you will need to download and install Growl yourself from the Growl project website.

Performance Improvements

  1. Preference added to control interval for background status checks

    Cornerstone 2 added support for the display of repository status summary badges in the working copy source list. Cornerstone monitors changes in the repository by periodically contacting the repository to get information about a working copy’s source folder. Such periodic checks could have a negative impact on server load.

    Prior to Cornerstone 2.2, it was possible to disable these background status checks, but there was no way to reduce the check frequency: the time interval was set at 5:00 minutes.

    Cornerstone 2.2 adds a new preference which provides the user with greater control over how often the application performs background status checks. The default value is Every 10 minutes (up from 5 minutes in the previous version), which should significantly reduce the load caused by Cornerstone with the default settings.

    If appropriate, the user may increase the frequency of checks by selecting More often (every 5 minutes), or decrease the frequency by selecting Less often (every 30 minutes).

    Background checks can also be disabled by selecting Never. (#1104)

Usability Improvements

  1. User interface of the Import… command was improved

    The layout of the Import sheet displayed when the File > Import… is selected (or a file or folder is dragged onto a repository) was improved. Specifically, the option to check out a working copy for the imported folder is now always visible and more clearly labeled.

    The Import options sheet is now always displayed when a file or folder is dragged from Finder to Cornerstone’s repository browser (options were previously only displayed if the Option key was pressed). This makes the drag/drop user interface consistent with that displayed when the Import… command is used, and improves the visibility of the functions available to check out a working copy after import completion.

  2. Obstructed files are now displayed correctly

    Cornerstone now displays a status image for obstructed files in both the Browser View and Inspector. Obstructed items are also included in the Browser View’s Changed filter. (#1139)

  3. File sizes are now reported in kilobytes

    Cornerstone 2.1 and earlier used a kilobyte size of 1,024 bytes (i.e. a kibibyte, or KiB) when calculating the file sizes displayed in the application’s user interface. This behavior was chosen for consistency with Mac OS X Finder in 10.4 Tiger and 10.5 Leopard.

    Cornerstone 2.2 now uses the kilobyte size of 1,000 bytes as defined by the SI standard. This behavior is consistent with Finder in Mac OS X 10.6 Snow Leopard. As a result, file sizes will be reported as slightly higher than in previous versions of Cornerstone.

    It is important to realize that Microsoft Windows applications generally report file sizes in kibibyte values (i.e. with a kilobyte size of 1,024 bytes) even though the displayed unit is KB, i.e. kilobyte. File sizes are therefore likely to be reported slightly lower by Subversion clients running on Microsoft Windows than by Cornerstone.

  4. Modified items are no longer displayed with bold text in the working copy browser

    In previous versions of Cornerstone, modified working copy items were displayed using a bold font in the working copy browser. Cornerstone 2.2 now displays modified items using the standard non-bold font in order to reduce visual clutter.

  5. Standard property names are no longer shown in the Inspector

    Previous versions of Cornerstone displayed the name of the underlying Subversion property above each field in the Inspector’s Properties tab.

    The property name fields added little functionality to the property tab. Users familiar with Subversion’s standard properties have no difficulty associating the Inspector’s fields with their underlying properties and the fields added nothing other than clutter for less experienced users.

    The property name fields were therefore removed in Cornerstone 2.2.

  6. HTTP timeout field removed from Subversion preferences

    Cornerstone 1.5 and later included an HTTP timeout field in the Subversion communication preference pane that allowed the user to change the value of the http-timeout option in Subversion’s ~/.subversion/servers configuration file.

    Ommitting a value for http-timeout causes Subversion to use a default timeout value of 3,600 seconds, or 1 hour. This high default value guards against timeouts caused by long-running HTTP requests such as those retrieving log or blame information.

    It makes little sense to override such a high timeout value: reducing the value risks timeouts occurring during normal long-running requests, and increasing the timeout to values greater than 1 hour makes little sense in practice.

    As a result, the Timeout field in the Communication section of the Subversion preference pane was removed.

  7. Copy/paste in revision range fields was improved

    Text in revision range fields (e.g. in the merge cherry picking options) is now copied to the clipboard in 1031:1037 format (was previously 1,031 – 1,037).

    This has two advantages:

    1. The text can be unabiguously accepted by the path field when pasted back into the field.
    2. The format is compatible with that accepted by the svn merge command in Terminal.

    (#1119)

  8. UI layout management improved to better handle small window sizes

    In previous versions of Cornerstone, the main window could be resized to be very small, resulting in layout issues which could only fixed by restarting the application at a larger window size.

    2.2 solves this by:

    • Limiting the window to a sensible minimum size which guarantees consistent and usable layout.
    • The Inspector’s width now decreases automatically to better accommodate a reduction in main window size, eventually collapsing if insufficient space is available.
    • The main window is resized to accommodate the Inspector if the window is too small when the Window > Inspector command is used.

    (#1132)

Compatibility

  1. Mac OS X 10.5 Leopard and 10.6 Snow Leopard

    Cornerstone 2.2 is compatible both with Mac OS X 10.5 Leopard and Mac OS X 10.6 Snow Leopard.

    Both Intel and PowerPC processors are supported on Leopard. Only Intel processors are supported on Snow Leopard.

  2. Mac OS X 10.7 Lion

    Cornerstone runs fine on Mac OS X 10.7 Lion Developer Preview 2.

    There are a couple of known glitches, but these do not have a significant impact on the application’s functionality and will be fixed in the run up to Lion’s release this summer.

    Please note that this as-yet unreleased version of Mac OS X is not officially supported.

Compatibility

Backwards Compatibility

Cornerstone 2.2 is fully backwards-compatible with 1.5 and 2.1. All configuration and settings are transparently migrated to version 2 when the new version is run for the first time.

Forwards Compatibility

The Cornerstone 2 configuration databases are forward-compatible with 1.5, i.e. you can run versions 1.5, 2.0, 2.1 and 2.2 against the same configuration databases in your Application Support/Cornerstone folder.

Issues Resolved in Cornerstone 2.2

# Description
141 Custom properties should be editable in the Inspector
1104 Method used to determine working copy out-of-date status for source list badge should be improved to minimize generated server load
1119 Text copied from a revision range field is not correctly interpreted when pasted back into the field
1122 Repository status for files in working copy browser is temporarily cleared when refreshing with “View > Show Repository Status” enabled
1123 Switching working copies fails when there is a repository URL mismatch due to encoded usernames
1125 When renaming a working copy the size of the edit box is too small
1127 It is not possible to add an auto property in the Subversion preference pane if the svn config file does not contain an [auto-props] section
1128 The default value displayed for “Use compression” in the Subversion preference pane should be on (i.e. checked)
1130 Cornerstone does not support comparison of files in externals from a different repository
1132 The layout of Cornerstone’s user interface exhibits problems when the main window is reduced to a very small size
1133 Showing the blame annotations for a file containing lines contributed by an anonymous user results in no blame data being displayed along with an empty annotations legend
1135 Cornerstone does not always remember the visible state of the Inspector when configured for display in a floating panel
1136 The inspector area on the right-most side of the main window is briefly visible when the application is started with the Inspector configured for display in a separate panel
1137 File browser items are sorted incorrectly when sorting by “Kind”
1138 Open panel displayed by path fields is not resizable
1139 Obstructed working copy items are displayed as unmodified in the working copy browser
1143 Cornerstone doesn’t preserve the font changes made to the Log Message text field. The ability to change the font should be removed
1145 The background status and repository monitor queues fail to re-enter the idle state after an energy savings-induced sleep/wake cycle, resulting in Cornerstone displaying the shutdown progress window while quitting
1146 Invoking a context menu for a field in the Inspector causes the displayed item to change if the source list was previously first responder