···11-# Copy this to `.env` and `.env.test` files
11+# The env the app is running in e.g. development, testflight, production
22+EXPO_PUBLIC_ENV=development
33+44+# This is the semver release version of the app, pulled from package.json
55+EXPO_PUBLIC_RELEASE_VERSION=
2633-BITDRIFT_API_KEY=
44-SENTRY_AUTH_TOKEN=
55-EXPO_PUBLIC_LOG_LEVEL=debug
66-EXPO_PUBLIC_LOG_DEBUG=
77+# This is the commit hash that the current bundle was made from.
78EXPO_PUBLIC_BUNDLE_IDENTIFIER=
99+1010+# Should be formatted YYMMDDHH so that it increases for each build.
811EXPO_PUBLIC_BUNDLE_DATE=0
1212+1313+# The log level for the app's logger transports
1414+EXPO_PUBLIC_LOG_LEVEL=debug
1515+1616+# Enable debug logs for specific logger instances
1717+EXPO_PUBLIC_LOG_DEBUG=session
1818+1919+# Chat service DID
2020+EXPO_PUBLIC_CHAT_PROXY_DID=
2121+2222+#
2323+#
2424+# Bluesky specific values
2525+#
2626+#
2727+2828+# Sentry DSN for telemetry
2929+EXPO_PUBLIC_SENTRY_DSN=
3030+3131+# Bitdrift API key. If undefined, Bitdrift will be disabled.
3232+EXPO_PUBLIC_BITDRIFT_API_KEY=
···89899090### Adding bitdrift
91919292-Adding bitdirft is NOT required. You can keep `BITDRIFT_API_KEY=` in `.env` which will avoid initializing bitdrift during startup.
9292+Adding bitdrift is NOT required. You can keep `EXPO_PUBLIC_BITDRIFT_API_KEY=` in `.env` which will avoid initializing bitdrift during startup.
93939494-However, if you're a part of the Bluesky team and want to enable bitdrift, fill in `BITDRIFT_API_KEY` in your `.env` to enable bitdrift.
9494+However, if you're a part of the Bluesky team and want to enable bitdrift, fill in `EXPO_PUBLIC_BITDRIFT_API_KEY` in your `.env` to enable bitdrift.
95959696### Adding and Updating Locales
9797
···22import * as Clipboard from 'expo-clipboard'
33import {t} from '@lingui/macro'
4455-import {IS_INTERNAL} from '#/lib/app-info'
65import {DISCOVER_DEBUG_DIDS} from '#/lib/constants'
76import {useGate} from '#/lib/statsig/statsig'
87import {useSession} from '#/state/session'
98import * as Toast from '#/view/com/util/Toast'
109import {atoms as a, useBreakpoints, useTheme} from '#/alf'
1110import {Text} from '#/components/Typography'
1111+import {IS_INTERNAL} from '#/env'
12121313export function DiscoverDebug({
1414 feedContext,
···1717import {useLingui} from '@lingui/react'
1818import {useNavigation} from '@react-navigation/native'
19192020-import {IS_INTERNAL} from '#/lib/app-info'
2120import {DISCOVER_DEBUG_DIDS} from '#/lib/constants'
2221import {useOpenLink} from '#/lib/hooks/useOpenLink'
2322import {getCurrentRoute} from '#/lib/routes/helpers'
···8382 useReportDialogControl,
8483} from '#/components/moderation/ReportDialog'
8584import * as Prompt from '#/components/Prompt'
8585+import {IS_INTERNAL} from '#/env'
8686import * as bsky from '#/types/bsky'
87878888let PostMenuItems = ({
···11+import {type Did} from '@atproto/api'
22+33+import packageJson from '#/../package.json'
44+55+/**
66+ * The semver version of the app, as defined in `package.json.`
77+ *
88+ * N.B. The fallback is needed for Render.com deployments
99+ */
1010+export const RELEASE_VERSION: string =
1111+ process.env.EXPO_PUBLIC_RELEASE_VERSION || packageJson.version
1212+1313+/**
1414+ * The env the app is running in e.g. development, testflight, production
1515+ */
1616+export const ENV: string = process.env.EXPO_PUBLIC_ENV
1717+1818+/**
1919+ * Indicates whether the app is running in TestFlight
2020+ */
2121+export const IS_TESTFLIGHT = ENV === 'testflight'
2222+2323+/**
2424+ * Indicates whether the app is __DEV__
2525+ */
2626+export const IS_DEV = __DEV__
2727+2828+/**
2929+ * Indicates whether the app is __DEV__ or TestFlight
3030+ */
3131+export const IS_INTERNAL = IS_DEV || IS_TESTFLIGHT
3232+3333+/**
3434+ * The commit hash that the current bundle was made from. The user can
3535+ * see the commit hash in the app's settings along with the other version info.
3636+ * Useful for debugging/reporting.
3737+ */
3838+export const BUNDLE_IDENTIFIER: string =
3939+ process.env.EXPO_PUBLIC_BUNDLE_IDENTIFIER || 'dev'
4040+4141+/**
4242+ * This will always be in the format of YYMMDDHH, so that it always increases
4343+ * for each build. This should only be used for StatSig reporting and shouldn't
4444+ * be used to identify a specific bundle.
4545+ */
4646+export const BUNDLE_DATE: number = !process.env.EXPO_PUBLIC_BUNDLE_DATE
4747+ ? 0
4848+ : Number(process.env.EXPO_PUBLIC_BUNDLE_DATE)
4949+5050+/**
5151+ * The log level for the app.
5252+ */
5353+export const LOG_LEVEL = (process.env.EXPO_PUBLIC_LOG_LEVEL || 'info') as
5454+ | 'debug'
5555+ | 'info'
5656+ | 'warn'
5757+ | 'error'
5858+5959+/**
6060+ * Enable debug logs for specific logger instances
6161+ */
6262+export const LOG_DEBUG: string = process.env.EXPO_PUBLIC_LOG_DEBUG || ''
6363+6464+/**
6565+ * The DID of the chat service to proxy to
6666+ */
6767+export const CHAT_PROXY_DID: Did =
6868+ process.env.EXPO_PUBLIC_CHAT_PROXY_DID || 'did:web:api.bsky.chat'
6969+7070+/**
7171+ * Sentry DSN for telemetry
7272+ */
7373+export const SENTRY_DSN: string | undefined = process.env.EXPO_PUBLIC_SENTRY_DSN
7474+7575+/**
7676+ * Bitdrift API key. If undefined, Bitdrift should be disabled.
7777+ */
7878+export const BITDRIFT_API_KEY: string | undefined =
7979+ process.env.EXPO_PUBLIC_BITDRIFT_API_KEY
+19
src/env/index.ts
···11+import {nativeBuildVersion} from 'expo-application'
22+33+import {BUNDLE_IDENTIFIER, IS_TESTFLIGHT, RELEASE_VERSION} from '#/env/common'
44+55+export * from '#/env/common'
66+77+/**
88+ * The semver version of the app, specified in our `package.json`.file. On
99+ * iOs/Android, the native build version is appended to the semver version, so
1010+ * that it can be used to identify a specific build.
1111+ */
1212+export const APP_VERSION = `${RELEASE_VERSION}.${nativeBuildVersion}`
1313+1414+/**
1515+ * The short commit hash and environment of the current bundle.
1616+ */
1717+export const APP_METADATA = `${BUNDLE_IDENTIFIER.slice(0, 7)} (${
1818+ __DEV__ ? 'dev' : IS_TESTFLIGHT ? 'tf' : 'prod'
1919+})`
+15
src/env/index.web.ts
···11+import {BUNDLE_IDENTIFIER, RELEASE_VERSION} from '#/env/common'
22+33+export * from '#/env/common'
44+55+/**
66+ * The semver version of the app, specified in our `package.json`.file. On
77+ * iOs/Android, the native build version is appended to the semver version, so
88+ * that it can be used to identify a specific build.
99+ */
1010+export const APP_VERSION = RELEASE_VERSION
1111+1212+/**
1313+ * The short commit hash and environment of the current bundle.
1414+ */
1515+export const APP_METADATA = `${BUNDLE_IDENTIFIER.slice(0, 7)} (${__DEV__ ? 'dev' : 'prod'})`
-18
src/lib/app-info.ts
···11-import {nativeApplicationVersion, nativeBuildVersion} from 'expo-application'
22-33-export const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight'
44-export const IS_INTERNAL = __DEV__ || IS_TESTFLIGHT
55-66-// This is the commit hash that the current bundle was made from. The user can see the commit hash in the app's settings
77-// along with the other version info. Useful for debugging/reporting.
88-export const BUNDLE_IDENTIFIER = process.env.EXPO_PUBLIC_BUNDLE_IDENTIFIER ?? ''
99-1010-// This will always be in the format of YYMMDD, so that it always increases for each build. This should only be used
1111-// for Statsig reporting and shouldn't be used to identify a specific bundle.
1212-export const BUNDLE_DATE =
1313- IS_TESTFLIGHT || __DEV__ ? 0 : Number(process.env.EXPO_PUBLIC_BUNDLE_DATE)
1414-1515-export const appVersion = `${nativeApplicationVersion}.${nativeBuildVersion}`
1616-export const bundleInfo = `${BUNDLE_IDENTIFIER} (${
1717- __DEV__ ? 'dev' : IS_TESTFLIGHT ? 'tf' : 'prod'
1818-})`
-18
src/lib/app-info.web.ts
···11-import packageDotJson from '../../package.json'
22-33-export const IS_TESTFLIGHT = false
44-export const IS_INTERNAL = __DEV__
55-66-// This is the commit hash that the current bundle was made from. The user can see the commit hash in the app's settings
77-// along with the other version info. Useful for debugging/reporting.
88-export const BUNDLE_IDENTIFIER =
99- process.env.EXPO_PUBLIC_BUNDLE_IDENTIFIER ?? 'dev'
1010-1111-// This will always be in the format of YYMMDD, so that it always increases for each build. This should only be used
1212-// for Statsig reporting and shouldn't be used to identify a specific bundle.
1313-export const BUNDLE_DATE = __DEV__
1414- ? 0
1515- : Number(process.env.EXPO_PUBLIC_BUNDLE_DATE)
1616-1717-export const appVersion = packageDotJson.version
1818-export const bundleInfo = `${BUNDLE_IDENTIFIER} (${__DEV__ ? 'dev' : 'prod'})`
+1-1
src/lib/hooks/useOTAUpdates.ts
···1010 useUpdates,
1111} from 'expo-updates'
12121313-import {IS_TESTFLIGHT} from '#/lib/app-info'
1413import {logger} from '#/logger'
1514import {isIOS} from '#/platform/detection'
1515+import {IS_TESTFLIGHT} from '#/env'
16161717const MINIMUM_MINIMIZE_TIME = 15 * 60e3
1818
+9-11
src/lib/statsig/statsig.tsx
···33import {AppState, type AppStateStatus} from 'react-native'
44import {Statsig, StatsigProvider} from 'statsig-react-native-expo'
5566-import {BUNDLE_DATE, BUNDLE_IDENTIFIER, IS_TESTFLIGHT} from '#/lib/app-info'
76import {logger} from '#/logger'
87import {type MetricEvents} from '#/logger/metrics'
98import {isWeb} from '#/platform/detection'
109import * as persisted from '#/state/persisted'
1111-import packageDotJson from '../../../package.json'
1010+import * as env from '#/env'
1211import {useSession} from '../../state/session'
1312import {timeout} from '../async/timeout'
1413import {useNonReactiveCallback} from '../hooks/useNonReactiveCallback'
···4948function createStatsigOptions(prefetchUsers: StatsigUser[]) {
5049 return {
5150 environment: {
5252- tier:
5353- process.env.NODE_ENV === 'development'
5454- ? 'development'
5555- : IS_TESTFLIGHT
5656- ? 'staging'
5757- : 'production',
5151+ tier: env.IS_DEV
5252+ ? 'development'
5353+ : env.IS_TESTFLIGHT
5454+ ? 'staging'
5555+ : 'production',
5856 },
5957 // Don't block on waiting for network. The fetched config will kick in on next load.
6058 // This ensures the UI is always consistent and doesn't update mid-session.
···212210 refSrc,
213211 refUrl,
214212 platform: Platform.OS as 'ios' | 'android' | 'web',
215215- appVersion: packageDotJson.version,
216216- bundleIdentifier: BUNDLE_IDENTIFIER,
217217- bundleDate: BUNDLE_DATE,
213213+ appVersion: env.RELEASE_VERSION,
214214+ bundleIdentifier: env.BUNDLE_IDENTIFIER,
215215+ bundleDate: env.BUNDLE_DATE,
218216 appLanguage: languagePrefs.appLanguage,
219217 contentLanguages: languagePrefs.contentLanguages,
220218 },
+31-22
src/locale/locales/en/messages.po
···966966967967#: src/components/hooks/useFollowMethods.ts:35
968968#: src/components/hooks/useFollowMethods.ts:50
969969-#: src/components/ProfileCard.tsx:457
970970-#: src/components/ProfileCard.tsx:478
969969+#: src/components/ProfileCard.tsx:484
970970+#: src/components/ProfileCard.tsx:505
971971#: src/view/com/profile/FollowButton.tsx:38
972972#: src/view/com/profile/FollowButton.tsx:48
973973msgid "An issue occurred, please try again."
···12621262msgstr ""
1263126312641264#: src/components/PostControls/PostMenu/PostMenuItems.tsx:757
12651265-#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:319
12651265+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:320
12661266#: src/view/com/profile/ProfileMenu.tsx:473
12671267msgid "Block"
12681268msgstr ""
···14231423msgid "Books"
14241424msgstr ""
1425142514261426-#: src/components/FeedInterstitials.tsx:379
14261426+#: src/components/FeedInterstitials.tsx:436
14271427msgid "Browse more accounts on the Explore page"
14281428msgstr ""
1429142914301430-#: src/components/FeedInterstitials.tsx:517
14301430+#: src/components/FeedInterstitials.tsx:566
14311431msgid "Browse more feeds on the Explore page"
14321432msgstr ""
1433143314341434-#: src/components/FeedInterstitials.tsx:359
14351435-#: src/components/FeedInterstitials.tsx:362
14361436-#: src/components/FeedInterstitials.tsx:498
14371437-#: src/components/FeedInterstitials.tsx:501
14341434+#: src/components/FeedInterstitials.tsx:547
14351435+#: src/components/FeedInterstitials.tsx:550
14381436msgid "Browse more suggestions"
14391437msgstr ""
1440143814411441-#: src/components/FeedInterstitials.tsx:387
14421442-#: src/components/FeedInterstitials.tsx:526
14391439+#: src/components/FeedInterstitials.tsx:575
14431440msgid "Browse more suggestions on the Explore page"
14441441msgstr ""
14451442···36183615msgstr ""
3619361636203617#. User is not following this account, click to follow
36213621-#: src/components/ProfileCard.tsx:490
36183618+#: src/components/ProfileCard.tsx:517
36223619#: src/components/ProfileHoverCard/index.web.tsx:494
36233620#: src/components/ProfileHoverCard/index.web.tsx:505
36243621#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:245
···36963693msgstr ""
3697369436983695#. User is following this account, click to unfollow
36993699-#: src/components/ProfileCard.tsx:484
36963696+#: src/components/ProfileCard.tsx:511
37003697#: src/components/ProfileHoverCard/index.web.tsx:493
37013698#: src/components/ProfileHoverCard/index.web.tsx:504
37023699#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:241
···37113708msgid "Following"
37123709msgstr ""
3713371037143714-#: src/components/ProfileCard.tsx:447
37113711+#: src/components/ProfileCard.tsx:474
37153712#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:89
37163713msgid "Following {0}"
37173714msgstr ""
···54595456msgid "No likes yet"
54605457msgstr ""
5461545854625462-#: src/components/ProfileCard.tsx:469
54595459+#: src/components/ProfileCard.tsx:496
54635460#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:110
54645461msgid "No longer following {0}"
54655462msgstr ""
···73987395msgid "See jobs at Bluesky"
73997396msgstr ""
7400739773987398+#: src/components/FeedInterstitials.tsx:397
73997399+msgid "See more"
74007400+msgstr ""
74017401+74027402+#: src/components/FeedInterstitials.tsx:444
74037403+msgid "See more accounts you might like"
74047404+msgstr ""
74057405+74067406+#: src/components/FeedInterstitials.tsx:395
74077407+msgid "See more suggested profiles on the Explore page"
74087408+msgstr ""
74097409+74017410#: src/view/screens/SavedFeeds.tsx:213
74027411msgid "See this guide"
74037412msgstr ""
···79757984msgid "Signed in as @{0}"
79767985msgstr ""
7977798679787978-#: src/components/FeedInterstitials.tsx:343
79877987+#: src/components/FeedInterstitials.tsx:389
79797988msgid "Similar accounts"
79807989msgstr ""
79817990···80058014msgid "Some of your verifications are invalid."
80068015msgstr ""
8007801680088008-#: src/components/FeedInterstitials.tsx:480
80178017+#: src/components/FeedInterstitials.tsx:529
80098018msgid "Some other feeds you might like"
80108019msgstr ""
80118020···82378246msgid "Suggested Accounts"
82388247msgstr ""
8239824882408240-#: src/components/FeedInterstitials.tsx:345
82498249+#: src/components/FeedInterstitials.tsx:391
82418250msgid "Suggested for you"
82428251msgstr ""
82438252···84218430msgid "That's everything!"
84228431msgstr ""
8423843284248424-#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:315
84338433+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:316
84258434#: src/view/com/profile/ProfileMenu.tsx:461
84268435msgid "The account will be able to interact with you after unblocking."
84278436msgstr ""
···90469055#: src/components/dms/MessagesListBlockedFooter.tsx:112
90479056#: src/components/dms/MessagesListBlockedFooter.tsx:119
90489057#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:203
90499049-#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:319
90589058+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:320
90509059#: src/view/com/profile/ProfileMenu.tsx:473
90519060#: src/view/screens/ProfileList.tsx:723
90529061msgid "Unblock"
···90649073msgid "Unblock account"
90659074msgstr ""
9066907590679067-#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:313
90769076+#: src/screens/Profile/Header/ProfileHeaderStandard.tsx:314
90689077#: src/view/com/profile/ProfileMenu.tsx:455
90699078msgid "Unblock Account?"
90709079msgstr ""
···95719580msgid "View {0}'s avatar"
95729581msgstr ""
9573958295749574-#: src/components/ProfileCard.tsx:118
95839583+#: src/components/ProfileCard.tsx:124
95759584#: src/screens/Profile/components/ProfileFeedHeader.tsx:454
95769585#: src/screens/Search/components/SearchProfileCard.tsx:36
95779586#: src/screens/VideoFeed/index.tsx:790
+1-2
src/logger/bitdrift/setup/index.ts
···22import {Statsig} from 'statsig-react-native-expo'
3344import {initPromise} from '#/lib/statsig/statsig'
55-66-const BITDRIFT_API_KEY = process.env.BITDRIFT_API_KEY
55+import {BITDRIFT_API_KEY} from '#/env'
7687initPromise.then(() => {
98 let isEnabled = false
+2-1
src/logger/index.ts
···1414} from '#/logger/types'
1515import {enabledLogLevels} from '#/logger/util'
1616import {isNative} from '#/platform/detection'
1717+import {ENV} from '#/env'
17181819const TRANSPORTS: Transport[] = (function configureTransports() {
1919- switch (process.env.NODE_ENV) {
2020+ switch (ENV) {
2021 case 'production': {
2122 return [sentryTransport, isNative && bitdriftTransport].filter(
2223 Boolean,
+6-23
src/logger/sentry/setup/index.ts
···11-/**
22- * Importing these separately from `platform/detection` and `lib/app-info` to
33- * avoid future conflicts and/or circular deps
44- */
55-61import {init} from '@sentry/react-native'
7288-import pkgJson from '#/../package.json'
99-1010-/**
1111- * Examples:
1212- * - `dev`
1313- * - `1.99.0`
1414- */
1515-const release = process.env.SENTRY_RELEASE || pkgJson.version
1616-1717-/**
1818- * The latest deployed commit hash
1919- */
2020-const dist = process.env.SENTRY_DIST || 'dev'
33+import * as env from '#/env'
214225init({
2323- enabled: !__DEV__ && !!process.env.SENTRY_DSN,
66+ enabled: !env.IS_DEV && !!env.SENTRY_DSN,
247 autoSessionTracking: false,
2525- dsn: process.env.SENTRY_DSN,
88+ dsn: env.SENTRY_DSN,
269 debug: false, // If `true`, Sentry will try to print out useful debugging information if something goes wrong with sending the event. Set it to `false` in production
2727- environment: process.env.NODE_ENV,
2828- dist,
2929- release,
1010+ environment: env.ENV,
1111+ dist: env.BUNDLE_IDENTIFIER,
1212+ release: env.RELEASE_VERSION,
3013 ignoreErrors: [
3114 /*
3215 * Unknown internals errors
+5-5
src/screens/Settings/AboutSettings.tsx
···99import {useMutation} from '@tanstack/react-query'
1010import {Statsig} from 'statsig-react-native-expo'
11111212-import {appVersion, BUNDLE_DATE, bundleInfo} from '#/lib/app-info'
1312import {STATUS_PAGE_URL} from '#/lib/constants'
1413import {type CommonNavigatorParams} from '#/lib/routes/types'
1514import {isAndroid, isIOS, isNative} from '#/platform/detection'
···2322import {Wrench_Stroke2_Corner2_Rounded as WrenchIcon} from '#/components/icons/Wrench'
2423import * as Layout from '#/components/Layout'
2524import {Loader} from '#/components/Loader'
2525+import * as env from '#/env'
2626import {useDemoMode} from '#/storage/hooks/demo-mode'
2727import {useDevMode} from '#/storage/hooks/dev-mode'
2828import {OTAInfo} from './components/OTAInfo'
···123123 </SettingsList.PressableItem>
124124 )}
125125 <SettingsList.PressableItem
126126- label={_(msg`Version ${appVersion}`)}
126126+ label={_(msg`Version ${env.APP_VERSION}`)}
127127 accessibilityHint={_(msg`Copies build version to clipboard`)}
128128 onLongPress={() => {
129129 const newDevModeEnabled = !devModeEnabled
···146146 }}
147147 onPress={() => {
148148 setStringAsync(
149149- `Build version: ${appVersion}; Bundle info: ${bundleInfo}; Bundle date: ${BUNDLE_DATE}; Platform: ${Platform.OS}; Platform version: ${Platform.Version}; Anonymous ID: ${stableID}`,
149149+ `Build version: ${env.APP_VERSION}; Bundle info: ${env.APP_METADATA}; Bundle date: ${env.BUNDLE_DATE}; Platform: ${Platform.OS}; Platform version: ${Platform.Version}; Anonymous ID: ${stableID}`,
150150 )
151151 Toast.show(_(msg`Copied build version to clipboard`))
152152 }}>
153153 <SettingsList.ItemIcon icon={WrenchIcon} />
154154 <SettingsList.ItemText>
155155- <Trans>Version {appVersion}</Trans>
155155+ <Trans>Version {env.APP_VERSION}</Trans>
156156 </SettingsList.ItemText>
157157- <SettingsList.BadgeText>{bundleInfo}</SettingsList.BadgeText>
157157+ <SettingsList.BadgeText>{env.APP_METADATA}</SettingsList.BadgeText>
158158 </SettingsList.PressableItem>
159159 {devModeEnabled && (
160160 <>
+4-4
src/screens/Settings/AppIconSettings/index.tsx
···33import {msg, Trans} from '@lingui/macro'
44import {useLingui} from '@lingui/react'
55import * as DynamicAppIcon from '@mozzius/expo-dynamic-app-icon'
66-import {NativeStackScreenProps} from '@react-navigation/native-stack'
66+import {type NativeStackScreenProps} from '@react-navigation/native-stack'
7788-import {IS_INTERNAL} from '#/lib/app-info'
98import {PressableScale} from '#/lib/custom-animations/PressableScale'
1010-import {CommonNavigatorParams} from '#/lib/routes/types'
99+import {type CommonNavigatorParams} from '#/lib/routes/types'
1110import {useGate} from '#/lib/statsig/statsig'
1211import {isAndroid} from '#/platform/detection'
1312import {AppIconImage} from '#/screens/Settings/AppIconSettings/AppIconImage'
1414-import {AppIconSet} from '#/screens/Settings/AppIconSettings/types'
1313+import {type AppIconSet} from '#/screens/Settings/AppIconSettings/types'
1514import {useAppIconSets} from '#/screens/Settings/AppIconSettings/useAppIconSets'
1615import {atoms as a, useTheme} from '#/alf'
1716import * as Toggle from '#/components/forms/Toggle'
1817import * as Layout from '#/components/Layout'
1918import {Text} from '#/components/Typography'
1919+import {IS_INTERNAL} from '#/env'
20202121type Props = NativeStackScreenProps<CommonNavigatorParams, 'AppIconSettings'>
2222export function AppIconSettingsScreen({}: Props) {
+1-1
src/screens/Settings/AppearanceSettings.tsx
···88import {msg, Trans} from '@lingui/macro'
99import {useLingui} from '@lingui/react'
10101111-import {IS_INTERNAL} from '#/lib/app-info'
1211import {
1312 type CommonNavigatorParams,
1413 type NativeStackScreenProps,
···2625import {TitleCase_Stroke2_Corner0_Rounded as Aa} from '#/components/icons/TitleCase'
2726import * as Layout from '#/components/Layout'
2827import {Text} from '#/components/Typography'
2828+import {IS_INTERNAL} from '#/env'
2929import * as SettingsList from './components/SettingsList'
30303131type Props = NativeStackScreenProps<CommonNavigatorParams, 'AppearanceSettings'>
+1-1
src/screens/Settings/Settings.tsx
···99import {type NativeStackScreenProps} from '@react-navigation/native-stack'
10101111import {useActorStatus} from '#/lib/actor-status'
1212-import {IS_INTERNAL} from '#/lib/app-info'
1312import {HELP_DESK_URL} from '#/lib/constants'
1413import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher'
1514import {useApplyPullRequestOTAUpdate} from '#/lib/hooks/useOTAUpdates'
···6665 shouldShowVerificationCheckButton,
6766 VerificationCheckButton,
6867} from '#/components/verification/VerificationCheckButton'
6868+import {IS_INTERNAL} from '#/env'
6969import {useActivitySubscriptionsNudged} from '#/storage/hooks/activity-subscriptions-nudged'
70707171type Props = NativeStackScreenProps<CommonNavigatorParams, 'Settings'>
···11-import {AtpSessionData, AtpSessionEvent} from '@atproto/api'
11+import {type AtpSessionData, type AtpSessionEvent} from '@atproto/api'
22import {sha256} from 'js-sha256'
33import {Statsig} from 'statsig-react-native-expo'
4455-import {IS_INTERNAL} from '#/lib/app-info'
66-import {Schema} from '../persisted'
77-import {Action, State} from './reducer'
88-import {SessionAccount} from './types'
55+import {IS_INTERNAL} from '#/env'
66+import {type Schema} from '../persisted'
77+import {type Action, type State} from './reducer'
88+import {type SessionAccount} from './types'
991010type Reducer = (state: State, action: Action) => State
1111