Permalink
Commits on Nov 21, 2017
  1. Updated with changes from OmniGroup svn [299743:300398]

    tjw committed Nov 21, 2017
    Configurations:
    - Updated for apparent renaming of CLANG_ANALYZER_MALLOC -> CLANG_ANALYZER_MEMORY_MANAGEMENT
    - Updated for apparent renaming of CLANG_ANALYZER_OBJC_CFNUMBER -> CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION.
    - Updates to fix use of NSErrorDomain/NSErrorUserInfoKey/NS_ERROR_ENUM.
    - Fix implicit conversion of NSNumber to BOOL.
    - Update some targets to Swift 4.
    - Nullability and type annotations.
    - Layout fixes.
    
    OmniFoundation:
    - Fix OFXMLElement's block applier to work correctly on elements with a
      single child.
    - Add more Swift wrappers for UTI conveniences.
    
    OmniDataObjects:
    - Invalidate computed properties during undo or redo, and suppress
      snapshot-based differences of those same properties. This leaves their values
      nil after an undo/redo change, and the next access will compute
      them correctly.
    
    OmniSoftwareUpdate:
    - Updated the OSUInstaller.sh script to specify the path to /usr/bin/id,
      and to ignore any errors from that command (which is just there to
      produce diagnostic output to help us determine why the script might be
      failing in other circumstances).
    - When we find a news item is available, attempt to download it and cache
      the html before alerting the user.  When the user requests to see it,
      try first to load it directly from the web, which is the only way we can
      expect a good visual result.  If that fails, show the cached html, which will
      have no CSS and no images but will at least be something and the text should
      be readable.
      Clear the cache after the real page is successfully shown, or before running
      a new OSU check.
    
    OmniAppKit:
    - Update an assertion to only assert we have integral-sized images for resources
      from our bundle.
Commits on Nov 10, 2017
  1. Updated versions used/required.

    tjw committed Nov 10, 2017
  2. Updated with changes from OmniGroup svn [299337:299743]

    tjw committed Nov 10, 2017
    General:
    - Nullability annotations
    - More safe area inset adoption/bug fixes
    
    Scripts/BuildSVNVersionHeader:
    - Define INFO_PLIST_BUILD_DATE in the exported header.
    
    OmniBase:
    - Don't assert that we're in the debugger in _OBStopInDebuggerWithoutMessage(),
      since that just leads to infinite recursion when running outside the debugger.
    - Add ARC wrappers for NSAllocateObject and object_getIndexedIvars.
    
    OmniUI/iPad:
    - Add useImageForNonCompact property to OUIUndoBarButtonItem. Set it to YES to use the undo icon instead of text.
    
    OmniUI/iPad-Document:
    - Make the sync button the first, left-most item in its enclosing stack view.
Commits on Nov 3, 2017
  1. Updated with changes from OmniGroup svn [298869:299337]

    tjw committed Nov 3, 2017
    General:
    - Converted a few targets to Swift 4.
    - Updated localizations
    - Nullability annotations
    
    OmniFoundation:
    - Avoid a UBsan warning by copying out the contents of each interface struct into a 8-byte aligned pointer.
    - Added +[OFVersionNumber isOperatingSystem111OrLater].
    - Fix OFError() calls that were passing char * constants instead of NSStrings.
    
    OmniUI/iPad:
    - Put back some top level UIViews because to have UIKit stop messing with our layoutMargins.
    - Started moving us toward using NSDirectionalEdgeInsets.
    - Anchored some inspector parts to layoutMarginsGuides.
    - Added more workarounds for rdar://35175843.
    - Updated the comments on the cases of `enum MultiPaneDisplayMode`.
