AzureBlobStorageOnIoTEdge: Error Target container connection not specified, upload turned off - docker
My local blob storage is not uploading blobs to my cloud storage account. It reports back
"configurationValidation": {
"deviceAutoDeleteProperties": {
"deleteOn": {
"Status": "Success"
},
"deleteAfterMinutes": {
"Status": "Warning",
"Message": "Auto Delete after minutes value not specified, auto deletion turned off."
},
"retainWhileUploading": {
"Status": "Success"
}
},
"deviceToCloudUploadProperties": {
"uploadOn": {
"Status": "Success"
},
"cloudStorageAccountName": {
"Status": "Error",
"Message": "Target container connection not specified, upload turned off."
},
"cloudStorageAccountKey": {
"Status": "Error",
"Message": "Target container connection not specified, upload turned off."
},
"uploadOrder": {
"Status": "Success"
},
"deleteAfterUpload": {
"Status": "Success"
}
}
},
I am pretty sure that it should work. My desired properties are
"deviceToCloudUploadProperties": {
"uploadOn": true,
"uploadOrder": "OldestFirst",
"cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=*****;AccountKey=******;EndpointSuffix=core.windows.net",
"storageContainersForUpload": {
"***": {
"target": "***"
}
},
"deleteAfterUpload": true
}
The container exists locally and on the cloud site. I copied the primary connection string from my local storage account into the configuration. The local storage is working, I can see that my container was created and contains data but it doesn't want to synchronize with the cloud. Why is it saying "Target container connection not specified, upload turned off."? It sounds like this part is missing
"storageContainersForUpload": {
"***": {
"target": "***"
}
},
but obviously it is not.
I'm using the latest docker image of this service. Is there any chance to use an older version? Some months ago I could make it work already. I tried to use a different version like mcr.microsoft.com/azure-blob-storage:1.4.0 but it doesn't accept any other tags than latest.
Thx!
The difference between my working version of the local blob storage module and my non working version was that the non working version was deployed by a deployment plan. In the deployment plan you cannot just paste the module twin settings of the documentation of the blob storage on IoT edge like https://learn.microsoft.com/en-us/azure/iot-edge/how-to-deploy-blob?view=iotedge-2020-11
You need to split the configuration into two parts where the first part looks like this
and the second part looks like that
And that totally makes sense. If you want to update your modules you probably want to keep your configuration because there might have been some changes which were made e.g. by a customer. This gives you the possibilty to add some properties to your inital configuration later without changing anything what was already configured. In fact every device can keep its individual configuration at any time.
My wrongly configured reported proterties were hidden in the suggested default path "properties.desired.settings" and thus the edge runtime could not find it.
Related
How to add dynamic container in storage account [duplicate]
Using Logic Apps I am trying to copy blobs from one container into several separate dynamically created containers however there doesn't appear to be a "create container" action in Logic Apps. I have tried using the "Create Blob" action with the desired container name specified as part of the "Blob Name" parameter however this fails with a 404 message. { "status": 404, "message": "Specified container telemetery-30dfb0bd-73b0-42a3-8677-63bde2fd4b43 does not exist.\r\nclientRequestId: blahblahh-e60e-44e1-aec4-c32a21659257", "error": { "message": "Specified container telemetery-30dfb0bd-73b0-42a3-8677-63bde2fd4b43 does not exist." }, "source": "blahblha-ne.azconn-ne-01.p.azurewebsites.net" } The original request is - { "method": "post", "queries": { "folderPath": "/", "name": "/telemetery-30dfb0bd-73b0-42a3-8677-63bde2fd4b43/timeline,xml", "queryParametersSingleEncoded": "True" }, "path": "/datasets/default/files", "host": { "connection": { "name": "/subscriptions/blahblah-6866-4c8c-b3f1-41039ad2b3eb/resourceGroups/RG-blahblahg/providers/Microsoft.Web/connections/azureblob" } }, "body": "file content" } IS there a way to create a blob container us Logic Apps?
According to the documentation, there's no "create container" operation: https://learn.microsoft.com/en-us/connectors/azureblobconnector/ What you can do is write an Azure Function and chain it as part of your workflow in order to create the container: https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-dotnet#create-a-container
For now there is no action to create blob container, you could implement it with azure function like Thiago proposed. Suppose you could use the rest api to do it. The below test use the sas token to do it you could try other authorize way.
Why is the exact difference between "violation" and "deny" in OPA/Rego?
In Open Policy Agent (https://www.openpolicyagent.org/) regarding to Kubernetes, depending which engine is used: Gatekeeper: https://github.com/open-policy-agent/gatekeeper OR Plain OPA with kube-mgmt: https://www.openpolicyagent.org/docs/latest/kubernetes-introduction/#how-does-it-work-with-plain-opa-and-kube-mgmt There are different ways to define validation rules: In Gatekeeper the violation is used. See sample rules here: https://github.com/open-policy-agent/gatekeeper-library/tree/master/library/general In plain OPA samples, the deny rule, see sample here: https://www.openpolicyagent.org/docs/latest/kubernetes-introduction/#how-does-it-work-with-plain-opa-and-kube-mgmt It seems to be the OPA constraint framework defines it as violation: https://github.com/open-policy-agent/frameworks/tree/master/constraint#rule-schema So what is the exact "story" behind this, why it is not consistent between the different engines? Notes: This doc reflects on this: https://www.openshift.com/blog/better-kubernetes-security-with-open-policy-agent-opa-part-2 Here is mentioned how to support interoperability in the script: https://github.com/open-policy-agent/gatekeeper/issues/1168#issuecomment-794759747 https://github.com/open-policy-agent/gatekeeper/issues/168 In this issue is the migration mentioned, is just because of "dry run" support?.
Plain OPA has no opinion on how you choose to name your rules. Using deny is just a convention in the tutorial. The real Kubernetes admission review response is going to look something like this: { "kind": "AdmissionReview", "apiVersion": "admission.k8s.io/v1beta1", "response": { "allowed": false, "status": { "reason": "container image refers to illegal registry (must be hooli.com)" } } } So whatever you choose to name your rules the response will need to be transformed into a response like the above before it's sent back to the Kubernetes API server. If you scroll down a bit in the Detailed Admission Control Flow section of the Kubernetes primer docs, you'll see how this transformation is accomplished in the system.main rule: package system import data.kubernetes.admission main = { "apiVersion": "admission.k8s.io/v1beta1", "kind": "AdmissionReview", "response": response, } default response = {"allowed": true} response = { "allowed": false, "status": { "reason": reason, }, } { reason = concat(", ", admission.deny) reason != "" } Note in particular how the "reason" attribute is just built by concatenating all the strings found in admission.deny: reason = concat(", ", admission.deny) If you'd rather use violation or some other rule name using plain OPA, this is where you would change it.
Can't connect to local storage account
I followed the Microsoft docs for deploying a storage account edge module and my module is currently running in my VM. However, I cannot connect the Python SDK or the storage explorer to it. My container create options are: { "Env": [ "localstorage", "92RhvUXR59Aa8h90LSHC7w==" ], "HostConfig": { "Binds": [ "blobvolume:/blobroot" ], "PortBindings": { "11002/tcp": [ { "HostPort": "11002" } ] } } } My module twin settings are { "deviceAutoDeleteProperties": { "deleteOn": false, "deleteAfterMinutes": 0, "retainWhileUploading": true }, "deviceToCloudUploadProperties": { "uploadOn": true, "uploadOrder": "OldestFirst", "cloudStorageConnectionString": "<<my connection string was here :) >>", "storageContainersForUpload": { "eds-container-pcu": { "target": "eds-container-pcu" } }, "deleteAfterUpload": true } } iotedge list says blobstorage running Up 5 hours mcr.microsoft.com/azure-blob-storage:latest I also checked the volume. I put a file into the "BlockBlob" folder in my volume and then I went into the shell of my container and under /blobroot I could find that file. I also copied the cloud storage connection string and used that for a file upload and that also worked. I could upload a text file into my cloud storage account successfully. My connection string for my local storage account would be that, no? I created it by myself like the docs said: DefaultEndpointsProtocol=http;BlobEndpoint=http://localhost:11002/localstorage;AccountName=localstorage;AccountKey=92RhvUXR59Aa8h90LSHC7w==; With that connection string I cannot connect anything. Not the SDK, nor the Storage Explorer. Python code would be: CONNECTION_STRING = "DefaultEndpointsProtocol=http;BlobEndpoint=http://localhost:11002/localstorage;AccountName=localstorage;AccountKey=92RhvUXR59Aa8h90LSHC7w==;" blobClient = BlobClient.from_connection_string(CONNECTION_STRING, "eds-container-pcu", "test123.txt") # Doesn't work with or without this line blobClient._X_MS_VERSION = '2017-04-17' blobClient.upload_blob(data="Hello World", blob_type="BlockBlob") And I get: HttpResponseError: Server encountered an internal error. Please try again after some time. RequestId:fef9066d-323c-47e3-8e6f-ba006557ee65 Time:2021-04-08T14:33:23.7892893Z ErrorCode:InternalError Error:None ExceptionDetails:None ExceptionMessage:'s' cannot be null StackTrace:AsyncHelper.ArgumentNullRethrowableException: 's' cannot be null ---> System.ArgumentNullException: Value cannot be null. (Parameter 's') at System.Convert.FromBase64String(String s) at Microsoft.AzureStack.Services.Storage.FrontEnd.WossProvider.WStorageAccount..ctor(WStorageStamp stamp, String accountName) at Microsoft.AzureStack.Services.Storage.FrontEnd.WossProvider.WStorageStamp.Microsoft.Cis.Services.Nephos.Common.Storage.IStorageStamp.CreateAccountInstance(String accountName, ITableServerCommandFactory tableServerCommandFactory) at Microsoft.Cis.Services.Nephos.Common.Storage.PerRequestStorageManager.CreateAccountInstance(String accountName) at Microsoft.Cis.Services.Nephos.Common.Protocols.Rest.BasicHttpProcessorWithAuthAndAccountContainer`1.GetResourceAccountPropertiesImpl(String accountName, Boolean isAdminAccess, TimeSpan timeout, AsyncIteratorContext`1 context)+MoveNext() at AsyncHelper.AsyncIteratorContextBase.ExecuteIterator(Boolean inBegin) --- End of inner exception stack trace --- at Microsoft.Cis.Services.Nephos.Common.Protocols.Rest.BasicHttpProcessorWithAuthAndAccountContainer`1.EndGetResourceAccountProperties(IAsyncResult asyncResult) at Microsoft.Cis.Services.Nephos.Common.Protocols.Rest.BasicHttpProcessorWithAuthAndAccountContainer`1.ProcessImpl(AsyncIteratorContext`1 async)+MoveNext() Why could that be? Storage explorer is also not connecting and the lines of code above are working fine with my cloud storage connection string.
A colleague pointed out that my local account key is too short. As written in the docs, the key must have a length of 64 bytes. Connection with SDK or StorageExplorer is fine then. My code also was missing the creation of a local container but the error message will tell about this.
in your sample for the container create options, I am missing the keys (LOCAL_STORAGE_ACCOUNT_NAME and LOCAL_STORAGE_ACCOUNT_KEY). Did you specify only the values? "Env": [ "LOCAL_STORAGE_ACCOUNT_NAME=localstorage", "LOCAL_STORAGE_ACCOUNT_KEY=92RhvUXR59Aa8h90LSHC7w==" ], When I deploy a module with the settings, I can connect via Storage Explorer. Did you look at the logs of the blob storage module?
Multiple target environments and AWSGoogleSignIn
Hello I am working with multiple AWS frameworks on an Ios project. The app is setup to target the specific backend environments though a dev and prod target in xcode. This generally works fine though the use of constants and macros to use the different identity pools etc on build. However I am now using AWSGoogleSignInProvider to link google sign-in and cognito. this requires a awsconfiguration.json file in the project which contains the google id and the cognito Id. { "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "***", "Region": "***" } } }, "IdentityManager": { "Default": {} }, "GoogleSignIn": { "ClientId-iOS": "***", "Permissions": "email,profile,openid" } } Im unsure on how i can target dev/prod since i would need to use different pool ids depending on environments. Can't use two files with different names and targets since naming is "immutable" and cant use any macros in the Json file itself. By looking at the AWS framework it seams there is no way to manually set any of these, and the shared instance gets the google id through the the Json file on instantiation or throws.
Google Tag Manager (Firebase) Preview link iOS does not work - Deep Link does not contain valid required params
We integrated Google Tag Manager and Firebase into our iOS app. Everything seems to be integrated correctly (app loads default and remotely defined container and sends events to Firebase, app is opened on preview QR code). But I have difficulties to use Preview feature on not published version. What I do: Currently published container version is 4. Then I changed the tag - saved changes as a version 5 and used preview feature, which generates begin preview QR Code link - url like https://tagmanager.google.com/mcpr/com.app.XXX?id=GTM-XXXXXX>m_auth=7xxhnmjdIb71fZ28PDPmXg>m_preview=5 Then I opened app using QR code scan in the device and tried to invoke tag - old version 4 was invoked, but I expected that version 5 with different implementation should be used. Note: I know that version 4 was used, because my tag renames event name by adding suffix, which is different on version 4 and 5. What is tracked I can see in debug console. In the log I see: <FIRAnalytics/DEBUG> Deep Link does not contain valid required params. URL params: { "gtm_auth" = 7xxhnmjdIb71fZ28PDPmXg; "gtm_preview" = 5; id = "GTM-XXXXXX"; } This is my container definition (json) - version 5: { "fingerprint":"NQ$0", "resource": { "version":"5", "macros":[ { "function":"__e", "instance_name":"Event Name", "vendor_template_version":"1" }, { "function":"__ai", "instance_name":"App ID", "vendor_template_version":"1" }, { "function":"__an", "instance_name":"App Name", "vendor_template_version":"1" }, { "function":"__av", "instance_name":"App Version Code", "vendor_template_version":"1" } ], "tags":[ { "function":"__fm", "instance_name":"Firebase X Tag", "once_per_event":true, "vendor_template_version":"1", "vtp_overrideEventName":["template",["macro",0],"zz"], "vtp_action":"filter", "tag_id":2 } ], "predicates":[ { "function":"_sw", "arg0":["macro",0], "arg1":"test" } ], "rules":[ [["if",0],["add",0]] ] }, "runtime": [[50,"__ai_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationId",[7]]]],[50,"__ai",[46,"data"],[36,["__ai_main",[15,"data"]]]], [50,"__an_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationName",[7]]]],[50,"__an",[46,"data"],[36,["__an_main",[15,"data"]]]], [50,"__av_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationVersion",[7]]]],[50,"__av",[46,"data"],[36,["__av_main",[15,"data"]]]], [50,"__e_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"event",[7]]]],[50,"__e",[46,"data"],[36,["__e_main",[15,"data"]]]], [50,"__fm_main",[46,"a"],[41,"b","c"],[38,[17,[15,"a"],"action"],[46,"measure","filter","block"],[46,[5,[46,[3,"b",[39,[17,[15,"a"],"mergeEventParameters"],[17,[15,"a"],"dropParamTable"],[7]]],["__fm_sendFirebaseEvent",[17,[15,"a"],"eventName"],[17,[15,"a"],"editParamTable"],[15,"b"],[17,[15,"a"],"mergeEventParameters"]],[4]]],[5,[46,[3,"c",[30,[17,[15,"a"],"overrideEventName"],[2,[17,[15,"gtmUtils"],"mobile"],"event",[7]]]],["__fm_sendFirebaseEvent",[15,"c"],[17,[15,"a"],"editParamTable"],[17,[15,"a"],"dropParamTable"],true],[2,[17,[15,"gtmUtils"],"mobile"],"suppressPassthrough",[7]],[4]]],[5,[46,[2,[17,[15,"gtmUtils"],"mobile"],"suppressPassthrough",[7]],[4]]],[9,[46,[36]]]]]],[50,"__fm_sendFirebaseEvent",[46,"a","b","c","d"],[41,"e","f","g","h","i","j"],[3,"e",[30,[2,[17,[15,"gtmUtils"],"common"],"tableToMap",[7,[15,"b"],"editParamKey","editParamValue"]],[8]]],[22,[28,["__fm_validateEventData",[15,"a"],[15,"e"]]],[46,[36]]],[3,"f",[7]],[47,"g",[15,"c"],[46,[2,[15,"f"],"push",[7,[16,[16,[15,"c"],[15,"g"]],"dropParamKey"]]]]],[3,"h",[39,[15,"d"],[2,[17,[15,"gtmUtils"],"mobile"],"eventParameters",[7]],[8]]],[3,"h",[30,[15,"h"],[8]]],[47,"i",[15,"e"],[46,[22,[12,[2,[15,"f"],"indexOf",[7,[15,"i"]]],[27,1]],[46,[43,[15,"h"],[15,"i"],[16,[15,"e"],[15,"i"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,"Dropped param ",[15,"i"]]," is also specified in param override table"]]]]]]],[3,"j",[8]],[47,"i",[15,"h"],[46,[22,[12,[2,[15,"f"],"indexOf",[7,[15,"i"]]],[27,1]],[46,[43,[15,"j"],[15,"i"],[16,[15,"h"],[15,"i"]]]]]]],[2,[17,[15,"gtmUtils"],"mobile"],"sendMeasurement",[7,[15,"a"],[15,"j"]]]],[50,"__fm_validateEventData",[46,"a","b"],[41,"c"],[22,[30,[12,[2,[15,"a"],"charAt",[7,0]],"_"],[28,[2,[15,"a"],"match",[7,"^[A-Za-z0-9_]*$"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,[0,"Invalid Event name: ",[15,"a"]]," (Must not start with an underscore and must consist of letters,"]," digits and/or underscores)"]]],[36,false]]],[47,"c",[15,"b"],[46,[22,[30,[12,[2,[15,"c"],"charAt",[7,0]],"_"],[28,[2,[15,"c"],"match",[7,"^[A-Za-z0-9_]*$"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,[0,"Invalid parameter name: ",[15,"c"]]," (Must not start with an underscore and must consist of"]," letters, digits and/or underscores)"]]],[36,false]]]]],[36,true]],[50,"__fm",[46,"data"],[36,["__fm_main",[15,"data"]]]], [50,"main",[46,"a"],[43,[17,[15,"a"],"common"],"tableToMap",[15,"tableToMap"]],[43,[17,[15,"a"],"common"],"stringify",[15,"stringify"]]],[50,"tableToMap",[46,"a","b","c"],[41,"d","e","f"],[3,"d",[8]],[3,"e",false],[3,"f",0],[42,[1,[15,"a"],[23,[15,"f"],[17,[15,"a"],"length"]]],[33,[15,"f"],[3,"f",[0,[15,"f"],1]]],false,[46,[22,[1,[1,[16,[15,"a"],[15,"f"]],[2,[16,[15,"a"],[15,"f"]],"hasOwnProperty",[7,[15,"b"]]]],[2,[16,[15,"a"],[15,"f"]],"hasOwnProperty",[7,[15,"c"]]]],[46,[43,[15,"d"],[16,[16,[15,"a"],[15,"f"]],[15,"b"]],[16,[16,[15,"a"],[15,"f"]],[15,"c"]]],[3,"e",true]]]]],[36,[39,[15,"e"],[15,"d"],[45]]]],[50,"stringify",[46,"a"],[41,"b","c","d","e"],[22,[20,[15,"a"],[45]],[46,[36,"null"]]],[22,[20,[15,"a"],[44]],[46,[36,[44]]]],[22,[30,[12,[40,[15,"a"]],"number"],[12,[40,[15,"a"]],"boolean"]],[46,[36,[2,[15,"a"],"toString",[7]]]]],[22,[12,[40,[15,"a"]],"string"],[46,[36,[0,[0,"\"",[2,[2,[15,"a"],"split",[7,"\""]],"join",[7,"\\\""]]],"\""]]]],[22,[2,[17,[15,"gtmUtils"],"common"],"isArray",[7,[15,"a"]]],[46,[3,"b",[7]],[3,"c",0],[42,[23,[15,"c"],[17,[15,"a"],"length"]],[33,[15,"c"],[3,"c",[0,[15,"c"],1]]],false,[46,[3,"d",["stringify",[16,[15,"a"],[15,"c"]]]],[22,[12,[15,"d"],[44]],[46,[2,[15,"b"],"push",[7,"null"]]],[46,[2,[15,"b"],"push",[7,[15,"d"]]]]]]],[36,[0,[0,"[",[2,[15,"b"],"join",[7,","]]],"]"]]]],[22,[12,[40,[15,"a"]],"object"],[46,[3,"b",[7]],[47,"e",[15,"a"],[46,[3,"d",["stringify",[16,[15,"a"],[15,"e"]]]],[22,[29,[15,"d"],[44]],[46,[2,[15,"b"],"push",[7,[0,[0,[0,"\"",[15,"e"]],"\":"],[15,"d"]]]]]]]],[36,[0,[0,"{",[2,[15,"b"],"join",[7,","]]],"}"]]]],[2,[17,[15,"gtmUtils"],"common"],"log",[7,"e","Attempting to stringify unknown type!"]],[36,[44]]]] } And container version 4: { "fingerprint":"NA$0", "resource": { "version":"4", "macros":[ { "function":"__e", "instance_name":"Event Name", "vendor_template_version":"1" }, { "function":"__ai", "instance_name":"App ID", "vendor_template_version":"1" }, { "function":"__an", "instance_name":"App Name", "vendor_template_version":"1" }, { "function":"__av", "instance_name":"App Version Code", "vendor_template_version":"1" } ], "tags":[ { "function":"__fm", "instance_name":"Firebase X Tag", "once_per_event":true, "vendor_template_version":"1", "vtp_overrideEventName":["template",["macro",0],"yy"], "vtp_action":"filter", "tag_id":2 } ], "predicates":[ { "function":"_sw", "arg0":["macro",0], "arg1":"test" } ], "rules":[ [["if",0],["add",0]] ] }, "runtime": [[50,"__ai_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationId",[7]]]],[50,"__ai",[46,"data"],[36,["__ai_main",[15,"data"]]]], [50,"__an_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationName",[7]]]],[50,"__an",[46,"data"],[36,["__an_main",[15,"data"]]]], [50,"__av_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"applicationVersion",[7]]]],[50,"__av",[46,"data"],[36,["__av_main",[15,"data"]]]], [50,"__e_main",[46],[36,[2,[17,[15,"gtmUtils"],"mobile"],"event",[7]]]],[50,"__e",[46,"data"],[36,["__e_main",[15,"data"]]]], [50,"__fm_main",[46,"a"],[41,"b","c"],[38,[17,[15,"a"],"action"],[46,"measure","filter","block"],[46,[5,[46,[3,"b",[39,[17,[15,"a"],"mergeEventParameters"],[17,[15,"a"],"dropParamTable"],[7]]],["__fm_sendFirebaseEvent",[17,[15,"a"],"eventName"],[17,[15,"a"],"editParamTable"],[15,"b"],[17,[15,"a"],"mergeEventParameters"]],[4]]],[5,[46,[3,"c",[30,[17,[15,"a"],"overrideEventName"],[2,[17,[15,"gtmUtils"],"mobile"],"event",[7]]]],["__fm_sendFirebaseEvent",[15,"c"],[17,[15,"a"],"editParamTable"],[17,[15,"a"],"dropParamTable"],true],[2,[17,[15,"gtmUtils"],"mobile"],"suppressPassthrough",[7]],[4]]],[5,[46,[2,[17,[15,"gtmUtils"],"mobile"],"suppressPassthrough",[7]],[4]]],[9,[46,[36]]]]]],[50,"__fm_sendFirebaseEvent",[46,"a","b","c","d"],[41,"e","f","g","h","i","j"],[3,"e",[30,[2,[17,[15,"gtmUtils"],"common"],"tableToMap",[7,[15,"b"],"editParamKey","editParamValue"]],[8]]],[22,[28,["__fm_validateEventData",[15,"a"],[15,"e"]]],[46,[36]]],[3,"f",[7]],[47,"g",[15,"c"],[46,[2,[15,"f"],"push",[7,[16,[16,[15,"c"],[15,"g"]],"dropParamKey"]]]]],[3,"h",[39,[15,"d"],[2,[17,[15,"gtmUtils"],"mobile"],"eventParameters",[7]],[8]]],[3,"h",[30,[15,"h"],[8]]],[47,"i",[15,"e"],[46,[22,[12,[2,[15,"f"],"indexOf",[7,[15,"i"]]],[27,1]],[46,[43,[15,"h"],[15,"i"],[16,[15,"e"],[15,"i"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,"Dropped param ",[15,"i"]]," is also specified in param override table"]]]]]]],[3,"j",[8]],[47,"i",[15,"h"],[46,[22,[12,[2,[15,"f"],"indexOf",[7,[15,"i"]]],[27,1]],[46,[43,[15,"j"],[15,"i"],[16,[15,"h"],[15,"i"]]]]]]],[2,[17,[15,"gtmUtils"],"mobile"],"sendMeasurement",[7,[15,"a"],[15,"j"]]]],[50,"__fm_validateEventData",[46,"a","b"],[41,"c"],[22,[30,[12,[2,[15,"a"],"charAt",[7,0]],"_"],[28,[2,[15,"a"],"match",[7,"^[A-Za-z0-9_]*$"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,[0,"Invalid Event name: ",[15,"a"]]," (Must not start with an underscore and must consist of letters,"]," digits and/or underscores)"]]],[36,false]]],[47,"c",[15,"b"],[46,[22,[30,[12,[2,[15,"c"],"charAt",[7,0]],"_"],[28,[2,[15,"c"],"match",[7,"^[A-Za-z0-9_]*$"]]]],[46,[2,[17,[15,"gtmUtils"],"common"],"log",[7,"w",[0,[0,[0,"Invalid parameter name: ",[15,"c"]]," (Must not start with an underscore and must consist of"]," letters, digits and/or underscores)"]]],[36,false]]]]],[36,true]],[50,"__fm",[46,"data"],[36,["__fm_main",[15,"data"]]]], [50,"main",[46,"a"],[43,[17,[15,"a"],"common"],"tableToMap",[15,"tableToMap"]],[43,[17,[15,"a"],"common"],"stringify",[15,"stringify"]]],[50,"tableToMap",[46,"a","b","c"],[41,"d","e","f"],[3,"d",[8]],[3,"e",false],[3,"f",0],[42,[1,[15,"a"],[23,[15,"f"],[17,[15,"a"],"length"]]],[33,[15,"f"],[3,"f",[0,[15,"f"],1]]],false,[46,[22,[1,[1,[16,[15,"a"],[15,"f"]],[2,[16,[15,"a"],[15,"f"]],"hasOwnProperty",[7,[15,"b"]]]],[2,[16,[15,"a"],[15,"f"]],"hasOwnProperty",[7,[15,"c"]]]],[46,[43,[15,"d"],[16,[16,[15,"a"],[15,"f"]],[15,"b"]],[16,[16,[15,"a"],[15,"f"]],[15,"c"]]],[3,"e",true]]]]],[36,[39,[15,"e"],[15,"d"],[45]]]],[50,"stringify",[46,"a"],[41,"b","c","d","e"],[22,[20,[15,"a"],[45]],[46,[36,"null"]]],[22,[20,[15,"a"],[44]],[46,[36,[44]]]],[22,[30,[12,[40,[15,"a"]],"number"],[12,[40,[15,"a"]],"boolean"]],[46,[36,[2,[15,"a"],"toString",[7]]]]],[22,[12,[40,[15,"a"]],"string"],[46,[36,[0,[0,"\"",[2,[2,[15,"a"],"split",[7,"\""]],"join",[7,"\\\""]]],"\""]]]],[22,[2,[17,[15,"gtmUtils"],"common"],"isArray",[7,[15,"a"]]],[46,[3,"b",[7]],[3,"c",0],[42,[23,[15,"c"],[17,[15,"a"],"length"]],[33,[15,"c"],[3,"c",[0,[15,"c"],1]]],false,[46,[3,"d",["stringify",[16,[15,"a"],[15,"c"]]]],[22,[12,[15,"d"],[44]],[46,[2,[15,"b"],"push",[7,"null"]]],[46,[2,[15,"b"],"push",[7,[15,"d"]]]]]]],[36,[0,[0,"[",[2,[15,"b"],"join",[7,","]]],"]"]]]],[22,[12,[40,[15,"a"]],"object"],[46,[3,"b",[7]],[47,"e",[15,"a"],[46,[3,"d",["stringify",[16,[15,"a"],[15,"e"]]]],[22,[29,[15,"d"],[44]],[46,[2,[15,"b"],"push",[7,[0,[0,[0,"\"",[15,"e"]],"\":"],[15,"d"]]]]]]]],[36,[0,[0,"{",[2,[15,"b"],"join",[7,","]]],"}"]]]],[2,[17,[15,"gtmUtils"],"common"],"log",[7,"e","Attempting to stringify unknown type!"]],[36,[44]]]] }
Make sure to clear cookies on your device. Also, stop any script or ad blocking services from running in the background, which could interfere with GTM's preview mode, too. Disclaimer: This may not apply to your setup, I can speak for Desktop environments only.
Did you follow all the steps described in this tutorial ? Especially the part where you add URL types in your plist file. Uninstall and reinstall the app otherwise, and rather than the QR code, use directly the link. As last option, try this on an emulator rather than on a real device.