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

[feature/modular-localization] Modular localization #1054

Merged
merged 3 commits into from
Nov 8, 2021

Conversation

felix-schwarz
Copy link
Contributor

@felix-schwarz felix-schwarz commented Oct 16, 2021

Description

Switches OCLocalized, OCLocalizedString and String.localized from NSLocalizedString and NSBundle to OCLocale, allowing complex customization of localized strings with variables, value sources and complete text replacements.

That makes it possible to change the localization of specific strings via class settings. To f.ex. change Settings to Preferences (en) and Präferenzen (de), one would use:

<key>locale.overrides</key>
<dict>
	<key>Settings</key>
	<dict>
		<key>en</key>
		<string>Preferences</string>

		<key>de</key>
		<string>Präferenzen</string>
	</dict>
</dict>

Furthermore, localized strings can now contain variables that are getting replaced during localization.

Global variables

For example:

Log.log("{{app.name}} {{app.process}} {{app.version}} {{app.build}} {{device.model}} {{device.model-id}} {{os.name}} {{os.version}}".localized)

prints

ownCloud ownCloud 11.7.1 201 iPhone x86_64 iOS 15.0

when run in the Simulator.

Template variables

Template variable support can be used this way:

Log.log("{{product}} is awesome!".localized([ "product" : "ownCloud" ]))

prints

ownCloud is awesome.

In the Localized.strings file, templates appear like any other string:

"{{product}} is awesome!" = "{{product}} ist großartig!";

Global vs. template variables

As a convention to avoid conflicts:

  • global variables must use dot syntax (i.e. app.name), whereas
  • template variables must not use dot syntax (i.e. appName)

Related Issue

https://github.com/owncloud/enterprise/issues/4801

Screenshots (if appropriate):

Changes in en Changes in de
Simulator Screen Shot - iPhone 12 mini - 2021-10-16 at 22 28 40 Simulator Screen Shot - iPhone 12 mini - 2021-10-16 at 22 28 17

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.
  • Added changelog files for the fixed issues in folder changelog/unreleased

	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version
@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@felix-schwarz felix-schwarz added this to the 11.7.2-Fix milestone Oct 18, 2021
@felix-schwarz felix-schwarz requested review from hosy and jesmrec and removed request for hosy October 18, 2021 09:00
@jesmrec
Copy link
Contributor

jesmrec commented Oct 19, 2021

QA checks:

  • Set string in other language & switch to that language
  • Set device in a language in which a string is not set -> string in most preferred one in device settings
  • Set device in a language without locale in Branding.plist (regression)

@jesmrec
Copy link
Contributor

jesmrec commented Oct 19, 2021

@fschwarz When i set a device in a language (f.ex. Spa) and no entries for spanish in locale.overrides for an specific string, it's getting the first in the list, no matter which one. Is that correct? F.ex:

<key>Settings</key>
			<dict>
				<key>de</key>
				<string>Präferenzen</string>
				<key>fr</key>
				<string>Paramètres</string>
			</dict>

the device in Spanish language will display the German translation because it is the first in the list. If i'd add the english, i will take english. Does that mean that english is default and "mandatory"?

@felix-schwarz
Copy link
Contributor Author

felix-schwarz commented Oct 19, 2021

@fschwarz When i set a device in a language (f.ex. Spa) and no entries for spanish in locale.overrides for an specific string, it's getting the first in the list, no matter which one. Is that correct? F.ex:

No, that's not correct. For overrides like this, the app will pass a list of available localization languages (de, fr in your example) to iOS and iOS will then return them ordered by user preference (with the app using the most preferred one). That order can be changed by the user in iOS Settings > General > Language & Region > Preferred language order.

You can get the list from the system by pausing execution of the app, then typing

po NSLocale.preferredLanguages

in the debugger. For my iPhone, it returns:

<__NSArrayM 0x13bf20390>(
de-DE,
en-DE
)

I'm not sure what language iOS will return if none of the languages is in the list of preferred languages. The documentation hints at it finding the next best locale based on the user's region: https://developer.apple.com/documentation/foundation/nsbundle/1417249-preferredlocalizationsfromarray?language=objc

If that doesn't provide the needed results, I can add a fallback option that checks if NSLocale.preferredLanguages contains any of the languages that the override provides - and if it doesn't, uses a particular localization instead.

the device in Spanish language will display the German translation because it is the first in the list. If i'd add the english, i will take english. Does that mean that english is default and "mandatory"?

