Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Source for many of The Omni Group's frameworks
Objective-C C HTML Ruby M Shell Other
branch: master

Updated with changes from OmniGroup svn [r220076:231148]

  - Now builds with Xcode 6.3 and the Mac OS X 10.10 or iOS 8.2 or iOS 8.3 SDKs.
  - Fixed lots of paths to frameworks in xcodeproj files that Xcode mangled
  - Fixed up deprecation warnings
  - Mark frameworks used our extensions as 'APPLICATION_EXTENSION_API_ONLY = YES'
  - More ARC conversion, or making public headers ARC friendly.
  - Various localized string file updates.

  - On the Mac, we now always build with @rpath for frameworks and have a copy files build phase to install frameworks in the app. This is important for debugging embedded XPC services that link those frameworks too. Additionally, this allows launching Debug-built apps w/o dyld environment variables. NOTE: Xcode tries to be helpful and insert a DYLD_FRAMEWORKS_PATH environment varible. To get the installed copies, your scheme needs "DYLD_FRAMEWORK_PATH=${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Contents/Frameworks".
  - Enabled GCC_NO_COMMON_BLOCKS and fixed resulting problems.
  - Added -DNSApp=Use_NSApplication_sharedApplication to discourage use of the NSApp global.

  - ListMissingRetinaImages handles 3x images.
  - More support for parsing Xcode projects and workspaces.

  - Added -[NSError causedByNetworkConnectionLost] convenience method.
  - Refactored OBBacktraceBuffer a bit to make the right bits public.
  - Added PRIxCFIndex and PRIXCFIndex format specifiers.
  - Added a hack for Xcode 6.2b4 (disabled by default) that will likely be removed in the next push.
  - Made OBASSERT_NOT_REACHED log a backtrace via OBRecordBacktrace(), even in non-debug builds.
  - Added OB_BRIDGE_RETAIN and OB_BRIDGE_TRANSFER helpers for ARC conversion.
  - Added OBCallBoolReturnIMPWithObjectObject() and OBSendBoolReturnMessageWithObjectObject() helpers for ARC-friendly calls to method IMPs.

  - Added OFRunLoopRunUntil(), inspired by <> but rewritten to use a timer to avoid spinning the runloop.
  - Removed NSFileCoordinator extensions for dealing with bugs in case-only renames, as these have been fixed in the OS(es).
  - Add support for configuration options that can be changed at runtime (via URLs and the configuration UI in OmniAppKit).
  - Extracted a -parseQueryString: method in OFMultiValueDictionary to allow handling the key/value pairs.
  - Fixed crash in OFRelativeDateParser when given "today at noon".
  - Improved interpretation of short months/days ("mar" in Spanish should be Martes, not March).
  - Added file manager extension for looking up group containers in various store configurations.

  - Add a unique identifier to the temporary collection used for conformance checks so two devices can do checks at the same time.
  - Retry conformance checks a few times on network timeouts.
  - Added ODAVURLResult helper class to report both the URL and redirects. API clients can then use this to reduce the number of redirects they hit.
  - Added workarounds for URL encoding bugs in Apache/svn.
  - Added a notion of retryable-ity to ODAVOperations and obey that when retrying for connection loss.
  - Added +[ODAVOperation suggestAlternateURLForURL:withRedirects:] which can be used to "pre redirect" operations that happen soon after a ODAVURLResult that has redirect entries.
  - Note when the Destination of a MOVE/COPY is something that needs a redirect.
  - Add ODAVUpload helper class, which can upload a file wrapper.
  - Added some new tests for redirect handling.
  - More work on encryption/Security framework wrapper extensions for document encryption.
  - OFScanDirectory() now takes an error handler and calls it to figure out what to do about errors.
  - Added OFFileEdit to represent a file version (at least in a NS/UIDocuemnt based world).
  - Lots of new methods on existing classes.
  - Removed unused OFFilePresenterEdits class.

  - Added ODOIsTruePredicate().

  - Use the new OFFileEdit class to represent a 'file modification' (inode, mtime, original URL).
  - Better error handling of errors when scanning a document tree that avoid thinking that documents have gone missing.
  - Better collection of the file modification information from w/in a file coordinated block.
  - Add -addDocumentInFolder:baseName:fileType:fromURL:option:completionHandler: for better document creation from a template.
  - Improvement/cleanup of notifications to higher levels so that they can manage things like preview caches.

  - Detect when one OmniPresence folder has been placed inside another. Disable syncing for the inner folder and report an error.
  - Disable syncing on an account if too many errors happen in a short period of time.
  - Improve reliability of reported error and last sync date in the activity classes.
  - Keep track of recent redirects and use those to avoid further redirects in the same sync operation.
  - In Mac accounts, avoid re-resolving our security scoped bookmark when we don't need to since this releases our sandbox privledges briefly and we might be syncing that account.
  - If a directory scan fails, note that and don't report documents as missing. On the next sync, make sure to retry the scan.
  - Added some testing hooks for configuring whether and how often we delete old versions on the server.
  - Removed stuff about configuration cellular access since controls this now.
  - Added support for deleting stale versions of documents, in case they didn't get cleaned up by a prior sync (device put to sleep, connection lost, etc).
  - Added OFFileMotionResult for describing the result of a move or copy in a file coordination safe way.
  - Fix cases where credentials could be discarded if conformance tests failed.
  - Fix a bug where we could interpret network conneciton loss as a conflict.
  - When we get a 'stale' bookmark, we now rearchive the bookmark data.
  - We no longer require the WebDAV server to return ETags since we don't use them.

  - Continued working on encryption support.

  - Added support for writing ICC colorspace data in a external table when archiving colors to plists.
  - Declare +[OAApplication sharedApplication] as returning instancetype.
  - Removed our home-grown support for sheet request queuing as AppKit does this better now.
  - Fix possible infinite loop in target selection search.
  - Added support for displaying/editing/resetting configuration values and handling change URLs.
  - Fix a crash that can happen when clicking on a AppleScript-backed toolbar item after the script has been removed.
  - Fix a crash that can happen when validating toolbar items in a window that is being torn down.
  - Add support for Yosemite-style button toolbar items via a 'hasButton' key in the .toolbar file.
  - Add strings files for crayon color names.
  - Work around crash in the text system where _NSLayoutManagerRulerHelper is asked for -defaultLineHeightForFont: but doesn't respond (19771353)
  - Added more helpers for constructing constraints.
  - Added debug logging support for vibrant views.
  - Updated support for performing blocks before a window is displayed to include per-window support.
  - Improved font matching in OAFontDescriptor.
  - Improved performance of OAResizingTitleBarButton.
  - Fixed rare crash when closing the window for a OAWebPageViewer. Improved scrolling performance.

  - Avoid doing work while windows are closing that could poke zombies.
  - Updates for Yosemite look and feel.

  - OpenGL has a bug where sometimes instantating a context on a background queue would crash. We'd been getting a small but steady number of these across our apps. So now, we do the anonymous hardware details collection and software update query in a background XPC service.
  - Removed use of some deprecated SMJob functions that we used in our priviledge install helper (for when the updating app isn't writable by the current user). We now write a new version of our helper tool in the (rare) case that the XPC protocol changes rather than trying to remove the old one when a downgrade would have been necessary.
  - Switched to storing user-wide settings for software update into a group container preference domain instead of requiring a special entitlement for the share preference domain.
  - Added a new version of the OpenGL extension compaction encoding that better reflects the set of extensions commonly available today.
  - Apply extension compaction to the OpenCL extensions.
  - Added support for custom queyr keys in reports.
  - Build the the HTML in code for the description of what info will be reported. This allows for localization of individual pieces more naturally.
  - Stop using NSDate for run-time calculation, using clock_get_time() instead (since the latter doesn't increment while the machine is asleep and doesn't change when ntp changes the system time).
  - Improved user confirmation support for sending OSU stats on iOS.
  - Fixed the split view style when showing updates.
  - Fixed escape/cmd-period in the updates window.
  - Updated preference pane icons for Yosemite.

  - Clean up of file presenter code in OUIAppearance
  - Add support for NSImage-typed properties, with the image based on a name, bundle name, and tint color string/dictionary.
  - Add support for UIImage-typed properties, with similar options.
  - Add support for explicitly float- or double-typed properties (CGFloat will duplicate one of these based on architecture). NSTimeInterval support added by virtue of explicit support for double.

  - Added/updated appearance values.
  - More updates for adaptability.

  - Allow for configuration of whether help should be displayed on first launch.
  - Updated icons.
  - Updated document preview sizes for compact layouts.
  - Updated document preview support to work in terms of OFFileEdits; fixes spurious preview regeneration in some cases.
  - Many more updates for adaptability and compact layouts.

  - Many updates for adaptability and compact layouts.
  - Support for configuration change URLs.
  - Updates for IAP upgrade pricing options.

  - Disable pkzip encryption, which we don't use.
  - Set VERSIONMADEBY to 0x300 across the whole project.
latest commit 32986aa7cc
@tjw tjw authored



Checking out the source

git clone git://
git submodule update --init


  • We currently use Xcode 6.3 for iOS and Mac OS X. You'll probably have the best results if you do too.
  • Add the projects you want to your workspace.
  • If building for iOS, you need to edit your scheme to turn off implicit dependencies and parallel builds. Xcode doesn't understand implicit dependencies with static libraries, so you'll need to add the dependencies to your scheme in the right order. We're in the process of converting to iOS frameworks, which should help avoid this Xcode problem.
  • Take a look in the Workspaces directory for a sample workspace for the TextEditor iPad example app.

Supported Targets

  • We require iOS 8.2 and Mac OS X 10.10.

Configuring the Source

We place our project-wide configuration options in xcconfig files, under OmniGroup/Configurations. The naming scheme of the files is fairly straightforward, hopefully. Each project has Omni-Global-{Debug,Release,...}.xcconfig as the basis for the corresponding configuration. Each Mac target has Omni-{Bundle,Application,Tool,...}-{Debug,Release,...}.xcconfig and each iOS target has Touch-{Application,Library}-{Debug,Release,...}.xcconfig. Each of these end point configurations when #includes 'superclass' configurations (with "Common" in the name).


The Workspaces directory contains a couple sample workspace that can be built from Xcode.


Something went wrong with that request. Please try again.