Commits on Oct 30, 2017
  1. Updated with changes from OmniGroup svn [298439:298869]

    tjw committed Oct 30, 2017
    General
    - Explicit @objc annotations for future migration to Swift 4
    - Safe area fixes
    
    Configurations:
    - Turn on warnings about using implicit @objc in our Swift 3 code to make sure conversion to Swift 4 in existing code will have the same behavior at first.
    - This might introduce some errors (very few) were we actually *are* directly calling something implemented in ObjC from Swift via implicit @objc.
    
    OmniBase:
    - Assertion failures now stop in the debugger instead of calling OBTrap.
    
    OmniDataObjects:
    - Added an additional assertion that we're not re-entrantly lazy calculating calculated properties.
    - Corrected the nullability annotations on:
    
        static inline id _ODOObjectValueAtIndex(ODOObject *self, NSUInteger snapshotIndex);
        static inline void _ODOObjectSetValueAtIndex(ODOObject *self, NSUInteger snapshotIndex, id value);
    
    - Added a comment in -addObserver:... explaining why calculated properties are
      pre-calculated before adding an observer on them.
    - Improved the efficiently of -invalidateCalculatedValueForKey:.
      - If the value has never been lazy calculated, return without doing any work.
      - If the value has been previously calculated, send the KVO will
        notification, clear the value, then send the KVO did notification.
    
        If there are current observers, the value will be lazy recalculated
        when KVO access the value to build the notification, or when the
        observer accesses the value in its observation callback.
    
        If there are no observers, we avoid the work.
    
        There is possibly an edge case here that if there *are* observers, but
        the value isn't lazy calculated as part of sending the KVO
        notification, we'll get the wrong value for the prior value on the
        next change (for the same reasons that we pre-calculate the value when
        adding an observer.)
    
        To avoid this, we'd have to separately track whether anyone was
        observing the property, because that information isn't available to
        use through the KVO API.
    
    OmniDocumentStore:
    - Rename ODSScanDirectoryExcludeInboxItemsFilter() to ODSScanDirectoryExcludeSytemFolderItemsFilter()
      and have it skip .Trash directories that iOS 11 deposits in our application container.
    
    OmniUI/iPad:
    - Added support for rendering mode on OUIImageLocation.
    - Update the preview drawing code to just draw with UIImage instead of CGImage. I'm guessing there was some fear/leftovers that this was thread unsafe. So far Xcode doesn't complain about this being unsafe, and using CGImage doesn't obey the tint color (could maybe manually make it do so, but this gets rid of weird scaling code too).
    - Propagate the app window's tintColor to a new OUIDocumentPreview.previewTemplateImageTintColor property.
    
    OmniUI/iPad-Document:
    - Use our NSError -log: extension instead of NSLog. This correctly skips logging 'cancelled' errors.
    - Dispatch the call to OUI_PRESENT_ALERT to the main queue. No alert is actually displayed (correctly) since this is a 'user cancelled' error.
    - Move the guts of a big block into a separate method to make it a little more readable.
    
    OWF:
    - Use a synthesized property for .target rather than implementing it
      with our own lock.
    
    OmniAppKit:
    - Move a define to a header just picked up by the OmniAppKit tests, not other frameworks.
    - Another stab at making unit tests work with the recent changes to +[OAApplication sharedApplication].
    - Fuss with timing to prevent the touch bar from tripping over its own feet when a "replace document" confirmation sheet comes up over a print panel and then is dismissed on 10.12.
  2. Updated with changes from OmniGroup svn [298011:298439]

    tjw committed Oct 30, 2017
    OmniFoundation:
    - Add a unit test for OFRelativeDateParser, demonstrating a crashing bug where
      a the heuristic date parser matches matches a 7 digit date, but cannot
      convert to a date because the values are out of range.
    - Correct the behavior of OFRelativeDateParser in this case.
    
    OmniFileExchange:
    - Get the creation date from versionContents dictionary, which includes it as
      a timestamp. Fall back to using attributesOfItemAtPath: only if the creation
      timestamp is not in the versionContents dictionary.
    
    OmniDocumentStore:
    - Remove vestigial file operation queue on ODSStore; this is done in
      ODSScope now.
    
    OmniUI/iPad:
    - Inspector safe area updates.
    - Added some UIResponder utilities.
    - When collapsing a pane, if after notifying the delegate and all observers,
      the responder chain is still inside the view tree that was hidden, reassign
      first responder to somewhere sensible.
    - Move redundant overlay presentation check (and early out) down to
      MultiPanePresenter so clients don't have to handle it.
    - Annotations for Swift compatibility.
    
    OmniUI/iPad-Document:
    - Expose _isClosing as a readonly property of OUIDocument.
    - If a save wasn't successful, avoid updating our item's file edit.
    
    OmniAppKit:
    - Relax an assertion to only warn if the splitter isn't landing in a spot
      that is pixel-aligned, while still warning about views that are NOT
      pixel aligned. This means in certain cases .5 splitter positions will
      be allowable.
    - In OAWebPageViewer, don't clear the completion handler unless a message of
      success has been received.  Otherwise, an initial failure can prevent us
      from acting on subsequent success.
    - Remove a hack for iOS's TextKit. At some point NSTextStorage
      -addAttributes:range: started behaving the same as the Mac's version in
      this respect.
  3. Updated with changes from OmniGroup svn [297570:298011]

    tjw committed Oct 30, 2017
    General:
    - Update localizations
    
    OmniUI:
    - Improve use of safe area inset logic.
    - Update some framework references to be via xcodeproj references.
    - Made OUINavigationController responsible for its own appearance.
    
    OmniAppKit:
    - Use OFControllingBundle() instead of +[NSBundle mainBundle] so that we get the xctest bundle. Declare NSPrincipalClass = OAApplication in the test bundle's Info.plist.
    - A bit more special case code for running the OmniAppKit unit tests after some changes to +sharedApplication.
    - Allow matching sRGB colors against sRGBExtended named colors, since sRGB is a subset of sRGBExtended.