Based on how locale selection appears to work, I'd assume it picks the next best understood language for the average person in the user's region. So if you have set es and en as preferred languages in iOS Settings, iOS seems to assume the average person in your region is more likely to understand de than fr, and also more likely to understand en than de (or simply picks en because it's (likely) in your preferred languages).

@jesmrec
Copy link
Contributor

jesmrec commented Oct 19, 2021

Thanks for the clear explanation @felix-schwarz. As i can see, this feature is heavily tied to the language setup in the device, so it is not realistic to set more tests beyond checking if the correct locale is being set in the correct place. Number of combinations is exponential to the number of languages.

I'm not sure what language iOS will return if none of the languages is in the list of preferred languages. The documentation hints at it finding the next best locale based on the user's region: https://developer.apple.com/documentation/foundation/nsbundle/1417249-preferredlocalizationsfromarray?language=objc
If that doesn't provide the needed results, I can add a fallback option that checks if NSLocale.preferredLanguages contains any of the languages that the override provides - and if it doesn't, uses a particular localization instead.

I've tested this, with a quick example

	<key>locale.overrides</key>
	<dict>
		<key>Settings</key>
		<dict>
			<key>fr</key>
			<string>Parameteres</string>
		</dict>
	</dict>

Preferred languages in device (no fr):

Screenshot 2021-10-19 at 17 41 29

The displayed string is the french one.

It sounds like a corner case, since the enterprise world will use the most common language for all users involved. So, it is up to you to add the fallback you mentioned above, just in case.

@felix-schwarz
Copy link
Contributor Author

felix-schwarz commented Oct 20, 2021

@jesmrec The locale override works by

  • passing the list of available override languages to -preferredLocalizationsFromArray: which returns them, reordered in order of user preference
  • using the locale for the language at the top of the returned list

If only one language is available, it'll pass ["fr"] and get ["fr"] back, so it'll use fr.

If three languages are available, f.ex. ["fr", "es", "de"], it'd return ["es", "de", "fr"] for your setup, and es would get used.

I think we can leave it as is for now, since localization overrides would typically be provided for all languages used in an organization. If the need arises nonetheless, we can still add a fallback option locale.override-fallback-language to specify a language to fall back to if there are no matching locales for what the user has set up on the device.

@jesmrec
Copy link
Contributor

jesmrec commented Oct 20, 2021

I think we can leave it as is for now, since localization overrides would typically be provided for all languages used in an organization. If the need arises nonetheless, we can still add a fallback option locale.override-fallback-language to specify a language to fall back to if there are no matching locales for what the user has set up on the device.

totally agreed. Let's move this forward having in mind the corner case and its fix, just in case it arises.

@michaelstingl
Copy link
Contributor

I think we can leave it as is for now, since localization overrides would typically be provided for all languages used in an organization. If the need arises nonetheless, we can still add a fallback option locale.override-fallback-language to specify a language to fall back to if there are no matching locales for what the user has set up on the device.

Limit the languages in the app, in case big organisations want more control about it? (someday, maybe… not urgent)

@jesmrec jesmrec added the Approved by QA Approved by QA label Oct 21, 2021
@hosy hosy merged commit 3b3ed13 into milestone/11.7.2 Nov 8, 2021
@delete-merged-branch delete-merged-branch bot deleted the feature/modular-localization branch November 8, 2021 09:07
hosy added a commit that referenced this pull request Dec 1, 2021
* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - in branded clients: removed UISwitch to enable/disable deletion of available offline files in manage screen
- fixed text center layout in table view cell

* fixed UI issue in sharing view

* #4801 "Log out"  text changes

* #4801 text changes for "Prevent gestures"

* - ThemeTableViewCell, StaticTableViewRow: new .plain message style (#1053)

- add new view controller to present license texts for each component individually

* [feature/modular-localization] Modular localization (#1054)

* - Branding class:
	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version

* - add .localized(replacements) function to provide easy access to custom variables support in OCLocale

* - update SDK

* [feature/mdm-auto-connect] Skip Account Screen via MDM (#1056)

* #4801 Skip "Manage" screen / automatically open "Files" screen after login via MDM parameter account.auto-connect

* - SceneDelegate: use .first (which returns nil in case there are no bookmarks) instead of bookmark(at: 0) (which crashes in case there are no bookmarks because the array is empty and the method tries to access an item at index 0)

* added auto-connect after every setup, not only the first setup

Co-authored-by: Felix Schwarz <[email protected]>

* [feature/mdm-biometrical-unlock]  MDM setting for Biometrical Unlock (#1058)

* #4818 control via MDM to auto enable biometrical unlock

* overwrites user defaults with MDM settings and use existing getter/setter; renamed MDM key to use-biometrical-unlock

* - use user defaults for use-biometrical-unlock
- show Face ID authorization immediately after enabling Face ID

* [feature/hide-background-location-settings] Do not show Background Location section by default (#1051)

* #1050 The Background Uploads section should be only shown, if Auto Upload Photos/Videos was enabled. Otherwise the setting section Background Uploads confuses the user, why the disabled options in this section could not be enabled.

* fixed removing table view section

* [fix/branding refinement] Branding: Color and UI Improvements (#1057)

* Fixed branding issues

* - fixed default searchBar background and placeholder text color for branded builds
- show single account server list, if only one account is configured for branded and unbranded builds

* - fixed default (unselected) tab bar color
- added table view section border to branded account table view

* - fixed rounded border for text fields in branded login UI
- removed table row separator in branding login view
- fixed colors in contrast mode, if tint color is white
- fixed UIAlertView tint color

* fixed tint color in UIAlertController in dark mode for branding colors

* fixed color value again

* fixed tint color in single account server list cell view

* fixed missing profile UI

* removed optional branding values (only two color values are now needed for a complete branding, all other values are optional)

* fixed border color in single account server view, if navigationbar background color is white

* added gomplate template for Branding.plist creation to the iOS repo
adopted template for new Parameter and removed default values i template

* fixed some color issues, if tint color is white

* fixed setting custom UISearchBar backgroundColor on iOS 12

* set profile url as prefilled default value into setup url field

* added a new color style loginStatusBarStyle to set a custom status bar style for the login view

* if the key app.version-number exists, fastlane will use this value as app and extension short version number, which gives the possibility to set custom version numbers

* Fixed CR findings:
- added a protocol for setting the custom status bar style, instead of using static class names
- using the correct SDK method for round rect

* fixed merge error

* [fix/branding-login-retry] Retry Section for Branded Login Error (#1047)

* add a error section with a retry button in branded login view

* #4786 added a retry interval of 10 seconds. In this time interval the app retries to establish the connection before a error message will be shown

* only retry for network issues

* only show retry section on network issues

* - changed retry time interval to 30 seconds
- retries minimum of 3 times

* Update ownCloud/Static Login/Interface/StaticLoginSetupViewController.swift

Co-authored-by: Felix Schwarz <[email protected]>

* fixed connection retry and show retry section UI

* HTTP pipeline is ready to schedule HTTP requests before the Static Login View Controller is brought up. Moved it before setting up the UIWindow

* removed connection retries output and put it into the log

Co-authored-by: Felix Schwarz <[email protected]>

* [fix/single-accouont-display-name] Show Display Name in Branded Single Account View (#1049)

* username could be like a uuid, which is not user readable. Instead now showing the displayName and if not available, the userName

* fixed syntax error

* fixed compile error

* first draft for retrieving the user display name for the header view

* retrieving the users display name by init a connection and reloading the table view

* - new version and build number
- new release notes entry

* [feature/appstore-buildflag] Remove App Store / IAP code via build flag (#1052)

* - add support and documentation for DISABLE_APPSTORE_LICENSING build flag

* - ReleaseNotesHostViewController: remove unused reference to StoreKit
- OCLicenseDuration: make sure SKProductSubscriptionPeriod conversion code is excluded when using the DISABLE_APPSTORE_LICENSING build flag

* [fix/clear-lock] Clear lock when determining unlock expiry (#1061)

* - AppLockmanager: clear unlock and lastApplicationBackgroundedDate in case an unlock has expired, to protect against subsequent attempts setting the device time to an earlier date

* - AppLockManager: clear unlocked state if device time is earlier than lastBackgrounded time

* - fix logic bug and improve structure

* - AppLockManager: now returns correct unlock status when detecting that time was turned back

* [feature/custom-app-scheme] Custom app/auth schemes (#1060)

* - add support and documentation for DISABLE_APPSTORE_LICENSING build flag

* - ReleaseNotesHostViewController: remove unused reference to StoreKit
- OCLicenseDuration: make sure SKProductSubscriptionPeriod conversion code is excluded when using the DISABLE_APPSTORE_LICENSING build flag

* - add support for app.custom-app-scheme and app.custom-auth-scheme to Fastfile
- add documentation for new custom scheme Branding.plist parameters

* - remove test values from Branding.plist

* - move build options from `app.` space to `build.` space and rename options accordingly
- add legacy support for previously used Branding.plist build customization option names
- add `BuildOptions` class to `ownCloudApp` framework to make build customization options visible in documentation

* - ensure BuildOptions class is actually loaded/initialized

* - update Xcode to 12.5.1 for GitHub workflow configuration-documentation.yml

* - adapt code in `ImportPasteboardAction.swift` to also compile in Xcode 12.4

* Configuration documentation updated

Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* - switch to ios-sdk milestone/11.7.2

* add an accesibility id for the access files row, so that it can be matched by the autom tests

* quote shell command, because it can contain spaces in path name

* added public release notes for version 11.8.0

* fixed regression test findings

* fixed toolbar visibility on iPad, if should not be shown

* updated in-app changelog and added calens changelog entries

* Calens changelog updated

* - change SDK to 11.8 release

* - updated fastlane release notes
- changed changelog folder name

* Calens changelog updated

Co-authored-by: Felix Schwarz <[email protected]>
Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Jesus Recio <[email protected]>
Co-authored-by: hosy <[email protected]>
hosy added a commit that referenced this pull request Jan 28, 2022
* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - in branded clients: removed UISwitch to enable/disable deletion of available offline files in manage screen
- fixed text center layout in table view cell

* fixed UI issue in sharing view

* #4801 "Log out"  text changes

* #4801 text changes for "Prevent gestures"

* - ThemeTableViewCell, StaticTableViewRow: new .plain message style (#1053)

- add new view controller to present license texts for each component individually

* [feature/modular-localization] Modular localization (#1054)

* - Branding class:
	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version

* - add .localized(replacements) function to provide easy access to custom variables support in OCLocale

* - update SDK

* [feature/mdm-auto-connect] Skip Account Screen via MDM (#1056)

* #4801 Skip "Manage" screen / automatically open "Files" screen after login via MDM parameter account.auto-connect

* - SceneDelegate: use .first (which returns nil in case there are no bookmarks) instead of bookmark(at: 0) (which crashes in case there are no bookmarks because the array is empty and the method tries to access an item at index 0)

* added auto-connect after every setup, not only the first setup

Co-authored-by: Felix Schwarz <[email protected]>

* [feature/mdm-biometrical-unlock]  MDM setting for Biometrical Unlock (#1058)

* #4818 control via MDM to auto enable biometrical unlock

* overwrites user defaults with MDM settings and use existing getter/setter; renamed MDM key to use-biometrical-unlock

* - use user defaults for use-biometrical-unlock
- show Face ID authorization immediately after enabling Face ID

* - StaticLoginSetupViewController: add support for OCServerLocator, requesting a username if it is enabled
- add additional debug options to ownCloud.xcscheme
- update SDK to gain access to OCServerLocator

* updated APP_VERSION number

* reverted merge conflict changes

* using correct SDK commit

* using latest development sdk commit

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>
hosy added a commit that referenced this pull request Mar 16, 2022
* new version number 11.9.0, enabled beta build and warning

* [feature/infinite-propfind] Infinite PROPFIND support (#1002)

* - ProgressIndicatorViewController : extend with Progress object and cancellation support / monitoring
- BookmarkViewController: add infinite PROPFIND prepopulation step after account creation
- update SDK to provide infinite PROPFIND support

* Configuration documentation updated

* - update SDK to gain access to streaming infinite PROPFIND
- switch from receive+parse to stream+parse for infinite PROPFIND

* - update SDK to gain access to new supportsInfinitePropfind capability
- BookmarkViewController: make prepopulation configurable, using new capability and new class setting
- ProgressIndicatorViewController: add support for new title label view

* - BookmarkViewController: fix property name typo
- scheme: add new options to test streaming and split bookmark prepopulation

* Configuration documentation updated

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - adjust to final capabilities naming for infinite PROPFIND support

* upgraded app version numbers

Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* [feature/poll-efficiency] Poll for changes efficiency enhancements (#1043)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* - ClientRootViewController: start OCFileProviderServiceStandby only
	- after the connection status is online (== authentication successful)
	- OR 5 seconds after receiving the core from the Core Manager
- fix theoretical bug in ClientRootViewController where OCFileProviderServiceStandby could be started and not stopped if Core Manager returned a core with error

* - bump version to 11.7.2 / build 202

* - FileProviderExtension:
	- handle case where OCDatabase is not available or not open (previously led to a hang/crash as the FP waited for a DB call to return)
	- disable malloc stack logging as it leads to immediate crashes when debugging the file provider

* - update SDK to new version with support for coordinated scan for changes

* - bump build number to 203

Co-authored-by: Matthias Hühne <[email protected]>

* Configuration documentation updated

* [fix/media-playback-url] Fix WebDAV endpoint URL for media playback after restoration (#1093)

* - fix owncloud/enterprise#4924 via SDK update

* Configuration documentation updated

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: hosy <[email protected]>

* [feature/webfinger] Webfinger / server location (#1059)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - in branded clients: removed UISwitch to enable/disable deletion of available offline files in manage screen
- fixed text center layout in table view cell

* fixed UI issue in sharing view

* #4801 "Log out"  text changes

* #4801 text changes for "Prevent gestures"

* - ThemeTableViewCell, StaticTableViewRow: new .plain message style (#1053)

- add new view controller to present license texts for each component individually

* [feature/modular-localization] Modular localization (#1054)

* - Branding class:
	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version

* - add .localized(replacements) function to provide easy access to custom variables support in OCLocale

* - update SDK

* [feature/mdm-auto-connect] Skip Account Screen via MDM (#1056)

* #4801 Skip "Manage" screen / automatically open "Files" screen after login via MDM parameter account.auto-connect

* - SceneDelegate: use .first (which returns nil in case there are no bookmarks) instead of bookmark(at: 0) (which crashes in case there are no bookmarks because the array is empty and the method tries to access an item at index 0)

* added auto-connect after every setup, not only the first setup

Co-authored-by: Felix Schwarz <[email protected]>

* [feature/mdm-biometrical-unlock]  MDM setting for Biometrical Unlock (#1058)

* #4818 control via MDM to auto enable biometrical unlock

* overwrites user defaults with MDM settings and use existing getter/setter; renamed MDM key to use-biometrical-unlock

* - use user defaults for use-biometrical-unlock
- show Face ID authorization immediately after enabling Face ID

* - StaticLoginSetupViewController: add support for OCServerLocator, requesting a username if it is enabled
- add additional debug options to ownCloud.xcscheme
- update SDK to gain access to OCServerLocator

* updated APP_VERSION number

* reverted merge conflict changes

* using correct SDK commit

* using latest development sdk commit

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* changed app version number

* added missing translation string

* [feature/rename-accounts] Rename Account without Authentication Flow (#1097)

* #972 rename account name only (bookmark) is possible without re-authentication flow

* added changelog entry

* moved duplicated code into a function for reuse

* fixed issue link in changelog entry

* Calens changelog updated

* fixed code review finding

* fixed QA findings 1,2,3
- show UI to delete authentication data in edit mode
- only proceed without authentication, if authentication data is not nil

* show delete authentication data UI in all edit mode calls

Co-authored-by: hosy <[email protected]>

* #5008 (2) only show "Settings" toolbar, if no account is configured, otherwise "Settings" would appear twice

* [feature/biometrical-button] Biometrical Authentication Button (#1098)

* #1004 added biometrical unlock button, which appears by default as fallback, if biometrical unlock does not work (in file provider or not detected)

* - added fallback image for face-id too
- added changelog entry

* Calens changelog updated

* - fixed visibility of biometrical button in edit mode and, if feature is not enabled
- removed unneeded code

* - AppLockManager: add new property biometricCancelLabel to provide a label for the Cancel-option when presenting biometric authentication
- FileProviderUI / DocumentActionViewController: use new property to display "Cancel" instead of "Enter code" for biometric authentication

Co-authored-by: hosy <[email protected]>
Co-authored-by: Felix Schwarz <[email protected]>

* Calens changelog updated

* removed branding test values

* Transifex translation updates (#994)

* disabled beta warning, beta build

* - added accessibility label to biometrical unlock button
- added release notes
- added missing changelog files, moved to release folder

* Calens changelog updated

* added fastlane release notes

* - update SDK to include fix/token-timetolerance changes from the SDK

* changed folder name to release date

* Calens changelog updated

* - added missing changelog entry
- changed enterprise issue to ios-app pr

* Calens changelog updated

* fixed duplicated app_version number on TestFlight

Co-authored-by: Felix Schwarz <[email protected]>
Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: hosy <[email protected]>
Co-authored-by: Matthias Hühne <>
hosy added a commit that referenced this pull request Mar 23, 2022
…astlane via Branding.plist (#1099)

* new version number 11.9.0, enabled beta build and warning

* [feature/infinite-propfind] Infinite PROPFIND support (#1002)

* - ProgressIndicatorViewController : extend with Progress object and cancellation support / monitoring
- BookmarkViewController: add infinite PROPFIND prepopulation step after account creation
- update SDK to provide infinite PROPFIND support

* Configuration documentation updated

* - update SDK to gain access to streaming infinite PROPFIND
- switch from receive+parse to stream+parse for infinite PROPFIND

* - update SDK to gain access to new supportsInfinitePropfind capability
- BookmarkViewController: make prepopulation configurable, using new capability and new class setting
- ProgressIndicatorViewController: add support for new title label view

* - BookmarkViewController: fix property name typo
- scheme: add new options to test streaming and split bookmark prepopulation

* Configuration documentation updated

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - adjust to final capabilities naming for infinite PROPFIND support

* upgraded app version numbers

Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* [feature/poll-efficiency] Poll for changes efficiency enhancements (#1043)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* - ClientRootViewController: start OCFileProviderServiceStandby only
	- after the connection status is online (== authentication successful)
	- OR 5 seconds after receiving the core from the Core Manager
- fix theoretical bug in ClientRootViewController where OCFileProviderServiceStandby could be started and not stopped if Core Manager returned a core with error

* - bump version to 11.7.2 / build 202

* - FileProviderExtension:
	- handle case where OCDatabase is not available or not open (previously led to a hang/crash as the FP waited for a DB call to return)
	- disable malloc stack logging as it leads to immediate crashes when debugging the file provider

* - update SDK to new version with support for coordinated scan for changes

* - bump build number to 203

Co-authored-by: Matthias Hühne <[email protected]>

* Configuration documentation updated

* [fix/media-playback-url] Fix WebDAV endpoint URL for media playback after restoration (#1093)

* - fix owncloud/enterprise#4924 via SDK update

* Configuration documentation updated

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: hosy <[email protected]>

* [feature/webfinger] Webfinger / server location (#1059)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - in branded clients: removed UISwitch to enable/disable deletion of available offline files in manage screen
- fixed text center layout in table view cell

* fixed UI issue in sharing view

* #4801 "Log out"  text changes

* #4801 text changes for "Prevent gestures"

* - ThemeTableViewCell, StaticTableViewRow: new .plain message style (#1053)

- add new view controller to present license texts for each component individually

* [feature/modular-localization] Modular localization (#1054)

* - Branding class:
	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version

* - add .localized(replacements) function to provide easy access to custom variables support in OCLocale

* - update SDK

* [feature/mdm-auto-connect] Skip Account Screen via MDM (#1056)

* #4801 Skip "Manage" screen / automatically open "Files" screen after login via MDM parameter account.auto-connect

* - SceneDelegate: use .first (which returns nil in case there are no bookmarks) instead of bookmark(at: 0) (which crashes in case there are no bookmarks because the array is empty and the method tries to access an item at index 0)

* added auto-connect after every setup, not only the first setup

Co-authored-by: Felix Schwarz <[email protected]>

* [feature/mdm-biometrical-unlock]  MDM setting for Biometrical Unlock (#1058)

* #4818 control via MDM to auto enable biometrical unlock

* overwrites user defaults with MDM settings and use existing getter/setter; renamed MDM key to use-biometrical-unlock

* - use user defaults for use-biometrical-unlock
- show Face ID authorization immediately after enabling Face ID

* - StaticLoginSetupViewController: add support for OCServerLocator, requesting a username if it is enabled
- add additional debug options to ownCloud.xcscheme
- update SDK to gain access to OCServerLocator

* updated APP_VERSION number

* reverted merge conflict changes

* using correct SDK commit

* using latest development sdk commit

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* changed app version number

* #4918 added the possiblity, to set a custom app group identifier via Branding.plist parameter "build.app-group-identifier", which will be set by fastlane to all needed key/value pairs. This is needed, if customer using a own resigning script, which does not handle setting the app group identifier.

* added documentation and changelog entry

* Calens changelog updated

* - add additional parameter build.oc-app-group-identifier that only changes the OCAppGroupIdentifier and OCKeychainAccessGroupIdentifier keys in Info.plist

* - add ownCloud/Resources/Info.plist to list of files to replace OCAppGroupIdentifier and OCKeychainAccessGroupIdentifier in

* added documentation for the new build key

* added missing translation string

* [feature/rename-accounts] Rename Account without Authentication Flow (#1097)

* #972 rename account name only (bookmark) is possible without re-authentication flow

* added changelog entry

* moved duplicated code into a function for reuse

* fixed issue link in changelog entry

* Calens changelog updated

* fixed code review finding

* fixed QA findings 1,2,3
- show UI to delete authentication data in edit mode
- only proceed without authentication, if authentication data is not nil

* show delete authentication data UI in all edit mode calls

Co-authored-by: hosy <[email protected]>

* #5008 (2) only show "Settings" toolbar, if no account is configured, otherwise "Settings" would appear twice

* [feature/biometrical-button] Biometrical Authentication Button (#1098)

* #1004 added biometrical unlock button, which appears by default as fallback, if biometrical unlock does not work (in file provider or not detected)

* - added fallback image for face-id too
- added changelog entry

* Calens changelog updated

* - fixed visibility of biometrical button in edit mode and, if feature is not enabled
- removed unneeded code

* - AppLockManager: add new property biometricCancelLabel to provide a label for the Cancel-option when presenting biometric authentication
- FileProviderUI / DocumentActionViewController: use new property to display "Cancel" instead of "Enter code" for biometric authentication

Co-authored-by: hosy <[email protected]>
Co-authored-by: Felix Schwarz <[email protected]>

* Calens changelog updated

* Calens changelog updated

* Calens changelog updated

* fixed merge conflicts

* Calens changelog updated

* fixed syntax error

* fixed syntax error

* added missing changelog entry

* Calens changelog updated

Co-authored-by: Felix Schwarz <[email protected]>
Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: hosy <[email protected]>
Co-authored-by: Matthias Hühne <>
hosy added a commit that referenced this pull request Mar 29, 2022
* - BookmarkViewController: re-add infinite PROPFIND code previously removed due to a merge error
- update CHANGELOG.md
- bump build and version numbers
- update ios-sdk to increase timeout for start of response to infinite PROPFIND from 30 seconds to 6 minutes

* Calens changelog updated

* [feature/fastlane-app-group-identifier] Set App Group Identifier by Fastlane via Branding.plist (#1099)

* new version number 11.9.0, enabled beta build and warning

* [feature/infinite-propfind] Infinite PROPFIND support (#1002)

* - ProgressIndicatorViewController : extend with Progress object and cancellation support / monitoring
- BookmarkViewController: add infinite PROPFIND prepopulation step after account creation
- update SDK to provide infinite PROPFIND support

* Configuration documentation updated

* - update SDK to gain access to streaming infinite PROPFIND
- switch from receive+parse to stream+parse for infinite PROPFIND

* - update SDK to gain access to new supportsInfinitePropfind capability
- BookmarkViewController: make prepopulation configurable, using new capability and new class setting
- ProgressIndicatorViewController: add support for new title label view

* - BookmarkViewController: fix property name typo
- scheme: add new options to test streaming and split bookmark prepopulation

* Configuration documentation updated

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - adjust to final capabilities naming for infinite PROPFIND support

* upgraded app version numbers

Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* [feature/poll-efficiency] Poll for changes efficiency enhancements (#1043)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* - ClientRootViewController: start OCFileProviderServiceStandby only
	- after the connection status is online (== authentication successful)
	- OR 5 seconds after receiving the core from the Core Manager
- fix theoretical bug in ClientRootViewController where OCFileProviderServiceStandby could be started and not stopped if Core Manager returned a core with error

* - bump version to 11.7.2 / build 202

* - FileProviderExtension:
	- handle case where OCDatabase is not available or not open (previously led to a hang/crash as the FP waited for a DB call to return)
	- disable malloc stack logging as it leads to immediate crashes when debugging the file provider

* - update SDK to new version with support for coordinated scan for changes

* - bump build number to 203

Co-authored-by: Matthias Hühne <[email protected]>

* Configuration documentation updated

* [fix/media-playback-url] Fix WebDAV endpoint URL for media playback after restoration (#1093)

* - fix owncloud/enterprise#4924 via SDK update

* Configuration documentation updated

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: hosy <[email protected]>

* [feature/webfinger] Webfinger / server location (#1059)

* - change text in the footer below private links in accordance with owncloud/enterprise#4726

* - SDK update

* added additional build information to the Branding.plist file:
- ios-app and ios-sdk commit hash
- copy the Branding.plist with additional app and build information as file name

* [feature/biometrical-mdm-setting ]Suggest Biometrical Unlock (#1046)

* Suggest biometrical unlock, after setting up passcode

* - do not show Cancel button, if password is enforced
- update biometrical UI switch value in settings view
- fixed bug, dismissing the view, if biometrical is not available

* moved extension into ownCloudAppShared folder

* Branding: (#1045)

- add new `branding.user-defaults-default-values` class settings key to allow registration of alternative defaults for user defaults

* - fix bug where a quick access entry showed no items when selected a second time. (#1044)

* used better wording for "Cellular transfers"

* - in branded clients: removed UISwitch to enable/disable deletion of available offline files in manage screen
- fixed text center layout in table view cell

* fixed UI issue in sharing view

* #4801 "Log out"  text changes

* #4801 text changes for "Prevent gestures"

* - ThemeTableViewCell, StaticTableViewRow: new .plain message style (#1053)

- add new view controller to present license texts for each component individually

* [feature/modular-localization] Modular localization (#1054)

* - Branding class:
	- move logic for VendorServices.appName to Branding.appDisplayName
	- change app.name variable value to that of Branding.appDisplayName
- switch String.localized from NSLocalizedString() to OCLocale.localize()
- SwiftLint: adapt to latest SwiftLint version

* - add .localized(replacements) function to provide easy access to custom variables support in OCLocale

* - update SDK

* [feature/mdm-auto-connect] Skip Account Screen via MDM (#1056)

* #4801 Skip "Manage" screen / automatically open "Files" screen after login via MDM parameter account.auto-connect

* - SceneDelegate: use .first (which returns nil in case there are no bookmarks) instead of bookmark(at: 0) (which crashes in case there are no bookmarks because the array is empty and the method tries to access an item at index 0)

* added auto-connect after every setup, not only the first setup

Co-authored-by: Felix Schwarz <[email protected]>

* [feature/mdm-biometrical-unlock]  MDM setting for Biometrical Unlock (#1058)

* #4818 control via MDM to auto enable biometrical unlock

* overwrites user defaults with MDM settings and use existing getter/setter; renamed MDM key to use-biometrical-unlock

* - use user defaults for use-biometrical-unlock
- show Face ID authorization immediately after enabling Face ID

* - StaticLoginSetupViewController: add support for OCServerLocator, requesting a username if it is enabled
- add additional debug options to ownCloud.xcscheme
- update SDK to gain access to OCServerLocator

* updated APP_VERSION number

* reverted merge conflict changes

* using correct SDK commit

* using latest development sdk commit

Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>

* changed app version number

* #4918 added the possiblity, to set a custom app group identifier via Branding.plist parameter "build.app-group-identifier", which will be set by fastlane to all needed key/value pairs. This is needed, if customer using a own resigning script, which does not handle setting the app group identifier.

* added documentation and changelog entry

* Calens changelog updated

* - add additional parameter build.oc-app-group-identifier that only changes the OCAppGroupIdentifier and OCKeychainAccessGroupIdentifier keys in Info.plist

* - add ownCloud/Resources/Info.plist to list of files to replace OCAppGroupIdentifier and OCKeychainAccessGroupIdentifier in

* added documentation for the new build key

* added missing translation string

* [feature/rename-accounts] Rename Account without Authentication Flow (#1097)

* #972 rename account name only (bookmark) is possible without re-authentication flow

* added changelog entry

* moved duplicated code into a function for reuse

* fixed issue link in changelog entry

* Calens changelog updated

* fixed code review finding

* fixed QA findings 1,2,3
- show UI to delete authentication data in edit mode
- only proceed without authentication, if authentication data is not nil

* show delete authentication data UI in all edit mode calls

Co-authored-by: hosy <[email protected]>

* #5008 (2) only show "Settings" toolbar, if no account is configured, otherwise "Settings" would appear twice

* [feature/biometrical-button] Biometrical Authentication Button (#1098)

* #1004 added biometrical unlock button, which appears by default as fallback, if biometrical unlock does not work (in file provider or not detected)

* - added fallback image for face-id too
- added changelog entry

* Calens changelog updated

* - fixed visibility of biometrical button in edit mode and, if feature is not enabled
- removed unneeded code

* - AppLockManager: add new property biometricCancelLabel to provide a label for the Cancel-option when presenting biometric authentication
- FileProviderUI / DocumentActionViewController: use new property to display "Cancel" instead of "Enter code" for biometric authentication

Co-authored-by: hosy <[email protected]>
Co-authored-by: Felix Schwarz <[email protected]>

* Calens changelog updated

* Calens changelog updated

* Calens changelog updated

* fixed merge conflicts

* Calens changelog updated

* fixed syntax error

* fixed syntax error

* added missing changelog entry

* Calens changelog updated

Co-authored-by: Felix Schwarz <[email protected]>
Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: hosy <[email protected]>
Co-authored-by: Matthias Hühne <>

* updated changelog and release notes

* Calens changelog updated

* - SDK update to improve handling of token refresh "responses" while offline
- add scheme env variable to turn on/off auth race condition simulator

* - ios-sdk update: fix dead-lock
- BookmarkViewController: fix finding (1) in #1109

* - update commit to latest develop commit including OCBookmarkManager deadlock fix

* - change SDK to latest develop version

* [fix/biometrical-unlock-setup] Fix: Setup Passcode with Biometrical Unlock (#1112)

* #5086 fix for passcode setup with biometrical unlock enabled:
- biometrical unlock button no longer appear in setup view
- after passcode was successfully setup, show biometrical unlock for permissions dialog

* removed unneeded comment

* added changelog and release notes

* Calens changelog updated

* reverted to Xcode 12 version

* - update to SDK release 11.9.1 (master)

* changed folder name for changelog release

* Calens changelog updated

Co-authored-by: felix-schwarz <[email protected]>
Co-authored-by: Matthias Hühne <[email protected]>
Co-authored-by: hosy <[email protected]>
Co-authored-by: Matthias Hühne <>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Approved by QA Approved by QA
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants