Bluesky app fork with some witchin' additions ๐Ÿ’ซ

Get iOS debug files into Sentry (#9242)

* Add buildArtifactPaths to iOS builds

* Update privacyManifests

* Revert changes to build configs

* Add --include-sources flag

* Add nativeCrash tester

* Sam's crash testbed

(cherry picked from commit b0a0cb7799cd900777570cae7dc10461cf811e0f)

* Output artifacts, tarball, extract and upload dSYM to Sentry

* Revert "Sam's crash testbed"

This reverts commit cc2c9828a06c4d159988acb556dddd10e6cbe57d.

* Remove sources for other targets, include sources for main bundle

* Apply suggestion from @mozzius

* Apply suggestion from @mozzius

---------

Co-authored-by: Samuel Newman <mozzius@protonmail.com>

authored by Eric Bailey Samuel Newman and committed by GitHub d7e84297 6086bc5d

Changed files
+65 -6
.github
src
view
screens
Storybook
+21 -2
.github/workflows/build-submit-ios.yml
··· 98 98 yarn use-build-number-with-bump 99 99 eas build -p ios 100 100 --profile ${{ inputs.profile || 'testflight' }} 101 - --local --output build.ipa --non-interactive 101 + --local --output build.tar.gz --non-interactive 102 + 103 + - name: ๐Ÿ“‚ Extract build artifact 104 + run: | 105 + if [ -f "build.tar.gz" ]; then 106 + echo "Extracting build.tar.gz..." 107 + mkdir ios-build 108 + tar -xzf build.tar.gz -C ios-build 109 + echo "Extraction completed successfully" 110 + else 111 + echo "Archive file not found!" 112 + exit 1 113 + fi 102 114 103 115 - name: ๐Ÿš€ Deploy 104 - run: eas submit -p ios --non-interactive --path build.ipa 116 + run: eas submit -p ios --non-interactive --path ios-build/ios/build/Bluesky.ipa 117 + 118 + - name: ๐Ÿชฒ Upload dSYM to Sentry 119 + run: > 120 + SENTRY_ORG=blueskyweb 121 + SENTRY_PROJECT=app 122 + SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} 123 + yarn sentry-cli debug-files upload ios-build/ios/build/Bluesky.app.dSYM.zip --include-sources 105 124 106 125 - name: ๐Ÿ“š Get version from package.json 107 126 id: get-build-info
+28
app.config.js
··· 112 112 'com.apple.security.application-groups': 'group.app.bsky', 113 113 }, 114 114 privacyManifests: { 115 + NSPrivacyCollectedDataTypes: [ 116 + { 117 + NSPrivacyCollectedDataType: 'NSPrivacyCollectedDataTypeCrashData', 118 + NSPrivacyCollectedDataTypeLinked: false, 119 + NSPrivacyCollectedDataTypeTracking: false, 120 + NSPrivacyCollectedDataTypePurposes: [ 121 + 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 122 + ], 123 + }, 124 + { 125 + NSPrivacyCollectedDataType: 126 + 'NSPrivacyCollectedDataTypePerformanceData', 127 + NSPrivacyCollectedDataTypeLinked: false, 128 + NSPrivacyCollectedDataTypeTracking: false, 129 + NSPrivacyCollectedDataTypePurposes: [ 130 + 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 131 + ], 132 + }, 133 + { 134 + NSPrivacyCollectedDataType: 135 + 'NSPrivacyCollectedDataTypeOtherDiagnosticData', 136 + NSPrivacyCollectedDataTypeLinked: false, 137 + NSPrivacyCollectedDataTypeTracking: false, 138 + NSPrivacyCollectedDataTypePurposes: [ 139 + 'NSPrivacyCollectedDataTypePurposeAppFunctionality', 140 + ], 141 + }, 142 + ], 115 143 NSPrivacyAccessedAPITypes: [ 116 144 { 117 145 NSPrivacyAccessedAPIType:
+8 -4
eas.json
··· 36 36 "extends": "base", 37 37 "ios": { 38 38 "resourceClass": "large", 39 - "autoIncrement": true 39 + "autoIncrement": true, 40 + "buildArtifactPaths": ["ios/build/*"] 40 41 }, 41 42 "android": { 42 43 "autoIncrement": true ··· 50 51 "extends": "base", 51 52 "distribution": "internal", 52 53 "ios": { 53 - "autoIncrement": false 54 + "autoIncrement": false, 55 + "buildArtifactPaths": ["ios/build/*"] 54 56 }, 55 57 "android": { 56 58 "autoIncrement": false ··· 63 65 "testflight": { 64 66 "extends": "base", 65 67 "ios": { 66 - "autoIncrement": true 68 + "autoIncrement": true, 69 + "buildArtifactPaths": ["ios/build/*"] 67 70 }, 68 71 "android": { 69 72 "autoIncrement": true ··· 77 80 "extends": "base", 78 81 "distribution": "internal", 79 82 "ios": { 80 - "autoIncrement": true 83 + "autoIncrement": true, 84 + "buildArtifactPaths": ["ios/build/*"] 81 85 }, 82 86 "android": { 83 87 "autoIncrement": true
+8
src/view/screens/Storybook/index.tsx
··· 3 3 import {useNavigation} from '@react-navigation/native' 4 4 5 5 import {type NavigationProp} from '#/lib/routes/types' 6 + import {Sentry} from '#/logger/sentry/lib' 6 7 import {useSetThemePrefs} from '#/state/shell' 7 8 import {ListContained} from '#/view/screens/Storybook/ListContained' 8 9 import {atoms as a, ThemeProvider} from '#/alf' ··· 94 95 label="two" 95 96 testID="sharedPrefsTestOpenBtn"> 96 97 <ButtonText>Open Shared Prefs Tester</ButtonText> 98 + </Button> 99 + <Button 100 + color="negative" 101 + size="large" 102 + onPress={() => Sentry.nativeCrash()} 103 + label="crash"> 104 + <ButtonText>Sentry Crash</ButtonText> 97 105 </Button> 98 106 99 107 <ThemeProvider theme="light">