Files
sofa/apps/native/app.json
T
jakeandClaude Opus 5.5 ccaacfeae5 feat(native): follow the system language instead of an in-app picker
Declare the app's 12 languages to iOS and Android via expo-localization,
resolve the language from the device's preferred languages at start-up and
on Android runtime changes, and make Settings > Language open the system
settings page. Drops the MMKV-stored locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:24:59 -04:00

215 lines
6.3 KiB
JSON

{
"expo": {
"name": "Sofa",
"slug": "sofa",
"owner": "jakejarvis",
"scheme": "sofa",
"orientation": "portrait",
"userInterfaceStyle": "dark",
"ios": {
"config": {
"usesNonExemptEncryption": false
},
"deploymentTarget": "17.0",
"icon": "./assets/images/sofa.icon",
"bundleIdentifier": "com.jakejarvis.sofa",
"appleTeamId": "B5ZWKBCUTU",
"infoPlist": {
"NSLocalNetworkUsageDescription": "Sofa connects to your server when it's on your local network."
},
"privacyManifests": {
"NSPrivacyCollectedDataTypes": [
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypeCrashData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
},
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypePerformanceData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
},
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypeOtherDiagnosticData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
}
],
"NSPrivacyAccessedAPITypes": [
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryUserDefaults",
"NSPrivacyAccessedAPITypeReasons": ["CA92.1"]
},
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategorySystemBootTime",
"NSPrivacyAccessedAPITypeReasons": ["35F9.1"]
},
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryFileTimestamp",
"NSPrivacyAccessedAPITypeReasons": ["C617.1"]
}
]
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/android-icon-foreground.png",
"backgroundImage": "./assets/images/android-icon-background.png",
"monochromeImage": "./assets/images/android-icon-monochrome.png"
},
"package": "com.jakejarvis.sofa"
},
"plugins": [
"expo-router",
"expo-secure-store",
[
"expo-font",
{
"ios": {
"fonts": [
"./assets/fonts/DM_Sans/DMSans-Regular.ttf",
"./assets/fonts/DM_Sans/DMSans-Medium.ttf",
"./assets/fonts/DM_Sans/DMSans-SemiBold.ttf",
"./assets/fonts/DM_Sans/DMSans-Bold.ttf",
"./assets/fonts/DM_Serif_Display/DMSerifDisplay-Regular.ttf",
"./assets/fonts/Geist_Mono/GeistMono-Regular.ttf"
]
},
"android": {
"fonts": [
{
"fontFamily": "DM Sans",
"fontDefinitions": [
{
"path": "./assets/fonts/DM_Sans/DMSans-Regular.ttf",
"weight": 400
},
{
"path": "./assets/fonts/DM_Sans/DMSans-Medium.ttf",
"weight": 500
},
{
"path": "./assets/fonts/DM_Sans/DMSans-SemiBold.ttf",
"weight": 600
},
{
"path": "./assets/fonts/DM_Sans/DMSans-Bold.ttf",
"weight": 700
}
]
},
{
"fontFamily": "DM Serif Display",
"fontDefinitions": [
{
"path": "./assets/fonts/DM_Serif_Display/DMSerifDisplay-Regular.ttf",
"weight": 400
}
]
},
{
"fontFamily": "Geist Mono",
"fontDefinitions": [
{
"path": "./assets/fonts/Geist_Mono/GeistMono-Regular.ttf",
"weight": 400
}
]
}
]
}
}
],
[
"expo-splash-screen",
{
"backgroundColor": "#101010",
"image": "./assets/images/splash-icon.png",
"imageWidth": 200
}
],
"expo-system-ui",
"expo-web-browser",
[
"expo-image-picker",
{
"microphonePermission": false
}
],
[
"expo-localization",
{
"supportedLocales": [
"en",
"fr",
"de",
"es",
"it",
"pt",
"nl",
"ar",
"he",
"zh",
"ja",
"ko"
]
}
],
[
"expo-widgets",
{
"groupIdentifier": "group.com.jakejarvis.sofa",
"bundleIdentifier": "com.jakejarvis.sofa.ExpoWidgetsTarget",
"widgets": [
{
"name": "ContinueWatching",
"displayName": "Continue Watching",
"description": "The next episode of the shows you're watching",
"ios": {
"supportedFamilies": ["systemSmall"],
"contentMarginsDisabled": true
}
},
{
"name": "Upcoming",
"displayName": "Upcoming",
"description": "Upcoming episodes and movie releases",
"ios": {
"supportedFamilies": ["systemSmall"],
"contentMarginsDisabled": true
}
}
]
}
],
[
"@sentry/react-native/expo",
{
"organization": "jarvis-0a",
"project": "sofa-native"
}
],
"expo-image",
"expo-status-bar"
],
"experiments": {
"typedRoutes": true,
"reactCompiler": true
},
"extra": {
"eas": {
"projectId": "a9f021eb-f58d-49af-b291-d72f7dc34051"
}
}
}
}