Restrict deployments to app(play) stores in Fastlane? - continuous-deployment

With Fastlane, what options exist to restrict triggering the release lane and thus deploying to the app/play store? Is restricting who can approve a merge into the branch the only control?

You can set skip_upload_apk for Android or skip_binary_upload for iOS to avoid deploying to the stores.

Related

We have detected that your app contains the Request Legacy External Storage tag in the manifest file for one or more app or APK packages

We have detected that your app contains the Request Legacy External Storage tag in the manifest file for one or more app or APK packages.
Developers who have apps on devices running Android OS 11 or later should use the Subsidiary Storage feature to give users better control over accessing the storage space available on their device. To launch your app on Android OS 11 or later after May 5, you need to perform one of the following steps:
Update your app to use privacy best practices such as Storage Access Framework or Media Store API
Update your app to announce the permission to access all files (MANAGE_EXTERNAL_STORAGE) in the manifest file, and to complete the statement of access permission to all files in the Play Console as of May 5
Completely remove the permission to access all files from your app
For apps targeting Android 11, the request Legacy External Storage tag will be ignored. You have to use the access permission to all files to retain access to external storage space.
Applications that require access to all files without permission to use will be removed from Google Play, and you will not be able to publish updates.
I want someone to help me
if your targetSdk is not 30 you can keep using that flag
android:requestLegacyExternalStorage="true"
And you don' t have to do anything.
But developers should do targetSdk = 30 in November.
I share answer which came from google:
"you can continue to use requestLegacyExternalStorage after May 5th since you are not targeting Android 11. You do not need to do anything before May 5th."
In our application targetSdk = 29 and we use requestLegacyExternalStorage. If you are in the same condition, you don' t have to do anything for now.
If in your application targetSDK = 30 you have two option:
if your application is need access all files in device, use MANAGE_EXTERNAL_STORAGE. But you should submit a form for this permission.
Or you can use Storage access framework or the MediaStore API to handle your file access features.

Setting up selenium automation framework to run tests depending on cloud settings

We have about 200 products having the same codebase. Apps are identified by appID and the content/features/feature configs are controlled via CMS. Like Feature 1 is enabled for AppID=1 and AppID=18 but not for AppID=53. Feature 1 can behave different in AppID=1 and AppID=18(again depending configs received from CMS).
We have automated tests based on AppID=1 and run them in CI environment. The picture is whenever we make a change e.g. for AppID=1 it affects to other apps as well so we want to test all apps to make sure nothing is broken.
Actually we can get the config from CMS for the AppID, but we don't know how should we proceed with it.
Can someone share his experience/solution if any?

Codename One Preferences/Storage permissions

