Description
Description
Hello,
I recently debugged an issue with my dSYMs not being automatically uploaded to Crashlytics, which was not one of the cases covered by the support documentation. I found that enabling the ENABLE_USER_SCRIPT_SANDBOXING
build setting causes the symbol uploads to stop working. Xcode prompts you to update this setting when upgrading a project to Xcode 15/16.
The upload-symbols
script seems to fail under this setting because it operates in the background and not within the user script sandbox. Furthermore, since the script runs in the background, you must observe logs related to the failure in the Console app instead of Xcode.
I am bringing this to your attention in case more obvious errors can be surfaced within Xcode for failures like this.
Additionally, I see comments here that describe the upload happening in the background to improve build time. I would be willing to pass a flag to this script to choose to wait for the uploads within the build phase if it meant more clarity when things went wrong.
Thanks!
Reproducing the issue
- Create a new Firebase project and matching Xcode project. Complete Crashlytics setup in the new project.
- Enable
ENABLE_USER_SCRIPT_SANDBOXING
in the project settings. - Open Console.app, and start streaming logs. Filter for
upload-symbols
- Archive your project. Look in the build logs and see that the upload symbols build phase was successful.
- Look back at the console logs and note that there are errors like
Sandbox: upload-symbols deny(1)
. No new dSYM entries will be added in the Crashlytics dashboard. - Disable the
ENABLE_USER_SCRIPT_SANDBOXING
setting and repeat. Symbols will successfully upload.
Firebase SDK Version
11.9.0
Xcode Version
16.2.0
Installation Method
Swift Package Manager
Firebase Product(s)
Crashlytics
Targeted Platforms
iOS
Relevant Log Output
If using Swift Package Manager, the project's Package.resolved
Expand Package.resolved
snippet
{
"originHash" : "2c3cd5c4464f73a40da856ac7f3b393e789fbb91428116898d4cc76989daa037",
"pins" : [
{
"identity" : "abseil-cpp-binary",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/abseil-cpp-binary.git",
"state" : {
"revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5",
"version" : "1.2024072200.0"
}
},
{
"identity" : "app-check",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/app-check.git",
"state" : {
"revision" : "21fe1af9be463a359aaf8d96789ef73fc3760d09",
"version" : "11.0.1"
}
},
{
"identity" : "checkout-sheet-kit-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Shopify/checkout-sheet-kit-swift",
"state" : {
"revision" : "054485a9399d610d596e079c36dbd190891def34",
"version" : "3.1.2"
}
},
{
"identity" : "firebase-ios-sdk",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/firebase-ios-sdk.git",
"state" : {
"revision" : "eb523407e4293568ed55590728205c359cbecc5b",
"version" : "11.9.0"
}
},
{
"identity" : "googleappmeasurement",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleAppMeasurement.git",
"state" : {
"revision" : "d80e25104abe76d69a134d4ec18f011edd8df06c",
"version" : "11.9.0"
}
},
{
"identity" : "googledatatransport",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleDataTransport.git",
"state" : {
"revision" : "617af071af9aa1d6a091d59a202910ac482128f9",
"version" : "10.1.0"
}
},
{
"identity" : "googleutilities",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleUtilities.git",
"state" : {
"revision" : "53156c7ec267db846e6b64c9f4c4e31ba4cf75eb",
"version" : "8.0.2"
}
},
{
"identity" : "grpc-binary",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/grpc-binary.git",
"state" : {
"revision" : "cc0001a0cf963aa40501d9c2b181e7fc9fd8ec71",
"version" : "1.69.0"
}
},
{
"identity" : "gtm-session-fetcher",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/gtm-session-fetcher.git",
"state" : {
"revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b",
"version" : "3.5.0"
}
},
{
"identity" : "interop-ios-for-google-sdks",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/interop-ios-for-google-sdks.git",
"state" : {
"revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe",
"version" : "101.0.0"
}
},
{
"identity" : "leveldb",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/leveldb.git",
"state" : {
"revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1",
"version" : "1.22.5"
}
},
{
"identity" : "mobile-buy-sdk-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Shopify/mobile-buy-sdk-ios",
"state" : {
"revision" : "5c76a102ceeb9ee89fb3d9a98723309dc097754b",
"version" : "13.1.1"
}
},
{
"identity" : "nanopb",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/nanopb.git",
"state" : {
"revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1",
"version" : "2.30910.0"
}
},
{
"identity" : "promises",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/promises.git",
"state" : {
"revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac",
"version" : "2.4.0"
}
},
{
"identity" : "swift-protobuf",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-protobuf.git",
"state" : {
"revision" : "edb6ed4919f7756157fe02f2552b7e3850a538e5",
"version" : "1.28.1"
}
},
{
"identity" : "swiftsoup",
"kind" : "remoteSourceControl",
"location" : "https://github.com/scinfu/SwiftSoup.git",
"state" : {
"revision" : "64e4daa41b0f22affa94a6063d509c137c26909c",
"version" : "2.8.5"
}
}
],
"version" : 3
}
If using CocoaPods, the project's Podfile.lock
Expand Podfile.lock
snippet
Replace this line with the contents of your Podfile.lock!