···4545 'appclips:bsky.app',
4646 'appclips:go.bsky.app', // Allows App Clip to work when scanning QR codes
4747 // When testing local services, enter an ngrok (et al) domain here. It must use a standard HTTP/HTTPS port.
4848- ...(IS_DEV || IS_TESTFLIGHT
4949- ? ['appclips:sptesting.haileyok.com', 'applinks:sptesting.haileyok.com']
5050- : []),
4848+ ...(IS_DEV || IS_TESTFLIGHT ? [] : []),
5149 ]
52505351 const UPDATES_CHANNEL = IS_TESTFLIGHT
+2-8
src/components/StarterPack/QrCodeDialog.tsx
···11import React from 'react'
22import {View} from 'react-native'
33import ViewShot from 'react-native-view-shot'
44-import * as FS from 'expo-file-system'
54import {requestMediaLibraryPermissionsAsync} from 'expo-image-picker'
55+import {createAssetAsync} from 'expo-media-library'
66import * as Sharing from 'expo-sharing'
77import {AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api'
88import {msg, Trans} from '@lingui/macro'
99import {useLingui} from '@lingui/react'
1010-import {nanoid} from 'nanoid/non-secure'
11101211import {logger} from '#/logger'
1313-import {saveImageToMediaLibrary} from 'lib/media/manip'
1412import {logEvent} from 'lib/statsig/statsig'
1513import {isNative, isWeb} from 'platform/detection'
1614import * as Toast from '#/view/com/util/Toast'
···6563 return
6664 }
67656868- const filename = `${FS.documentDirectory}/${nanoid(12)}.png`
6969-7066 // Incase of a FS failure, don't crash the app
7167 try {
7272- await FS.copyAsync({from: uri, to: filename})
7373- await saveImageToMediaLibrary({uri: filename})
7474- await FS.deleteAsync(filename)
6868+ await createAssetAsync(`file://${uri}`)
7569 } catch (e: unknown) {
7670 Toast.show(_(msg`An error occurred while saving the QR code!`))
7771 logger.error('Failed to save QR code', {error: e})
+5-18
src/components/StarterPack/ShareDialog.tsx
···11import React from 'react'
22import {View} from 'react-native'
33-import * as FS from 'expo-file-system'
43import {Image} from 'expo-image'
54import {requestMediaLibraryPermissionsAsync} from 'expo-image-picker'
65import {AppBskyGraphDefs} from '@atproto/api'
76import {msg, Trans} from '@lingui/macro'
87import {useLingui} from '@lingui/react'
99-import {nanoid} from 'nanoid/non-secure'
108119import {logger} from '#/logger'
1210import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
···7270 return
7371 }
74727575- const cachePath = await Image.getCachePathAsync(imageUrl)
7676- const filename = `${FS.documentDirectory}/${nanoid(12)}.png`
7777-7878- if (!cachePath) {
7979- Toast.show(_(msg`An error occurred while saving the image.`))
8080- return
8181- }
8282-8373 try {
8484- await FS.copyAsync({from: cachePath, to: filename})
8585- await saveImageToMediaLibrary({uri: filename})
8686- await FS.deleteAsync(filename)
8787-7474+ await saveImageToMediaLibrary({uri: imageUrl})
8875 Toast.show(_(msg`Image saved to your camera roll!`))
8976 control.close()
9077 } catch (e: unknown) {
···133120 isWeb && [a.gap_sm, a.flex_row_reverse, {marginLeft: 'auto'}],
134121 ]}>
135122 <Button
136136- label="Share link"
123123+ label={isWeb ? _(msg`Copy link`) : _(msg`Share link`)}
137124 variant="solid"
138125 color="secondary"
139126 size="small"
140127 style={[isWeb && a.self_center]}
141128 onPress={onShareLink}>
142129 <ButtonText>
143143- {isWeb ? <Trans>Copy Link</Trans> : <Trans>Share Link</Trans>}
130130+ {isWeb ? <Trans>Copy Link</Trans> : <Trans>Share link</Trans>}
144131 </ButtonText>
145132 </Button>
146133 <Button
147147- label="Create QR code"
134134+ label={_(msg`Share QR code`)}
148135 variant="solid"
149136 color="secondary"
150137 size="small"
···155142 })
156143 }}>
157144 <ButtonText>
158158- <Trans>Create QR code</Trans>
145145+ <Trans>Share QR code</Trans>
159146 </ButtonText>
160147 </Button>
161148 {isNative && (