Commits on Oct 27, 2017
  1. Updated with changes from OmniGroup svn [296989:297570]

    tjw committed Oct 27, 2017
    General:
    - Clean up some framework references that are done via xcodeproj references
      now.
    
    OmniBase:
    - Mark the block passed to +suppressingLogsWithUnderlyingDomain:code:action:
      as NS_NOESCAPE to make calling from Swift nicer.
    
    OmniFileStore:
    - Fix a failing test in OFSUnitTests by adjusting the test.
      OFSDocumentKey.keySlots is now an OFSKeySlots, but we intended to compare
      their key slot NSIndexSets.
    
    OmniUI/iPad:
    - Refine -[UIView(OUIExtensions) containingViewOfClass:] for Swift, renaming
      it along the way to use "enclosing" instead of "containing". Apply a similar
      name change to -containingViewMatching:. Leave the old names behind,
      deprecated for callers with a message about the new name. Provide a refined
      implementation that returns a view of the requested type, not just `UIView?`.
    - When presenting the app menu, size the popover to fit the options.
    - Add a Done button in the inspector’s navigation bar when compact.
    
    OmniUI/iPad-Document:
    - Retrieving bookmark data will fail if the file hasn't finished downloading.
      Update all our bookmarks again when a download finishes, to be sure we hang
      on to them.
    - When we start editing a documents title, we were previously always provoking
      a save. We now only save when the file has been edited.
    
    OmniAppKit:
    - Assert that a return value conforms to OAFindControllerTarget.
    - Removing unused .framework references, now that we reference things via
      their .xcodeproj.
    - Last December (in r275098), the about panel controller in OmniAppKit
      was updated to pull the NSHumanReadableCopyright from the app's
      localized info dictionary rather than its standard info dictionary as
      part of fixing some localization warnings.
    
      Our copyright string is currently defined in our unlocalized info
      dictionary via #defines that get picked up from our InfoPlist.h, and
      if there are any localized versions of that string they're undoubtedly
      out-of-date with respect to that copyright. So I'm switching this
      logic back to using the unlocalized dictionary.
    - Noticed that the About panel is starting out displaying the build
      details instead of the text it's supposed to be displaying (because we
      were calling -_updateFieldsAndWindowSize multiple times at load, which
      was loading extra copies of the content and cycling them), and that
      the text sometimes disappears when I switch modes (fixed by telling
      the text view it needs to be displayed).
    - In OAApplication, make sure +[OAApplication sharedApplication] always
      returns the main bundle's principal class rather than returning
      whatever class the message happens to be sent to first. Also, if we
      detect that we got the wrong class, crash immediately rather than
      returning the wrong result (which might crash later or might just
      cause confusing and hard-to-track-down bugs).
  2. Updated with changes from OmniGroup svn [296516:296989]

    tjw committed Oct 27, 2017
    General:
    - iOS 11 Files integration
    - @objc annotations for Swift 4
    - Nullability annotations
    
    OmniBase:
    - Fixed a deadlock with opening documents in iCloud drive on High Sierra,
      caused by signing up for NSBundleDidLoadNotification targeting the
      +[NSOperationQueue mainQueue].
    - Add a Swift wrapper for OBStopInDebugger().
    
    OmniFoundation:
    - Fixed a representation/rounding error in NSDate-OFExtensions.
      `fractionDenominator` is a power of ten. Divide 1e9 by `fractionDenominator`
      first to avoid representation errors we could get when we previously took
      `1e9 * (fractionDenominator / fractionNumerator)`.
    - OFDataCursor's -readStringOfLength: method was returning nil when the data
      didn't match the expected encoding. When that happens, we now fall back on
      doing some encoding detection (with a preference for UTF-8 and Windows
      Latin 1).
    
    OmniUI/iPad-Document:
    - Interface updates for inspectors an document picker.
    
    OmniAppKit:
    - Disabled the workaround for rdar://problem/28569216 (inconsistent naming
      scheme for Show Tab Bar menu item) since this is fixed on High Sierra and
      later.
  3. Updated with changes from OmniGroup svn [296014:296516]

    tjw committed Oct 27, 2017
    General:
    - More @objc annotations for Swift 4.
    
    OmniFoundation:
    - Some NSFileHandle utilities.
    
    OmniDataObjects:
    - Add ODOKeyPathNotEqualToValuePredicate().
    - Replace ODOLogSQL with ODOSQLDebugLogLevel, configured via OFDeclareDebugLogLevel.
    
    OmniSoftwareUpdate:
    - Add the iPhones 8 and X, plus the Apple TV 4K, to OSUDevices.json
    - Add Apple Watch information to OSUDevices.json
    
    OmniDocumentStore:
    - Handle localizations when long date formats better in the document picker.
    
    OmniUI/iPad:
    - Fix some use of deprecated layout guides.
    - OUIColorInspectorPane had been setting automaticallyAdjustScrollViewInsets to NO, but no longer needs to.
    - Add a secondary tracking dot to the undo indicator.
    
    OmniUI/iPad-Document:
    - Removing OUIReplaceDocumentAlert since it's no longer used and has been replaced by OUIReplaceRenameDocumentAlertController.
