I want to craft a path for Universal Link that are only valid when there's 1 folder segment. Like:
https://example.com/first or https://example.com/first/
but I don't want it to come into my app when the URL is:
https://example.com/first/second
https://example.com/first/index.html
https://example.com/first/second/script.js
https://example.com/first/second/third/image.png
I am using this AASA JSON
"appID": "<appid>",
"paths": [
"*/*.aspx",
"NOT /first/*/*",
"/first/*/"
]
It doesn't work. How can I control this by number of path segment?
The issue with the * is that you will include any string combination including the empty string. I would suggest trying to add a ? character followed by a * to ensure that the string cannot be empty. In your case, try:
"appID": "<appid>",
"paths": [
"*/*.aspx",
"/?*", //Include paths that have '/first/'
"NOT /?*/?*" //For paths that have '/first/second/third' etc
]
Hopefully, that works for you.
Related
So I stumbled upon an issue using iOS universal links.
let's assume my domain is: example.com.
So I set the associated domains to be applinks:example.com
Then, in the apple-app-site-association file, I specified the following:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "XXXXXXX.com.example.bro",
"paths": [
"/ios/*"
]
}
]
}
}
And I expected only links that end with /ios will make the app open, while other links, such as example.com, example.com/something, should open in Safari.
However, every link under the domain example.com opens in the app.
I tried using "NOT ", "NOT /", "NOT /" and so on, with no success.
What could I be missing?
Help would be much appreciated,
Thanks!
Update:
It appears I had conflicting files which caused these issues.
Apparently, my teammate added a similar file under ./well_known. Which seem to have taken precedence over the file I added. (The file under ./well_known had an asterisk * - allowing all links).
Once I removed the extra file under ./well_known, the issue was resolved.
Trying to figure out how to get the "X.Y.Z" substituted below when not every file will have that in the name. Simple filespec:
{
"files": [
{
"pattern": "artifacts/",
"target": "repository/project/X.Y.Z/"
}
]
}
Not all of the files have the full version number in them so I can't use a simple placeholder (per this solution). I was wondering if there was some other way to dynamically figure out the part to replace the "X.Y.Z" using some maybe-more-complex syntax?
Thinking about the problem a bit more it occurred to me that I could put the artifacts in a specially-named directory that I could then use to publish from.
{
"files": [
{
"pattern": "artifacts-(*)/",
"target": "repository/project/{1}/"
}
]
}
Tested, and that seemed to do the trick. It just required a little scripting at the end of the build to name that directory with the version number in it.
I configured a task in VSCode to compile a Delphi 2005 dpk. It is working and returning the errors on the "problems view", but it is not showing that errors in the file.
I think it is happening because when I click on an error, I get the error message:
Unable to open 'sr075pro.pas': File not found
(...projectfolder\sr075pro.pas)
But the file is in ...projectfolder\webservices\sr075pro.pas.
I can't find a way to tell to the task that the file is in a subfolder. I tried to use the "relative" option on the "fileLocation" tag without sucess.
The error returned:
Compiling sa_webservices...
Borland Delphi Version 13.0 Copyright (c) 1983,99 Inprise Corporation
sr075pro.pas(99) Error: Undeclared identifier: 'ni'
sa_webservices.dpk(802) Fatal: Could not compile used unit 'sr075pro.pas'
My task configuration:
{
"version": "0.1.0",
"name": "Compilar",
"command": "C:\\Compilers\\compile.bat",
"suppressTaskName": true,
"isShellCommand": true,
"isBuildCommand": true,
"tasks": [
{
"taskName": "Compile sa_webservices",
"isBuildCommand": false,
"isTestCommand": false,
"showOutput": "always",
"args": [
"sa_webservices"
],
"problemMatcher": {
"owner": "external",
"fileLocation": "relative",
"pattern": {
"regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
"file": 1,
"line": 3,
"message": 5
}
}
}
My compile.bat:
#echo off
#P:
#set arg1=%1
shift
...
if "%arg1%" == "sa_webservices" set arg2="webservices"
...
echo Compiling %arg1%...
cd\%arg2%
dcc32.exe -H -W -Q %arg1%.dpk
Your task configuration is wrong. First of all you don't close all brackets but I guess it's a mistake made by copying and pasting it here on StackOverflow. Otherwise the task configuration wouldn't have worked at all.
Now to the real problem:
DCC32 produces hints and warnings containing relative file paths. These paths are relative to the project file. In your task configuration you define the compiler's output to contain relative paths by setting
"fileLocation": "relative"
Visual Studio Code doesn't know how to build the correct absolute path from the relative paths given by the compiler message. So it guesses your current ${workspaceRoot} (in your case it's projectfolder) would be the absolute path.
This explains why you see errors and warnings which contain wrong file paths. In order to get the correct paths you'll need to tell VSCode the correct path to combine the relative paths with.
You do this by simply adding the correct path to the fileLocation entry in you tasks.json:
"fileLocation": ["relative", "${workspaceRoot}\\webservices"]
The entire tasks.json looks like that:
{
"version": "0.1.0",
"name": "Compilar",
"command": "C:\\Compilers\\compile.bat",
"suppressTaskName": true,
"isShellCommand": true,
"isBuildCommand": true,
"tasks": [
{
"taskName": "Compile sa_webservices",
"isBuildCommand": false,
"isTestCommand": false,
"showOutput": "always",
"args": [
"sa_webservices"
],
"problemMatcher": {
"owner": "external",
"fileLocation": ["relative", "${workspaceRoot}\\webservices"],
"pattern": {
"regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
"file": 1,
"line": 3,
"message": 5
}
}
}
]
}
It might be easier to find files in the problemMatcher in vscode 1.74, see file location search: v1.74 release notes. There is a new option search for the fileLocation property:
New file location method; search
Previously, problem matchers needed to know exactly where to look for
the problematic files, via the fileLocation property. The supported
methods were absolute, relative, or autoDetect (i.e., check for
relative paths first and opt to absolute paths in case of failure).
However, in workspaces that need to invoke various scripts residing in
nested sub-directories, the developers could have a hard time setting
up their tasks; since such scripts seldom report file paths in a
unified manner (e.g., relative to the workspace's base directory).
To help alleviate the problem, a new file location method, named
search, is introduced in this version. With this method, a deep file
system search will be initiated to locate any captured path. See the
example below on how to setup the search file location method
(although, all parameters are optional):
// ...
"fileLocation": [
"search",
{
"include": [ // Optional; defaults to ["${workspaceFolder}"]
"${workspaceFolder}/src",
"${workspaceFolder}/extensions"
],
"exclude": [ // Optional
"${workspaceFolder}/extensions/node_modules"
]
}
],
// ... } ```
⚠️ Of course, users should be wary of the possibly **heavy file system
searches** (e.g., looking inside `node_modules` directories) and set
the `exclude` property with discretion.
I'm using electron-react-boilerplate to develop electron app (which uses electron-builder to pack apps).
I want to create tray, but it requires icon path or native image. The question is how to retrieve icon image from electron-builder or how to tell electron-builder to include icons dir into resources (without packing), so I can use:
appIcon = new Tray(iconPath | nativeImage)
I kind of struggled with a solution about non-packaged assets (such as media or JSON config files), mostly because I was not familiar with Electron until now. :)
I built a simple personal tray-only app and I didn't want to repackage every time I change an icon for instance.
If you too plan on using changing/dynamic assets you can distinguish between "development" and "production" using this property:
https://electronjs.org/docs/api/app#appispackaged-readonly
Make sure you have this in your package.json:
"build": {
...
"extraResources": [
"./assets/**"
],
}
https://www.electron.build/configuration/contents#extraresources
Then in your code you can have:
const assetsPath = app.isPackaged ? path.join(process.resourcesPath, "assets") : "assets";
Of course you can also use a different path for storing assets, independent of your packaged app folder, for example your user's home or user's documents:
https://electronjs.org/docs/api/app#appgetpathname
Electron v7.0.1
electron-builder 21.2.0
Firstly you need to tell electron-builder which extra files need copying into your output build. I copy over native drivers for each os like below, but you should be able to adapt this to your needs. The "to": "resources" means you'll be able to use the next code to find the files later.
"build": {
...
"extraFiles": [
{
"from": "resources/${os}/drivers",
"to": "resources",
"filter": [
"**/*"
]
}
],
Then to get access to that path from in electron you can use:
const path = require('path');
const imgPath = path.join(process.resourcesPath, 'image.png')
If you're in the main process you can omit the remote part.
You can then use nativeImage.createFromPath to get a native image:
const nativeImage = require('electron').nativeImage
let image = nativeImage.createFromPath(imgPath)
Thanks, Tim, your answer gave me a good thought. I reused it with some addition depending on how I run my app - form vs code using electron or from installed deb file:
"build": {
...
"extraFiles": [
{
"from": "assets",
"to": "resources",
"filter": [
"**/*"
]
}
]
...
}
And then:
let imgPath = process.env.DEV ? "assets/icon.png" : path.join(process.resourcesPath, "icon.png");
tray = new Tray(imgPath);
I'm trying to upload the "Routing App Coverage File" to iTunesConnect. I get the message "Your file couldnt be saved, try again or contact us".
The file contents are below.. I've checked the contents on geojsonlint and they seem correct.
{ "type": "MultiPolygon",
"coordinates": [
[[ [-75.767212,39.702961],
[-76.25061,36.85545],
[-78.491821,38.030786],
[-78.200684,39.187562],
[-77.774963,39.626846],
[-75.767212,39.702961]
] ]]
}
Does the filename have to be special? Is there another problem?
This may help others. What solved this for me, was simply, that I had a couple of extra spaces, one at the beginning, and another at the end.