Loading...
Loading...
Set up and test universal links for iOS using setup-safari
npx skill4agent add evanbacon/evanbacon.dev universal-linksbunx setup-safariexp://npx expo startEXPO_APPLE_ID="your-apple-id@email.com" bunx setup-safaripublic/.well-known/apple-app-site-association{
"applinks": {
"details": [
{
"appIDs": ["TEAM_ID.com.your.bundleid"],
"components": [
{
"/": "*",
"comment": "Matches all routes"
}
]
}
]
},
"activitycontinuation": {
"apps": ["TEAM_ID.com.your.bundleid"]
},
"webcredentials": {
"apps": ["TEAM_ID.com.your.bundleid"]
}
}import { ScrollViewStyleReset } from "expo-router/html";
export default function Root({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<meta name="apple-itunes-app" content="app-id=YOUR_ITUNES_ID" />
<ScrollViewStyleReset />
</head>
<body>{children}</body>
</html>
);
}{
"expo": {
"ios": {
"associatedDomains": [
"applinks:yourdomain.com",
"activitycontinuation:yourdomain.com",
"webcredentials:yourdomain.com"
]
}
}
}# Deploy web (AASA file must be accessible)
npx expo export -p web && npx eas-cli deploy
# Rebuild iOS app with new entitlements
npx expo run:ios
# Or for TestFlight: npx testflightbunx setup-safarihttps://yourdomain.com/.well-known/apple-app-site-association{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.com.example.app",
"paths": ["*"]
}
]
}
}*/products/*/item/???NOT /admin/*app.jsonapp.config.js{
"expo": {
"ios": {
"associatedDomains": [
"applinks:yourdomain.com",
"applinks:www.yourdomain.com"
]
}
}
}npx setup-safariexport EXPO_TUNNEL_SUBDOMAIN=my-app-name{
"expo": {
"ios": {
"associatedDomains": ["applinks:my-app-name.ngrok.io"]
}
}
}npx expo run:iosnpx expo start --tunnelhttps://my-app-name.ngrok.iocurl "https://app-site-association.cdn-apple.com/a/v1/yourdomain.com"curl https://yourdomain.com/.well-known/apple-app-site-association | jqContent-Type: application/json// app/[...path].tsx handles all deep link paths
// app/products/[id].tsx handles /products/:id linksimport { useLocalSearchParams } from "expo-router";
export default function Product() {
const { id } = useLocalSearchParams();
return <Text>Product: {id}</Text>;
}