Commits on Oct 26, 2017
  1. Updated with changes from OmniGroup svn [295550:296014]

    tjw committed Oct 26, 2017
    General:
    - Updated use of deprecated enums to use the Swift friendly versions (NSAnyEventMask -> NSEventMaskAny, etc).
    - Add @objc annoations for API written in Swift that is called from ObjC that Swift 4 won't infer automatically. This allows building with `-Xfrontend -warn-swift3-objc-inference-complete`.
    - Files integration improvements
    
    Configurations:
    - Consolidated common settings across platforms in Omni-Global-Settings.xcconfig
    - Bumped the macOS deployment target to 10.12.
    - Bump -warn-long-function-bodies to 200, since at 125 it shows a bunch of cruft, while we should probably concentrate on the slower stuff first.
    
    OmniBase:
    - Clean up special cases in OBRuntimeCheck, reorganizing them as groups of positive tests, instead of a bunch of negatives, and removing some no longer used frameworks.
    - Silence some API mismatch warnings due to oddities in the XCTest framework that get injected into the app being tested.
    
    OmniFoundation:
    - Update the runtime check in NSBundle-OFExtensions.m to require 10.12.
    - Annotate NSArray(OFExtensions) for nullability.
    
    OmniDataObjects:
    - Convert the enum for codes to use NS_ENUM and be named ODOError.
      Mark the error domain/user info keys as their new types.
      With this, you can do `catch ODOError.unableToFindObjectWithID` if you like (though I may end up not doing that).
    - Avoid retaining ODOSQLStatement instance longer than needed, to avoid provoking an expected deallocation warning.
    
    OmniUI/iPad:
    - Remove unused `-[OUITextLayout firstLineAscent]` and `-[OUITextView firstLineAscent]`
    - Inspector updates.
    
    OmniAppKit:
    - Work around High Sierra bug with named anchors in applewebdata: URLs.
    - Fix longstanding bug with long operation indicator calling main-thread API on a background thread.
  2. Updated with changes from OmniGroup svn [295006:295550]

    tjw committed Oct 26, 2017
    General:
    - Updated localizations.
    - Files and drag and drop integration in iOS 11.
    
    OmniFileExchange:
    - OFXAgent now exposes a defaultSyncPathExtensions property.
    
    OmniDocumentStore:
    - Add a dependency on the OmniFoundation-iOS target, to allow building w/o other dependencies in internal Omni source.
    
    OmniUI/iPad-Document:
    - Add drag and drop support to the document picker.
    - Make OmniUIDocument-iOS depend on OmniUI-iOS, to allow building w/o other dependencies in internal Omni source.
    - When creating a document from a template, we now hang onto a copy of
      the original security-scoped URL for that template so that we can use
      it again later (via -accessSecurityScopedResourcesForBlock:).
    - Cleaned up some OBFinishPortingLaters.
    - Add the OUIMenuItemSendToFiles image, and change the Send to Files option to use it
