fork
Configure Feed
Select the types of activity you want to include in your feed.
mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
fork
Configure Feed
Select the types of activity you want to include in your feed.
1const pkg = require('./package.json')
2
3const DARK_SPLASH_ANDROID_BACKGROUND = '#0f141b'
4
5module.exports = function (config) {
6 /**
7 * App version number. Should be incremented as part of a release cycle.
8 */
9 const VERSION = pkg.version
10
11 /**
12 * Uses built-in Expo env vars
13 *
14 * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables
15 */
16 const PLATFORM = process.env.EAS_BUILD_PLATFORM
17
18 const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight'
19 const IS_PRODUCTION = process.env.EXPO_PUBLIC_ENV === 'production'
20 const IS_DEV = !IS_TESTFLIGHT || !IS_PRODUCTION
21
22 const ASSOCIATED_DOMAINS = [
23 'applinks:bsky.app',
24 'applinks:staging.bsky.app',
25 'appclips:bsky.app',
26 'appclips:go.bsky.app', // Allows App Clip to work when scanning QR codes
27 // When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port.
28 ...(IS_DEV || IS_TESTFLIGHT ? [] : []),
29 ]
30
31 const UPDATES_CHANNEL = IS_TESTFLIGHT
32 ? 'testflight'
33 : IS_PRODUCTION
34 ? 'production'
35 : undefined
36 const UPDATES_ENABLED = !!UPDATES_CHANNEL
37
38 const USE_SENTRY = Boolean(process.env.SENTRY_AUTH_TOKEN)
39 const SENTRY_DIST = `${PLATFORM}.${VERSION}.${IS_TESTFLIGHT ? 'tf' : ''}${
40 IS_DEV ? 'dev' : ''
41 }`
42
43 return {
44 expo: {
45 version: VERSION,
46 name: 'Bluesky',
47 slug: 'bluesky',
48 scheme: 'bluesky',
49 owner: 'blueskysocial',
50 runtimeVersion: {
51 policy: 'appVersion',
52 },
53 icon: './assets/app-icons/ios_icon_default_light.png',
54 userInterfaceStyle: 'automatic',
55 primaryColor: '#1083fe',
56 ios: {
57 supportsTablet: false,
58 bundleIdentifier: 'xyz.blueskyweb.app',
59 config: {
60 usesNonExemptEncryption: false,
61 },
62 infoPlist: {
63 UIBackgroundModes: ['remote-notification'],
64 NSCameraUsageDescription:
65 'Used for profile pictures, posts, and other kinds of content.',
66 NSMicrophoneUsageDescription:
67 'Used for posts and other kinds of content.',
68 NSPhotoLibraryAddUsageDescription:
69 'Used to save images to your library.',
70 NSPhotoLibraryUsageDescription:
71 'Used for profile pictures, posts, and other kinds of content',
72 CFBundleSpokenName: 'Blue Sky',
73 CFBundleLocalizations: [
74 'en',
75 'an',
76 'ast',
77 'ca',
78 'da',
79 'de',
80 'el',
81 'es',
82 'eu',
83 'fi',
84 'fr',
85 'ga',
86 'gl',
87 'hi',
88 'hu',
89 'ia',
90 'id',
91 'it',
92 'ja',
93 'km',
94 'ko',
95 'ne',
96 'nl',
97 'pl',
98 'pt-BR',
99 'ro',
100 'ru',
101 'sv',
102 'th',
103 'tr',
104 'uk',
105 'vi',
106 'yue',
107 'zh-Hans',
108 'zh-Hant',
109 ],
110 },
111 associatedDomains: ASSOCIATED_DOMAINS,
112 entitlements: {
113 'com.apple.developer.kernel.increased-memory-limit': true,
114 'com.apple.developer.kernel.extended-virtual-addressing': true,
115 'com.apple.security.application-groups': 'group.app.bsky',
116 },
117 privacyManifests: {
118 NSPrivacyAccessedAPITypes: [
119 {
120 NSPrivacyAccessedAPIType:
121 'NSPrivacyAccessedAPICategoryFileTimestamp',
122 NSPrivacyAccessedAPITypeReasons: ['C617.1', '3B52.1', '0A2A.1'],
123 },
124 {
125 NSPrivacyAccessedAPIType: 'NSPrivacyAccessedAPICategoryDiskSpace',
126 NSPrivacyAccessedAPITypeReasons: ['E174.1', '85F4.1'],
127 },
128 {
129 NSPrivacyAccessedAPIType:
130 'NSPrivacyAccessedAPICategorySystemBootTime',
131 NSPrivacyAccessedAPITypeReasons: ['35F9.1'],
132 },
133 {
134 NSPrivacyAccessedAPIType:
135 'NSPrivacyAccessedAPICategoryUserDefaults',
136 NSPrivacyAccessedAPITypeReasons: ['CA92.1', '1C8F.1'],
137 },
138 ],
139 },
140 },
141 androidStatusBar: {
142 barStyle: 'light-content',
143 backgroundColor: '#00000000',
144 },
145 // Dark nav bar in light mode is better than light nav bar in dark mode
146 androidNavigationBar: {
147 barStyle: 'light-content',
148 backgroundColor: DARK_SPLASH_ANDROID_BACKGROUND,
149 },
150 android: {
151 icon: './assets/app-icons/android_icon_default_light.png',
152 adaptiveIcon: {
153 foregroundImage: './assets/icon-android-foreground.png',
154 monochromeImage: './assets/icon-android-foreground.png',
155 backgroundImage: './assets/icon-android-background.png',
156 backgroundColor: '#1185FE',
157 },
158 googleServicesFile: './google-services.json',
159 package: 'xyz.blueskyweb.app',
160 intentFilters: [
161 {
162 action: 'VIEW',
163 autoVerify: true,
164 data: [
165 {
166 scheme: 'https',
167 host: 'bsky.app',
168 },
169 IS_DEV && {
170 scheme: 'http',
171 host: 'localhost:19006',
172 },
173 ],
174 category: ['BROWSABLE', 'DEFAULT'],
175 },
176 ],
177 },
178 web: {
179 favicon: './assets/favicon.png',
180 },
181 updates: {
182 url: 'https://updates.bsky.app/manifest',
183 enabled: UPDATES_ENABLED,
184 fallbackToCacheTimeout: 30000,
185 codeSigningCertificate: UPDATES_ENABLED
186 ? './code-signing/certificate.pem'
187 : undefined,
188 codeSigningMetadata: UPDATES_ENABLED
189 ? {
190 keyid: 'main',
191 alg: 'rsa-v1_5-sha256',
192 }
193 : undefined,
194 checkAutomatically: 'NEVER',
195 channel: UPDATES_CHANNEL,
196 },
197 plugins: [
198 'expo-video',
199 'expo-localization',
200 USE_SENTRY && [
201 '@sentry/react-native/expo',
202 {
203 organization: 'blueskyweb',
204 project: 'react-native',
205 release: VERSION,
206 dist: SENTRY_DIST,
207 },
208 ],
209 [
210 'expo-build-properties',
211 {
212 ios: {
213 deploymentTarget: '15.1',
214 newArchEnabled: false,
215 },
216 android: {
217 compileSdkVersion: 35,
218 targetSdkVersion: 35,
219 buildToolsVersion: '35.0.0',
220 newArchEnabled: false,
221 },
222 },
223 ],
224 [
225 'expo-notifications',
226 {
227 icon: './assets/icon-android-notification.png',
228 color: '#1185fe',
229 sounds: PLATFORM === 'ios' ? ['assets/dm.aiff'] : ['assets/dm.mp3'],
230 },
231 ],
232 'react-native-compressor',
233 [
234 '@bitdrift/react-native',
235 {
236 networkInstrumentation: true,
237 },
238 ],
239 './plugins/starterPackAppClipExtension/withStarterPackAppClip.js',
240 './plugins/withAndroidManifestPlugin.js',
241 './plugins/withAndroidManifestFCMIconPlugin.js',
242 './plugins/withAndroidStylesAccentColorPlugin.js',
243 './plugins/withAndroidSplashScreenStatusBarTranslucentPlugin.js',
244 './plugins/withAndroidNoJitpackPlugin.js',
245 './plugins/withNoBundleCompression.js',
246 './plugins/shareExtension/withShareExtensions.js',
247 './plugins/notificationsExtension/withNotificationsExtension.js',
248 './plugins/withAppDelegateReferrer.js',
249 [
250 'expo-font',
251 {
252 fonts: [
253 './assets/fonts/inter/InterVariable.woff2',
254 './assets/fonts/inter/InterVariable-Italic.woff2',
255 // Android only
256 './assets/fonts/inter/Inter-Regular.otf',
257 './assets/fonts/inter/Inter-Italic.otf',
258 './assets/fonts/inter/Inter-SemiBold.otf',
259 './assets/fonts/inter/Inter-SemiBoldItalic.otf',
260 './assets/fonts/inter/Inter-ExtraBold.otf',
261 './assets/fonts/inter/Inter-ExtraBoldItalic.otf',
262 ],
263 },
264 ],
265 [
266 'expo-splash-screen',
267 {
268 ios: {
269 enableFullScreenImage_legacy: true,
270 backgroundColor: '#ffffff',
271 image: './assets/splash.png',
272 resizeMode: 'cover',
273 dark: {
274 enableFullScreenImage_legacy: true,
275 backgroundColor: '#001429',
276 image: './assets/splash-dark.png',
277 resizeMode: 'cover',
278 },
279 },
280 android: {
281 backgroundColor: '#0c7cff',
282 image: './assets/splash-android-icon.png',
283 imageWidth: 150,
284 dark: {
285 backgroundColor: '#0c2a49',
286 image: './assets/splash-android-icon-dark.png',
287 imageWidth: 150,
288 },
289 },
290 },
291 ],
292 [
293 '@mozzius/expo-dynamic-app-icon',
294 {
295 /**
296 * Default set
297 */
298 default_light: {
299 ios: './assets/app-icons/ios_icon_default_light.png',
300 android: './assets/app-icons/android_icon_default_light.png',
301 prerendered: true,
302 },
303 default_dark: {
304 ios: './assets/app-icons/ios_icon_default_dark.png',
305 android: './assets/app-icons/android_icon_default_dark.png',
306 prerendered: true,
307 },
308
309 /**
310 * Bluesky+ core set
311 */
312 core_aurora: {
313 ios: './assets/app-icons/ios_icon_core_aurora.png',
314 android: './assets/app-icons/android_icon_core_aurora.png',
315 prerendered: true,
316 },
317 core_bonfire: {
318 ios: './assets/app-icons/ios_icon_core_bonfire.png',
319 android: './assets/app-icons/android_icon_core_bonfire.png',
320 prerendered: true,
321 },
322 core_sunrise: {
323 ios: './assets/app-icons/ios_icon_core_sunrise.png',
324 android: './assets/app-icons/android_icon_core_sunrise.png',
325 prerendered: true,
326 },
327 core_sunset: {
328 ios: './assets/app-icons/ios_icon_core_sunset.png',
329 android: './assets/app-icons/android_icon_core_sunset.png',
330 prerendered: true,
331 },
332 core_midnight: {
333 ios: './assets/app-icons/ios_icon_core_midnight.png',
334 android: './assets/app-icons/android_icon_core_midnight.png',
335 prerendered: true,
336 },
337 core_flat_blue: {
338 ios: './assets/app-icons/ios_icon_core_flat_blue.png',
339 android: './assets/app-icons/android_icon_core_flat_blue.png',
340 prerendered: true,
341 },
342 core_flat_white: {
343 ios: './assets/app-icons/ios_icon_core_flat_white.png',
344 android: './assets/app-icons/android_icon_core_flat_white.png',
345 prerendered: true,
346 },
347 core_flat_black: {
348 ios: './assets/app-icons/ios_icon_core_flat_black.png',
349 android: './assets/app-icons/android_icon_core_flat_black.png',
350 prerendered: true,
351 },
352 core_classic: {
353 ios: './assets/app-icons/ios_icon_core_classic.png',
354 android: './assets/app-icons/android_icon_core_classic.png',
355 prerendered: true,
356 },
357 },
358 ],
359 ['expo-screen-orientation', {initialOrientation: 'PORTRAIT_UP'}],
360 [
361 'react-native-vision-camera',
362 {
363 enableLocation: false,
364 cameraPermissionText: 'Bluesky needs access to your camera.',
365 enableMicrophonePermission: true,
366 microphonePermissionText:
367 'Bluesky needs access to your microphone.',
368 },
369 ],
370 ].filter(Boolean),
371 extra: {
372 eas: {
373 build: {
374 experimental: {
375 ios: {
376 appExtensions: [
377 {
378 targetName: 'Share-with-Bluesky',
379 bundleIdentifier: 'xyz.blueskyweb.app.Share-with-Bluesky',
380 entitlements: {
381 'com.apple.security.application-groups': [
382 'group.app.bsky',
383 ],
384 },
385 },
386 {
387 targetName: 'BlueskyNSE',
388 bundleIdentifier: 'xyz.blueskyweb.app.BlueskyNSE',
389 entitlements: {
390 'com.apple.security.application-groups': [
391 'group.app.bsky',
392 ],
393 },
394 },
395 {
396 targetName: 'BlueskyClip',
397 bundleIdentifier: 'xyz.blueskyweb.app.AppClip',
398 },
399 ],
400 },
401 },
402 },
403 projectId: '55bd077a-d905-4184-9c7f-94789ba0f302',
404 },
405 },
406 hooks: {
407 postPublish: [
408 /*
409 * @see https://docs.expo.dev/guides/using-sentry/#app-configuration
410 */
411 {
412 file: './postHooks/uploadSentrySourcemapsPostHook',
413 config: {
414 organization: 'blueskyweb',
415 project: 'react-native',
416 release: VERSION,
417 dist: SENTRY_DIST,
418 },
419 },
420 ],
421 },
422 },
423 }
424}