Source for many of The Omni Group's frameworks
Objective-C C HTML Ruby Swift Shell Other
Latest commit 493160d Aug 11, 2016 @tjw tjw Updated with changes from OmniGroup svn [r265076:267469]
  - Switched to requiring Xcode 8.
  - Update to Swift 3.
  - Lots of nullability annotations.
  - Lots of fixes for use of deprecated API.
  - Fix some leaks that Xcode 8 noticed.
  - Switched to automatic code signing; you'll need to tweak the settings for
    your team.

  - `OBBacktraceDumpEntries()` will log backtraces for the captured entries.
  - Add `OBAssert{,Not}EqualObjects()` helper macros which check
    for reflexivity.

  - Remove `OFHTTPStateMachine` and friends (at least until they are ported
    to `NSURLSession`).
  - Added support for operations on arrays of weak references.
  - Updated the definition of `OF_FLT_DIGITS_E` so that we stop assuming the
    final binary digit (bit) of a floating number's mantissa is significant
	enough that it should be accurately represented in decimal.
  - Added missing ObjC wrappers for `OFCharacterScanner`'s C API.
  - Some work on supporting CMS.
  - Fixed OID BER-encoding; added a couple more OIDs.
  - Factored out `OFASN1AppendSet()`, because it's useful elsewhere.
  - Fixed some bugs in `OFASN1CertificateExtractFields()`; added an extra
    extracted field (the subject public key identifier structure); new function
	`OFSecCertificateGetIdentifiers()`; unit tests for the above.
  - Add `preferredPathExtension` function to `UTI`.
  - Added convenience method `+[NSData cryptographicRandomDataOfLength:]`.
  - Fix a crash encountered when `-[OFController performBlock:whenStatus:]`
    queues a block because it hasn't reached that status yet.
  - Added support for storing bookmark URLs in preferences.
  - Handle end-of-file errors in `OFXMLReader` instead of looping forever when
    the API is misused.
  - Update `OFXMLParser` to push smaller chunnks of data at a time, reducing
    high-water memory usage (since libxml2 copies the input data).
  - Fixed a bunch of low-hanging performance issues with `OFXMLParser`,
    and `OFXMLElement`.
  - Made `OFXMLParser` conform to `NSProgressReporting`.

  - Added an NSSegmentedControl subclass that sizes its segments equally
    to fill the space available, rather than huddling in a corner.
  - Add a helper, `OAFixRequestedPasteboardTypes()`, to work around 27531947
    where Cocoa asks us to write pasteboard types that we didn't agree to
	in `-validRequestorForSendType:returnType:`.
  - Don't assume customizable preferences have a current client record.

  - Make `OIInspector`'s `inspectorMinimumHeight` writable.
  - More support for inspectors embedded in document windows.

  - Fix a bug in `-_queueUploadFileWrapper:toURL:error:` where we didn't
    propagate an error out.
  - Make `ODAVFileInfo` consider two missing files with the same name
    as the same.

  - Provide a better error message than "bad key type for slot" when
    encountering an unexpected plaintext key in a slot traversal for decryption.
  - Split OFSDocumentKey into an immutable and mutable pair of classes.
  - Made the manipulations of the OFSDocumentKey (creation, passphrase changes,
    key retirement) only update the cached copy if the file store succeeds.

  - Fixed issue where custom probes were included in query URL when
    "send anonymous data" was unchecked.

  - Allow delayed handling of "special" URLs.
  - Add hooks for "app lock" windows.

  - Add hooks for integrating password managers with OUIPasswordAlert.



Checking out the source

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


  • We currently use Xcode 8.0 for iOS, watchOS, and Mac OS X. You'll probably have the best results if you do too.
  • Add the projects you want to your workspace.
  • Take a look in the Workspaces directory for a sample workspace for the TextEditor iPad example app.

Supported Targets

  • We require iOS 10.0 and Mac OS X 10.11.

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.