Commits on Sep 1, 2017
  1. Updated with changes from OmniGroup svn [292812:295006]

    tjw committed Sep 1, 2017
    General:
    - Nullability and type updates for Swift bridging.
    - Beginnings of updates for Files integration in iOS 11.
    - Add bug:// links for OBFinishPorting* instances.
    - Localization updates.
    
    Configurations:
    - Bump watchOS requirement to 4.0
    - Restored -DNON_OMNI_BUILD_ENVIRONMENT.
    
    OmniBase:
    - Avoid 'unsafe' use of strcpy(), which is actually safe, but this avoids
      triggering a compiler warning and may be marginally faster.
    
    OmniFoundation:
    - Added plist serialization for OFIndexPath.
    
    OmniUI/iPad:
    - OUIMenuOption's action block now gets passed the menu option instance.
    - Move some images into xcassets.
    - Add disclosable inspector slices.
    - Move the email-debug-info command to the OUIDebugURLCommand class.
    - Interface updates for iOS 11.
    
    OmniUI/iPad-Document:
    - New shared images to better fit iOS 11.
    - In OUIServerAccountValidationViewController, grab the challenge from the
      error that has it, rather from the one on the top of the stack.
    - Added support for dragging documents from our document browser.
      Supports adding more than one document to a drag session.
    
    OmniAppKit:
    - OAWebPageViewer sets `wantsLayer` on the WebDocumentView to avoid some issues
      in Yosemite (which may or many not have been resolved). If the content is
      long enough, though, this can exceed the allowed size for a layer on a
      Retina MBP. Add a read-only webViewShouldUseLayer property on OAWebPageViewer
      to allow subclasses to turn off layer backing.
    - Ported OAColorPalette to iOS, and started using it to parse SVG colors on iOS.
    - Updated various bits of API to pass OAToolbarItem instead of NSToolbarItem.
Commits on Jul 21, 2017
  1. Updated with changes from OmniGroup svn [292307:292812]

    tjw committed Jul 21, 2017
    Configurations:
    - Bump the time for -warn-long-function-bodies from 100ms to 125ms. There are a
      lot of trivial functions that just barely miss 100ms, so let's concentrate on
      the more complicated stuff if we are going to fix something first.
    
    Tools/SVNVersion:
    - List the output SVNVersion.h file for each of the per-platform shell script
      build phases.
    
    OmniBase:
    - On iOS, adding a block observer for NSBundleDidLoadNotification causes
      a hang in CoreAnimation when initializing a UIWebView (predictably) or
      even when just rotating the screen (and taking a snapshot of the
      existing views).
    
      We don't need this notification on iOS (where we don't load bundles
      dynamically anyway and where we'd never even ported OBPostLoader
      functionality in the past), so I'm disabling the observation code
      there.
    
    OmniFoundation:
    - Add OFUTIDescription.
    - Modernize some code in OFCompletionMatch.
    - Fixed undefined behavior noticed by UBSan.
    
    OmniDataObjects:
    - Added convenience extensions on ODOEditingContext to allow fetching of an
      object by objectID or primaryKey/entityName pair that infers the type from
      the calling context to avoid casting at the call site.
    
    OmniUI/iPad:
    - More themeing work in inspectors.
    - Add support for displaying different content in a view controller when a
      feature is disabled.
    - OUIPasswordAlert no longer drops its provided protection space on the floor.
    - Reworked hideSidebar(atLocation:) so that it does the correct thing for both
      overlaid and embedded sidebars.
    - Handle all of our special scheme URLs being loaded by the web view,
      not just those triggered by a "link activated" navigation.
    
    OWF:
    - Fixed a crash due to sending a message to an OFWeakReference that was
      meant to go to the object it holds.
    
    OmniAppKit:
    - When computing a composite color, if the top most color is opaque just use it.
    - When converting a color to a destination color space, if the color is already
      in that color space, just use it.
Commits on Jul 15, 2017
  1. Updated with changes from OmniGroup svn [291810:292307]

    tjw committed Jul 15, 2017
    General:
    - Switch to Xcode 9.0 b3 for macOS and iOS builds
    - Enable several warnings suggested by Xcode 9 and fix fallout
    - Updated localizations.
    - Fix some clang-sa nullability warnings.
    - More tweaks for themeing.
    
    OmniUnzip:
    - Avoid a undefined behavior noticed by Xcode's UBSan.
    
    OmniUI/iPad:
    - Updated OUIKeyCommand to use NSOrderedSet<NSString *> instead of a specially formatted NSString.
Commits on Jul 8, 2017
  1. Updated with changes from OmniGroup svn [291038:291810]

    tjw committed Jul 8, 2017
    General:
    - Switch to Xcode 9 for iOS, requiring iOS 11.
    - Localization updates.
    
    OmniBase:
    - Add OBSendObjectReturnMessageWithObjectObject().
    
    OmniFoundation:
    - Add more tests of unparsed elements with different chunk sizes.
    - Add a binarySearch() extension on Collection, until the standard library gets one.
    
    OmniDataObjects:
    - Marked notification names as constant.
    
    OmniUI/iPad:
    - More themeing support.
    - OUIDetailInspectorSlice had its own _tableView ivar that shadows super's.
    - Remove references to no-longer-used -[OUIInspector animatingPushOrPop].
    - WIP on rearchitecting keyCommand support.
    
    OmniUI/iPad-Document:
    - More themeing support.
    - Some added care to prevent adding two top controls to the doc picker.
    
    OmniAppKit:
    - Remove common colors and OSStyle objects from the attributes dictionary when calculating text heights.
    
    OmniQuartz:
    - Don't reference a `filter` property on CATransition on iOS, which doesn't declare one.
  2. Updated with changes from OmniGroup svn [290414:291038]

    tjw committed Jul 8, 2017
    General:
    - More nullability annotations.
    
    OmniFoundation:
    - Marked -[OFBinding initWithObject:keyPath:] as the designated initializer,
     and marked -init as unavailable (especially) so that clients don't
     inadvertently create instances with the inherited empty initializer,
     which is incorrect.
    
    OmniDAV:
    - Add some useful DAV operation classes.
    
    OmniSoftwareUpdate:
    - When calculating the storage size, we used to loop through all mounted
      partitions using getmntinfo(3), but apfs returns the disk total for multiple
      partitions so that was returning an incorrect total. Perhaps what we really
      want is to look at the size of the filesystem our app's sandbox lives in,
      but for now let's just grab the size of the root filesystem.
    
    OmniUI/iPad:
    - More theming support.
    - Fixed a paste-o where hideSidebar(atLocation:) tried to present the view
      controller rather than hiding it.
    - OUIWrappingViewController now implements preferredStatusBarStyle and returns
      its wrappedViewController's preferredStatusBarStyle.
    - Fix some bugs in handlers for move up/down/left/right.
    
    OmniUI/iPad-Document:
    - More themeing support.
    
    OmniAppKit:
    - Updated NSTableView(OAExtensions) to support `tableView(_:pasteboardWriterForRow:)`.
    
    OmniQuartz:
    - Fix a build error when logging is enable.
  3. Updated with changes from OmniGroup svn [289908:290414]

    tjw committed Jul 8, 2017
    OmniFoundation:
    - OFFilterProcess now clears DYLD_INSERT_LIBRARIES.
    - OFRelativeDateFormatter no longer rejectings -dateFromString:.
    - Moved -convertToAppleEventDescriptor: from OmniFocus into
      OmniFoundation, and fixed a few things along the way.
    
    OmniDataObjects:
    - Fix an #import so it can find its reference on a case-sensitive file
      system.
    
    OmniSoftwareUpdate:
    - Update OSUDevices.json with new iPad Pro models
    - Add WWDC 2017 Mac models
    
    OmniDocumentStore:
    - For a move operation _doMotion's completion handler needs to know where the
      file items we moved ended up. For copy it wants the ODSFileItems created at
      the destination. The problem here was the completion handler thought we had
      failed to create a folder so it didn't get to the part of the completion that
      ended the progress indicator. In that error path, added a call to
      activityIndicator stopAnimating.
    
    OmniUI/iPad:
    - -[UIApplication delegate] triggers the main-thread checker in Xcode 9.
      Cache the result with a dispatch_once and rely on this getting hit on the
      main thread before we call it on a background queue.
    - Made selected tab text color and tab border colors themeable.
    - -[OUIStackedSlicesInspectorPane viewWillAppear:] calls -notifyChildrenThatAppearanceDidChange
      at the end if OUIInspectorAppearance is enabled.
    - Don't reload the inspectors if they are not in the view hierarchy, but also
      make sure they are visible on the screen, as hidden embedded inspectors are
      in the view hierarchy but not on screen.
    - OUIStackedSlicesInspector's OUIStackedSlicesInspectorPaneContentView used to
      be initialized with height self.inspector.mainPane.preferredContentSize.height.
      Since it uses autolayout to size itself to the stack view it contains that
      has been removed.
    
    OmniUI/iPad-Document:
    - Updated the empty overlay view text color. Each app can now specify this color
      via an -[OUIDocumentAppController emptyOverlayViewTextColor] override.
      The default is _window.tintColor.
      OUIDocumentPickerViewController and OUIDocumentCreationTemplatePickerViewController
      have been updated to use the long form constructor for building OUIEmptyOverlayViews
      that includes passing the text color. It consults -[OUIDocumentAppController emptyOverlayViewTextColor]
      for the text color.
    - In -closeAndDismissDocumentWithCompletionHandler:, if we are closing and
      dismissing the document, but the document picker has no presented view
      controller, just call the completion handler as the document has already
      been closed.
    
    OmniInspector:
    - Fix build issues with Xcode 9.
    - Added tooltips for any labels that get truncated.
Commits on Jul 3, 2017
Commits on Jun 15, 2017
  1. Updated with changes from OmniGroup svn [289510:289908]

    tjw committed Jun 15, 2017
    OmniFoundation:
    - Unify some assertion checking for infoDictionary.
    - Pass the finishing operation as an argument to OFAsynchronousOperation's pre-completion block.
    - Add OFVersionNumber +isOperatingSystemHighSierraOrLater.
    - Add OFSelectionSet -applyInInsertionOrder:
    
    OmniDataObjects:
    - Added -will/didNullifyRelationship: to OODObject. Subclasses can use this to
      invalidate caches based on those relationships.
    - Added +shouldIncludeSnapshotForTransientCalculatedProperty: to ODOObject.
      Subclasses can opt out of including values in the snapshot. If the value
      contains an ODOObject, it *must* opt out, because after delete and
      re-insertion you'll have a pointer to the previously inserted object, not
      the re-inserted one.
    - Changed -will/didNullifyRelationship: to accept a set of relationships, and
      sent it once at the beginning/end of the nullification loop.
    
    OmniDAV:
    - If a DAV operation fails after some number of redirects, store those redirects in the error we generate, so that the calling code can determine where the error actually happened.
    
    OmniFileStore:
    - New method -[OFSDocumentKey borrowUnwrappingFrom:otherKey].
      This allows you to unwrap a document key given another,
      already-unwrapped, document key that used the same passphrase and
      parameters. This is useful if, for example, another client has updated
      the key table without changing the password, and we want to get the
      up-to-date key table without going through the whole password
      retrieval and key-derivation rigamarole.
    
    OmniSoftwareUpdate:
    - Include "OSUHardwareInfo.h" instead of <OmniSoftwareUpdate/OSUHardwareInfo.h>.
      Otherwise, when we are building the OSUCheckService XPC service which gets
      embedded in the framework, Xcode 9 will infer a dependency on the framework,
      making the graph cyclical.
    
    OmniUI/iPad:
    - Added theming to OUIInstructionTextInspectorSlice.
    - Properties to support OUIInspectorAppearance theming for OUISliceSeparatorView.
    - Apply themeing in -[OUITheemedTableViewCell prepareForReuse] and then don't defeat it in cellForRowAtIndexPath:
Commits on Jun 9, 2017
  1. Updated with changes from OmniGroup svn [289454:289510]

    tjw committed Jun 9, 2017
    OmniDataObjects:
    - Add a reference to the SVNVersion project and target dependencies.
      This helps the Mac Frameworks target build with Xcode 9 more reliably.
    
    OmniUI/iPad:
    - Added InspectorBarStyle support to OUIInspectorAppearance, and dress up the top and bottom bars of the view inspector appropriately.
Commits on Jun 8, 2017
  1. Updated with changes from OmniGroup svn [289305:289454]

    tjw committed Jun 8, 2017
    General:
    - A few warning fixes in preparation for Swift 4.
    - Some Xcode 9 build fixes.
    
    OmniDataObjects:
    - Added runtime detection of properties marked read-only which shouldn't be on
      ODOObject subclasses.
    
    OmniDAV:
    - Finish getting rid of ODAVURLErrorFailingURLErrorKey.
Commits on Jun 6, 2017
  1. Updated with changes from OmniGroup svn [289115:289305]

    tjw committed Jun 6, 2017
    General:
    - Turn off implicit dependencies on a bunch more schemes.
    
    OmniFoundation:
    - Make OFPreference subclass from OBObject so that load actions are processed (possibly registering defaults).
    - Assert when recovering from the crashing nil outError instead of silently throwing a garbage error.
    - Add Collection.sort(using descriptors: [NSSortDescriptor]) to OmniFoundation.
    - Update logic for default search paths for plug-ins.
    
    OmniUI/iPad:
    - Attempt to suppress rotation by having MultiPaneController check for active rotation locks inside -shouldAutorotate.
      That method doesn't seem to get called, though, so we may need another approach, or a more thorough implementation of this one.
    
    OmniUI/iPad-Document:
    - If a MKCOL fails in OUIWebDAVSyncDownloader, pass the error back correctly.
Commits on Jun 2, 2017
  1. Updated with changes from OmniGroup svn [288882:289115]

    tjw committed Jun 2, 2017
    OmniFoundation:
    - Add OFUTIPreferredTagWithClass(), which avoids some oddiest in Swift bridging when trying to call UTTypeCopyPreferredTagWithClass.
    - Use dispatch_once in +[OFBundleRegistry standardPath].
    - Add an assertion in OFBundleRegistry to catch malformed bundles on iOS.
    - Update the +standardPath method so that iOS will default to looking in the app wrapper.
    - Declare NSUndoManager -isUndoingOrRedoing as a property.
    
    OmniDataObjects:
    - Add ODOObjectPrimitiveValueForPropertyWithOptions().
    
    OmniDAV:
    - Splitting the XML-parsing and multistatus-parsing code out into their own functions.
    
    OmniFileStore:
    - Fix a bug where a mutable document key would return an invalid data representation sometimes.
    
    OmniSoftwareUpdate:
    - Fix some OmniSoftwareUpdate translation issues in OmniOutliner 5.0
    
    OmniUI/iPad:
    - Allow for no left pane in the multi-pane controller.
    - Don't call +[OFBundleRegistry registerKnownBundles] manually. This is called on iOS via OBInvokeRegisteredLoadActions() now.
    - Don't try to present an error atop the OUIDocumentPicker when it is hidden.
    
    OmniUI/iPad-Document:
    - Extract API from OUIDocumentExporter for getting the list of writable types for a given file item to a method in ODSFileItem(OUIDocumentExtensions).
    - Avoid possible double-import of files from the Inbox.
    
    OmniAppKit:
    - Update project to reference specific framework targets.
    - Null annotation pass on OAInternetConfig, and made passing a nil receiver work ("mailto:" opens a totally empty mail message, in Apple's Mail.app at least).
Commits on May 31, 2017
  1. Fix #9.

    tjw committed May 31, 2017
    When running unit tests, specify AppleLocale = en_US and AppleICUDateFormatStrings = (), since that is what the tests expect.
  2. Updated with changes from OmniGroup svn [288583:288882]

    tjw committed May 31, 2017
    OmniBase:
    - Remove cover macros for read(), write(), writev(), and close().
    
    OmniFoundation:
    - Convert getter/setters to properties.
    - Explicitly declare an -init on OFRelativeDateFormatter that Swift wasn't seeing otherwise.
    - Null-annotate OFRelativeDateFormatter.[hm].
    - Add Collection extension for any(where:), all(where:), and subscript(safe:).
    - Added -[OFXMLElement attributeCount].
    
    OmniNetworking:
    - Remove cover macros for read(), write(), writev(), and close().
    
    OmniSoftwareUpdate:
    - Fixed autolayout for system info explain-o-text.
    
    OmniUI/iPad:
    - MultiPaneController now overrides transitionCoordinator. Per the documentation, it prioritizes returning its superclass's coordinator, but if no such coordinator is available, it now vends a coordinator reflecting an active pane transition. This coordinator is tracked in MultiPanePresenter, much like the existing interactive transition was tracked, and exposed only within OmniUI. The coordinator's implementation exists on a new pair of extensions to MultiPaneNavigationTransitionContext, which already tracked most of the information required as part of its conformance to UIViewControllerContextTransitioning. The few additional bits required are mostly sets of callback blocks, which back calls to e.g. notifyWhenInteractionChanges(_:).
    - If the view controller in a OUINavigationController wantsHiddenNavigationBar, hide the _accessoryAndBackgroundBar too.
    - Guard against double-presenting a view controller that returns true from -isBeingPresented. Rewrite a couple guard statements on the call path to match our newly-decided Swift style.
    - Add a flag on OUIAppController that says whether we can add a new document or not.
    
    OmniUI/iPad-Document:
    - Don't need to conform to ODSStoreDelegate twice; once is plenty.
Commits on May 30, 2017
  1. Merge pull request #99 from TheLoneRanger14/master

    tjw committed May 30, 2017
    Fixed the buffer overflow in -[ONPortAddress initWithCoder:(NSCoder *…
Commits on May 25, 2017
  1. - Some minor code cleanup in OmniNetworking.

    tjw committed May 25, 2017
    - Publish OFXMLIDLength.
    - Removed unused macros in OmniBase.
    
    OmniGroup svn [288573:288583]
  2. Updated with changes from OmniGroup svn [288567:288573]

    tjw committed May 25, 2017
    Avoid a few assertions in the TextEditor sample app (though it still has several remaining).