I have developed and published an app in Google Play Store, which only send simple String request to REST API and store the results in the Preferences. The same app is also submitted to Windows Store for publication, however it was rejected due to the following reason:
The app declares use of the sensitive capability [musicLibrary, picturesLibrary, videosLibrary] without appearing to access the declared capability. Please removed the sensitive capability declaration and re-submit the app.
Upon inspection to Google Play Store submission, I noticed the same permissions are requested:
This app has access to:Photos/Media/Filesread the contents of your USB storagemodify or delete the contents of your USB storageStorageread the contents of your USB storagemodify or delete the contents of your USB storageOtherreceive data from Internetview network connectionsfull network accessprevent device from sleeping
So my question is, do Preferences really need these permissions, or can I set some kind of build hints to remove these permission requests, especially for UWP build? I have also tried to set android.blockExternalStoragePermission build hint, but the permissions are still requested in Android build. I have yet to try iOS build since currently I don't have Apple Developer account.
Thank you very much in advance.
Edit #1 (23/10/2018):
Upon further inspection, I found that I have mistakenly uploaded the version that didn't declare android.blockExternalStoragePermission to Google Play Store, so all good on Android version.
Currently I'm not using any of cn1libs, and here's the list of all classes imported in my application:
java.util.HashMapjava.util.Mapjava.util.Randomcom.codename1.components.InfiniteProgresscom.codename1.components.ToastBarcom.codename1.components.ToastBar.Statuscom.codename1.io.CharArrayReadercom.codename1.io.JSONParsercom.codename1.io.Logcom.codename1.io.NetworkManagercom.codename1.io.Preferencescom.codename1.io.rest.Responsecom.codename1.io.rest.Restcom.codename1.l10n.L10NManagercom.codename1.ui.Buttoncom.codename1.ui.Componentcom.codename1.ui.Containercom.codename1.ui.Dialogcom.codename1.ui.FontImagecom.codename1.ui.Formcom.codename1.ui.Labelcom.codename1.ui.events.ActionEventcom.codename1.ui.events.ActionListenercom.codename1.ui.layouts.BorderLayoutcom.codename1.ui.layouts.FlowLayoutcom.codename1.ui.layouts.GridLayoutcom.codename1.ui.plaf.Bordercom.codename1.ui.plaf.Stylecom.codename1.ui.plaf.UIManagercom.codename1.ui.util.Resources
So my original question remain, how do I set the build hints to prevent the same external storage read/write permission in Windows and iOS?
See the section titled "Android Permissions" here, for a list of some API's that might trigger extra permissions. I suggest extracting the manifest from the XML and inspecting it. It should include two permissions based on your description you should have two permissions there:
android.permission.WRITE_EXTERNAL_STORAGE - which you should have been disabled when you applied android.blockExternalStoragePermission
android.permission.INTERNET - this one you actually need
I'm assuming you have a permission for media access and here it becomes a question of where it came from?
Did you use a cn1lib that might include a feature that triggers this?
Do you have a feature in the app that isn't active yet?
Once you have the specific name or results of this investigation comment here and I'll revise the answer with more details.

Multiple user profiles / sessions in one CEF instance

Is it possible to have multiple user profiles—with separate cookies, history, local storage, etc.—running at the same time in one CEF (Chromium Embedded Framework) instance? The goal is to allow multiple browsing "sessions" side-by-side in one window (it's actually an OpenGL app).
There are two possible solutions I've looked into, each with its own problems:
Using CefCookieManager
This is possible to do for just cookies by creating multiple CefCookieManagers. However, there does not seem to be similar API for history and local storage, which are now still shared.
Using CefSettings::cache_path
CefSettings settings;
CefString(&settings.cache_path).FromASCII("C:\\CefCache");
CefInitialize(args, settings, app, nullptr);
The problem here is that CefSettings is associated with the global CEF instance rather than with each browser/client.
Is there a way to do this that I have not discovered?
If it's only about cookies and local storage, and you host content using custom scheme handler or request interception, then you could use different domains/subdomains for each profile. See this topic for reference: http://www.magpcss.org/ceforum/viewtopic.php?f=6&t=11695 .
Regarding history, you could implement history on your own by using the OnBeforeBrowse callback.
In the topic referenced above it is also mentioned that it's technically possible to specify a different cache path per CefRequestContext (can be provided during browser creation). So working on a patch for CEF may be another option.
EDIT: CEF revision 2040 adds support for complete isolation of storage and permissions per request context, see comment #7 in Issue 1044: https://code.google.com/p/chromiumembedded/issues/detail?id=1044#c7

Can I use local storage for a mobile HTML5 webapp as a fallback when user loses internet access?

I'm making a mobile HTML5 webapp and I'm wondering if I can use local storage to enable users to still use the app when they lose internet access.
The basic idea would be that when they have wi-fi / 3G they download the HTML and data, but when they lose internet access they can at least access the last version with old cached data (with a warning that data may not be up to date until they get internet access again).
Is this possible with local storage ?
Certainly. One of the purposes with localStorage is to enable offline applications.
you can check (see here for details):
window.navigator.onLine
to see if you are online or offline, or simply:
window.addEventListener("offline", offlineFunc, false)
window.addEventListener("online", onlineFunc, false)
and if offline you serve the stored content from localStorage by updating the page partially.
Another way of doing this is to use a cache manifest.
Here you can define which files shall be available if browser become offline, and which require network and so forth.
See here for details on that:
https://en.wikipedia.org/wiki/Cache_manifest_in_HTML5
http://diveintohtml5.info/offline.html
Besides from localStorage you can also use IndexedDB which also allow you to store Blobs (or files) (File API is coming, currently only for Chrome).

Resources