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