Redesigned User Interface
Cornerstone’s user interface was completely redesigned (and in many places completely reimplemented) with the intention of
improving the overall experience to allow the user to better focus on their content;
improving the consistency with which the status of user interface elements (buttons, controls, widgets, switches) is indicated in the user interface;
improving the ability of the app to bring version control status information to the user’s attention;
improving usability on small screens by maximizing the screen real-estate available to the user; and
improving the visual integration of the app with the system UI changes introduced with OS X 10.10 Yosemite.
The removal of color from the user interface played a significant role in meeting these goals. Color is now exclusively reserved for the indication of status, both for user interface elements, where blue is used consistently to include that something is on/selected, and for the version control status of user content (e.g. file status, text differences).
A subtle, but nonetheless significant improvement in usability was achieved through the consistent use of larger typefaces and images. All lists utilize larger typefaces for markedly improved readability. Additionally, numerous icons and indicators were simplified and increased in size to improve their descriptiveness and recognizability.
The removal of unnecessary adornment and affordances (i.e. clutter) was also a focus. The intention here was two-fold: a) remove visual distractions, and b) maximize available screen real estate to improve usability on small screens. One example of such an improvement was the removal of the status bar at the bottom of the main window, but more subtle changes include
the consistent use of stroked icon artwork to reduce their visual weight and therefore their ability to distract;
the use of lighter typefaces in place of heavier, bolder text, e.g. title fields in all windows and sheets;
reducing the contrast of non-essential or secondary text, e.g. secondary columns in file browsers are light gray, as are labels in high-density views such as the Inspector and the externals editor;
the removal of gradients from the user interface resulting in a flatter overall appearance; and
reducing the height of the toolbar to maximize available screen real estate.
Improving the visual integration of the app with OS X was primarily achieved through the adoption of standard system components as replacements for our own code. Obvious examples include the adoption of standard popovers, the dock badge and the use of Notification Center as a replacement for Growl. More subtle refinements include the adjustment of padding and margins around controls in all windows to be consistent with Apple’s guidelines and the removal of header/footer boxes from all modal windows.
Redesigned Source List
Cornerstone’s source list was completely reimplemented to integrate the functionality of the working copy and repository lists from previous versions. The result is a simpler, more streamlined appearance and significantly improved user experience.
The overall appearance was designed to compliment the transparency and vibrancy effects introduced in OS X 10.10 Yosemite.
Monochrome icons allow the use of color to more effectively highlight status information.
Working copies are now grouped by repository. Repositories are automatically added as needed when an existing working copy is added to the app (e.g. using the Add Working Copy…command or by dragging a folder to the source list).
More information is provided, specifically for repositories, where the host and path are displayed beneath the title.
Inaccessible working copies and repositories are indicated in the source list. This is particularly important now that Cornerstone is sandboxed, but it is also useful in highlighting references to folders that no longer exist.
Unnecessary visual clutter was removed. For example, the status bar was removed and the size of the activity area was reduced such that the add (+) button and activity indicator share the same space.
Expansion tooltips are provided for item text and standard tooltips are used for status information.
The Inspector was completely reimplemented with the following improvements:
All information is present on a single page removing the need to constantly switch back and forward between separate Information and Properties tabs.
Improved design with typography that reduces the weight of section titles (previously bold, now lighter, capitalized) and labels (now lower case, lighter in color and without colon suffixes) to better focus the user’s attention on the values of the properties displayed.
Longer values such as paths and user-defined texts (e.g. lock comments) are now wrapped rather than truncated.
Values that are truncated consistenly display expansion tooltips.
Unnecessary, redundant or seldom-used fields were removed to reduce clutter (e.g. lock token, file icon).
Properties previously displayed in other locations were consolidated into the Inspector (e.g. working copy format, option to include externals in updates).
Multiple selection handling was improved, e.g. the name and size fields now show aggregate values.
Where appropriate, fields are now hidden instead of displaying empty fields or placeholders (e.g. the lock section only displays the lock property fields when the selected item is actually locked).
The log event inspector was redesigned to use a layout that is consistent with both the file/folder inspector and the log view.
Cornerstone is Now Sandboxed
App Sandbox is an Apple security technology present in both OS X and iOS that restricts an app’s capabilities to a pre-defined scope to limit the damage that the app can inflict should it fall victim to attack by malware. It also prevents other sandboxed apps from accessing that app’s data.
Since June 2012 Apple has required that all new major app versions submitted to the Mac App Store implement sandboxing, regardless of whether these apps were already present in the store at the time of the policy change. Cornerstone 3 implements sandboxing in order that we can continue to offer Cornerstone to Mac App Store customers.
The implementation of sandboxing in Cornerstone was extremely challenging. While many other developers have either given up or taken the opportunity to remove their apps from the Mac App Store citing the difficulty of implementing sandboxing, we have invested heavily into re-engineering significant parts of Cornerstone to not just work within the confines of sandboxing, but to embrace it.
In most cases these changes have little or no impact on the app’s functionality or the user’s workflow. However some changes were necessary to accommodate or workaround restrictions imposed by sandboxing. Most notably:
By default, Cornerstone cannot access the per-user Subversion configuration area in ~/.subversion, so a private configuration in the app’s container is used instead. The new Locations pane in the preferences window allows the user to switch to the per-user Subversion configuration area if necessary.
Likewise, Cornerstone cannot use the user’s SSH configuration. By default SSH will be run with a default configuration and known_hosts will be stored in a private location Cornerstone’s container. The user can also use the Locations preference pane to switch the SSH configuration to ~/.ssh if required.
Cornerstone will initially be unable to access your existing working copies and file-based repositories. As a result, Cornerstone makes no attempt to import existing working copy or repository references. Instead the user can drag working copies onto the source list or add them using Add Working Copy…. In both cases the associated repository will be added automatically.
The only way that a user can express to OS X that an app should be allowed to access a file (or folder) is by selecting that file through the standard open/save panel. As a result, the user interface for file selection had to be changed for the check out, import and export commands.
Please note that the private Subversion and SSH configurations used by Cornerstone are not designed to be edited directly by the user. If you need to modify your Subversion or SSH configurations then you should switch Cornerstone to use your shared user configuration.
Sandboxing also restricts the ways in which apps can interact so the way in which Cornerstone integrates with compare tools and scripts had to change, specifically:
User-defined scripts run during commit operations must be placed in ~/Library/Application Scripts/com.zennaware.cornerstone3. Cornerstone cannot write to the folder so you will need to move your scripts to this folder manually. The script selector popup button used throughout the app will assist you in script selection and includes an Open Scripts Folder command to help you locate the folder.
External compare tools can no longer be run directly from Cornerstone. Instead, the compare tool plugin for your tool of choice must be installed to Cornerstone’s application script folder using the new Compare Tools window (see the Compare Tools… command in the Cornerstonemenu).
Finally, the direct and Mac App Store versions of Cornerstone are no longer able to share a configuration. More technically, the sandbox used by the two versions of the app cannot be shared because the two apps have different digital identities (because they are signed by different entities, i.e. Zennaware and Apple respectively). This separation is enforced through the use of different app IDs for the two versions of Cornerstone. As a result, customers that purchase Cornerstone 3 through the Mac App Store will find that the configuration they used during their trial period with the direct version has been lost.
We recognize that this is not optimal but are unable to work around the technical limitations of Apple’s sandbox implementation to provide a better experience.
Cornerstone now uses OS X’s Notification Center instead of Growl to notify the user about the completion of lengthy activities such as commits, check outs, exports, imports and updates.
Cornerstone’s preference window includes a new Notifications pane that allows the user to specify which activities are shown in Notification Center as alerts. Notifications are disabled for all activities by default.
Cornerstone also now displays the number of uncommitted working copy changes in the dock as a standard badge. The visibility of this badge is now controlled by the Notification Center pane in System Preferences.
Significantly Improved Externals Editor
Several improvements where made to the externals editor:
The ordering of the fields was changed to better reflect the order the values are specified in the underlying svn:externals property text, i.e. [source]@[revision] [target].
Previous versions of Cornerstone used a Subversion API to parse the contents of svn:externalsproperties. This API did not always accurately describe the user-specified contents of the property, preferring instead to describe how the contents should be interpreted. Cornerstone 3 includes a new parser which enables the externals editor to more accurately reflect the contents of the svn:externals property as found in the repository or working copy.
The externals editor can now correctly parse and display peg-only revisions in svn:externalsdefinitions.
The use of peg-only revisions is strongly encouraged. To this end the operative and peg revision fields are collapsed into a single field labeled revision, with the peg revision actually being specified (with the operative revision being left unspecified). The revision fields can be expanded by clicking on a disclosure button if a separate operative revision is required or if an operative revision is preferred to a peg revision.
The externals editor will prompt the user before saving externals with empty/unspecified revisions (i.e. revisions that will be interpreted as HEAD). This behavior can be suppressed using a new option in the Working Copy preference pane (Allow externals without specific revisions).
The externals editor now discourages the use of URLs that contain usernames, prompting to remove usernames before saving. This prompt can be suppressed using another new option in the Working Copy preference pane: Allow externals with URLs that contain usernames.
The externals editor now suggests a default check out name when a source URL is chosen and the to field is empty.
Note that Cornerstone 3 will write externals in svn 1.5 format whenever peg revisions are used. If you require compatibility with svn 1.4 then we recommend that you a) expand the revision fields and then enter an operative revision into the upper field, or b) edit the property’s raw text in the text view.
Significantly Improved Transcript
A number of new features were added to the transcript, including:
Cornerstone now switches to the transcript view when a working copy is updated. This behavior is controlled by a new preference labeled Show transcript during working copy updates in the Working Copy preference pane. This much-requested feature is enabled by default.
Incoming updates (additions, removals, updates, merges etc.) are shown using color icons for improved recognition.
Incoming updates (additions, updates, merges and conflicts) can be compared directly from the trancript view using the Show Differences command. Once in the compare view, the popup button in the title bar can be used to navigate between the files changed by the update. Incoming revisions are compared against the previous local revisions (uncommitted local modifications are ignored).
It is now possible to navigate to the working copy file for the selected entry in the transcript using the new Show in Working Copy command. This command is available both in the Transcript menu and the transcript view’s context menu. Note that this command is only available for items in externals if the Show Contents of Externals option is enabled for the working copy.
Transcript entries related to merge operations (including those generated by dry runs in the merge view) now show revision range information. This is useful for operations merging multiple revisions or revision ranges.
Tooltips are now displayed for the status icons (text, property and lock) in the transcript view.
Transcript entries are now expanded as they are added to the view.
Improved Rename and Move Behavior
Rename and move operations result in a pair of modifications in a working copy: a copied item is added and the original item is deleted. Previous versions of Cornerstone allowed these items to be committed independently, but Cornerstone 3 includes improvements to ensure that these changes are always committed together:
Both items are automatically selected for commit if either is included in the working copy browser’s selection.
Checking or unchecking one of the files in the commit view’s change list causes the related item to be automatically checked/unchecked as well.
Please note that these improvements are only available for 1.8-format working copies.
Download Command Added
The new Download command was added to the Repository Browser’s right-click menu. This provides a simple one-click command for exporting the selected file or folder to the user’s Downloads folder.
Improved Sparse Working Copy Support
Individual files can now be excluded from a sparse working copy (previously only folders could be excluded).
New Security Preference Pane
Secure Socket Layer (SSL) and Secure Shell (SSH) options previously located in the Certificatesand Advanced preferences panes were consolidated into the new Security pane.
Log Caching Management UI Added
The repository context menu in the source list contains a new Caching… command that allows a user to inspect and change the log caching settings for the repository.
Revert Button Added to the Log View
Log view items older than the revision of the selected item now have a revert button. Clicking on this button will revert the selected item to that revision.
Swift Files are Now Displayed with Syntax Coloring
A syntax-coloring grammar was added for the Swift programming language.
Streamlined File Selection UI for Several Operations
Several operations that previously had their own custom panel (e.g. check out, import, export) were streamlined to use the standard OS X open/save panel. The user interfaces for these operations are now consistent with those of the Save Patch and Add Working Copy commands that were already based on open/save panels.
Include Externals in Updates Option Moved to Inspector
Include Externals in Updates option was moved from the Working Copy menu to the Working Copysection of the Inspector, where the option is now named Update contents of externals for consistency with the related option in the Update window.
This not only makes the option more discoverable, it also allows the exact effect of the setting to be described in a tooltip.
Improved Error Handling for Inaccessible Folders
Much effort was invested into improving how Cornerstone handles working copies and file-based repositories that are inaccessible to the application (i.e. no longer exist or can’t be accessed due to missing permissions).
Wherever possible, Cornerstone provides recovery options such as allowing the user to a) select an alternate location for missing folders, or b) grant the application access to an inaccessible folder by locating the folder using a standard open panel.
Cornerstone Now Uses Menlo as the Default Fixed-Pitch Font
Previous versions of Cornerstone defaulted to 10pt Monaco. Cornerstone 3 now defaults to the user’s preferred fixed-pitch font (normally Menlo Regular). This behavior is more consistent with other Mac applications such as Xcode. This change has no effect if the user has selected another font in the application’s preferences.
Fixed-Pitch Font Preference is Now Used by the Log View
The log view will now use the fixed-pitch font defined in the application’s preferences (previous versions always used 10pt Monaco). The Use font smoothing preference is also respected.
Diff View Invisible Character Rendering was Improved
The glyphs used to represent invisible characters (spaces, left tabs, right tabs, newlines and page breaks) were changed to be more consistent with popular OS X text editors such as BBEdit, TextWrangler and TextMate.
Most noticibly, the not sign (¬ U+00AC) is now used instead of the pilcrow sign (¶ U+00B6) to represent carriage returns and line feeds, resulting in improved readability when invisibles are displayed. The pilcrow sign is now used to represent page breaks.
Improved Upgrade Window
The appearance of the window shown by the Upgrade Working Copy… command was improved. In addition, the wording of the associated compatibility warning was improved and a button was added linking to a FAQ article providing additional information on inter-application compatibility.
Working Copy Folder Status Icon was Changed
In previous versions of Cornerstone, the working copy browser used small arrow icons in the Folder Status column to indicate folders that contained uncommitted changes.
This status is now indicated by a small dot that is only shown for collapsed folders in order to reduce visual clutter.
The title of the column (as shown by the tooltip and in the column menu) was changed from Folder Status to Contains changes to prevent the possible interpretation that the icon displays the folder’s version control status.
A tooltip is also now displayed for this column.
Cornerstone Prompts to Upgrade Working Copies Before Adding Them to the Source List
Cornerstone will now prompt to upgrade working copies whose format is not supported.
Help Documentation Supports Retina Displays
Retina versions were added for all images used in the help documentation (Help > Cornerstone Help).
Previous Revision Can Now be Exported for Working Copy Items
The export function now supports exporting the previous revision for working copy items.
Improved SSH Performance
Cornerstone’s SSH handling was improved. Specifically, Cornerstone now enables improved parallelism for concurrent SSH requests. This is most noticeable in the repository browser when performing operations simultaneously on multiple files/folders via a low-latency network connection.
Improved UI Performance
Significant effort was invested into improving the scrolling performance of the working copy and repository browsers as well as the transcript view. Text comparison scrolling performance was also significantly improved.
In addition, the image comparison view was completely reimplemented to improve responsiveness, both when scrolling and switching between magnification.
Reduced CPU Utilization
The activity indicators displayed in the source list caused significant CPU utilization in previous versions. These indicators were completely reimplemented for Cornerstone 3 to be as efficient as possible and now have a negligable impact on CPU utilization.
Faster Launch Time
Cornerstone 3 launches significantly faster than previous versions. This is due to the removal of 32-bit code and the adoption of improvements in Apple’s developer tool chain that reduce the overhead of code signing verification.
Improved SSH Compatibility
Previous versions of Cornerstone only supported SSH server fingerprints hashed using MD5. Cornerstone 3 adds support for 256-, 384- and 512-bit SHA–2 hashes (i.e. SHA–256, SHA–384 and SHA–512).
Support for Subversion 1.6 was Removed
Support for Subversion 1.6 was removed in Cornerstone 3. See the Compatibility section below for more information.
Open in Terminal Now Always Opens New Window
The Open in Terminal command in the File menu previously used AppleScript to open a new tab in the Terminal application. Use of AppleScript in this manner is not compatible with Apple’s app sandbox and an alternative was implemented which provides similar functionality but always opens a new Terminal window.
Dock Bounce Preference was Removed
Previous versions of Cornerstone would bounce once in the dock if an activity completed when the application was inactive. This behavior was controlled by a preference in the General preference pane (Bounce in dock when an operation completes).
Cornerstone’s support for Notification Center obviates the need for dock bounce notifications. If you would like to be notified when an activity completes then enable the corresponding event in the Notifications preference pane.
Check Out-Related Import Options were Removed
Previous versions of Cornerstone included import options that allowed a folder to be imported and replaced with a working copy as part of the import operation. While potentially useful, these options significantly increased the complexity of the import user interface and were removed.
Commands Removed from Context Menus
Get Info, Switch… and Export… were removed from the context menu in the working copy browser.
Get Info was no longer applicable as the option to display the Inspector in a separate window was removed (this command was intended to approximate the behavior in Finder). Get Info was also removed from the repository browser context menu.
Switch… and Export… are uncommonly-used commands and were removed to reduce the size of the menu. Switch… is still available on the source list’s working copy context menu (where it is arguably more useful as it makes more sense to switch a working copy’s root folder).
Open in Finder Check Out Option was Removed
Previous versions of Cornerstone included an option to open the working copy in Finder when the check out operation completed (When Complete: Open in Finder). This option was removed in the interest of reduced user interface complexity.
Scripts Must be Placed in the Application Scripts Folder
See the above section on sandboxing for more information.
The “Downgrade Working Copy” Function was Removed
None of the versions of Subversion supported by Cornerstone 3 support the downgrading of working copies to an older format. The Downgrade Working Copy function was therefore removed from the Working Copy menu.
The Secure Connection Padlock was Removed from Titlebar
Previous versions of Cornerstone displayed a padlock in the top right corner if the selected working copy or repository used a secure connection type.
In actual fact Cornerstone is not able to reliably determine whether a connection type is secure so the indicator was removed (specifically, it is not possible to determine the degree of security provided by tunnels used with the svn protocol).
Cornerstone 3 is compatible with OS X 10.11 El Capitan and newer.
The adoption of sandboxing means that it is not possible to migrate all the user’s data from previous versions of Cornerstone. The best that we could do was import a potentially confusing subset, with the user left to clean up the resultant mess.
After careful consideration we decided that it would be best for Cornerstone not to attempt a migration of any sort, instead launching the new version with a clean, default configuration.
Cornerstone 3 can co-exist with previous versions. No preferences or configuration data are shared between the versions.
Subversion 1.6 support was removed. Cornerstone 3 will prompt to upgrade 1.6-format working copies when they are added.
Cornerstone 3 continues to support Subversion 1.7 and 1.8. The included versions were updated to 1.7.22 and 1.8.15.
Previous versions of Cornerstone would occasionally display multiple password prompts in succession when a password was not found in the keychain, or the password in the keychain was incorrect. This has been fixed.
Non-existent working copies should be clearly marked in the source list.
Allow the user to configure the size of font used for the log message field in the commit window.
The focus rect for the search field in the find bar appears to slide across the visible foreground elements as the find bar is animated into position.
Quitting Cornerstone with an open externals window results in an error in the console when the application is next started.
The external compare tool icon displayed in the view toolbar is not updated when the compare script selection is changed in the application’s preferences.
Change count in dock tile is not displayed using thousand separators.
Wrong tooltip text is displayed for working copy folders with tree conflicts.
The “Change All” button in the Inspector is disabled when no optional applications exists.
Disclosure buttons are no longer shown for empty directories in the commit view’s change list.
Connection warning displayed at top of timeline view causes invalid view layout.
Provide an application preference for automatically switching to the Transcript View during an update.
Add tooltips for the Transcript view entries.
Lock status is not shown for broken locks in the transcript when updating a 1.8 working copy.
Name column text highlights when clicked in the commit view’s change table.
App becomes unresponsive after closing the open panel using the red “traffic light” button when displayed modally from a popover.
Clicking in the revision fields in the “Advanced” tab of the merge view results in an error being displayed.
Merge dry run error messages are truncated if they contain multiple lines of text.
Cornerstone doesn’t respond to keyboard input while the quick look window is key.
Cornerstone crashes when attempting to upgrade a 1.4/1.5-format working copy to version 1.6.
An error is displayed if the “Unlock” command is performed when a directory is selected.
Scroll content size is incorrect for images compared on a HiDPI display.
Cornerstone should not prompt about file external removal for 1.7-version working copies or newer.
SQL syntax coloring should be used for Oracle PL/SQL package files (.pks & .pkb).
Cornerstone’s SSHAskPass should support server key fingerprint prompts for key and hash types other than RSA and MD5.
The Beanstalk and CloudForge pages of the repository sheet are not reset when the sheet is redisplayed to add another repository.
The “Spelling and Grammar” settings for the log message view should be saved as part of the apps’ preferences.
Disable automatic spelling correction for log messages (in the commit view).
Dragging a file out of non-HEAD repository browser that no longer exists at the displayed URL in the file’s revision results in an error.
Items with property conflicts do not match the “Conflicted” filter in the working copy browser.
The terms used in the CloudForge setup page in Cornerstone are inconsistent with the terms used in the CloudForge dashboard.
Add a “Revert to this revision” command to the log view.