From 20587fa38ed546d475b7a4cad08bb638162bb61b Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Tue, 13 Feb 2024 22:15:22 +0000 Subject: [PATCH] Enable Sentry crash reporting in testing builds --- .gitignore | 3 +- Snikket.xcodeproj/project.pbxproj | 85 ++++++++++++++-- .../xcshareddata/swiftpm/Package.resolved | 96 +++++++++++-------- Snikket/AppDelegate.swift | 17 ++++ Snikket/Info.plist | 2 + 5 files changed, 154 insertions(+), 49 deletions(-) diff --git a/.gitignore b/.gitignore index 7574a4c..4da536d 100644 --- a/.gitignore +++ b/.gitignore @@ -110,4 +110,5 @@ xcuserdata # # We're using source-control, so this is a "feature" that we do not want! -*.moved-aside \ No newline at end of file +*.moved-aside +.sentryclirc \ No newline at end of file diff --git a/Snikket.xcodeproj/project.pbxproj b/Snikket.xcodeproj/project.pbxproj index 4626b1b..777d72f 100644 --- a/Snikket.xcodeproj/project.pbxproj +++ b/Snikket.xcodeproj/project.pbxproj @@ -7,7 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + 344615CB2B763FA3009737D5 /* FLEX in Frameworks */ = {isa = PBXBuildFile; productRef = 344615CA2B763FA3009737D5 /* FLEX */; }; + 344F77CD2B1E0ED9007E53B8 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + 344F77CE2B1E0ED9007E53B8 /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 0F8BEE16761C407DAA65C712 /* Sentry */; }; + 344F77CF2B1E0ED9007E53B8 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + 344F77D02B1E0ED9007E53B8 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; 373A8020271063E1000E50FE /* TelephonyProviderViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373A801F271063E1000E50FE /* TelephonyProviderViewController.swift */; }; + 3757DD5A7AB34C55BD828D29 /* Sentry in Frameworks */ = {isa = PBXBuildFile; productRef = 0F8BEE16761C407DAA65C712 /* Sentry */; }; 3759635F26F72F1900831F4C /* Welcome.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3759636126F72F1900831F4C /* Welcome.storyboard */; }; 3759636A26F72FD700831F4C /* Groupchat.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3759636C26F72FD700831F4C /* Groupchat.storyboard */; }; 3759637126F7303100831F4C /* VoIP.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3759637326F7303100831F4C /* VoIP.storyboard */; }; @@ -626,6 +632,7 @@ buildActionMask = 2147483647; files = ( FE759FE22371C83D001E78D9 /* Shared.framework in Frameworks */, + 344F77CF2B1E0ED9007E53B8 /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -634,6 +641,7 @@ buildActionMask = 2147483647; files = ( FE759FD12370B2F2001E78D9 /* Shared.framework in Frameworks */, + 344F77D02B1E0ED9007E53B8 /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -645,6 +653,7 @@ FE759FE82371C972001E78D9 /* libxml2.tbd in Frameworks */, FE1908B72584D70300CA049F /* OpenSSL.xcframework in Frameworks */, FEC9B1162440E7B500A484EE /* TigaseSwiftOMEMO in Frameworks */, + 3757DD5A7AB34C55BD828D29 /* Sentry in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -652,11 +661,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 344F77CE2B1E0ED9007E53B8 /* Sentry in Frameworks */, FE1A34A7258CD3EE0058B86A /* WebRTC.xcframework in Frameworks */, FE5079F01CD3CA91001A015C /* Security.framework in Frameworks */, + 344615CB2B763FA3009737D5 /* FLEX in Frameworks */, 3797D5C026EA456F0091DAF8 /* HSLuvSwift in Frameworks */, FE759FCC2370B2A4001E78D9 /* Shared.framework in Frameworks */, FE1908AA2584D6BC00CA049F /* OpenSSL.xcframework in Frameworks */, + 344F77CD2B1E0ED9007E53B8 /* (null) in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1178,6 +1190,7 @@ FEF80DB71CDCC508005645A7 /* Embed Frameworks */, FE0473391D86CEE700E6D6CE /* Trim Framework Executables */, FE4DDF611F39E0B600A4CE5A /* Embed App Extensions */, + 2FBAFA92375F42B48E2A05E7 /* Upload Debug Symbols to Sentry */, ); buildRules = ( ); @@ -1189,6 +1202,8 @@ name = Snikket; packageProductDependencies = ( 3797D5BF26EA456F0091DAF8 /* HSLuvSwift */, + 0F8BEE16761C407DAA65C712 /* Sentry */, + 344615CA2B763FA3009737D5 /* FLEX */, ); productName = SiskinIM; productReference = FE94E5211CCBA74F00FAE755 /* Snikket.app */; @@ -1264,6 +1279,8 @@ packageReferences = ( FEC9B1122440E79D00A484EE /* XCRemoteSwiftPackageReference "tigase-swift-omemo" */, 3797D5BE26EA456F0091DAF8 /* XCRemoteSwiftPackageReference "hsluv-swift" */, + ECEB0118F469422FA8CDCF44 /* XCRemoteSwiftPackageReference "sentry-cocoa" */, + 344615C92B763FA3009737D5 /* XCRemoteSwiftPackageReference "FLEX" */, ); productRefGroup = FE94E5221CCBA74F00FAE755 /* Products */; projectDirPath = ""; @@ -1339,6 +1356,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 2FBAFA92375F42B48E2A05E7 /* Upload Debug Symbols to Sentry */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}", + ); + name = "Upload Debug Symbols to Sentry"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script is responsable to upload debug symbols and source context for Sentry.\nif which sentry-cli >/dev/null; then\nexport SENTRY_ORG=snikket\nexport SENTRY_PROJECT=snikket-ios\nERROR=$(sentry-cli debug-files upload --include-sources \"$DWARF_DSYM_FOLDER_PATH\" 2>&1 >/dev/null)\nif [ ! $? -eq 0 ]; then\necho \"warning: sentry-cli - $ERROR\"\nfi\nelse\necho \"warning: sentry-cli not installed, download from https://github.com/getsentry/sentry-cli/releases\"\nfi\n"; + }; 3795F91E26FB55270067361A /* BartyCrouch */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -1819,7 +1851,7 @@ CODE_SIGN_ENTITLEMENTS = "Snikket - Share/Snikket - Share.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 2YH6MCD3C8; ENABLE_BITCODE = NO; HEADER_SEARCH_PATHS = ( @@ -1852,7 +1884,7 @@ CODE_SIGN_ENTITLEMENTS = "Snikket - Share/Snikket - Share.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 2YH6MCD3C8; ENABLE_BITCODE = NO; HEADER_SEARCH_PATHS = ( @@ -1887,7 +1919,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 2YH6MCD3C8; ENABLE_BITCODE = NO; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1927,7 +1959,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEVELOPMENT_TEAM = 2YH6MCD3C8; ENABLE_BITCODE = NO; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1966,7 +1998,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 8; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 2YH6MCD3C8; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2016,7 +2048,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 5; + CURRENT_PROJECT_VERSION = 8; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 2YH6MCD3C8; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2095,6 +2127,10 @@ "DEBUG=1", "$(inherited)", ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = ( + "$(inherited)", + "SENTRY_DSN=\"$(SENTRY_DSN)\"", + ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -2105,6 +2141,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + SENTRY_DSN = "https://2e8adc06474546148a749840dccd7e17@glitch.snikket.net/2"; SWIFT_OBJC_BRIDGING_HEADER = "Snikket/SiskinIM-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2151,6 +2188,7 @@ FRAMEWORK_SEARCH_PATHS = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; + "GCC_PREPROCESSOR_DEFINITIONS[arch=*]" = "SENTRY_DSN=\"$(SENTRY_DSN)\""; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; @@ -2161,6 +2199,7 @@ MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; SDKROOT = iphoneos; + SENTRY_DSN = "https://2e8adc06474546148a749840dccd7e17@glitch.snikket.net/2"; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OBJC_BRIDGING_HEADER = "Snikket/SiskinIM-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-O"; @@ -2178,10 +2217,11 @@ CODE_SIGN_ENTITLEMENTS = Snikket/Snikket.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEAD_CODE_STRIPPING = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 2YH6MCD3C8; + DEV_BUILD = 1; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -2205,6 +2245,7 @@ PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_INCLUDE_PATHS = "$(SRCROOT)/Modules/"; SWIFT_OBJC_BRIDGING_HEADER = "Snikket/SiskinIM-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -2219,9 +2260,11 @@ CODE_SIGN_ENTITLEMENTS = Snikket/Snikket.entitlements; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 6; + CURRENT_PROJECT_VERSION = 8; DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = 2YH6MCD3C8; + DEV_BUILD = ""; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -2303,6 +2346,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 344615C92B763FA3009737D5 /* XCRemoteSwiftPackageReference "FLEX" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/FLEXTool/FLEX.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.0.0; + }; + }; 3797D5BE26EA456F0091DAF8 /* XCRemoteSwiftPackageReference "hsluv-swift" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/hsluv/hsluv-swift.git"; @@ -2311,6 +2362,14 @@ minimumVersion = 2.1.0; }; }; + ECEB0118F469422FA8CDCF44 /* XCRemoteSwiftPackageReference "sentry-cocoa" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/getsentry/sentry-cocoa/"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 8.0.0; + }; + }; FEC9B1122440E79D00A484EE /* XCRemoteSwiftPackageReference "tigase-swift-omemo" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/tigase/tigase-swift-omemo/"; @@ -2322,6 +2381,16 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 0F8BEE16761C407DAA65C712 /* Sentry */ = { + isa = XCSwiftPackageProductDependency; + package = ECEB0118F469422FA8CDCF44 /* XCRemoteSwiftPackageReference "sentry-cocoa" */; + productName = Sentry; + }; + 344615CA2B763FA3009737D5 /* FLEX */ = { + isa = XCSwiftPackageProductDependency; + package = 344615C92B763FA3009737D5 /* XCRemoteSwiftPackageReference "FLEX" */; + productName = FLEX; + }; 3797D5BF26EA456F0091DAF8 /* HSLuvSwift */ = { isa = XCSwiftPackageProductDependency; package = 3797D5BE26EA456F0091DAF8 /* XCRemoteSwiftPackageReference "hsluv-swift" */; diff --git a/Snikket.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Snikket.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2a49f90..8d42de1 100644 --- a/Snikket.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Snikket.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,43 +1,59 @@ { - "object": { - "pins": [ - { - "package": "HSLuvSwift", - "repositoryURL": "https://github.com/hsluv/hsluv-swift.git", - "state": { - "branch": null, - "revision": "9dee4378180f2a9a33c96bc20284cf64158dbe1b", - "version": "2.1.0" - } - }, - { - "package": "libsignal", - "repositoryURL": "https://github.com/tigase/libsignal", - "state": { - "branch": null, - "revision": "d23d5af0d729cf66b93cea607f3f84a34b9fddfd", - "version": "1.0.0" - } - }, - { - "package": "TigaseSwift", - "repositoryURL": "https://github.com/tigase/tigase-swift", - "state": { - "branch": null, - "revision": "d3953dcea80010ad433fa96d7ca6b989bf58850c", - "version": "2.1.3" - } - }, - { - "package": "TigaseSwiftOMEMO", - "repositoryURL": "https://github.com/tigase/tigase-swift-omemo/", - "state": { - "branch": null, - "revision": "4c997df9a3a686b7e522ddffa4d2f2c070a94fa0", - "version": "1.1.3" - } + "pins" : [ + { + "identity" : "flex", + "kind" : "remoteSourceControl", + "location" : "https://github.com/FLEXTool/FLEX.git", + "state" : { + "revision" : "e0acf59d06d498041f65bbea1e5914b6e4b39733", + "version" : "5.22.10" } - ] - }, - "version": 1 + }, + { + "identity" : "hsluv-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/hsluv/hsluv-swift.git", + "state" : { + "revision" : "9dee4378180f2a9a33c96bc20284cf64158dbe1b", + "version" : "2.1.0" + } + }, + { + "identity" : "libsignal", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tigase/libsignal", + "state" : { + "revision" : "d23d5af0d729cf66b93cea607f3f84a34b9fddfd", + "version" : "1.0.0" + } + }, + { + "identity" : "sentry-cocoa", + "kind" : "remoteSourceControl", + "location" : "https://github.com/getsentry/sentry-cocoa/", + "state" : { + "revision" : "74cf23b2946c92550fb1185612077151497e648e", + "version" : "8.17.1" + } + }, + { + "identity" : "tigase-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tigase/tigase-swift", + "state" : { + "revision" : "d3953dcea80010ad433fa96d7ca6b989bf58850c", + "version" : "2.1.3" + } + }, + { + "identity" : "tigase-swift-omemo", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tigase/tigase-swift-omemo/", + "state" : { + "revision" : "4c997df9a3a686b7e522ddffa4d2f2c070a94fa0", + "version" : "1.1.3" + } + } + ], + "version" : 2 } diff --git a/Snikket/AppDelegate.swift b/Snikket/AppDelegate.swift index 9b61367..8ffe90c 100644 --- a/Snikket/AppDelegate.swift +++ b/Snikket/AppDelegate.swift @@ -22,6 +22,7 @@ import UIKit import UserNotifications import TigaseSwift +import Sentry import Shared import WebRTC import BackgroundTasks @@ -45,6 +46,15 @@ class AppDelegate: UIResponder, UIApplicationDelegate { let notificationCenterDelegate = NotificationCenterDelegate(); func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + + if(isSimulatorOrTestFlight()) { + if let sentry_dsn = Bundle.main.infoDictionary?["Sentry DSN"] as? String { + SentrySDK.start { options in + options.dsn = sentry_dsn + }; + } + } + if #available(iOS 13, *) { BGTaskScheduler.shared.register(forTaskWithIdentifier: backgroundRefreshTaskIdentifier, using: nil) { (task) in self.handleAppRefresh(task: task as! BGAppRefreshTask); @@ -705,6 +715,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController(); (self.window?.rootViewController as? UISplitViewController)?.preferredDisplayMode = .allVisible; } + + private func isSimulatorOrTestFlight() -> Bool { + guard let path = Bundle.main.appStoreReceiptURL?.path else { + return false; + } + return path.contains("CoreSimulator") || path.contains("sandboxReceipt"); + } struct XmppUri { diff --git a/Snikket/Info.plist b/Snikket/Info.plist index cc6440a..119dfa0 100644 --- a/Snikket/Info.plist +++ b/Snikket/Info.plist @@ -87,6 +87,8 @@ UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft + Sentry DSN + $(SENTRY_DSN) UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait