Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iOS App Features and Screens / Table Of Contents #1

Closed
felix-schwarz opened this issue Feb 10, 2018 · 5 comments
Closed

iOS App Features and Screens / Table Of Contents #1

felix-schwarz opened this issue Feb 10, 2018 · 5 comments

Comments

@felix-schwarz
Copy link
Contributor

felix-schwarz commented Feb 10, 2018

This issue tracks the planned features for the iOS app rewrite, where to find them - and how to get there.

List Of Servers (Screen)

bildschirmfoto 2018-03-07 um 15 39 29

Features

  • List Of Server Bookmarks
  • Remove Server Bookmark
  • Save last used Bookmark and re-connect automatically upon app termination / relaunch

Linked Screens

  • Add / Edit Server Bookmark
  • Server View
  • Settings
  • About / Help

Add / Edit Server Bookmark (Screen)

bildschirmfoto 2018-03-07 um 15 40 44

Features

  • Enter / Edit Server Address
  • Choose Authentication Method (auto-discovery if OC server supports it)
  • Enter Passphrase (where applicable)
  • Reset/Remove auth token (where applicable)

Linked Screens

  • List Of Server Bookmarks
  • Server Certificate Detail View

Server Certificate Detail overview (Screen)

Features

  • Show Certificate Details like Fingerprint, Common Name, Issuer, Serial and Expiration Date

Linked Screen

  • Add / Edit Server Bookmark

Server View (Screen)

filelist
bildschirmfoto 2018-02-22 um 21 59 22

Features

  • File Browser Tab
    • Search
    • Sort (inspired by Files app)
    • Item Detail View
    • Grid / List / Slide View
    • Preview File
    • Drag & Drop
    • Thumbnails (where supported by Server)
  • Shares Tab
    • List Of Shares
    • Delete Shares
  • Network Activity Indication Tab
    • Currently running up-/download/sync activities
    • Option to cancel network activities

Linked Screens

  • Item Detail View

Item Detail View (Screen)

actionshare

Features

  • Add, Remove and List Shares per item
  • File metadata (size, last modified)
  • Download status
    • Make available Offline
    • Delete Offline Copy
  • Actions
    • Open with
    • Rename
    • Move
    • Preview
    • Delete

Linked Screens

  • Server View / File Browser Tab

Slide View / Preview File (Screen)

Features

  • Paginated PDF viewing (+ annotations if supported by iOS out-of-the-box)
  • Video preview (for downloaded files, and possibly streaming)
  • Text file preview / basic editing

Linked Screens

  • Server View / File Browser Tab
  • Item Detail View

Settings (Screen)

Features

  • Background Uploads / Downloads
  • Account to upload photos to
  • Passcode Lock
  • Touch ID Lock
  • Clear Caches

Linked Screens

  • List Of Servers
  • User-Approved Certificates

User-Approved Certificates (Screen)

Features

  • List User-Approved Certificates
  • Delete User-Approved Certificates

Linked Screens

  • Server Certificate Detail View
  • Settings

About / Help (Screen)

Features

  • Help
  • Version Information
  • License Information (on included third-party libraries such as OpenSSL)

Linked Screens

  • List Of Servers

Other features

  • Migration URL (change of server URL via MDM)
  • iOS 11+ only
  • Share Extension
    • Share to ownCloud folder
  • File Provider Extension (Files app integration)
  • Layout adapts to iPhone and iPad respectively
    • Support for iPad multitasking (split screen + slide over)
    • Portrait and Lanscape support throughout the app
  • Branding Options
@jesmrec
Copy link
Contributor

jesmrec commented Feb 20, 2018

Let's analyse a bit all this nice stuff:

Regarding this one:

Add / Edit Server Bookmark (Screen)

is this the entry point for the user who clicks the app icon for the first time after installing? if it is, user is given the option to input the server URL and depending the authentication method (currently we are detecting it using the header www-authentication that the server sends with Basic / Bearer info), either inputs basic auth credentials (will we support this @michaelstingl?) or is redirect to OAuth2 webview that handles the authentication.

For this consideration (OAuth2) , and regarding security issues, very important: owncloud/ios-legacy#942 .

This feature:

Reset/Remove auth token (where applicable)

would need core support (API for that?), that is not currently available.

I think these two options should be clearly differentiated:

  • Add a new bookmark
  • Edit an existing bookmark

Although in both cases the view will be similar for the user, the logic to handle is not the same (does it means different views as well?). For example:

  • User adds a new server (bookmark) -> input URL, and credentials -> user authorized by core. Until first authorization is not granted

Linked Screens

  • List Of Server Bookmarks

should not be reachable.

  • User edits an existing server (bookmark) -> user wants to edit his credentials, but not the URL. Changing URL means migration and not edition, imo. Also, in this case:

Linked Screens

  • List Of Server Bookmarks

should be always available.

Regarding List of Servers:

List Of Servers (Screen)

Features

  • List Of Server Bookmarks
  • Remove Server Bookmark
  • Save last used Bookmark and re-connect automatically upon app termination / relaunch

I miss in the the list the feature to add / edit a bookmark, that points a few lines below to its linked screen:

  • Add / Edit Server Bookmark

only an small tweak, you know.

@felix-schwarz
Copy link
Contributor Author

felix-schwarz commented Feb 22, 2018

Regarding this one:

Add / Edit Server Bookmark (Screen)

is this the entry point for the user who clicks the app icon for the first time after installing?

The entry point is the List Of Servers, from where users can also access Settings and Help. If no server has been added yet (which should be the case on first launch, too, of course), a message with a call to action "Add server" is shown to the user:

bildschirmfoto 2018-02-22 um 21 58 41

if it is, user is given the option to input the server URL and depending the authentication method (currently we are detecting it using the header www-authentication that the server sends with Basic / Bearer info), either inputs basic auth credentials (will we support this @michaelstingl?) or is redirect to OAuth2 webview that handles the authentication.

I imagine adding a server to be a two-step process:

  • Step 1: the user enters a name and the server's URL, then taps "Continue"
  • The App can now query the server for the authentication methods it offers and also grab a copy of the server's certificate (if any)
  • The App subsequently presents the available authentication methods to the user (defaulting to OAuth2 where available) and also adds a "Show Certificate Details" button below the URL the user entered.
  • Step 2: (assuming OAuth2) the user taps "Connect" and finishes authentication

Regarding supported authentication methods: I don't know since when OAuth2 is supported by ownCloud servers - or whether it is safe to assume it's always available on recent installs. I would suggest to start OAuth2-only, but keep the door open for other authentication methods if they're needed (I can see this, f.ex. on tvOS, where no web views are available).

For this consideration (OAuth2) , and regarding security issues, very important: owncloud/ios-legacy#942 .

Thanks!

This feature:

Reset/Remove auth token (where applicable)

would need core support (API for that?), that is not currently available.

This can be achieved by setting the respective OCBookmark's authenticationData to nil. Setting it to nil deletes the data from the keychain.

I think these two options should be clearly differentiated:

  • Add a new bookmark
  • Edit an existing bookmark

Although in both cases the view will be similar for the user, the logic to handle is not the same (does it means different views as well?). For example:

The logic should be so similar that I would actually realize both in one view controller. Here are the scenarios I have in mind:

  1. User changes name
  • No difference
  1. User changes server address
  • Add: view controller starts with all rows below the address hidden.
  • Edit: view controller hides all rows below the address.
  • Common: user taps on "Continue" for the client to fetch available auth methods + certificate.
  1. User changes auth method
  • Common: the interface adapts accordingly to show/hide f.ex. user/pass fields.
  1. User enters user/pass or changes user/pass fields
  • Common: that data is sent to the OCAuthenticationMethod's -generateBookmarkAuthenticationDataWithConnection:.. in a dictionary when the user taps "Connect". If the authentication succeeds, the app can update the bookmark with the returned authenticationData.
  1. User completes action (either Add or Edit) by tapping "Connect"
  • Common: authentication is attempted and the user is prompted if either no auth data exists ("Delete Authentication Data") or it is no longer valid

I can't think of any other scenarios right now. Please let me know if I overlooked any.

Here's a screenshot of what I put together in Figma today:
bildschirmfoto 2018-02-22 um 21 58 59

  • User edits an existing server (bookmark) -> user wants to edit his credentials, but not the URL. Changing URL means migration and not edition, imo.

The ability to edit the URL alongside all other data defining the bookmark / connection to the server feels like it's the right place to do it.

But I'm not as familiar with ownCloud as you are, so please let me know if there are any reasons I may not know about yet why this would be a bad idea.

Regarding List of Servers:

List Of Servers (Screen)

Features

  • List Of Server Bookmarks
  • Remove Server Bookmark
  • Save last used Bookmark and re-connect automatically upon app termination / relaunch

I miss in the the list the feature to add / edit a bookmark, that points a few lines below to its linked screen:

  • Add / Edit Server Bookmark

only an small tweak, you know.

If a feature is actually implemented in a different place and turns up in "Linked Screens", I tried to avoid to also list it under "Features", too, so it's clear what's actually implemented in which place. The thought behind that was that if something is a "Linked Screen", the Screen that it is linked to from must provide access to it in some way.

@hurradieweltgehtunter
Copy link
Contributor

I was asked to have a look here regarding ownCloud CI and layout. I think it's awesome that you guys make this extra effort. By rewriting the app, we should definitely be correct on CI and styles.
I'm not quite sure how much I need to tell you about styles etc. so i'm just writing down what comes to my mind. If it's too basic, just ignore it.
Here it goes:

Colors

Primary color: #1D293B (oc dark blue)
Secondary color: #468CC8 (oc light blue)
We do not use any gradients on any surfaces.

Logo

Please use the correct logo -> https://owncloud.org/trademark/
The text "ownCloud" must not be removed from the cloud.
The most correct use would be a white logo on a oc dark blue background (like in the top menu bar). If it's possible, please implement like this.
The logo in the screenshots is a mix from community and enterprise logo which doesn't exist in this way.
Also, no grey logo, no gradient and no oc enterprise orange.

Icons

Please use clean, monochrome icons without shadow or 3d effects. See FontAwesome for example.
Icons can be very useful if used in a meaningful way but not every element needs an icon. It should provide a real advantage for every new and recurring user.

Buttons, Preview Images etc.

Please do not use rounded corners.

Font

ownClouds main font is OpenSans Light and Bold (no semi-bold, regular, ...)

Example

  1. correct color in head bar
  2. correct logo in head bar
  3. removed all rounded corners on buttons, file icon and dialog overlay

image

If you need any help regarding CI, I'm always happy to help.

@felix-schwarz
Copy link
Contributor Author

I was asked to have a look here regarding ownCloud CI and layout. I think it's awesome that you guys make this extra effort. By rewriting the app, we should definitely be correct on CI and styles.
I'm not quite sure how much I need to tell you about styles etc. so i'm just writing down what comes to my mind. If it's too basic, just ignore it.

Thanks a lot! 😃

Logo

Please use the correct logo -> https://owncloud.org/trademark/

Thanks! That's so much better! (for the "List Of Servers" screen, I used material from https://owncloud.com/press/)

The text "ownCloud" must not be removed from the cloud.
The most correct use would be a white logo on a oc dark blue background (like in the top menu bar). If it's possible, please implement like this.
The logo in the screenshots is a mix from community and enterprise logo which doesn't exist in this way.

For the "List Of Servers", I found the "ownCloud" text below it really bites with the "Welcome" text below the logo (I tried it). It would duplicate the existing "ownCloud" label in the top bar, too.

About the images above with yellow background: that is material based on screenshots from the previous client and resources used there. I'm not sure there's a good way to also place the ownCloud logo up there in the new app. But if we find one, it would also look better without the "ownCloud" text below it. That text would be really small and - due to its thin font weight and scaling (down to ~ 20 points vertically) - practically illegible, making the filled clouds look vertically off-center with "pixel dirt" below it.

Since the previous iOS app used the clouds without text as well - and keeping the text will almost certainly not look good in the contexts it lends itself to be used: is there really no chance we can use just the clouds?

Also, no grey logo, no gradient and no oc enterprise orange.

If we go with a light design, would a oc light blue cloud on white background also be ok?

Buttons, Preview Images etc.

Please do not use rounded corners.

Rounded corners are how things usually look on iOS. With recent iOS releases, Apple has walked back some of the "blue text are buttons" design language it introduced with iOS 7 and now even uses solid, blue round-rect buttons (as seen in the "Welcome" screen above) throughout device setup and system apps.

