iOS Build Timeout and access to private repositories
Question

Hello,
We are building a custom OutSystems plugin that contains a Cordova plugin with natives widget frameworks (android and ios). The ios framework is installed as a pod dependency via the private repository and the Android framework is installed as a Gradle dependency via the private maven repository.
The goal is to publish this plugin in the forge and allow our customers to install this plugin in their Outsystems application.

We request your help to:

  1.  Can we have an OutSystems plugin that uses private repositories? How can we configure authentication in the Outsystems application to access the private repository? 
  2. During our tests in the personal environment, we were not able to complete the construction of ios. The build failed because it is returning a timeout on installing the pods dependencies and this does not happen in a normal Cordova build. We created a plugin to add some ios dependencies to avoid compilation timeout and this dependency plugin has only one dependency (firestore) and the compilation keeps failing.

Can you please let us know how to go around with these questions, please?

Thank you

Hi there,

So full disclosure I had to ask around since this is way out of my expertise.


For #1, recommendation is to build a plugin that receives the needed credentials to access the private Maven repository. Then via hook or Gradle access those parameters to successfully authorize the access to the repository. The extensibility in the OML would look something like this:

{
    "plugin": {
        "url": "https://example.com/sampleplugin/sampleplugin.git",
        "variables": [
            {
                "name": "USERNAME",
                "value": "<value_var1>"
            },
            {
                "name": "PASSWORD",
                "value": "<value_var2>"
            }
        ]
    }
}

The benefit here is that you can change the values above when deploying via Lifetime.


For #2, it might be related with a pod dependency that is big in size and because of that it might be reaching the limit for a plugin to be installed in MABS, which is 4 minutes.

Hello Cristiana,

thank you for your feedback.

For #1 I put  variables in global preferences of extensibility of OML instead of plugin variables but it's questionable. We create hooks in Cordova plugin to read preference values from config.xml and we are creating a URL authenticated(username+password) to fetch our private dependencies(pod for ios and maven for android).

For #2, Can the plugin installation limit be changed? We create an helper plugin to install some pod dependencies before the main plugin, but how can we ensure this extra plugin is installed before the main plugin when OutSystems is generating the ios app?
What is the order in which plug-ins are installed when creating an ios version?


Best regards,
Filipe Pereira


The plugin installation limit can't be changed. This is the way we can ensure that the whole process occurs successfully. Without any context of what the plugin does, the recommendation here could be to refactor the bigger plugin into smaller pieces - if possible.

MABS takes care of the order by looking at the plugins that are consumed. So if Plugin A consumes Plugin B it will first install Plugin B and then Plugin A, and so on... And to clarify, I'm talking about OutSystems references between modules.

We cannot split the plugin into small pieces because the plugin contains an xcframework that is installed by cocoapods. We build an xcframework and provide it through cocoapods, and to use it in Outsystems we build an Outsystems plugin (module) which contains a cordova plugin which contains our ios framework.

The simple plugin (plugin.xml file attached) that contains a Cordova plugin with Firestore pod dependency is doing timeout when generating the ios platform. Sometimes we can generate the platform the second time we try.


We trying install plugins without dependency between them because if the plugins are dependnecy the timout is occuring. We are independent plugins, so plugin A is not depending of plugin B, but what we want is that Plugin B being installed first of plugin A. Can we ensure that plugin B being installed before of plugin A?

We try to install plugins without dependency on each other, because if the plugins are dependent then the timeout is occurring. We create independent plug-ins, so plug-in A is not dependent on plug-in B, but what we want is plug-in B to be installed first from plug-in A. We can ensure that plug-in B is installed before plug-in A?

To clarify one of our dependencies is Firestore and we created a Plugin B that only has Firestore as a dependency for when plugin A is installing the Firestore dependency is already installed.

plugin.png

The only way I know to sort the plugin installation is by using dependencies.

If the timeout is still occurring whether because of dependencies or other reason, I can't be of much more help here, I'm sorry. 

The recommendation would be to open a support case to better understand why the timeouts are happening and how to solve them.

Thank you so much, Cristiana.

We have already opened a ticket in support, but we haven't had any response so far.

Community GuidelinesBe kind and respectful, give credit to the original source of content, and search for duplicates before posting.