Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 491 lines 17 kB view raw
1// @ts-check 2const pkg = require('./package.json') 3 4/** 5 * @param {import('@expo/config-types').ExpoConfig} _config 6 * @returns {{ expo: import('@expo/config-types').ExpoConfig }} 7 */ 8module.exports = function (_config) { 9 /** 10 * App version number. Should be incremented as part of a release cycle. 11 */ 12 const VERSION = pkg.version 13 14 /** 15 * Uses built-in Expo env vars 16 * 17 * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables 18 */ 19 const PLATFORM = process.env.EAS_BUILD_PLATFORM ?? 'web' 20 21 const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight' 22 const IS_PRODUCTION = process.env.EXPO_PUBLIC_ENV === 'production' 23 const IS_DEV = !IS_TESTFLIGHT && !IS_PRODUCTION 24 25 const ASSOCIATED_DOMAINS = [ 26 'applinks:witchsky.app', 27 'applinks:bsky.app', 28 // When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port. 29 ...(IS_DEV || IS_TESTFLIGHT ? [] : []), 30 ] 31 32 // const UPDATES_CHANNEL = IS_TESTFLIGHT 33 // ? 'testflight' 34 // : IS_PRODUCTION 35 // ? 'production' 36 // : undefined 37 // const UPDATES_ENABLED = !!UPDATES_CHANNEL 38 const UPDATES_ENABLED = IS_TESTFLIGHT || IS_PRODUCTION 39 40 const USE_SENTRY = Boolean(process.env.SENTRY_AUTH_TOKEN) 41 42 const IOS_ICON_FILE = 43 PLATFORM === 'web' // web build doesn't like .icon files 44 ? './assets/app-icons/ios_icon_legacy_light.png' 45 : IS_TESTFLIGHT 46 ? './assets/app-icons/ios_icon_testflight.icon' 47 : './assets/app-icons/ios_icon_default.icon' 48 49 return { 50 expo: { 51 version: VERSION, 52 name: 'Witchsky', 53 slug: 'witchsky', 54 scheme: ['bluesky', 'witchsky'], 55 // owner: 'blueskysocial', 56 // owner: 'neema.brown', 57 runtimeVersion: { 58 policy: 'appVersion', 59 }, 60 icon: './assets/app-icons/ios_icon_legacy_light.png', 61 userInterfaceStyle: 'automatic', 62 primaryColor: '#ED5345', 63 newArchEnabled: false, 64 ios: { 65 supportsTablet: false, 66 bundleIdentifier: 'app.witchsky', 67 config: { 68 usesNonExemptEncryption: false, 69 }, 70 icon: IOS_ICON_FILE, 71 infoPlist: { 72 CADisableMinimumFrameDurationOnPhone: true, 73 UIBackgroundModes: ['remote-notification'], 74 NSCameraUsageDescription: 75 'Used for profile pictures, posts, and other kinds of content.', 76 NSMicrophoneUsageDescription: 77 'Used for posts and other kinds of content.', 78 NSPhotoLibraryAddUsageDescription: 79 'Used to save images to your library.', 80 NSPhotoLibraryUsageDescription: 81 'Used for profile pictures, posts, and other kinds of content', 82 CFBundleSpokenName: 'witchsky.app', 83 CFBundleLocalizations: [ 84 'en', 85 'an', 86 'ast', 87 'ca', 88 'cy', 89 'da', 90 'de', 91 'el', 92 'eo', 93 'es', 94 'eu', 95 'fi', 96 'fr', 97 'fy', 98 'ga', 99 'gd', 100 'gl', 101 'hi', 102 'hu', 103 'ia', 104 'id', 105 'it', 106 'ja', 107 'km', 108 'ko', 109 'ne', 110 'nl', 111 'pl', 112 'pt-BR', 113 'pt-PT', 114 'ro', 115 'ru', 116 'sv', 117 'th', 118 'tr', 119 'uk', 120 'vi', 121 'yue', 122 'zh-Hans', 123 'zh-Hant', 124 ], 125 }, 126 associatedDomains: ASSOCIATED_DOMAINS, 127 entitlements: { 128 'com.apple.developer.kernel.increased-memory-limit': true, 129 'com.apple.developer.kernel.extended-virtual-addressing': true, 130 'com.apple.security.application-groups': 'group.app.witchsky', 131 // 'com.apple.developer.device-information.user-assigned-device-name': true, 132 }, 133 privacyManifests: { 134 NSPrivacyCollectedDataTypes: [ 135 { 136 NSPrivacyCollectedDataType: 'NSPrivacyCollectedDataTypeCrashData', 137 NSPrivacyCollectedDataTypeLinked: false, 138 NSPrivacyCollectedDataTypeTracking: false, 139 NSPrivacyCollectedDataTypePurposes: [ 140 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 141 ], 142 }, 143 { 144 NSPrivacyCollectedDataType: 145 'NSPrivacyCollectedDataTypePerformanceData', 146 NSPrivacyCollectedDataTypeLinked: false, 147 NSPrivacyCollectedDataTypeTracking: false, 148 NSPrivacyCollectedDataTypePurposes: [ 149 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 150 ], 151 }, 152 { 153 NSPrivacyCollectedDataType: 154 'NSPrivacyCollectedDataTypeOtherDiagnosticData', 155 NSPrivacyCollectedDataTypeLinked: false, 156 NSPrivacyCollectedDataTypeTracking: false, 157 NSPrivacyCollectedDataTypePurposes: [ 158 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 159 ], 160 }, 161 ], 162 NSPrivacyAccessedAPITypes: [ 163 { 164 NSPrivacyAccessedAPIType: 165 'NSPrivacyAccessedAPICategoryFileTimestamp', 166 NSPrivacyAccessedAPITypeReasons: ['C617.1', '3B52.1', '0A2A.1'], 167 }, 168 { 169 NSPrivacyAccessedAPIType: 'NSPrivacyAccessedAPICategoryDiskSpace', 170 NSPrivacyAccessedAPITypeReasons: ['E174.1', '85F4.1'], 171 }, 172 { 173 NSPrivacyAccessedAPIType: 174 'NSPrivacyAccessedAPICategorySystemBootTime', 175 NSPrivacyAccessedAPITypeReasons: ['35F9.1'], 176 }, 177 { 178 NSPrivacyAccessedAPIType: 179 'NSPrivacyAccessedAPICategoryUserDefaults', 180 NSPrivacyAccessedAPITypeReasons: ['CA92.1', '1C8F.1'], 181 }, 182 ], 183 }, 184 }, 185 androidStatusBar: { 186 barStyle: 'light-content', 187 }, 188 // Dark nav bar in light mode is better than light nav bar in dark mode 189 androidNavigationBar: { 190 barStyle: 'light-content', 191 }, 192 android: { 193 icon: './assets/app-icons/android_icon_legacy_light.png', 194 adaptiveIcon: { 195 foregroundImage: './assets/icon-android-foreground.png', 196 monochromeImage: './assets/icon-android-monochrome.png', 197 backgroundColor: '#ED5345', 198 }, 199 googleServicesFile: './google-services.json', 200 package: 'app.witchsky', 201 intentFilters: [ 202 { 203 action: 'VIEW', 204 autoVerify: true, 205 data: [ 206 { 207 scheme: 'https', 208 host: 'witchsky.app', 209 }, 210 { 211 scheme: 'https', 212 host: 'deer.social', 213 }, 214 { 215 scheme: 'https', 216 host: 'bsky.app', 217 }, 218 ...(IS_DEV 219 ? [ 220 { 221 scheme: 'http', 222 host: 'localhost:19006', 223 }, 224 ] 225 : []), 226 ], 227 category: ['BROWSABLE', 'DEFAULT'], 228 }, 229 ], 230 }, 231 web: { 232 favicon: './assets/favicon.png', 233 }, 234 // updates: { 235 // url: 'https://updates.bsky.app/manifest', 236 // enabled: UPDATES_ENABLED, 237 // fallbackToCacheTimeout: 30000, 238 // codeSigningCertificate: UPDATES_ENABLED 239 // ? './code-signing/certificate.pem' 240 // : undefined, 241 // codeSigningMetadata: UPDATES_ENABLED 242 // ? { 243 // keyid: 'main', 244 // alg: 'rsa-v1_5-sha256', 245 // } 246 // : undefined, 247 // checkAutomatically: 'NEVER', 248 // channel: UPDATES_CHANNEL, 249 // }, 250 updates: { 251 url: 'https://updates.bsky.app/manifest', 252 enabled: UPDATES_ENABLED, 253 fallbackToCacheTimeout: 30000, 254 codeSigningCertificate: UPDATES_ENABLED 255 ? './code-signing/certificate.pem' 256 : undefined, 257 codeSigningMetadata: UPDATES_ENABLED 258 ? { 259 keyid: 'main', 260 alg: 'rsa-v1_5-sha256', 261 } 262 : undefined, 263 checkAutomatically: 'NEVER', 264 }, 265 plugins: [ 266 'expo-video', 267 'expo-localization', 268 'expo-web-browser', 269 [ 270 'react-native-edge-to-edge', 271 {android: {enforceNavigationBarContrast: false}}, 272 ], 273 ...(USE_SENTRY 274 ? [ 275 /** @type {[string, any]} */ ([ 276 '@sentry/react-native/expo', 277 { 278 organization: 'blueskyweb', 279 project: 'app', 280 url: 'https://sentry.io', 281 }, 282 ]), 283 ] 284 : []), 285 [ 286 'expo-build-properties', 287 { 288 ios: { 289 deploymentTarget: '15.1', 290 buildReactNativeFromSource: true, 291 ccacheEnabled: IS_DEV, 292 extraPods: [ 293 { 294 name: 'MCEmojiPicker', 295 git: 'https://github.com/bluesky-social/MCEmojiPicker.git', 296 branch: 'main', 297 }, 298 ], 299 }, 300 android: { 301 compileSdkVersion: 36, 302 targetSdkVersion: 35, 303 buildToolsVersion: '35.0.0', 304 buildReactNativeFromSource: IS_PRODUCTION, 305 }, 306 }, 307 ], 308 [ 309 'expo-notifications', 310 { 311 icon: './assets/icon-android-notification.png', 312 color: '#ED5345', 313 sounds: PLATFORM === 'ios' ? ['assets/dm.aiff'] : ['assets/dm.mp3'], 314 }, 315 ], 316 'react-native-compressor', 317 [ 318 '@bitdrift/react-native', 319 { 320 networkInstrumentation: true, 321 }, 322 ], 323 './plugins/starterPackAppClipExtension/withStarterPackAppClip.js', 324 './plugins/withGradleJVMHeapSizeIncrease.js', 325 './plugins/withAndroidManifestLargeHeapPlugin.js', 326 './plugins/withAndroidManifestFCMIconPlugin.js', 327 './plugins/withAndroidManifestIntentQueriesPlugin.js', 328 './plugins/withAndroidStylesAccentColorPlugin.js', 329 './plugins/withAndroidNoJitpackPlugin.js', 330 './plugins/shareExtension/withShareExtensions.js', 331 './plugins/notificationsExtension/withNotificationsExtension.js', 332 [ 333 'expo-font', 334 { 335 fonts: [ 336 './assets/fonts/inter/InterVariable.woff2', 337 './assets/fonts/inter/InterVariable-Italic.woff2', 338 // Android only 339 './assets/fonts/inter/Inter-Regular.otf', 340 './assets/fonts/inter/Inter-Italic.otf', 341 './assets/fonts/inter/Inter-Medium.otf', 342 './assets/fonts/inter/Inter-MediumItalic.otf', 343 './assets/fonts/inter/Inter-SemiBold.otf', 344 './assets/fonts/inter/Inter-SemiBoldItalic.otf', 345 './assets/fonts/inter/Inter-Bold.otf', 346 './assets/fonts/inter/Inter-BoldItalic.otf', 347 ], 348 }, 349 ], 350 [ 351 'expo-splash-screen', 352 { 353 ios: { 354 enableFullScreenImage_legacy: true, // iOS only 355 backgroundColor: '#006AFF', // primary_500 356 image: './assets/splash/splash.png', 357 resizeMode: 'cover', 358 dark: { 359 enableFullScreenImage_legacy: true, // iOS only 360 backgroundColor: '#262220', // primary_900 361 image: './assets/splash/splash-dark.png', 362 resizeMode: 'cover', 363 }, 364 }, 365 android: { 366 backgroundColor: '#E25C50', // primary_500 367 image: './assets/splash/android-splash-logo-white.png', 368 imageWidth: 102, // even division of 306px 369 dark: { 370 backgroundColor: '#ED5345', // primary_900 371 image: './assets/splash/android-splash-logo-white.png', 372 imageWidth: 102, 373 }, 374 }, 375 }, 376 ], 377 [ 378 '@mozzius/expo-dynamic-app-icon', 379 { 380 /** 381 * Default set 382 */ 383 default_light: { 384 ios: './assets/app-icons/ios_icon_legacy_light.png', 385 android: './assets/app-icons/android_icon_legacy_light.png', 386 prerendered: true, 387 }, 388 default_dark: { 389 ios: './assets/app-icons/ios_icon_legacy_dark.png', 390 android: './assets/app-icons/android_icon_legacy_dark.png', 391 prerendered: true, 392 }, 393 394 /** 395 * Bluesky+ core set 396 */ 397 // core_aurora: { 398 // ios: './assets/app-icons/ios_icon_core_aurora.png', 399 // android: './assets/app-icons/android_icon_core_aurora.png', 400 // prerendered: true, 401 // }, 402 // core_bonfire: { 403 // ios: './assets/app-icons/ios_icon_core_bonfire.png', 404 // android: './assets/app-icons/android_icon_core_bonfire.png', 405 // prerendered: true, 406 // }, 407 // core_sunrise: { 408 // ios: './assets/app-icons/ios_icon_core_sunrise.png', 409 // android: './assets/app-icons/android_icon_core_sunrise.png', 410 // prerendered: true, 411 // }, 412 // core_sunset: { 413 // ios: './assets/app-icons/ios_icon_core_sunset.png', 414 // android: './assets/app-icons/android_icon_core_sunset.png', 415 // prerendered: true, 416 // }, 417 // core_midnight: { 418 // ios: './assets/app-icons/ios_icon_core_midnight.png', 419 // android: './assets/app-icons/android_icon_core_midnight.png', 420 // prerendered: true, 421 // }, 422 // core_flat_blue: { 423 // ios: './assets/app-icons/ios_icon_core_flat_blue.png', 424 // android: './assets/app-icons/android_icon_core_flat_blue.png', 425 // prerendered: true, 426 // }, 427 // core_flat_white: { 428 // ios: './assets/app-icons/ios_icon_core_flat_white.png', 429 // android: './assets/app-icons/android_icon_core_flat_white.png', 430 // prerendered: true, 431 // }, 432 // core_flat_black: { 433 // ios: './assets/app-icons/ios_icon_core_flat_black.png', 434 // android: './assets/app-icons/android_icon_core_flat_black.png', 435 // prerendered: true, 436 // }, 437 // core_classic: { 438 // ios: './assets/app-icons/ios_icon_core_classic.png', 439 // android: './assets/app-icons/android_icon_core_classic.png', 440 // prerendered: true, 441 // }, 442 }, 443 ], 444 ['expo-screen-orientation', {initialOrientation: 'PORTRAIT_UP'}], 445 ['expo-location'], 446 [ 447 'expo-contacts', 448 { 449 contactsPermission: 450 'I agree to allow Bluesky to use my contacts for friend discovery until I opt out.', 451 }, 452 ], 453 ], 454 extra: { 455 eas: { 456 build: { 457 experimental: { 458 ios: { 459 // appExtensions: [ 460 // { 461 // targetName: 'Share-with-Bluesky', 462 // bundleIdentifier: 'app.witchsky.Share-with-Bluesky', 463 // entitlements: { 464 // 'com.apple.security.application-groups': [ 465 // 'group.app.witchsky', 466 // ], 467 // }, 468 // }, 469 // { 470 // targetName: 'BlueskyNSE', 471 // bundleIdentifier: 'app.witchsky.BlueskyNSE', 472 // entitlements: { 473 // 'com.apple.security.application-groups': [ 474 // 'group.app.witchsky', 475 // ], 476 // }, 477 // }, 478 // { 479 // targetName: 'BlueskyClip', 480 // bundleIdentifier: 'app.witchsky.AppClip', 481 // }, 482 // ], 483 }, 484 }, 485 }, 486 projectId: 'da056e41-38f9-4fee-a534-b9c5891f9c8d', 487 }, 488 }, 489 }, 490 } 491}