Apps that adopt a rectangular look (like Google's iOS apps, which Google tries to use its own Material Design language in) feel foreign on the iOS platform, which I'd like to avoid.

Font

ownClouds main font is OpenSans Light and Bold (no semi-bold, regular, ...)

Given how widespread OpenSans is in use (I coincidentally also use it on my company's website), is it really a recognizable part of the ownCloud brand that needs to be preserved in the app?

If possible, I'd really like to use Apple's system font San Francisco (in weights commonly used by iOS and Apple apps) as it allows us to take full advantage of the iOS text system, means writing less code and getting to results faster.

Thanks!

@felix-schwarz
Copy link
Contributor Author

I added a screen for User-Approved Certificates that's accessible via the Settings.

Users should be able to see which certificates they approved and revoke their approval on an individual basis.

@mneuwert mneuwert mentioned this issue Jul 28, 2020
12 tasks
felix-schwarz added a commit that referenced this issue Jul 14, 2022
hosy added a commit that referenced this issue Aug 1, 2022
#1129)

* #5256 workaround for fixing the biometrical unlock in the share sheet, when opening from Boxer app. View disappeared after the biometrical unlock succeeded. Probably because 'completeRequest' was sent from the biometrical unlock extension, which caused a dismiss in the share sheet extension.

* - added new app lock setting if biometrical unlock should be used in share sheet
- share unlock and last application background date via app and extensions

* change default value to YES for using biometrical unlock in share sheet

* - normalize code indentation

* - normalize code indentation for better comparison

* - Branding: add -appURLSchemesForBundleURLName: method to retrieve URL schemes from the app bundle
- UIViewController+HostBundleID: category to return the bundle ID of the app hosting/invoking a (share) extension
- ShareNavigationController: set OCAppIdentity.hostAppBundleIdentifier using UIViewController+HostBundleID
- AppLockSettings:
	- replace "use-biometrical-unlock-share-sheet" boolean with "share-sheet-biometrical-unlock-by-app" dictionary
	- implement new logic to turn off biometric authentication based on share sheet invoking app
- AppLockManager:
	- make LAContext() optional throughout methods
	- move invocation of openURL to central place
	- remove fixed URL opening of owncloud:// and replace it with the dynamically composed URL AppLockSettings.biometricalAuthenticationRedirectionTargetURL
- PasscodeViewController: rename cancelButtonHidden to cancelButtonAvailable because the latter is what it actually does
- ownCloud Share Extension/Info.plist: add missing OCAppComponentIdentifier key so that OCAppIdentity.componentIdentifier returns the correct value

* - fix code comment

* - fix finding #1 by @jesmrec in #1129

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
hosy added a commit that referenced this issue Aug 2, 2022
* - Changed app version
- Added In-App release notes section

* changed app version to unused value

* updated Xcode version for release build

* [fix/share-sheet-biometrical-unlock] Biometrical Unlock in Share Sheet (#1129)

* #5256 workaround for fixing the biometrical unlock in the share sheet, when opening from Boxer app. View disappeared after the biometrical unlock succeeded. Probably because 'completeRequest' was sent from the biometrical unlock extension, which caused a dismiss in the share sheet extension.

* - added new app lock setting if biometrical unlock should be used in share sheet
- share unlock and last application background date via app and extensions

* change default value to YES for using biometrical unlock in share sheet

* - normalize code indentation

* - normalize code indentation for better comparison

* - Branding: add -appURLSchemesForBundleURLName: method to retrieve URL schemes from the app bundle
- UIViewController+HostBundleID: category to return the bundle ID of the app hosting/invoking a (share) extension
- ShareNavigationController: set OCAppIdentity.hostAppBundleIdentifier using UIViewController+HostBundleID
- AppLockSettings:
	- replace "use-biometrical-unlock-share-sheet" boolean with "share-sheet-biometrical-unlock-by-app" dictionary
	- implement new logic to turn off biometric authentication based on share sheet invoking app
- AppLockManager:
	- make LAContext() optional throughout methods
	- move invocation of openURL to central place
	- remove fixed URL opening of owncloud:// and replace it with the dynamically composed URL AppLockSettings.biometricalAuthenticationRedirectionTargetURL
- PasscodeViewController: rename cancelButtonHidden to cancelButtonAvailable because the latter is what it actually does
- ownCloud Share Extension/Info.plist: add missing OCAppComponentIdentifier key so that OCAppIdentity.componentIdentifier returns the correct value

* - fix code comment

* - fix finding #1 by @jesmrec in #1129

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>

* QueryFileListTableViewController (#1134)

- add category to OCCoreConnectionStatus to quickly determine offline-like states
- fix bug #1130 where the folder contents wasn't shown when offline

* #5199 fix some automatic color values, if the branding color is bright. Before we only had a look if the branding color is white, but this does not work. Introduced a new welcome style for informal button, because the general informal button color does not work for the login screen in all cases (#1132)

Co-authored-by: Matthias Hühne <>

* - updated changelog files
- updated In-App release notes

* Calens changelog updated

* moved Calens changelog files to release folder

* Calens changelog updated

* added fastlane App Store release notes

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>
felix-schwarz added a commit that referenced this issue May 22, 2023
* [milestone/11.10.1] Milestone 11.10.1 (#1131)

## Description
Contains various changes and improvements to the view navigation and hierarchy of version 12:
- [x] sidebar
- [x] remove legacy table view code and use new UI for OC10, too
- [x] support for status 425 items
- [x] show folder statistics and drive quota (if one is set) at the bottom
- [x] show correct UI for ocis-based servers on first login for branded clients  
- [x] add missing German localizations
- [x] basic sharing fixes
- [x] new location picker, import sheet and share extension
- [x] show new [AppStore UI](https://developer.apple.com/documentation/storekit/appstore/3803198-showmanagesubscriptions) for managing AppStore subscriptions
- [x] browser-like navigation
- [x] tappable breadcrumb view

## Merges
This PR was started on a merge from [feature/new-search] #1142 and [feature/app-provider] #1151 to leverage work from previous PRs directly.

In addition, the following PRs and changes have been merged into this branch:
- [feature/disable-fileprovider] Disable access to File Provider via MDM #1158
- [feature/disallow-extensions] Add option to disallow extensions, show action for unviewable filetypes #1140
- [feature/ats-control] Add DISABLE_PLAIN_HTTP build flag #1136
- [feature/postbuild-settings] Postbuild Settings #1179
- merge `11.11.0` and `fastlane/enterprise-adhoc` changes from `master`

# Autogenerated, squashed changelog

* - Changed app version
- Added In-App release notes section

* changed app version to unused value

* updated Xcode version for release build

* [fix/share-sheet-biometrical-unlock] Biometrical Unlock in Share Sheet (#1129)

* #5256 workaround for fixing the biometrical unlock in the share sheet, when opening from Boxer app. View disappeared after the biometrical unlock succeeded. Probably because 'completeRequest' was sent from the biometrical unlock extension, which caused a dismiss in the share sheet extension.

* - added new app lock setting if biometrical unlock should be used in share sheet
- share unlock and last application background date via app and extensions

* change default value to YES for using biometrical unlock in share sheet

* - normalize code indentation

* - normalize code indentation for better comparison

* - Branding: add -appURLSchemesForBundleURLName: method to retrieve URL schemes from the app bundle
- UIViewController+HostBundleID: category to return the bundle ID of the app hosting/invoking a (share) extension
- ShareNavigationController: set OCAppIdentity.hostAppBundleIdentifier using UIViewController+HostBundleID
- AppLockSettings:
	- replace "use-biometrical-unlock-share-sheet" boolean with "share-sheet-biometrical-unlock-by-app" dictionary
	- implement new logic to turn off biometric authentication based on share sheet invoking app
- AppLockManager:
	- make LAContext() optional throughout methods
	- move invocation of openURL to central place
	- remove fixed URL opening of owncloud:// and replace it with the dynamically composed URL AppLockSettings.biometricalAuthenticationRedirectionTargetURL
- PasscodeViewController: rename cancelButtonHidden to cancelButtonAvailable because the latter is what it actually does
- ownCloud Share Extension/Info.plist: add missing OCAppComponentIdentifier key so that OCAppIdentity.componentIdentifier returns the correct value

* - fix code comment

* - fix finding #1 by @jesmrec in #1129

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>

* QueryFileListTableViewController (#1134)

- add category to OCCoreConnectionStatus to quickly determine offline-like states
- fix bug #1130 where the folder contents wasn't shown when offline

* #5199 fix some automatic color values, if the branding color is bright. Before we only had a look if the branding color is white, but this does not work. Introduced a new welcome style for informal button, because the general informal button color does not work for the login screen in all cases (#1132)

Co-authored-by: Matthias Hühne <>

* - updated changelog files
- updated In-App release notes

* Calens changelog updated

* moved Calens changelog files to release folder

* Calens changelog updated

* added fastlane App Store release notes

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* updated app version because of invalidate binary on App Store submit

* - add DISABLE_PLAIN_HTTP build flag
- re-add a reduced version of the BUILD_CUSTOMIZATION.md document to keep track of build flags and add documentation on DISABLE_PLAIN_HTTP to it

* - update SDK to include latest documentation changes

* - Action: add new action location "unviewableFileType" for actions to display for unviewable file types
- DisplayViewController:
	- add support for a primary unviewableFileType action
	- replace usage of UIControl.Event.touchUpInside with .primaryActionTriggered
- Scheme: add option for new "extensions.disallowed" MDM option
- update SDK for support for "extensions.disallowed"

* Changed app version to value 11.11.0

* [feature/theme-dark-web] New Dark Mode Themes (#1145)

* [fix/video-artwork] Metadata Image overlays Video Player (#1147)

* #5296 in some cases the video player does not show the video, because if a metadata image was available, an image view was overlaying over the video. Now the metadata image will only shown, if item is not a video file.

* added changelog entry

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* Calens changelog updated

* - bump version to 229

* - respect files.privateLinks capabilities and do not offer to create private links when privateLinks are not supported (#1139)

* [fix/enable-markup-iOS16] Enabling Markup Mode on iOS 16 (#1152)

* #1141 fixes enabling markup mode on iOS 16

* added changelog entry

* Calens changelog updated

* In some cases the number of toolbar buttons are less than 4

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* changed new dark theme button background color

* fixed cancel button style in passcode setup view

* - fixes AVPlayerViewController controls not being visible on iOS 16 (finding "iOS 3" in #1141 (comment)) (#1157)

* fixed some UIAlertController declarations, which were not themed in the UI and replaced it with subclass ThemedAlertController

* [fix/share-extension-passcode-lock-interval] Share Extension Passcode Lock Interval (#1156)

* [translation-sync] Translation Sync (#1150)

* Transifex translation updates

* [tx] updated from transifex
* updated to latest SDK commit

Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: Matthias Hühne <>

* - OCFileProviderSettings:
	- class to manage file provider setttings and host documentation
	- initially offers only an option to make the File Provider unbrowseable
- File Provider UI / DocumentActionViewController:
	- add support for OCFileProviderSettings.browseable
	- fix broken display of error messages
- File Provider Extension:
	- add support for OCFileProviderSettings.browseable
	- invoke File Provider UI to show an error message when the user tries to browse an account
	- return tailored error message when user tries to create a folder
	- return tailored error message when user tries to upload a file

* [milestone/11.11.0] Milestone 11.11.0 (#1148)

* Changed app version to value 11.11.0

* [feature/theme-dark-web] New Dark Mode Themes (#1145)

* [fix/video-artwork] Metadata Image overlays Video Player (#1147)

* #5296 in some cases the video player does not show the video, because if a metadata image was available, an image view was overlaying over the video. Now the metadata image will only shown, if item is not a video file.

* added changelog entry

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* Calens changelog updated

* - respect files.privateLinks capabilities and do not offer to create private links when privateLinks are not supported (#1139)

* [fix/enable-markup-iOS16] Enabling Markup Mode on iOS 16 (#1152)

* #1141 fixes enabling markup mode on iOS 16

* added changelog entry

* Calens changelog updated

* In some cases the number of toolbar buttons are less than 4

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* changed new dark theme button background color

* fixed cancel button style in passcode setup view

* - fixes AVPlayerViewController controls not being visible on iOS 16 (finding "iOS 3" in #1141 (comment)) (#1157)

* fixed some UIAlertController declarations, which were not themed in the UI and replaced it with subclass ThemedAlertController

* [fix/share-extension-passcode-lock-interval] Share Extension Passcode Lock Interval (#1156)

* [translation-sync] Translation Sync (#1150)

* Transifex translation updates

* [tx] updated from transifex
* updated to latest SDK commit

Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: Matthias Hühne <>

* - added missing changelog files
- added in-app release notes

* Calens changelog updated

* generated updated fastlane release notes

* moved changelog files to release folder

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: ownClouders <devops@owncloud.com>

* - change "smart folders" naming to "search view"
- add missing strings to Localizable.strings

* - update SDK to fix issue with detached spaces' items turning up in search results

* Updated to current Xcode version

* - update KNOWN_ISSUES.md to reflect changes

* - ItemSearchSuggestionsViewController:
	- hide save search/template popup button unless saving is actually available in a scope
	- remove saved searches from the popup as they are now also available elsewhere
- SearchViewController: strip whitespace when deciding what content to show (suggestion / noItems / results)
- update SDK

* [fastlane/enterprise-adhoc] Fastlane Enterprise Ad-hoc Replacement (#1160)

* replaced enterprise with ad-hoc export method and values

* changed certificate name

Co-authored-by: Matthias Hühne <>

* Certificate Update

* - add SegmentView: composing items (SegmentViewItem) as views (SegmentViewItemView), applying background, round corners, colors, etc. (styling still work-in-progress)
- SavedSearchCell: make use of SegmentView for richer, token-based visualization of saved searches
- OCSavedSearch:
	- new property to indicate if .name has been defined by the user
	- convenience method to quickly create an array of SegmentViewItems from a OCSavedSearch
- CollectionViewController: automatically apply .tableBackgroundColor as background color
- SearchViewController: strip whitespace from search queries before determining which content to show
- GradientView: add support for direction
- UIView+EmbedAndLayout: convenience methods to embed views horizontally and apply custom insets and spacing
- ThemeView: add hook to setup subviews upon insertion into superview

* - update KNOWN_ISSUES evolution part with remaining idea on what can be done with SegmentView and how it would benefit search
- Theming support improvements
	- ThemeCollection: add tokenColors and tableRowButtonColors
	- SegmentViewItemView: add support for themeing
	- SegmentViewItem: simplify styles
	- SearchViewController: theme the search field
	- SavedSearchCell: add support for themeing

* - bump build/version to 230

* SDK update
- removes space type from presentable / spaces list
- adds new log.replace-newline option and makes it default

* Fix App Provider review findings from #1151:
- close button visibility on mixed/dark themes
- display error messages when errors occur
- add missing translations

* - update SDK for additional bugfix

* - ItemListCell: add support for server-side processing state
- fix bug that caused an empty spaces list when offline (via SDK)

* - OCItem+FileProviderItem: add support for OCItem.state, making non-local files that are processing remotely non-readable
- SDK update

* - bump build number to 231

* - add new Tool "LocaleDiff" to find superfluous and missing strings in an other translation
- add German translations for all missing strings in ownCloud/Resources/en.lproj/Localizable.strings

* - bump build number to 232

* - make Beta warning localizable and localize it in German

* - add additional strings files to LocaleDiff scheme
- add missing German ownCloudAppFramework locales

* - add missing string to Localizable.strings

* - update SDK to get improved error messages for downloads of files with status 425

* - update localizations

* - SDK update: fix duplicate/"ghost" activities visual issue
- ClientActivityViewController: fix Xcode 14 warnings
- PopupButtonController: add themeing support
- NSObject+ThemeApplication: add proper support for UISearchTextField, fixing #118 text color issue

* - ClientRootViewController: do not restore view hierarchy for drive-based accounts since that's not yet implemented and the wrong view controllers would be created
- ClientItemViewController:
	- use a UILabel as navigationItem.titleView to address UINavigationBar layout issues (fixing reports finding 3 in [censored] issue 118)
	- update title as the folder's name is being changed
	- update underlying emptyActions when the folder they target is moved
- update SDK for moved item detection fixes

* - bump build number to 233

* - SDK update to fix possible crash bug
- address open/public Swift compiler warnings

* - bump build number to 234

* - bump build number to 235

* Fix issues with ocis sharing:
- respect OCCapabilities.federatedSharingSupported
- GroupSharingTableViewController: fix delete share issue by calling the correct method

* - bump version to 236

* - fix Xcode 14 warnings

* - upgrade SDK
- adapt to OCShare.itemType type change
- replace UIImage(systemName:) code with one using OCSymbol
- fix more Xcode 14 warnings

* - update SDK to gain OCStatistic capabilities
- ClientItemViewController:
	- implement support for "folder removed" state
	- adjust message spacing
	- refactor navigation bar code
	- add footer to display statistics for the current location, feeding from OCQuery-provided OCStatistics
	- prepare to also include quota information in the footer
- update KNOWN_ISSUES.md

* - ItemListCell: align separator layout guide with icon
- ViewCell: add separatorLayoutGuideCustomizer to allow customization of separator layout guide for individual views
- ClientItemViewController: add support to display quota information (space remaining)
- UIView+EmbedAndLayout: add code to embed multiple views vertically, modify existing ConstraintSet type

* - update SDK to gain fixed "Personal" and "Shares" names

* - ios-sdk: OCSyncActionCopyMove: prevent copying and moving of items into themselves
- ViewCell: fix seperatorLayoutGuide constraint on reuse (could cause visual glitch of full-length separator line when there shouldn't have been one)
- update known issues

* - SDK update to gain Accept-Language header addition for in-app web app presentation
- ClientWebAppViewController: implement logic to immediately dismiss the view controller when tapping the close button, but keep the web view alive until the "close" event arrives from the webview - or 10 seconds have passed

* - Action: add new class setting for excluded activities
- OpenInAction: honor excluded activities, bring up UIActivityViewController instead of UIDocumentInteractionController even for a single item if activities are excluded
- ownCloud.xcscheme: add env var example for action.excludedSystemActivities to block copying to pasteboard

* - update SDK to bring over UUID-based Shares Jail detection

* - bump build number to 237

* - StaticLoginSetupViewController: add OCConnection.connect() / .disconnect() to enrich bookmark with metadata and user name during setup. Required to present the correct UI for space-based accounts.

* - bump build number to 238

* - fix "App Provider language always English" via ios-sdk update

* - bump version to 239

* - update SDK for specific error message when trying to open a file that's being processed via open-web or open

* - update SDK

* - ClientSidebarViewController: side bar view controller
- CollectionViewSection: add hideIfEmptyDataSource feature/property
- ClientContext: add ViewControllerPusher protocol and methods for unifying pushing of view controllers to navigation / into view
- OCDrive+Interactions, OCItem+Interactions, OCSavedSearch+Interactions: move to new ClientContext method for pushing

* - CollectionViewController:
	- add support for hierarchic collection views and hierarchic data sources
	- add shouldDeselect() method
	- use snapshot.reconfigureItems() instead of snapshot.reloadItems() for more efficient updates (reuses cell rather than recreating it from scratch)
- CollectionViewCellConfiguration:
	- add new sideBar StyleType
- UIView+EmbedAndLayout: add AnchorSet and extend API to utilize it
- many fixes

* Snapshot with sidebar basically working, before making deeper changes
- App Controllers
	- AppRootViewController: the root view controller of the entire app, manages sidebar and more
	- AppSidebarViewController: side bar view controller, managing the side bar / first view
- Account Connection/Consumer classes
	- AccountConnection: manages a connection for the UI and makes its resources and message available to one or more consumers
	- AccountConnectionPool: creates new and keeps track of AccountConnection instances
	- AccountConnectionRichStatus: helper class to provide a consistent, simple, rich status for the whole account (wip)
	- AccountConsumer: group everything that is linked to an OCCore, allowing simple and clean addition and removal of consumers, providing a layer of separation/abstraction from UI concerns
- Account Controller classes
	- AccountController: links AccountConnection to the UI, provides sidebar content for an account
	- AccountControllerSection: makes AccountController contents available as a CollectionViewSection
	- AccountControllerCell: provides a cell representation for an AccountController, providing an icon to disconnect ("eject") a connection
- DriveListCell: add an icon for the sidebar, representing the (special) kind of drive
- CollectionView:
	- CollectionSidebarViewController: extend ViewControllerNavigationPusher with sidebar view controller parameter
	- CollectionViewCellProvider+StandardImplementations: add cell provider for .sidebar style type
	- CollectionViewSection:
		- implement OCDataItem + OCDataItemVersioning protocol
		- improve support for handling dynamic updates in hierarchic layouts
	- CollectionViewController:
		- add support providing sections from an OCDataSource (just set .sectionsDataSource)
		- properly support per-section ClientContext (use section.clientContext if set)
- OCDataItem+InteractionProtocols: add new, optional method to DataItemSelectionInteraction to provide control over whether an item should be selectable
- OCLocation+Interactions: implement the DataItemSelectionInteraction
- general: move many classes from ownCloud.app to ownCloudApp.framework
- Temporary changes:
	- ClientRootViewController: semi-functional, intermediate version to validate side bar design, to be removed entirely
	- ClientTabBarController: see ClientRootViewController
	- SceneDelegate: move to AppRootViewController as root view controller

* - move from UIImage(systemName:) to OCSymbol.icon(forSymbolName:) in most places
- split AppSidebarViewController into framework (ClientSidebarViewController in ownCloudAppShared) and app (extension ClientSidebarViewController) parts and extend the implementation with settings and account creation toolbar items
- BookmarkInfoViewController: add hook that gets called when the user taps "Done" and dismisses the view controller
- BookmarkViewController: add extension with convenience method to set up and display the BookmarkViewController for editing and creating new bookmarks
- OCBookmarkManager:
	- OCBookmarkManager+Management: extensions in app and framework to set up and display the BookmarkInfoViewController or delete an account, including confirmation by the user
	- OCBookmarkManager+Locking: move app-local locking of bookmarks to the ownCloudAppShared framework and extend on the concept with new attemptLock() method
- AccountConnection:
	- add new .noCore status to differentiate it from .offline
	- make consumer optional for connect() and disconnect()
	- post AccountConnection.StatusChangedNotification notifications when .status changes
	- RichStatus: add property for labeling the interaction
- AccountController:
	- add saved searches to the items data source
	- AccountControllerCell: listen to AccountConnection.StatusChangedNotification to update colored status indicator, fix other status reporting glitches
- SavedSearchCell: add specific cell for .sideBar style
- Navigation Revocations
	- new toolkit to detect when presented content has disappeared and provide a handling path (consult the respective README.md for details)
	- NavigationRevocationEvent: struct for a rich expression of events like disconnects, drive removals and more
	- NavigationRevocationAction: listen to events and perform an action once they find a matching event, lifetime can be to other objects
	- NavigationRevocationManager: global management of NavigationRevocationAction with memory semantics to allow automatic removal after a NavigationRevocationAction has become obsolete
	- NavigationRevocationTrigger: provides triggers for events such as specific items being removed from a datasource, objects being deallocated and more, can send a global event and/or invoke an action directly
	- UIViewController+NavigationRevocation: provide a simple API to register a view controller for revocation to common events
	- ClientContext: add new NavigationRevocationHandler protocol and property to handle navigation revocations
	- CollectionSidebarViewController: add support for NavigationRevocationHandler
	- OCDrive/OCLocation/OCSavedSearch+Interactions: register view controllers for Navigation Recovation, using NavigationRevocationHandler
- ClientItemViewController:
	- show special drive header only for .project (so not for personal or Shares Jail) spaces
	- fix navigation title

* - bump build number to 240
- AppRootViewController:
	- add focusedBookmark tracking
	- add focusedBookmark specific notificationPresenter and cardMessagePresenter
	- port over message presentation
	- port over beta warning
	- port over review prompting
	- port over enforced passcode setup (as of yet untested)
- BookmarkViewController:
	- ensure editing uses the latest copy from OCBookmarkManager
	- present modally rather than .overFullscreen on iPad
- ClientActivityViewController: add initializer for AccountConnection and use AccountConnectionConsumer to hook into events
- ClientSessionManager: remove unused code, ensure delegates are only weakly referenced
- AccountConnection: complete MessageSelector support
- AccountConnectionConsumer: switch form NSObject to AnyObject, add new method to AccountConnectionMessageUpdates to track message counts
- AccountController: introduce SpecialItems type, property and data source
- AccountControllerCell: add support for message counting badge
- ActionCell: add sidebar support, add badgeCount accessory support
- CollectionSidebarAction:
	- new class, subclassing OCAction to provide specific functionality around Sidebars, f.ex. dynamic creation of view controllers upon selection, keeping track of and caching previously generated view controllers
	- also implements extensions to OCAction to wrap properties
- CollectionSidebarViewController: add new method sectionOfCurrentSelection to easily determine the section in which the currently selected item is located
- ClientSidebarViewController: add .focusedBookmark property (KVO capable)
- OCAction+Interactions: add support for supportsDrop

* - update KNOWN_ISSUES
- AppRootViewController: add support for beta warning, bookmark editing, message presentation, release notes and more
- AppDelegate: launch into AppRootViewController instead of ServerListTableViewController
- remove ServerListTableViewController from target
- ReleaseNotesDatasource: clean up code and make class-level methods what were instance methods
- rename "Search view" to "Saved search"
- AccountConnection: add AuthFailure struct and status and make Status a non-String enum
- AccountConnectionPool: add AccountConnectionAuthErrorConsumer to new connections by default
- refactor authentication error handling into
	- AccountAuthentication* classes
	- AccountConnectionAuthErrorConsumer (as helper for AccountConnection)
	- AccountConnectionErrorHandler (as helper for AccountController)
- AccountController:
	- keep references to important items
	- add support for saved searches
	- add support for OC10 root folder
	- clicking spaces shows a spaces grid (AccountControllerSpacesGridViewController)
- AccountControllerCell: adapt to Status enum changes
- ActionCell: add support for different types (coloring), accessories, badge count, button labels and more
- DriveGridCell: cell subclass to support AccountControllerSpacesGridViewController
- DriveListCell: add grid support
- CollectionViewController:
	- add performDataSourceUpdate() mechanism to avoid changes being made to the data sources while other changes are already made
- CollectionSidebarAction:
	- extend OCAction properties
	- implement class to show view controllers on selection
	- add support for children
- CollectionViewAction: actions to be performed on the collection view when specific items become available
- CollectionViewSection: add support for .grid() layout, fix crash bug
- ClientContext: add alertQueue, bookmarkEditingHandler, .presentationViewController property and present(viewController:animated:completion:) method
- ClientSidebarViewController: add support for default view controller
- ClientDefaultViewController: content shown when nothing is selected in the sidebar
- ClientItemViewController: add select all/deselect all support
- (re)start implementation of location picker (WIP)
- UIView+EmbedAndLayout: add new method for centering another view inside an existing view, with minimum/maxiumum/fixed size and minimum insets
- Theme: add support for split view content themeing, temporarily remove almost all themes until support for them arrives
- ThemeNavigationController: move from ThemeApplierTokens to implementing Themeable
- AppUserActivity: start (re)implementing support for NSUserActivity

* - bump build number to 241

* - update KNOWN_ISSUES
- move OCResourceText+ViewProvider and Down framework from app to ownCloudAppShared as it is needed for a rich spaces view in the location picker
- extract embedding behaviour from AppRootViewController into EmbeddingViewController
- implement ClientLocationPicker and ClientLocationPickerViewController
- rewrite Share Extension based on ClientLocationPicker and ComposedMessageView
- upgrade AutoUploadSecttingsSection and auto photo/video uploads to use ClientLocationPicker and OCLocations
- migrate or partially rewrite CopyAction, MoveAction, ImportFilesController to use ClientLocationPicker
- AccountConnectionPool: add method to disconnect all connections in the pool
- AccountController: add options to
	- change cell appearance
	- hide the account pill
	- (not) auto select the personal folder
- Action:
	- add method to provide a UIBarButtonItem
	- add new location .locationPickerBar for appearance in ClientLocationPicker
- WebApp: ensure apps are presented full screen on iPad, not in a popover
- DriveGridCell: always show title + subtitle to align titles, truncate both at 1 line
- ItemListCell: add support for appearance (ClientItemAppearance) for regular and disabled appearances
- CollectionViewController: add .hideNavigationBar property that does what it says on the tin
- ClientContext: expand validation system to allow passing a ClientContext to validation methods and permission handlers (allows to implement behaviour for f.ex. a specific view controller rather than all view controllers descending from it)
- ClientItemViewController: add .location and .viewControllerUUID properties
- Interactions for OCDrive, OCItem, OCLocation: set bookmarkUUID in locations that are used for newly created ClientItemViewControllers
- ComposedMessageView: add support for .buttons
- OCBookmarkManager+Management: make sure to use exact OCBookmark instance when removing a bookmark
- UINavigationItem+Extension: simplify workaround for iOS 16 navigation title truncation bug
- remove ClientDirectoryPickerViewController and ClientSpacesTableViewController
- bump build number to 241

* - BookmarkViewController/IssuesCardViewController/OCLicenseEnvironment: adapt to OCBookmark.certificateStore change
- xcscheme: add connection.associated-certificates-tracking-rule example that opts in all *.local certificates into certificate change tracking
- remove ClientTabBarController
- update known issues

* - update SDK
- update KNOWN_ISSUES.md
- remove EarlGrey and everything that depends on it
- AccountController:
	- SpecialItems -> ExtraItems to clarify features being distinct
	- collect "real" special items in three dictionaries rather than each in its own instance variable

* - remove legacy migration

* - DisplayHostViewController: update to use an OCDataSource subscription to track underlying items, not an OCQuery
- AccountController: add Quick Access, including Favorites and Available Offline
- OpenInWebAppAction: add keyboard shortcut (fixing finding in #1151)
- OCSavedSearch+Interactions: add new .customIconName and .useNameAsTitle properties and helper methods
- SavedSearchCell: add support for .customIconName and .useNameAsTitle
- CollectionViewController: add .insert(sections:at:) method
- ClientContext add .queryDatasource property
- SortedItemDataSource: helper data source to allow sorting of items from other data sources
- OCItemPolicy+Interactions: add context menu and swipe action support to remove policy
- remove unused UIImageView+Thumbnails.swift, mark others for removal

* - bump build number to 243

* - AccountController:
	- add support for showing/hiding account pill
	- add sharing items
	- add support for favorites support capability
- CollectionViewController:
	- separate usage of Wrapped IDs from hierarchic content
	- trigger data source updated when sections are hidden/shown
	- add setNeedsSourceUpdate() for more efficient updates
	- add workaround for UICollectionViewDiffableDataSource requesting cells from the wrong section when moved from there to another section
- CollectionViewSection: fix hideIfEmptyDataSource issue (previously did hide when not empty)
- ClientSharedWithMeViewController: new view controller to present pending, accepted and declined shares
- MoreViewHeader: add support for favorites support capability

* - OCShare+Interactions: add swipe + popup actions
- ClientSharedWithMeViewController: add title to list
- update SDK

* - NEW: UniversalItemListCell
	- provides a single cell implementation for two-line (title + detail) + thumbnail + accessories content
	- fine-grained encapsulation of content into UniversalItemListCell.Content objects for atomic, extensible content updates
	- fed through a content provider protocol (UniversalItemListCellContentProvider) that classes can adopt to asynchronously provide and update content via a completion handler
	- built-in accessory support for more, reveal, progress and messages
	- uses SegmentView for details line to allow rich/mixed content for different types
- UniversalItemListCellContentProvider implementation for OCItem, replacing ItemListCell
- UniversalItemListCellContentProvider implementation for OCShare
- InlineMessageCenter: make method names follow a single pattern
- ResourceItemIcon: add convenience method to return the best matching icon for a mime type
- SegmentView:
	- add new alpha property for items
	- various fixes (preventing unwanted animations and flickering due to tinting images + text, fix a retain loop)
- ThemeView: add missing call to didMoveToSuperview()

* - remove ItemListCell
- update KNOWN_ISSUES.md
- UnshareAction: add support for unsharing accepted "local" shares
- add missing localizations
- AccountConnection: inject shareJailQueryCustomizer into newly retrieved OCCore
- AccountController: no longer unfold Spaces by default
- ClientSharedByMeViewController: view controller to present shares shared to other users and links, including reveal and copy to clipboard
- fix navigation title UILabel becoming too large
- extend UniversalItemListCellContentProvider for OCShare with copy to clipboard, accept/decline and reveal accessories
- upgrade project to Xcode 14.2
- bump version to 245

* fastlane gym: changed workspace to project, because it no longer is using cocoapod

* - refactor and modularize URL scheme open URL handling code
- add handling for "owncloud://pb/" commands to allow control of OCClassSettingsFlatSourcePostBuild

* - include env var launch example for post-build.allowed-settings
- add error checking when clearing individual postbuild setting values

* - remove duplicate "Tap to relaunch." messages

* - Browser Navigation:
	- replaces UINavigationController and UISplitViewController
	- allows back/forward navigation and invoking the side bar
	- automatically switches between full width sidebar, side-by-side sidebar and sidebar-floating-on-top layouts depending on available width and content
- AppRootViewController: switch from UISplitViewController to BrowserNavigationViewController
- ClientContext: add additional property and push support for BrowserNavigationViewController
- EmbeddingViewController: add additional subclassing points for customization
- ClientLocationBarController: view controller displaying an OCLocation and allowing to jump to a parent location with a single tap
- ClientItemViewController: add bottom location bar if .location is set, using ClientLocationBarController
- SegmentView:
	- add support for scrolling
	- add support for limiting vertical usage
	- allow customization of "overflow" gradient color
	- add support for providing gesture recognizers for items
- ActionTapGestureRecognizer: subclass of UITapGestureRecognizer that allows providing a closure as action to perform
- UIView+EmbedAndLayout: embedHorizontally() gains limitHeight option that limits the height of the layout
- CollectionViewController: fill entire height with stack view, use a helper UIView to limit UICollectionView to safe area
- OCItem+Interactions: add revocations for view controllers pushed by reveal and open interactions
- UniversalItemListCell: work around _UITemporaryLayoutWidths auto-layout warning for accessory views
- Licensing
	- add OCLicenseQAProvider to allow enabling Pro Features for QA purposes
	- OCLicenseEMMProvider: fix provider ID
	- add toggle to "Advanced" settings allowing to unlock Pro Features for QA. Available only in beta builds.
- bump build number to 246

* Calens changelog updated

* - rename "Purchases" to "Purchases & Subscriptions" in Settings
- invoke AppStore.showManageSubscriptions() to allow direct subscription management where available, fallback to https://apps.apple.com/account/subscriptions

* - fix "Select All" not working in Multiselect
- adapt Multiselect to BrowserNavigationViewController

* - removal of legacy code

* - fix issue where OC10 accounts showed up empty in the File Provider

* - NavigationContent extension of UINavigationItem
- adapt SearchViewController, ClientItemViewController, ClientLocationPickerViewController and BrowserNavigationViewController to use NavigationContent instead of UINavigationItem directly
- fix background color and spacing for SearchViewController.scopeViewController to align with file list
- update KNOWN_ISSUES.md

* - bump build number to 247

* - address static analyzer findings
- address SwiftLint findings

* - adapt to OCLocation.parent nullability change
- unify/fix navigation titles and context.drive for ClientItemViewController
- add new issue to KNOWN_ISSUES.md
- make OCLocation breadcrumb generation general-purpose, so it can be used not just by ClientLocationBarController but also f.ex. dropdowns
- BrowserNavigationItem: add .canTrimViewController property
- update SDK

* Fixes for Xcode 14 fastlane builds and resigning
Fastfile:
- needs setting manual code signing, because of signing swift package failures
Resign Script:
- seems like not all provisioning profiles contains SHA-1 values but SHA-256 values. Changed that for checking.

* - AppDelegate / SceneDelegate cleanup

* - BrowserNavigationBookmark
	- new class to capture location information that can then be used to restore/create a view controller
	- supports arbitrary OCDataItems
	- used of state restoration, sidebar selection
	- usable for browser navigation history compacting & view controller restore (tbd)
	- can be attached to view controllers via new UIViewController.navigationBookmark property
- BrowserNavigationBookmark+AccountController: provide ID bridge to side bar
- BrowserNavigationViewController: add support for a delegate (used to sync selection in sidebar)
- BrowserNavigationHistory: fix bug in .currentItem implementation
- BrowserNavigationItem: add .navigationBookmark property
- DataItemBrowserNavigationBookmarkReStore protocol
	- allows storing and restoring view controllers individually on a per-OCDataItem basis
	- implementation for OCItem, OCLocation and OCSavedSearch
- OCDrive: support for DataItemSelectionInteraction now uses OCLocation's implementation under the hood
- AppStateActions
	- new, extensible and universal mechanism for building complex UI scenes with dependencies
	- used for state saving, state restoration, scene building and more
	- actions for opening a connection, navigation to the personal folder or a BrowserNavigationBookmark - or revealing an OCItem
	- high-level conceptual overview in accompanying README.md
- ClientContext: new .scene property
- CollectionViewController: implemented recordSelection() and SelectionOperation, leaving it commented out for future (re)consideration
- CollectionViewAction:
	- new .highlight and .unhighlightAll actions
	- add support for "select first matching item" to .select and .highlight
- AccountConnectionPool: new .activeConnections property to return active connections
- AccountConnection: fix busyStatus handling bug
- OCSavedSearch: allow override of uuid (needed for sidebar navigation item selection/state restoration)
- URL+Extensions: refactor to allow opening links via app scheme (f.ex. https://demo.owncloud.org/f/27 via owncloud://demo.owncloud.org/f/27)
- DisplayHostViewController: no longer require OCQuery or OCDataSource - creating an "internal" one if needed
- update CONFIGURATION.json
- update KNOWN_ISSUES.md
- update ios-sdk
- bump build number
- remove ServerListTableViewController, ServerListTableHeaderView, OpenItemUserActivity and more source files that are no longer in use

* - allow more customization when generating breadcrumbs from OCLocation, make segment composition available globally
- complete implementation of "Available Offline" view
	- provide rich view of OCItemPolicys with path and icon
	- allow revealing items marked available offline in their respective location
- provide "no items" views for:
	- Available Offline
	- Favorites
	- all search-based Quick Access views (PDF Documents, Documents, Images, Videos, Audios)
- unify header views using a new ComposedMessageView category
- update KNOWN_ISSUES.md

* - Collection Views
	- add support for supplementary items via CollectionViewSupplementaryItem and CollectionViewSupplementaryCellProvider
	- implement TitleSupplementaryCell for section titles, including pinning support
	- implement ViewSupplementaryCell for arbitrary views, including pinning support
	- allow specifying CollectionViewSupplementaryItem on a per-section level
- ClientItemViewController: adopt CollectionViewSupplementaryItem with ViewSupplementaryCell to show SortBar as pinned section header
- ClientSharedByMeViewController, ClientSharedWithMeViewController, Available Offline and more: adopt headers based on supplementary cells, removing the need to use wrapping data sources in many places (efficiency win!)
- remove legacy search scope code from SortBar
- remove legacy Push Presentation Controller code
- fix miscellaneous warnings through small code changes

* - new class DataSourceCondition:
	- allows triggering actions based on item count of datasources
	- allows logical combinations of several conditions
- CollectionViewController: add .coverView property and support for filled, centered and top layout
- CollectionViewSection: adopt DataSourceCondition to implement .hideIfEmptyDataSource
- AccountControllerSpacesGridViewController: add "No spaces" message if no spaces are shared with user
- ClientSharedByMeViewController and ClientSharedWithMeViewController: add respective "no items" messages
- AppRootViewController: no longer scroll highlighted sidebar items into center
- ComposedMessageView: theme image views with tintColor

* - DisplaySettings: provide query condition(s) implementing display settings filters (new queryConditionForDisplaySettings property)
- AccountSearchScope, DriveSearchScope, ContainerSearchScope: use DisplaySettings.queryConditionForDisplaySettings to limit search results to those that should be visible
- CollectionViewController: fix crash bug when sections with supplementary views are hidden

* - AccountController: ensure Saved Search sidebar item is only visible if the account has saved searches
- CollectionViewController.WrappedItem: add readable description for improved debugging
- CollectionViewSection: fix a crash bug if an item is inserted into a child data source whose parent item is hidden or not (yet) in the collection view's data source

* - add support for authenticated WebFinger and retrieval of server instances via SDK update
- currently does not implement a picker for retrieved instances but always uses the first one returned by the server

* - bump version to 249

* - update SDK to implement enterprise#5579, including sending a Referer header when requesting the IdP configuration
- bump build number to 250

* - ClientItemViewController: ensure navigationItem.title is set by .navigationTitle for proper back button labeling in UINavigationControllers
- ClientLocationPicker: fix destination of view controller pushes - make sure they get pushed to the picker, not the parent context's browser controller

* - ContainerSearchScope: ensure the folder within which the scope starts is not included in the results itself

* - AppProvider: lang parameter fix via SDK update (ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en"))

* - update SDK to possible address finding (38) in feature/new-navigation

* -  ClientLocationPickerViewController: fix vertical cancelButton constraint

* - OCShare+Interactions: make unshare action available via context menu and popup, use OCCore.delete() for unsharing

* - DisplayExtensionContext: subclass to allow passing the ClientContext to actions invoked from the more menu in DisplayViewController
- DisplayHostViewController: use DisplayExtensionContext and create a ClientContext child with a different originatingViewController
- DisplayViewController: clarify naming of method invoked when the more button is pressed in the viewer

* - enlarge "reveal" and "more" accessory buttons

* - bump build number to 252
- tag v12alpha1

* - fixed fastlane build error
- updated needed Xcode version for fastlane builds

* added a class setting key to set the default bookmark name when creating a new bookmark "bookmark.default-name"

* - update SDK to include authenticated WebFinger fix
- BookmarkViewController: consistent spacing with tabs to improve code readability

* set new Xcode version 14.3 as requirement

---------

Co-authored-by: Matthias Hühne <mhuehne@owncloud.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>
Co-authored-by: Matthias Hühne <>
Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: felix-schwarz <felix-schwarz@users.noreply.github.com>
Co-authored-by: Matthias Hühne <github@hosy.de>
felix-schwarz added a commit that referenced this issue May 22, 2023
…meing #1194 [feature/gridview] Gridview implementation (v12) (#1195)

# Merged [feature/gridview] 

## Description
- implements a grid view for items, with switching possible with a new button i the sort bar.
- implements a dynamically adapting grid layout – used for item grid view and the spaces grid overview
- fixes spaces grid staying on screen after disconnect
- fixes more (...) buttons next to space titles being compressed sideways in spaces grid
- fixes quota not being displayed for Personal space
- fixes "empty folder" being shown instead of "loading" + indicator

## Related Issue
#744 

# Autogenerated squashed commit messages


* [milestone/11.10.1] Milestone 11.10.1 (#1131)

* - Changed app version
- Added In-App release notes section

* changed app version to unused value

* updated Xcode version for release build

* [fix/share-sheet-biometrical-unlock] Biometrical Unlock in Share Sheet (#1129)

* #5256 workaround for fixing the biometrical unlock in the share sheet, when opening from Boxer app. View disappeared after the biometrical unlock succeeded. Probably because 'completeRequest' was sent from the biometrical unlock extension, which caused a dismiss in the share sheet extension.

* - added new app lock setting if biometrical unlock should be used in share sheet
- share unlock and last application background date via app and extensions

* change default value to YES for using biometrical unlock in share sheet

* - normalize code indentation

* - normalize code indentation for better comparison

* - Branding: add -appURLSchemesForBundleURLName: method to retrieve URL schemes from the app bundle
- UIViewController+HostBundleID: category to return the bundle ID of the app hosting/invoking a (share) extension
- ShareNavigationController: set OCAppIdentity.hostAppBundleIdentifier using UIViewController+HostBundleID
- AppLockSettings:
	- replace "use-biometrical-unlock-share-sheet" boolean with "share-sheet-biometrical-unlock-by-app" dictionary
	- implement new logic to turn off biometric authentication based on share sheet invoking app
- AppLockManager:
	- make LAContext() optional throughout methods
	- move invocation of openURL to central place
	- remove fixed URL opening of owncloud:// and replace it with the dynamically composed URL AppLockSettings.biometricalAuthenticationRedirectionTargetURL
- PasscodeViewController: rename cancelButtonHidden to cancelButtonAvailable because the latter is what it actually does
- ownCloud Share Extension/Info.plist: add missing OCAppComponentIdentifier key so that OCAppIdentity.componentIdentifier returns the correct value

* - fix code comment

* - fix finding #1 by @jesmrec in #1129

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>

* QueryFileListTableViewController (#1134)

- add category to OCCoreConnectionStatus to quickly determine offline-like states
- fix bug #1130 where the folder contents wasn't shown when offline

* #5199 fix some automatic color values, if the branding color is bright. Before we only had a look if the branding color is white, but this does not work. Introduced a new welcome style for informal button, because the general informal button color does not work for the login screen in all cases (#1132)

Co-authored-by: Matthias Hühne <>

* - updated changelog files
- updated In-App release notes

* Calens changelog updated

* moved Calens changelog files to release folder

* Calens changelog updated

* added fastlane App Store release notes

Co-authored-by: Matthias Hühne <>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* updated app version because of invalidate binary on App Store submit

* - add DISABLE_PLAIN_HTTP build flag
- re-add a reduced version of the BUILD_CUSTOMIZATION.md document to keep track of build flags and add documentation on DISABLE_PLAIN_HTTP to it

* - update SDK to include latest documentation changes

* - Action: add new action location "unviewableFileType" for actions to display for unviewable file types
- DisplayViewController:
	- add support for a primary unviewableFileType action
	- replace usage of UIControl.Event.touchUpInside with .primaryActionTriggered
- Scheme: add option for new "extensions.disallowed" MDM option
- update SDK for support for "extensions.disallowed"

* Changed app version to value 11.11.0

* [feature/theme-dark-web] New Dark Mode Themes (#1145)

* [fix/video-artwork] Metadata Image overlays Video Player (#1147)

* #5296 in some cases the video player does not show the video, because if a metadata image was available, an image view was overlaying over the video. Now the metadata image will only shown, if item is not a video file.

* added changelog entry

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* Calens changelog updated

* - bump version to 229

* - respect files.privateLinks capabilities and do not offer to create private links when privateLinks are not supported (#1139)

* [fix/enable-markup-iOS16] Enabling Markup Mode on iOS 16 (#1152)

* #1141 fixes enabling markup mode on iOS 16

* added changelog entry

* Calens changelog updated

* In some cases the number of toolbar buttons are less than 4

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* changed new dark theme button background color

* fixed cancel button style in passcode setup view

* - fixes AVPlayerViewController controls not being visible on iOS 16 (finding "iOS 3" in #1141 (comment)) (#1157)

* fixed some UIAlertController declarations, which were not themed in the UI and replaced it with subclass ThemedAlertController

* [fix/share-extension-passcode-lock-interval] Share Extension Passcode Lock Interval (#1156)

* [translation-sync] Translation Sync (#1150)

* Transifex translation updates

* [tx] updated from transifex
* updated to latest SDK commit

Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: Matthias Hühne <>

* - OCFileProviderSettings:
	- class to manage file provider setttings and host documentation
	- initially offers only an option to make the File Provider unbrowseable
- File Provider UI / DocumentActionViewController:
	- add support for OCFileProviderSettings.browseable
	- fix broken display of error messages
- File Provider Extension:
	- add support for OCFileProviderSettings.browseable
	- invoke File Provider UI to show an error message when the user tries to browse an account
	- return tailored error message when user tries to create a folder
	- return tailored error message when user tries to upload a file

* [milestone/11.11.0] Milestone 11.11.0 (#1148)

* Changed app version to value 11.11.0

* [feature/theme-dark-web] New Dark Mode Themes (#1145)

* [fix/video-artwork] Metadata Image overlays Video Player (#1147)

* #5296 in some cases the video player does not show the video, because if a metadata image was available, an image view was overlaying over the video. Now the metadata image will only shown, if item is not a video file.

* added changelog entry

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* Calens changelog updated

* - respect files.privateLinks capabilities and do not offer to create private links when privateLinks are not supported (#1139)

* [fix/enable-markup-iOS16] Enabling Markup Mode on iOS 16 (#1152)

* #1141 fixes enabling markup mode on iOS 16

* added changelog entry

* Calens changelog updated

* In some cases the number of toolbar buttons are less than 4

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>

* changed new dark theme button background color

* fixed cancel button style in passcode setup view

* - fixes AVPlayerViewController controls not being visible on iOS 16 (finding "iOS 3" in #1141 (comment)) (#1157)

* fixed some UIAlertController declarations, which were not themed in the UI and replaced it with subclass ThemedAlertController

* [fix/share-extension-passcode-lock-interval] Share Extension Passcode Lock Interval (#1156)

* [translation-sync] Translation Sync (#1150)

* Transifex translation updates

* [tx] updated from transifex
* updated to latest SDK commit

Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: Matthias Hühne <>

* - added missing changelog files
- added in-app release notes

* Calens changelog updated

* generated updated fastlane release notes

* moved changelog files to release folder

* Calens changelog updated

Co-authored-by: Matthias Hühne <>
Co-authored-by: hosy <hosy@users.noreply.github.com>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: ownClouders <devops@owncloud.com>

* - change "smart folders" naming to "search view"
- add missing strings to Localizable.strings

* - update SDK to fix issue with detached spaces' items turning up in search results

* Updated to current Xcode version

* - update KNOWN_ISSUES.md to reflect changes

* - ItemSearchSuggestionsViewController:
	- hide save search/template popup button unless saving is actually available in a scope
	- remove saved searches from the popup as they are now also available elsewhere
- SearchViewController: strip whitespace when deciding what content to show (suggestion / noItems / results)
- update SDK

* [fastlane/enterprise-adhoc] Fastlane Enterprise Ad-hoc Replacement (#1160)

* replaced enterprise with ad-hoc export method and values

* changed certificate name

Co-authored-by: Matthias Hühne <>

* Certificate Update

* - add SegmentView: composing items (SegmentViewItem) as views (SegmentViewItemView), applying background, round corners, colors, etc. (styling still work-in-progress)
- SavedSearchCell: make use of SegmentView for richer, token-based visualization of saved searches
- OCSavedSearch:
	- new property to indicate if .name has been defined by the user
	- convenience method to quickly create an array of SegmentViewItems from a OCSavedSearch
- CollectionViewController: automatically apply .tableBackgroundColor as background color
- SearchViewController: strip whitespace from search queries before determining which content to show
- GradientView: add support for direction
- UIView+EmbedAndLayout: convenience methods to embed views horizontally and apply custom insets and spacing
- ThemeView: add hook to setup subviews upon insertion into superview

* - update KNOWN_ISSUES evolution part with remaining idea on what can be done with SegmentView and how it would benefit search
- Theming support improvements
	- ThemeCollection: add tokenColors and tableRowButtonColors
	- SegmentViewItemView: add support for themeing
	- SegmentViewItem: simplify styles
	- SearchViewController: theme the search field
	- SavedSearchCell: add support for themeing

* - bump build/version to 230

* SDK update
- removes space type from presentable / spaces list
- adds new log.replace-newline option and makes it default

* Fix App Provider review findings from #1151:
- close button visibility on mixed/dark themes
- display error messages when errors occur
- add missing translations

* - update SDK for additional bugfix

* - ItemListCell: add support for server-side processing state
- fix bug that caused an empty spaces list when offline (via SDK)

* - OCItem+FileProviderItem: add support for OCItem.state, making non-local files that are processing remotely non-readable
- SDK update

* - bump build number to 231

* - add new Tool "LocaleDiff" to find superfluous and missing strings in an other translation
- add German translations for all missing strings in ownCloud/Resources/en.lproj/Localizable.strings

* - bump build number to 232

* - make Beta warning localizable and localize it in German

* - add additional strings files to LocaleDiff scheme
- add missing German ownCloudAppFramework locales

* - add missing string to Localizable.strings

* - update SDK to get improved error messages for downloads of files with status 425

* - update localizations

* - SDK update: fix duplicate/"ghost" activities visual issue
- ClientActivityViewController: fix Xcode 14 warnings
- PopupButtonController: add themeing support
- NSObject+ThemeApplication: add proper support for UISearchTextField, fixing #118 text color issue

* - ClientRootViewController: do not restore view hierarchy for drive-based accounts since that's not yet implemented and the wrong view controllers would be created
- ClientItemViewController:
	- use a UILabel as navigationItem.titleView to address UINavigationBar layout issues (fixing reports finding 3 in [censored] issue 118)
	- update title as the folder's name is being changed
	- update underlying emptyActions when the folder they target is moved
- update SDK for moved item detection fixes

* - bump build number to 233

* - SDK update to fix possible crash bug
- address open/public Swift compiler warnings

* - bump build number to 234

* - bump build number to 235

* Fix issues with ocis sharing:
- respect OCCapabilities.federatedSharingSupported
- GroupSharingTableViewController: fix delete share issue by calling the correct method

* - bump version to 236

* - fix Xcode 14 warnings

* - upgrade SDK
- adapt to OCShare.itemType type change
- replace UIImage(systemName:) code with one using OCSymbol
- fix more Xcode 14 warnings

* - update SDK to gain OCStatistic capabilities
- ClientItemViewController:
	- implement support for "folder removed" state
	- adjust message spacing
	- refactor navigation bar code
	- add footer to display statistics for the current location, feeding from OCQuery-provided OCStatistics
	- prepare to also include quota information in the footer
- update KNOWN_ISSUES.md

* - ItemListCell: align separator layout guide with icon
- ViewCell: add separatorLayoutGuideCustomizer to allow customization of separator layout guide for individual views
- ClientItemViewController: add support to display quota information (space remaining)
- UIView+EmbedAndLayout: add code to embed multiple views vertically, modify existing ConstraintSet type

* - update SDK to gain fixed "Personal" and "Shares" names

* - ios-sdk: OCSyncActionCopyMove: prevent copying and moving of items into themselves
- ViewCell: fix seperatorLayoutGuide constraint on reuse (could cause visual glitch of full-length separator line when there shouldn't have been one)
- update known issues

* - SDK update to gain Accept-Language header addition for in-app web app presentation
- ClientWebAppViewController: implement logic to immediately dismiss the view controller when tapping the close button, but keep the web view alive until the "close" event arrives from the webview - or 10 seconds have passed

* - Action: add new class setting for excluded activities
- OpenInAction: honor excluded activities, bring up UIActivityViewController instead of UIDocumentInteractionController even for a single item if activities are excluded
- ownCloud.xcscheme: add env var example for action.excludedSystemActivities to block copying to pasteboard

* - update SDK to bring over UUID-based Shares Jail detection

* - bump build number to 237

* - StaticLoginSetupViewController: add OCConnection.connect() / .disconnect() to enrich bookmark with metadata and user name during setup. Required to present the correct UI for space-based accounts.

* - bump build number to 238

* - fix "App Provider language always English" via ios-sdk update

* - bump version to 239

* - update SDK for specific error message when trying to open a file that's being processed via open-web or open

* - update SDK

* - ClientSidebarViewController: side bar view controller
- CollectionViewSection: add hideIfEmptyDataSource feature/property
- ClientContext: add ViewControllerPusher protocol and methods for unifying pushing of view controllers to navigation / into view
- OCDrive+Interactions, OCItem+Interactions, OCSavedSearch+Interactions: move to new ClientContext method for pushing

* - CollectionViewController:
	- add support for hierarchic collection views and hierarchic data sources
	- add shouldDeselect() method
	- use snapshot.reconfigureItems() instead of snapshot.reloadItems() for more efficient updates (reuses cell rather than recreating it from scratch)
- CollectionViewCellConfiguration:
	- add new sideBar StyleType
- UIView+EmbedAndLayout: add AnchorSet and extend API to utilize it
- many fixes

* Snapshot with sidebar basically working, before making deeper changes
- App Controllers
	- AppRootViewController: the root view controller of the entire app, manages sidebar and more
	- AppSidebarViewController: side bar view controller, managing the side bar / first view
- Account Connection/Consumer classes
	- AccountConnection: manages a connection for the UI and makes its resources and message available to one or more consumers
	- AccountConnectionPool: creates new and keeps track of AccountConnection instances
	- AccountConnectionRichStatus: helper class to provide a consistent, simple, rich status for the whole account (wip)
	- AccountConsumer: group everything that is linked to an OCCore, allowing simple and clean addition and removal of consumers, providing a layer of separation/abstraction from UI concerns
- Account Controller classes
	- AccountController: links AccountConnection to the UI, provides sidebar content for an account
	- AccountControllerSection: makes AccountController contents available as a CollectionViewSection
	- AccountControllerCell: provides a cell representation for an AccountController, providing an icon to disconnect ("eject") a connection
- DriveListCell: add an icon for the sidebar, representing the (special) kind of drive
- CollectionView:
	- CollectionSidebarViewController: extend ViewControllerNavigationPusher with sidebar view controller parameter
	- CollectionViewCellProvider+StandardImplementations: add cell provider for .sidebar style type
	- CollectionViewSection:
		- implement OCDataItem + OCDataItemVersioning protocol
		- improve support for handling dynamic updates in hierarchic layouts
	- CollectionViewController:
		- add support providing sections from an OCDataSource (just set .sectionsDataSource)
		- properly support per-section ClientContext (use section.clientContext if set)
- OCDataItem+InteractionProtocols: add new, optional method to DataItemSelectionInteraction to provide control over whether an item should be selectable
- OCLocation+Interactions: implement the DataItemSelectionInteraction
- general: move many classes from ownCloud.app to ownCloudApp.framework
- Temporary changes:
	- ClientRootViewController: semi-functional, intermediate version to validate side bar design, to be removed entirely
	- ClientTabBarController: see ClientRootViewController
	- SceneDelegate: move to AppRootViewController as root view controller

* - move from UIImage(systemName:) to OCSymbol.icon(forSymbolName:) in most places
- split AppSidebarViewController into framework (ClientSidebarViewController in ownCloudAppShared) and app (extension ClientSidebarViewController) parts and extend the implementation with settings and account creation toolbar items
- BookmarkInfoViewController: add hook that gets called when the user taps "Done" and dismisses the view controller
- BookmarkViewController: add extension with convenience method to set up and display the BookmarkViewController for editing and creating new bookmarks
- OCBookmarkManager:
	- OCBookmarkManager+Management: extensions in app and framework to set up and display the BookmarkInfoViewController or delete an account, including confirmation by the user
	- OCBookmarkManager+Locking: move app-local locking of bookmarks to the ownCloudAppShared framework and extend on the concept with new attemptLock() method
- AccountConnection:
	- add new .noCore status to differentiate it from .offline
	- make consumer optional for connect() and disconnect()
	- post AccountConnection.StatusChangedNotification notifications when .status changes
	- RichStatus: add property for labeling the interaction
- AccountController:
	- add saved searches to the items data source
	- AccountControllerCell: listen to AccountConnection.StatusChangedNotification to update colored status indicator, fix other status reporting glitches
- SavedSearchCell: add specific cell for .sideBar style
- Navigation Revocations
	- new toolkit to detect when presented content has disappeared and provide a handling path (consult the respective README.md for details)
	- NavigationRevocationEvent: struct for a rich expression of events like disconnects, drive removals and more
	- NavigationRevocationAction: listen to events and perform an action once they find a matching event, lifetime can be to other objects
	- NavigationRevocationManager: global management of NavigationRevocationAction with memory semantics to allow automatic removal after a NavigationRevocationAction has become obsolete
	- NavigationRevocationTrigger: provides triggers for events such as specific items being removed from a datasource, objects being deallocated and more, can send a global event and/or invoke an action directly
	- UIViewController+NavigationRevocation: provide a simple API to register a view controller for revocation to common events
	- ClientContext: add new NavigationRevocationHandler protocol and property to handle navigation revocations
	- CollectionSidebarViewController: add support for NavigationRevocationHandler
	- OCDrive/OCLocation/OCSavedSearch+Interactions: register view controllers for Navigation Recovation, using NavigationRevocationHandler
- ClientItemViewController:
	- show special drive header only for .project (so not for personal or Shares Jail) spaces
	- fix navigation title

* - bump build number to 240
- AppRootViewController:
	- add focusedBookmark tracking
	- add focusedBookmark specific notificationPresenter and cardMessagePresenter
	- port over message presentation
	- port over beta warning
	- port over review prompting
	- port over enforced passcode setup (as of yet untested)
- BookmarkViewController:
	- ensure editing uses the latest copy from OCBookmarkManager
	- present modally rather than .overFullscreen on iPad
- ClientActivityViewController: add initializer for AccountConnection and use AccountConnectionConsumer to hook into events
- ClientSessionManager: remove unused code, ensure delegates are only weakly referenced
- AccountConnection: complete MessageSelector support
- AccountConnectionConsumer: switch form NSObject to AnyObject, add new method to AccountConnectionMessageUpdates to track message counts
- AccountController: introduce SpecialItems type, property and data source
- AccountControllerCell: add support for message counting badge
- ActionCell: add sidebar support, add badgeCount accessory support
- CollectionSidebarAction:
	- new class, subclassing OCAction to provide specific functionality around Sidebars, f.ex. dynamic creation of view controllers upon selection, keeping track of and caching previously generated view controllers
	- also implements extensions to OCAction to wrap properties
- CollectionSidebarViewController: add new method sectionOfCurrentSelection to easily determine the section in which the currently selected item is located
- ClientSidebarViewController: add .focusedBookmark property (KVO capable)
- OCAction+Interactions: add support for supportsDrop

* - update KNOWN_ISSUES
- AppRootViewController: add support for beta warning, bookmark editing, message presentation, release notes and more
- AppDelegate: launch into AppRootViewController instead of ServerListTableViewController
- remove ServerListTableViewController from target
- ReleaseNotesDatasource: clean up code and make class-level methods what were instance methods
- rename "Search view" to "Saved search"
- AccountConnection: add AuthFailure struct and status and make Status a non-String enum
- AccountConnectionPool: add AccountConnectionAuthErrorConsumer to new connections by default
- refactor authentication error handling into
	- AccountAuthentication* classes
	- AccountConnectionAuthErrorConsumer (as helper for AccountConnection)
	- AccountConnectionErrorHandler (as helper for AccountController)
- AccountController:
	- keep references to important items
	- add support for saved searches
	- add support for OC10 root folder
	- clicking spaces shows a spaces grid (AccountControllerSpacesGridViewController)
- AccountControllerCell: adapt to Status enum changes
- ActionCell: add support for different types (coloring), accessories, badge count, button labels and more
- DriveGridCell: cell subclass to support AccountControllerSpacesGridViewController
- DriveListCell: add grid support
- CollectionViewController:
	- add performDataSourceUpdate() mechanism to avoid changes being made to the data sources while other changes are already made
- CollectionSidebarAction:
	- extend OCAction properties
	- implement class to show view controllers on selection
	- add support for children
- CollectionViewAction: actions to be performed on the collection view when specific items become available
- CollectionViewSection: add support for .grid() layout, fix crash bug
- ClientContext: add alertQueue, bookmarkEditingHandler, .presentationViewController property and present(viewController:animated:completion:) method
- ClientSidebarViewController: add support for default view controller
- ClientDefaultViewController: content shown when nothing is selected in the sidebar
- ClientItemViewController: add select all/deselect all support
- (re)start implementation of location picker (WIP)
- UIView+EmbedAndLayout: add new method for centering another view inside an existing view, with minimum/maxiumum/fixed size and minimum insets
- Theme: add support for split view content themeing, temporarily remove almost all themes until support for them arrives
- ThemeNavigationController: move from ThemeApplierTokens to implementing Themeable
- AppUserActivity: start (re)implementing support for NSUserActivity

* - bump build number to 241

* - update KNOWN_ISSUES
- move OCResourceText+ViewProvider and Down framework from app to ownCloudAppShared as it is needed for a rich spaces view in the location picker
- extract embedding behaviour from AppRootViewController into EmbeddingViewController
- implement ClientLocationPicker and ClientLocationPickerViewController
- rewrite Share Extension based on ClientLocationPicker and ComposedMessageView
- upgrade AutoUploadSecttingsSection and auto photo/video uploads to use ClientLocationPicker and OCLocations
- migrate or partially rewrite CopyAction, MoveAction, ImportFilesController to use ClientLocationPicker
- AccountConnectionPool: add method to disconnect all connections in the pool
- AccountController: add options to
	- change cell appearance
	- hide the account pill
	- (not) auto select the personal folder
- Action:
	- add method to provide a UIBarButtonItem
	- add new location .locationPickerBar for appearance in ClientLocationPicker
- WebApp: ensure apps are presented full screen on iPad, not in a popover
- DriveGridCell: always show title + subtitle to align titles, truncate both at 1 line
- ItemListCell: add support for appearance (ClientItemAppearance) for regular and disabled appearances
- CollectionViewController: add .hideNavigationBar property that does what it says on the tin
- ClientContext: expand validation system to allow passing a ClientContext to validation methods and permission handlers (allows to implement behaviour for f.ex. a specific view controller rather than all view controllers descending from it)
- ClientItemViewController: add .location and .viewControllerUUID properties
- Interactions for OCDrive, OCItem, OCLocation: set bookmarkUUID in locations that are used for newly created ClientItemViewControllers
- ComposedMessageView: add support for .buttons
- OCBookmarkManager+Management: make sure to use exact OCBookmark instance when removing a bookmark
- UINavigationItem+Extension: simplify workaround for iOS 16 navigation title truncation bug
- remove ClientDirectoryPickerViewController and ClientSpacesTableViewController
- bump build number to 241

* - BookmarkViewController/IssuesCardViewController/OCLicenseEnvironment: adapt to OCBookmark.certificateStore change
- xcscheme: add connection.associated-certificates-tracking-rule example that opts in all *.local certificates into certificate change tracking
- remove ClientTabBarController
- update known issues

* - update SDK
- update KNOWN_ISSUES.md
- remove EarlGrey and everything that depends on it
- AccountController:
	- SpecialItems -> ExtraItems to clarify features being distinct
	- collect "real" special items in three dictionaries rather than each in its own instance variable

* - remove legacy migration

* - DisplayHostViewController: update to use an OCDataSource subscription to track underlying items, not an OCQuery
- AccountController: add Quick Access, including Favorites and Available Offline
- OpenInWebAppAction: add keyboard shortcut (fixing finding in #1151)
- OCSavedSearch+Interactions: add new .customIconName and .useNameAsTitle properties and helper methods
- SavedSearchCell: add support for .customIconName and .useNameAsTitle
- CollectionViewController: add .insert(sections:at:) method
- ClientContext add .queryDatasource property
- SortedItemDataSource: helper data source to allow sorting of items from other data sources
- OCItemPolicy+Interactions: add context menu and swipe action support to remove policy
- remove unused UIImageView+Thumbnails.swift, mark others for removal

* - bump build number to 243

* - AccountController:
	- add support for showing/hiding account pill
	- add sharing items
	- add support for favorites support capability
- CollectionViewController:
	- separate usage of Wrapped IDs from hierarchic content
	- trigger data source updated when sections are hidden/shown
	- add setNeedsSourceUpdate() for more efficient updates
	- add workaround for UICollectionViewDiffableDataSource requesting cells from the wrong section when moved from there to another section
- CollectionViewSection: fix hideIfEmptyDataSource issue (previously did hide when not empty)
- ClientSharedWithMeViewController: new view controller to present pending, accepted and declined shares
- MoreViewHeader: add support for favorites support capability

* - OCShare+Interactions: add swipe + popup actions
- ClientSharedWithMeViewController: add title to list
- update SDK

* - NEW: UniversalItemListCell
	- provides a single cell implementation for two-line (title + detail) + thumbnail + accessories content
	- fine-grained encapsulation of content into UniversalItemListCell.Content objects for atomic, extensible content updates
	- fed through a content provider protocol (UniversalItemListCellContentProvider) that classes can adopt to asynchronously provide and update content via a completion handler
	- built-in accessory support for more, reveal, progress and messages
	- uses SegmentView for details line to allow rich/mixed content for different types
- UniversalItemListCellContentProvider implementation for OCItem, replacing ItemListCell
- UniversalItemListCellContentProvider implementation for OCShare
- InlineMessageCenter: make method names follow a single pattern
- ResourceItemIcon: add convenience method to return the best matching icon for a mime type
- SegmentView:
	- add new alpha property for items
	- various fixes (preventing unwanted animations and flickering due to tinting images + text, fix a retain loop)
- ThemeView: add missing call to didMoveToSuperview()

* - remove ItemListCell
- update KNOWN_ISSUES.md
- UnshareAction: add support for unsharing accepted "local" shares
- add missing localizations
- AccountConnection: inject shareJailQueryCustomizer into newly retrieved OCCore
- AccountController: no longer unfold Spaces by default
- ClientSharedByMeViewController: view controller to present shares shared to other users and links, including reveal and copy to clipboard
- fix navigation title UILabel becoming too large
- extend UniversalItemListCellContentProvider for OCShare with copy to clipboard, accept/decline and reveal accessories
- upgrade project to Xcode 14.2
- bump version to 245

* fastlane gym: changed workspace to project, because it no longer is using cocoapod

* - refactor and modularize URL scheme open URL handling code
- add handling for "owncloud://pb/" commands to allow control of OCClassSettingsFlatSourcePostBuild

* - include env var launch example for post-build.allowed-settings
- add error checking when clearing individual postbuild setting values

* - remove duplicate "Tap to relaunch." messages

* - Browser Navigation:
	- replaces UINavigationController and UISplitViewController
	- allows back/forward navigation and invoking the side bar
	- automatically switches between full width sidebar, side-by-side sidebar and sidebar-floating-on-top layouts depending on available width and content
- AppRootViewController: switch from UISplitViewController to BrowserNavigationViewController
- ClientContext: add additional property and push support for BrowserNavigationViewController
- EmbeddingViewController: add additional subclassing points for customization
- ClientLocationBarController: view controller displaying an OCLocation and allowing to jump to a parent location with a single tap
- ClientItemViewController: add bottom location bar if .location is set, using ClientLocationBarController
- SegmentView:
	- add support for scrolling
	- add support for limiting vertical usage
	- allow customization of "overflow" gradient color
	- add support for providing gesture recognizers for items
- ActionTapGestureRecognizer: subclass of UITapGestureRecognizer that allows providing a closure as action to perform
- UIView+EmbedAndLayout: embedHorizontally() gains limitHeight option that limits the height of the layout
- CollectionViewController: fill entire height with stack view, use a helper UIView to limit UICollectionView to safe area
- OCItem+Interactions: add revocations for view controllers pushed by reveal and open interactions
- UniversalItemListCell: work around _UITemporaryLayoutWidths auto-layout warning for accessory views
- Licensing
	- add OCLicenseQAProvider to allow enabling Pro Features for QA purposes
	- OCLicenseEMMProvider: fix provider ID
	- add toggle to "Advanced" settings allowing to unlock Pro Features for QA. Available only in beta builds.
- bump build number to 246

* Calens changelog updated

* - rename "Purchases" to "Purchases & Subscriptions" in Settings
- invoke AppStore.showManageSubscriptions() to allow direct subscription management where available, fallback to https://apps.apple.com/account/subscriptions

* - fix "Select All" not working in Multiselect
- adapt Multiselect to BrowserNavigationViewController

* - removal of legacy code

* - fix issue where OC10 accounts showed up empty in the File Provider

* - NavigationContent extension of UINavigationItem
- adapt SearchViewController, ClientItemViewController, ClientLocationPickerViewController and BrowserNavigationViewController to use NavigationContent instead of UINavigationItem directly
- fix background color and spacing for SearchViewController.scopeViewController to align with file list
- update KNOWN_ISSUES.md

* - bump build number to 247

* - address static analyzer findings
- address SwiftLint findings

* - adapt to OCLocation.parent nullability change
- unify/fix navigation titles and context.drive for ClientItemViewController
- add new issue to KNOWN_ISSUES.md
- make OCLocation breadcrumb generation general-purpose, so it can be used not just by ClientLocationBarController but also f.ex. dropdowns
- BrowserNavigationItem: add .canTrimViewController property
- update SDK

* Fixes for Xcode 14 fastlane builds and resigning
Fastfile:
- needs setting manual code signing, because of signing swift package failures
Resign Script:
- seems like not all provisioning profiles contains SHA-1 values but SHA-256 values. Changed that for checking.

* - AppDelegate / SceneDelegate cleanup

* - BrowserNavigationBookmark
	- new class to capture location information that can then be used to restore/create a view controller
	- supports arbitrary OCDataItems
	- used of state restoration, sidebar selection
	- usable for browser navigation history compacting & view controller restore (tbd)
	- can be attached to view controllers via new UIViewController.navigationBookmark property
- BrowserNavigationBookmark+AccountController: provide ID bridge to side bar
- BrowserNavigationViewController: add support for a delegate (used to sync selection in sidebar)
- BrowserNavigationHistory: fix bug in .currentItem implementation
- BrowserNavigationItem: add .navigationBookmark property
- DataItemBrowserNavigationBookmarkReStore protocol
	- allows storing and restoring view controllers individually on a per-OCDataItem basis
	- implementation for OCItem, OCLocation and OCSavedSearch
- OCDrive: support for DataItemSelectionInteraction now uses OCLocation's implementation under the hood
- AppStateActions
	- new, extensible and universal mechanism for building complex UI scenes with dependencies
	- used for state saving, state restoration, scene building and more
	- actions for opening a connection, navigation to the personal folder or a BrowserNavigationBookmark - or revealing an OCItem
	- high-level conceptual overview in accompanying README.md
- ClientContext: new .scene property
- CollectionViewController: implemented recordSelection() and SelectionOperation, leaving it commented out for future (re)consideration
- CollectionViewAction:
	- new .highlight and .unhighlightAll actions
	- add support for "select first matching item" to .select and .highlight
- AccountConnectionPool: new .activeConnections property to return active connections
- AccountConnection: fix busyStatus handling bug
- OCSavedSearch: allow override of uuid (needed for sidebar navigation item selection/state restoration)
- URL+Extensions: refactor to allow opening links via app scheme (f.ex. https://demo.owncloud.org/f/27 via owncloud://demo.owncloud.org/f/27)
- DisplayHostViewController: no longer require OCQuery or OCDataSource - creating an "internal" one if needed
- update CONFIGURATION.json
- update KNOWN_ISSUES.md
- update ios-sdk
- bump build number
- remove ServerListTableViewController, ServerListTableHeaderView, OpenItemUserActivity and more source files that are no longer in use

* - allow more customization when generating breadcrumbs from OCLocation, make segment composition available globally
- complete implementation of "Available Offline" view
	- provide rich view of OCItemPolicys with path and icon
	- allow revealing items marked available offline in their respective location
- provide "no items" views for:
	- Available Offline
	- Favorites
	- all search-based Quick Access views (PDF Documents, Documents, Images, Videos, Audios)
- unify header views using a new ComposedMessageView category
- update KNOWN_ISSUES.md

* - Collection Views
	- add support for supplementary items via CollectionViewSupplementaryItem and CollectionViewSupplementaryCellProvider
	- implement TitleSupplementaryCell for section titles, including pinning support
	- implement ViewSupplementaryCell for arbitrary views, including pinning support
	- allow specifying CollectionViewSupplementaryItem on a per-section level
- ClientItemViewController: adopt CollectionViewSupplementaryItem with ViewSupplementaryCell to show SortBar as pinned section header
- ClientSharedByMeViewController, ClientSharedWithMeViewController, Available Offline and more: adopt headers based on supplementary cells, removing the need to use wrapping data sources in many places (efficiency win!)
- remove legacy search scope code from SortBar
- remove legacy Push Presentation Controller code
- fix miscellaneous warnings through small code changes

* - new class DataSourceCondition:
	- allows triggering actions based on item count of datasources
	- allows logical combinations of several conditions
- CollectionViewController: add .coverView property and support for filled, centered and top layout
- CollectionViewSection: adopt DataSourceCondition to implement .hideIfEmptyDataSource
- AccountControllerSpacesGridViewController: add "No spaces" message if no spaces are shared with user
- ClientSharedByMeViewController and ClientSharedWithMeViewController: add respective "no items" messages
- AppRootViewController: no longer scroll highlighted sidebar items into center
- ComposedMessageView: theme image views with tintColor

* - DisplaySettings: provide query condition(s) implementing display settings filters (new queryConditionForDisplaySettings property)
- AccountSearchScope, DriveSearchScope, ContainerSearchScope: use DisplaySettings.queryConditionForDisplaySettings to limit search results to those that should be visible
- CollectionViewController: fix crash bug when sections with supplementary views are hidden

* - AccountController: ensure Saved Search sidebar item is only visible if the account has saved searches
- CollectionViewController.WrappedItem: add readable description for improved debugging
- CollectionViewSection: fix a crash bug if an item is inserted into a child data source whose parent item is hidden or not (yet) in the collection view's data source

* - add support for authenticated WebFinger and retrieval of server instances via SDK update
- currently does not implement a picker for retrieved instances but always uses the first one returned by the server

* - bump version to 249

* - update SDK to implement enterprise#5579, including sending a Referer header when requesting the IdP configuration
- bump build number to 250

* - ClientItemViewController: ensure navigationItem.title is set by .navigationTitle for proper back button labeling in UINavigationControllers
- ClientLocationPicker: fix destination of view controller pushes - make sure they get pushed to the picker, not the parent context's browser controller

* - ContainerSearchScope: ensure the folder within which the scope starts is not included in the results itself

* - AppProvider: lang parameter fix via SDK update (ensure ISO-639-1 (uses only 2 characters) by cutting off any differentiators (f.ex. "en-GB" becomes "en"))

* - update SDK to possible address finding (38) in feature/new-navigation

* -  ClientLocationPickerViewController: fix vertical cancelButton constraint

* - OCShare+Interactions: make unshare action available via context menu and popup, use OCCore.delete() for unsharing

* - DisplayExtensionContext: subclass to allow passing the ClientContext to actions invoked from the more menu in DisplayViewController
- DisplayHostViewController: use DisplayExtensionContext and create a ClientContext child with a different originatingViewController
- DisplayViewController: clarify naming of method invoked when the more button is pressed in the viewer

* - enlarge "reveal" and "more" accessory buttons

* - bump build number to 252
- tag v12alpha1

* - fixed fastlane build error
- updated needed Xcode version for fastlane builds

* added a class setting key to set the default bookmark name when creating a new bookmark "bookmark.default-name"

* - introduce ThemeCSS and convert existing code base to use the new APIs
- progressed, but still work-in-progress

* - further CSS theming advances and cleanup

* - update SDK to include authenticated WebFinger fix
- BookmarkViewController: consistent spacing with tabs to improve code readability

* - remove unused customizedColorsByPath code

* - additional CSS fixes and refinements

* - further CSS color and code warning fixes

* - Settings now uses insetGrouped layout
- Action cards now use insetGrouped layout
- Spaces grid view updates depending on size class (animated!)
- StaticTableRow: CSS updates and fixes, including a retain loop that existed before
- fix appearance of group disclosure chevron in sidebar when item is selected

* - add ImportPasteboardAction as action for empty folders

* - fix action cell background appearance in dark mode

* - MakeTVG: update for latest Swift version
- add space.svg + space.tvg
- display "Files" (for OC10) or name of space for root folder(s) and show appropriate icon

* - SDK update: fix connection validation in case WebFinger lookup is not present
- fix more CSS styling issues

* - add "more" button to spaces in spaces grid view
- fix "Access Denied" warning icon color in sidebar
- limit Paste action to writeable locations
- CollectionViewSection: add missing ClientContext in CollectionViewCellConfiguration

* - add new SharedKeyCommands to ownCloudAppShared.framework, to implement key commands that should be available in app and extensions
- move PasscodeViewController key commands over to SharedKeyCommands

* - bump build number to 253

* - address #1188 via SDK update
- show space names and icons if a space's root folder is made available offline or shared, in the respective views
- remove separator background color in available offline view
- bump build number to 254

* - AccountControllerSpacesGridViewController: fix warning
- ThemeCSS: cleanup, provide documentation in README.md

* - Branding+App: add missing copyright notice
- add CSS support to branding
- complete first revision of CSS documentation, including an example for CSS branding

* - ThemeCSS README: add missing language MD annotation

* - OCResourceText+ViewProvider: fix Theme registration timing to work with CSS themeing

* - CSS README.md: correct title levels

* - ClientLocationPickerViewController:
	- fix color errors for account cells
	- add additional separator line on top for more visual clarity
	- use grouped collection background color for navigation bar
- ThemeCollection: minor code cleanup

* - fix finding (37) in #1162
- ImageDisplayViewController: fix new warning in Xcode 14.3

* - ItemLayout:
	- new enum as high-level abstraction for item layout
	- provides layout objects and values
- ClientContext: add new itemLayout property
- SortBar: add new layout-toggling button, clean up delegate methods
- ClientItemViewController:
	- add support for grid views, ItemLayout, SortBar and ClientContext advances
	- move footer view to a separate section to avoid layout interference, simplify the code and provide better performance
- CollectionViewSection:
	- cleanup code
	- add support for changing cell layout and style in one go, without animation
- UniversalItemListCell: add support for grid layout
- ViewSupplementaryCell:
	- prepare to support different ElementKinds (f.ex. footers, etc.)
	- fix zIndex to make the cell float above separators as well

* - SegmentViewItem: add concept of lines to allow realizing different layouts from a single array of items
- OCItem+UniversalItemListCellContentProvider: tag detail segment item .lines
- UniversalItemListCell: use SegmentViewItem.lines tagging to switch between single line and two lines details
- SegmentView: preparations to dynamically apply a gradient mask when views exceed the boundaries

* - NamingViewController:
	- select file names without extension when editing names
	- support picking a "fallback" icon
- CreateDocumentAction: show fallback icon based on mimeType of created document type

* - BrowserNavigationHistory: guard instance variables items and position in a thread-safe way
- BrowserNavigationItem: add viewControllerIfLoaded property to allow retrieving a view controller only if it exists and without triggering its (re)creation
- ClientSidebarViewController: ensure removal of /all/ history items for a view controller when it is revoked
- UIViewController+NavigationRevocation: add debug logging, respect the passed revocationTriggers

* - optimize grid cell margin usage

* - ClientItemViewController: make SortBar.itemLayout match ClientContext.itemLayout

* - Spaces grid overview: make more (…) button resist compression, fixing layout issue with long space titles that don't fit horizontally

* - ClientItemViewController:
	- skip driveSection creation if not necessary
	- show quota for personal space

* - add selection checkmark for multi selection in grid view

* - bump build number to 255

* - ThemeCSS: implement match-cache for massive speedup

* - ClientItemViewController: show "Loading…" when the contents of a folder is still being loaded

* - CSS: remove Fill from .fill colors for TVG vector images
- CSS README: add section for vector icon color CSS selectors

* - cosmetic code changes

* - UniversalItemListCell: add titleAndDetailsHeight() method to allow determining space needed for details and title
- CollectionViewSection.CellLayout: add new .fillingGrid layout that dynamically adjusts cell size to achieve best size / space fit + center cells
- ItemLayout: adopt CellLayout.fillingGrid
- AccountControllerSpacesGridView: adopt CellLayout.fillingGrid
- bump build number ot 256

* - update KNOWN_ISSUES.md

---------

Co-authored-by: Matthias Hühne <mhuehne@owncloud.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>
Co-authored-by: Matthias Hühne <>
Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: felix-schwarz <felix-schwarz@users.noreply.github.com>
Co-authored-by: Matthias Hühne <github@hosy.de>
felix-schwarz added a commit that referenced this issue Nov 22, 2023
- ScanViewController, NamingViewController: when enforcing file suffixes: prevent choice of filenames consisting just of a suffix (since these would be hidden files) by disabling the primary action button
hosy added a commit that referenced this issue Dec 7, 2023
* - NamingViewController: add option .requiredFileExtension that enforces a particular suffix when set
- CreateDocumentAction: take advantage of NamingViewController.requiredFileExtension to prevent changing file suffix for new files

* - ThemeCSSTextField: add support for requiring a file extension (.requiredFileExtension)
- NamingViewController: remove delegate code for .requiredFileExtension and use ThemeCSSTextField.requiredFileExtension instead
- StaticTableViewRow: add support for requiring a file extension (.requiredFileExtension) based on ThemeCSSTextField.requiredFileExtension
- ScanViewController: use StaticTableViewRow.requiredFileExtension to prevent deletion of required file extension

* - ios-sdk update: fixes crash (finding #1 in #1298)
- ScanViewController, NamingViewController: when enforcing file suffixes: prevent choice of filenames consisting just of a suffix (since these would be hidden files) by disabling the primary action button

* Calens changelog updated

---------

Co-authored-by: felix-schwarz <felix-schwarz@users.noreply.github.com>
Co-authored-by: Matthias Hühne <github@hosy.de>
hosy added a commit that referenced this issue Jan 29, 2024
* removed the logo label from the sidebar navigation bar to have more space for the logo image

* - fix #1254

* Example JSON + README (#1255)

Co-authored-by: Michael Stingl <git@michaelstingl.com>

* Cleanup of Theming folder (#1260)

* Remove old PLIST examples

* move ownCloud.online theme + assets

* move EMM assets

* Adjust Fastfile for moved themes + assets

* updated to Xcode 14.3

* move all app resources to the correct place in one copy command

* updated to 14.3.1

---------

Co-authored-by: Michael Stingl <git@michaelstingl.com>
Co-authored-by: Matthias Hühne <github@hosy.de>

* - FileProvider: fix enumerator queue completion slowdown/blocking

* - show vendor label in the sidebar if app is unbranded
- added accessibility label to the logo image

* - FileProvider cleanup and additional debug logging

* - BottomButtonBar: avoid collapse of selectButton (fixes owncloud/enterprise#5889)

* - add background image to welcome screen
- add support for RGBA hex values to CSS

* - change welcome screen background default color from dark to bright

* - BookmarkViewController: add .bookmarkEditor CSS selector

* - ThemeCSS: add support for $cssSelector.cssProperty

* Assets.xcassets/AppIcon.appiconset generated with fastlane + welcome screen background (#1264)

* - add background image to welcome screen
- add support for RGBA hex values to CSS

* Assets.xcassets/AppIcon.appiconset generated with fastlane

* align icon name with branding

---------

Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: Michael Stingl <git@michaelstingl.com>

* - change welcome screen background default color from dark to bright

* Assets.xcassets/AppIcon.appiconset generated with fastlane

* rename vanilla appiconset again for fastlane changes

* - ThemeCSS+SystemColors: add convenience methods to easily add CSS records for colors, incl. a set of system colors
- ThemeCollection: add system colors (f.ex. UIColor.systemBlue as `os.color.blue`) and theme base colors (as `theme.color.light` and `theme.color.dark`) to CSS object

* Vanilla: change welcome screen background default color from bright to dark

* - BookmarkViewController:
	- add permanent logo branding to top of the view
	- make branding elements use same CSS selectors as welcome screen
- ComposedMessageView: make CSS selectors extension public
- RoundCornerBackgroundView: add new .fillImage property that allows filling the view with an image with "scaleAspectFill" contentMode

* - BookmarkViewController: remove table view background image from branded builds

* - RoundCornerBackgroundView: fix bug in sizeThatFills()

* - DisplayViewController: handle nil OCQueryChangeSet.queryResult (should fix crash reported in #1245 (comment))

* fixed missing translation strings or localized function

* fixed bug in sidebar: label color got the same color as background color and label was not readable, if lightBrandColor was similar to #000000

* - FileProviderExtension: add safeguards around `[NSError fileProviderErrorForNonExistentItemWithIdentifier:]` for the case that iOS (illegally) passes in a nil `identifier`, leading to a crash in said NSError method

* [fix/overlapping-sharing-buttons] Overlapping Sharing Buttons (#1248)

* [fix/passcode-device-enforced] MDM Parameter - Enforce Passcode Setup (#1249)

* [fix/sidebar-logo] Sidebar Logo (#1247)

* [translation-sync] Translation sync (#1250)

* - minimal change to reopen PR

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* - revert minimum change to THIRD_PARTY.txt

* [tx] updated from transifex

* - fixed UTF issues
- fixed missing german translations

---------

Co-authored-by: Felix Schwarz <fs-git@iospirit.com>
Co-authored-by: ownClouders <devops@owncloud.com>

* - update SDK

* - update SDK to update error message for OCErrorAuthorizationNoMethodData

* - add "An error occurred" to Localizable.strings

* - SDK update with updated strings

* GH workflows:
- add LocalizationTests with automatic UTF-16 to UTF-8 conversion

* - GitHub workflows: move new GH workflow out of workflows folder to avoid permission issue
- fix non-empty Branding.plist

* Translation sync (#1269)

* - minimal change to reopen PR

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* - revert minimum change to THIRD_PARTY.txt

* [tx] updated from transifex

* - fixed UTF issues
- fixed missing german translations

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* - fix file encoding for en-GB.lproj/Localizable.strings

---------

Co-authored-by: Matthias Hühne <github@hosy.de>
Co-authored-by: ownClouders <devops@owncloud.com>

* - update ios-sdk to gain ocstringstool
- remove LocalizationTests.swift
- remove UTF-8/16 enforcements for .strings files from ownCloud.xcodeproj
- add tools/normalizestrings based on ios-sdk/ocstringstool
- update GH action (now normalize-strings.yml)
- normalize strings files to UTF-8

* - update release notes for 12.0.3

* - NSObject+ThemeApplication: fix wrong label colors for ThemeCSSLabels that are also subject to NSObject.applyThemeCollection() calls

* - AppRootViewController + InitialSetupViewController: move initial setup view into own view controller
- InitialSetupViewController: implement status bar style support for consistent status bar colors also pre-iOS 17

* - fix iOS 17 initial setup color issue

* - address owncloud/core#40953 (comment) via SDK update

* - fix: rename of a bookmark is not always reflected in the account list

* - BottomButtonBar: adapt layout dynamically to size class, placing the promptText above the buttons in any but regular horizontal class size and stretching the buttons to fill the space beneath it

* - ClientSidebarViewController: properly initialize accountsControllerSectionSource with item version tracking

* - fix SwiftLint warnings

* - BookmarkViewController: add modern password manager integration to BookmarkViewController via input field content types

* - SDK update: OCHTTPPipeline: move metrics logging to response logging block

* - SDK update for better formatted metrics line

* SDK rebase

* - add BookmarkComposer
- add BookmarkSetupViewController UI for BookmarkComposer
- other improvements

* - BookmarkComposer: fix progress reporting, complete infinite PROPFIND implementation
- BookmarkSetupStepPrepopulateViewController: implement infinite PROPFIND UI
- BookmarkSetupStepViewController: allow updating the continue button label through .continueButtonLabelText
- BookmarkSetupViewController: add CSS support for status bar style

* - BookmarkComposer:
	- add optional .intro step and support in configuration
	- differentiate between user and internal actions when recording undo actions
- BookmarkSetupStepIntroViewController: new intro view controller
- AppRootViewController: use new BookmarkComposerConfiguration.hasIntro option

* - Bookmark Composer:
	- add support for help button + label
	- add support for settings in .intro step
	- add basic theming support (WIP)
	- auto-focus on URL and username fields

* - adopted step names
- skip completed step if editing account is not allowed

* respect can add account for adding toolbar button

* - changed account css values to support system dark mode
- moved logo image from the intro screen into the general account view
- added navigation bar in account view (visible, if cancel button is visible)
- removed title "Account Setup" and app name in branded client

* - BookmarkSetupViewController:
	- add step-specific CSS selector
	- move logo on top of the step views and center both together vertically
	- replace UINavigationBar subview usage with UINavigationItem usage
	- rename step from .oidc to .authenticate because the step covers all auth methods, not just OIDC
	- use BookmarkComposerConfiguration.nameEditable to skip completed view instead of Branding.shared.canEditAccount directly
	- allow setting custom title and message for every step through locale.overrides
	- remove .headerTitle since it is no longer used
	- clean up code
- BookmarkComposerConfiguration: make newBookmarkConfiguration use Branding.shared.canEditAccount for .nameEditable
- BookmarkSetupStepViewController:
	- add support for moving focus and continue to the next step when pressing the return key
	- adopt in subclasses via the new .focusTextFields property
- BookmarkViewController: wrap BookmarkSetupViewController in a ThemeNavigationController to add a standard navigation bar on top when adding an additional account
- fix CSS color errors

* - BookmarkComposer:
	- improve error handling in .enterURL step (fixing finding (3) in #1274)
	- also clear certificates when returning to .enterURL step (fixes displaying a certificate for a different server if a https server was chosen, then the user went back and changed the URL to a plain HTTP URL)
- BookmarkComposerConfiguration: make .hasIntro default to false (=> no longer shows the intro screen when adding additional bookmarks)
- BookmarkSetupStepViewController: add .cacheViewController property to allow signaling BookmarkSetupViewController that the view controller should not be cached
- BookmarkSetupStepAuthenticateViewController: opt out of view controller caching
- ThemeCollection: restore changes from 09e63b9 as comments

* - ThemeCollection: restore changes from 09e63b9, keep previous state as comments

* - Branding+App: add .certificateSummary CSS selector
- CertificateSummaryView:
	- configure button to use a clear background color
	- make addressable via CSS .certificateSummary
- ThemeCollection: make .certificateSummary default to a clear background color

* - ownCloud.xcodeproj: fix Xcode 15 build errors
- BookmarkComposer: pre-fill user name from server locator in subsequent token-based auth (fix finding (4) in #1274)
- AccountControllerCell: fix layout issue where the eject button would get compressed to 0px for long user names (fix finding (5) in #1274)

* Configuration documentation updated

* - remove unused/replaced InitialSetupViewController
- Branding:
	- introduce BrandingAssetSuffix type and new method to retrieve image with suffix where available
	- rename BrandingImageName.loginLogo and .loginBackground to .brandLogo and .brandBackground
	- add new BrandView to standardize display of logo, background and background color
- add BrandView to top of side bar
- BookmarkSetupViewController: add background view for hud message view and align font with steps

* - AccountControllerCell: set content view height with priority .defaultHigh, fixing a conflicting constraints message

* generate.sh for easy theme generation (#1281)

* genrate.sh for easy theme generation

* check if script is executed in the correct path

* changed wording

---------

Co-authored-by: Michael Stingl <git@michaelstingl.com>
Co-authored-by: Matthias Hühne <github@hosy.de>

* - Branding
	- rename "branding-login-background.png" to "branding-background.png" and add transient fallback for old name
	- rename "branding-login-logo.png" to "branding-logo.png" and add transient fallback for old name
	- BrandView: ensure BrandView can't be selected in the sidebar by adding compliance with DataItemSelectionInteraction, also fixing rectangular edges
- BookmarkSetupStepViewController: use themed buttons
- ThemeCollection: update CSS records for BookmarkSetupStepViewController to no longer use dynamic system colors
- BookmarkSetupViewController: fix constraints warning for .contentView
- Localizable.strings: add missing "Enter password" string to
- Fastlane/Building: rename "app.version-number" build setting to "build.version-number" and add MDM documentation

* Configuration documentation updated

* - OCShare+UniversalItemListCellContentProvider: add "Decline" button to Accepted "for me" shares
- ClientActivityViewController/MessageView: set a lower compression resistance for secondary text (message) to fix view controller expansion beyond screen size (per reports)
- Localize "Loading…" in English and German

* - add new dark and light themes based on system colors
- use system color themes for branded clients unless they provide their own themes
- enable theme switcher for branded clients using the system color themes
- add new and fine-tune existing CSS records

* - BookmarkSetupViewController
	- limit logo height to better fit screen height
	- no longer show logo when adding additional accounts to make up for the lost space due to the UINavigationBar being included, to work across all screen heights

* - AppRootViewController: forward supported interface orientations and use of iOS 16 API to tell the OS of changes
- BookmarkSetupViewController: limit to portrait orientation
- SceneDelegate: no longer add root view controller's view manually, "fixing" a console message that informs this is no longer supported
- OCAction+UIAction: add convenience method that builds a UIAction from a OCAction
- NSObject+ThemeApplication: code cosmetics
- ThemeCollection: add new CSS records for navigation bar popup icon colors
- ThemeNavigationController: add support for forwarding supported interface orientations
- ClientLocationPopupButton: new, re-usable button view that provides a breadcrumb view for a given OCLocation
- DisplayViewController / DisplayHostViewController:
	- add location breadcrumb dropdown title
	- fix broken KVO observation that led to a lack of dynamic UI updates
- ClientItemViewController:
	- add location breadcrumb dropdown title (iPad only due to lack of horizontal space on iPhone)

* - Branding: add support for branding.theme-tint-color to allow providing a tint color to replace the standard iOS tint color

* - workaround build issue on Xcode 14.2 (GitHub actions), preventing documentation updates

* Configuration documentation updated

* - BookmarkSetupViewController: snap width of progress hud to 400 points - in line with the rest of the interface, to look consistent on iPad with larger screen widths

* # Branding changes:
## Default theme
- now uses `Follow system appearance` rather than "first theme" by default

## Dynamic choice of branding assets
- moved pristine app branding assets to `com.owncloud.ios-app` folder
- added new `branding-assets folder
- removed individual branding-*.png assets from Xcode project file
- renamed assets in `online.owncloud.ios-app` to match new name conventions
- added new build phase copying branding-*.png assets from
	- `com.owncloud.ios-app` if `branding-assets` contains no files matching `branding-*.png`
	- `branding-assets` if `branding-assets` contains files matching `branding-*.png`
	- integration via input and output xcfilelists

## BrandView changes
- when showing the background, no longer choose between either the background color OR the background image, but show both if a background image is provided; adding support for background images with alpha channel

## Branding parameter extension and cleanup
- added `branding.theme-css-records`:- new MDM/branding parameter to provide an array of CSS record strings that are interpreted and added to the CSS space of system-color-based themes for branded clients. Mutually exclusive with theme-definitions.
- removed `branding.theme-generic-colors`: no longer used
- removed code for (generic) `Colors` from `branding.theme-definitions`: no longer used

* Configuration documentation updated

* Branding changes:
- remove branding.theme-tint-color to include it into a new option
- add branding.theme-colors as an abstraction layer for commonly customized colors (allows custom handling and f.ex. using a single color for creating multiple CSS records in the future)
- allow "black" and "white" as status bar styles

Documentation changes:
- update configuration.adoc.tmpl to support new "possibleKeys", used for the first time in branding.theme-colors

* Configuration documentation updated

* - Branding+App: documentation/description changes

* Configuration documentation updated

* - consistently use branding-splashscreen-[logo|background].png
- AppRootViewController: pass-through for .preferredInterfaceOrientationForPresentation to contentViewController

* - AccountSettingsProvider: use Branding instead of UIImage() directly

* - remove `branding-bookmark-icon.png` and fill those edge case places where it was used with `BrandView`

* - remove last reference to branding-bookmark-icon.png
- add target path for optional branding-sidebar-link-icon.png
- run com.owncloud.ios-app branding assets through ImageOptim, reducing size by 70% to 95%

* - AccountController: add support for DataItemDropInteraction
- LocalDataItem: make properties publicly
- ClientSidebarViewController: add support for reordering accounts via drag & drop
- SDK update

* - ThemeCollection: make TVG files use default colors extracted from original SVG files

* - add additional color selectors for additional TVG placeholders for: office document, office presentation, office spreadsheet, PDF files
- allow setting all file icon colors to the same color at once via "file-icon-color"

* - remove AccountSettingsProvider (`account-settings.*`) and use equivalent settings from `branding.*` instead
- Branding+App: fix indentation and add default value for `branding.profile-allow-url-configuration`

* - ClientSidebarViewController: add `self.` to allow compilation with Xcode 14 (CI)

* Configuration documentation updated

* - DataSourceCondition: only perform initial call after a .fulfilled value could be determined for the first time (fixing crash/finding 8 in #1274)

* - ThemeCollection: correctly map office document color
- change officeFileFillColor to documentFileFillColor

* - SDK update: no longer fail validation of entire dictionary if there is a key that's not included in the list of possible keys

* - update SDK to add support for <oc:spaceid> when resolving private links

* - SDK update to fix #1128

* - update SDK to fix #1299

* Calens changelog updated

* - update SDK to add support for local resolution of ocis private link (fixes fix finding (3) in #1295)

* - ShareViewController: add support for entering and editing names of link shares

* - update SDK (fix (2) in #1297)
- OCShare+UniversalItemListCellContentProvider: show token instead of "Link" as placeholder for unnamed links (fix (3) in #1297)
- ShareViewController:
	- show token instead of "Link" as placeholder for unnamed links (fix (3) in #1297)
	- fix layout issue for name text field (fix (1) in #1297)

* - UniversalItemListCell: add new Content.iconWidth property to control icon width in the universal cell, with fallback to defaults
- OCShareRole+UniversalItemListCellContentProvider: adapt icon width to size of option icons in ShareViewController

* - update SDK to gain OCAppIdentity convenience URL schemes property
- CancelLabelViewController: allow customizing the button label and use a proper type for the cancelAction
- DocumentActionViewController:
	- refactor to allow custom button label and custom action
	- show message and open app if no account has been set up in the app yet

* - add localizable strings

* - update SDK
- update Theme/CSS/README.md with documentation and examples on branding.theme-css-records, branding.theme-colors; add examples in flat notation

* - add VisionKit text / machine-readable code / visual look up integration to image viewer (requires iOS 16+)

* - add action.allow-image-interactions. To disable Image Interactions, set action.allow-image-interactions = false

* [feature/suffix-protection] File extension / suffix protection (#1298)

* - NamingViewController: add option .requiredFileExtension that enforces a particular suffix when set
- CreateDocumentAction: take advantage of NamingViewController.requiredFileExtension to prevent changing file suffix for new files

* - ThemeCSSTextField: add support for requiring a file extension (.requiredFileExtension)
- NamingViewController: remove delegate code for .requiredFileExtension and use ThemeCSSTextField.requiredFileExtension instead
- StaticTableViewRow: add support for requiring a file extension (.requiredFileExtension) based on ThemeCSSTextField.requiredFileExtension
- ScanViewController: use StaticTableViewRow.requiredFileExtension to prevent deletion of required file extension

* - ios-sdk update: fixes crash (finding #1 in #1298)
- ScanViewController, NamingViewController: when enforcing file suffixes: prevent choice of filenames consisting just of a suffix (since these would be hidden files) by disabling the primary action button

* Calens changelog updated

---------

Co-authored-by: felix-schwarz <felix-schwarz@users.noreply.github.com>
Co-authored-by: Matthias Hühne <github@hosy.de>

* using correct ios-sdk commit

* - ClientItemViewController: do not show breadcrumb dropdown for root folder
- ClientLocationPopupButton: add excludeLastPathComponent option to exclude last path component from the popup's breadcrumbs
- OCLocation+Breadcrumbs: for OC10 hosts, add the account's root folder to the breadcrumbs if drive name should be included

* added remove extensions shell script if passed by app build flags

* added new remove extension shell script to remove a target from the given ipa file

* Update BUILD_CUSTOMIZATION.md with new build flag

* [fix/fp-fixes] File Provider fixes (#1294)

* - SDK update for less verbose logging
- FileProviderExtension: log thumbnail requests
- FileProviderExtensionThumbnailRequest:
	- fix retain cycle that could prompt the Files.app to repeatedly ask for thumbnails of files that don't have any
	- if no image was found, return a nil error rather than OCErrorInternal
- ownCloud File Provider xcscheme: update logging configurations/env variables and enable malloc stack logging

* - FileProviderExtension: change log level of core[enter|leave] messages to verbose

* new app and build version

* - update SDK to include JSON logging (owncloud/client#11224)

* [feature/share-action-extension] Share Action Extension "Save to ownCloud" (#1301)

* #1293 added a share action extension "Save to ownCloud"

* Calens changelog updated

* adopted fastlane code signing for new target "ownCloud Action Extension"

* adopted the resign script and resign inspector for new action extension

* - added action extension
- fixed wrong emm identifier

* fixed adding default bundle display name

* replace CFBundleDisplayName in action extension with branded app name for english and german localisations

* Update fastlane/Fastfile

Co-authored-by: Felix Schwarz <fs-git@iospirit.com>

---------

Co-authored-by: hosy <hosy@users.noreply.github.com>
Co-authored-by: Felix Schwarz <fs-git@iospirit.com>

* fixed disabling edit mode in markup document on iOS 17 (#1309)

* - copying branded action extension icon into the correct branding assets folder
- set a custom icon for the action extension target

* update Xcode version for development VM

* escape spaces in shell command path

* set correct file path in shell command

* escape path in fastlane shell command

* fixed variable name in fastlane file

* assigned final Xcode version for the release

* only copy branding-action-extension-icon.png icon if available

* fixed issues with fastlane app icon creation for branded builds

* Added changelog files for version 12.1

* Calens changelog updated

* added 12.1 in-app release notes

* updated changelog file

* Calens changelog updated

* added app store release notes

* - change SDK commit from develop to corresponding master commit after rebase

* fixed app icon path generation in fastlane file

* Removed tmp AppIcon assets

* copy Branding.plist file for oC.online build to correct path

* updated app version number

* added missing localisation strings

* updated app version number

* Update SDK to add authentication-oauth2.omit-authorization-parameters option to allow omitting parameters from authorization requests (implements #1318)

* added EMM suffix to ownCloud EMM app

* removed unneeded color values from oC.online app

* removed light and dark themes and set their identifier for system light and system dark. Allow theme selection for all clients.

* - fixed theme key names
- removed allowed authentication methods
- added more allowed hosts

* removed unneeded icon files (duplicated)

* using new branding theme key names

* new build number

* - fixed switching dark/light themes
- updated build number

* use new app name "ownCloud EMM" for EMM version

* Translation sync (#1317)

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

* [tx] updated from transifex

---------

Co-authored-by: ownClouders <devops@owncloud.com>

* Calens changelog updated

* - updated app store and in-app release notes
- changed changelog release date

* Calens changelog updated

* added missing release notes entry

---------

Co-authored-by: Matthias Hühne <github@hosy.de>
Co-authored-by: Michael Stingl <214010+michaelstingl@users.noreply.github.com>
Co-authored-by: Michael Stingl <git@michaelstingl.com>
Co-authored-by: Matthias Hühne <mhuehne@owncloud.com>
Co-authored-by: ownClouders <devops@owncloud.com>
Co-authored-by: felix-schwarz <felix-schwarz@users.noreply.github.com>
Co-authored-by: hosy <hosy@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants